Per prima cosa, AWS e Heroku sono cose diverse. AWS offre Infrastructure as a Service ( IaaS ) mentre Heroku offre una Platform as a Service ( PaaS ).
Qual è la differenza? Molto approssimativamente, IaaS ti fornisce i componenti di cui hai bisogno per costruirci sopra delle cose; PaaS ti offre un ambiente in cui è sufficiente inviare il codice e alcune configurazioni di base e ottenere un'applicazione in esecuzione. IaaS può darti più potenza e flessibilità, a costo di dover costruire e mantenere di più te stesso.
Per far funzionare il tuo codice su AWS e sembrare un po 'come una distribuzione di Heroku, avrai bisogno di alcune istanze EC2: vorrai un bilanciamento del carico / livello di cache installato su di esse (ad esempio Varnish ), vorrai istanze che eseguono qualcosa di simile Passenger e nginx per servire il tuo codice, ti consigliamo di distribuire e configurare un'istanza di database in cluster di qualcosa come PostgreSQL . Avrai bisogno di un sistema di distribuzione con qualcosa come Capistrano e qualcosa che faccia aggregazione dei log.
Non è una quantità insignificante di lavoro da impostare e mantenere. Con Heroku, lo sforzo richiesto per arrivare a quel tipo di stage è forse alcune righe di codice dell'applicazione e a git push
.
Quindi sei così lontano e vuoi ridimensionare. Grande. Stai usando Puppet per la tua distribuzione EC2, giusto? Quindi ora configuri i tuoi file Capistrano per girare su / giù le istanze secondo necessità; ripeti la configurazione del tuo pupazzo in modo che Varnish sia a conoscenza delle istanze di web-worker e si raggrupperà automaticamente tra di loro. O tu heroku scale web:+5
.
Spero che questo ti dia un'idea del confronto tra i due. Ora per affrontare i tuoi punti specifici:
Velocità
Attualmente Heroku funziona solo su istanze AWS in us-east
e eu-west
. Per te, questo suona come quello che vuoi comunque. Per altri, è potenzialmente più una considerazione.
Sicurezza
Ho visto un sacco di server di produzione gestiti internamente che sono molto indietro rispetto agli aggiornamenti di sicurezza, o in genere mal messi insieme. Con Heroku, hai qualcun altro che gestisce quel genere di cose, che è una benedizione o una maledizione a seconda di come la vedi!
Quando esegui la distribuzione, stai effettivamente consegnando il tuo codice direttamente a Heroku. Questo potrebbe essere un problema per te. Il loro articolo su Dyno Isolation descrive in dettaglio le loro tecnologie di isolamento (sembra che vengano eseguite più dinamiche su singole istanze EC2). Diversi colleghi hanno espresso problemi con queste tecnologie e la forza del loro isolamento; Purtroppo non sono in grado di avere abbastanza conoscenza / esperienza per commentare davvero, ma le mie attuali distribuzioni Heroku lo considerano "abbastanza buono". Potrebbe essere un problema per te, non lo so.
scalata
Ho toccato come si potrebbe implementare questo nel mio confronto IaaS vs PaaS sopra. Approssimativamente, la tua applicazione ha un Procfile
, che ha le linee del modulo dyno_type: command_to_run
, quindi per esempio (scritto da http://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Questo, con un:
heroku scale web:2 worker:10
ti farà avere 2 web
dynos e 10 worker
dynos in esecuzione. Bello, semplice, facile. Si noti che web
è un tipo speciale dyno, che ha accesso al mondo esterno ed è dietro il loro simpatico multiplexer del traffico web (probabilmente una sorta di combinazione Varnish / nginx) che indirizzerà il traffico di conseguenza. I tuoi dipendenti probabilmente interagiranno con una coda di messaggi per un routing simile, dal quale otterranno la posizione tramite un URL nell'ambiente.
Efficienza dei costi
Molte persone hanno molte opinioni diverse su questo. Attualmente costa $ 0,05 / ora per un'ora di prova, rispetto a $ 0,025 / ora per una microistanza AWS o $ 0,09 / ora per una piccola istanza AWS.
La documentazione del dyno di Heroku dice che hai circa 512 MB di RAM, quindi probabilmente non è troppo irragionevole considerare un dyno un po 'come una microistanza EC2. Vale il doppio del prezzo? Quanto apprezzi il tuo tempo? La quantità di tempo e sforzi necessari per basarsi su un'offerta IaaS per raggiungere questo standard non è sicuramente economica. Non posso davvero rispondere a questa domanda per te, ma non sottovalutare i "costi nascosti" di installazione e manutenzione.
(Un po 'a parte, ma se mi collego a un dyno da qui ( heroku run bash
), un aspetto superficiale mostra 4 core in /proc/cpuinfo
e 36 GB di RAM - questo mi porta a credere che sono su un'istanza doppia extra-large ad alta memoria " . La documentazione di Heroku dyno afferma che ogni dyno riceve 512 MB di RAM, quindi potenzialmente condivido con un massimo di 71 altre dinamiche. (Non ho abbastanza dati sull'omogeneità delle istanze AWS di Heroku, quindi il tuo chilometraggio può variare))
Come si comportano contro i loro concorrenti?
Temo di non poterti davvero aiutare. L'unico concorrente che abbia mai visto è stato Google App Engine : al momento stavo cercando di distribuire applicazioni Java e la quantità di restrizioni su framework e tecnologie utilizzabili era incredibilmente scoraggiante. Questo è più di "solo una cosa Java" - la quantità di restrizioni generali e considerazioni necessarie ( le FAQ suggeriscono in molti) sembrava meno che conveniente. Al contrario, schierarsi su Heroku è stato un sogno.
Conclusione
Spero che questo risponda alle tue domande (per favore commenta se ci sono lacune / altre aree che vorresti affrontare). Sento che dovrei offrire la mia posizione personale. Adoro Heroku per "distribuzioni rapide". Quando avvio un'applicazione e voglio un hosting economico (il livello gratuito Heroku è fantastico - essenzialmente se hai solo bisogno di un dyno web e 5 MB di PostgreSQL, è gratuito per ospitare un'applicazione), Heroku è la mia posizione di riferimento . Per "Sviluppo di produzione serio" con diversi clienti paganti, con un accordo sul livello di servizio, con tempo dedicato da spendere in operazioni, eccetera, non riesco proprio a scaricare così tanto controllo su Heroku, e poi AWS o i nostri server sono stati la piattaforma di hosting preferita.
In definitiva, si tratta di ciò che funziona meglio per te. Dici di essere "un programmatore principiante" - potrebbe essere che l'utilizzo di Heroku ti permetta di concentrarti sulla scrittura di Ruby e di non dover perdere tempo a costruire tutta l'infrastruttura attorno al tuo codice. Ci proverei sicuramente.
Nota, AWS ha in realtà un'offerta PaaS, Elastic Beanstalk , che supporta Ruby, Node.js, PHP, Python, .NET e Java. Penso che generalmente molte persone, quando vedono "AWS", passano a cose come EC2, S3 ed EBS, che sono sicuramente offerte IaaS