Perché le persone usano Heroku quando è presente AWS? Cosa distingue Heroku da AWS? [chiuso]


1102

Sono un programmatore RoR principiante che sta pianificando di distribuire la mia app tramite Heroku. Le parole degli altri miei amici consulenti dicono che Heroku è davvero facile, buono da usare. L'unico problema è che non ho ancora idea di cosa fa Heroku ...

Ho guardato il loro sito Web e in poche parole, ciò che fa Heroku è di aiuto con il ridimensionamento, ma ... perché è importante? In che modo Heroku aiuta con:

  1. Velocità - La mia ricerca implicava che l'implementazione di AWS sulla costa orientale degli Stati Uniti sarebbe stata la più veloce se avessi preso di mira un pubblico con sede negli Stati Uniti e in Asia.

  2. Sicurezza: quanto sono sicuri?

  3. Ridimensionamento: come funziona effettivamente?

  4. Efficienza dei costi - C'è qualcosa come un dinamismo che lo rende facile da ridimensionare.

  5. Come si comportano contro i loro concorrenti? Ad esempio, Engine Yard e bluebox ?

Per favore, usa i termini inglesi laici per spiegare ... Sono un programmatore principiante.


267
In realtà lo uso a causa del piano gratuito;).
weddingcakes,

56
Avresti dovuto chiedere qual è la differenza tra Heroku e AWS beanstalk elastico .. Altrimenti otterrai le solite risposte "PaaS vs IaaS", non quello che stai probabilmente cercando.
Jus12

38
sviluppare su heroku, ridimensionarlo su heroku, innovare su heroku ... quindi una volta che l'idea è il successo degli affari, quindi trasferirla su aws ... come quando si sta assumendo.
Muhammad Umer,

10
Potrebbe essere difficile migrare una volta che stai usando alcuni servizi e devi trasferire, configurare, testare tutto ... Avrà sicuramente un costo
Paolo

37
Una delle mie cose preferite di Heroku è la distribuzione automatica da Github, quindi posso avere un productionramo sul mio repository. Ogni volta che un nuovo commit viene inviato a quel repository, Heroku lo afferra automaticamente, lo costruisce e lo distribuisce. Non devo preoccuparmi di nulla sul lato server!
Razi Shaban,

Risposte:


245

AWS / Heroku sono entrambi gratuiti per piccoli progetti di hobby (per cominciare).

Se vuoi avviare subito un'app, senza molta personalizzazione dell'architettura, scegli Heroku .

Se desideri concentrarti sull'architettura e poter utilizzare diversi server Web, scegli AWS . AWS richiede più tempo in base al servizio / prodotto scelto, ma può valerne la pena. AWS include anche numerosi servizi e prodotti plug-in.


Heroku

  • Platform as a Service (PAAS)
  • Buona documentazione
  • Dispone di strumenti e architettura integrati.
  • Controllo limitato sull'architettura durante la progettazione dell'app.
  • La distribuzione è curata (automatica tramite GitHub o manuale tramite comandi git o CLI).
  • Non richiede tempo.

AWS

  • Infrastruttura come servizio (IAAS)
  • Versatile: ha molti prodotti come EC2, LAMBDA, EMR, ecc.
  • È possibile utilizzare un'istanza dedicata per un maggiore controllo sull'architettura, come la scelta del sistema operativo, della versione del software, ecc. Esiste più di un livello back-end.
  • Elastic Beanstalk è una funzione simile al PAAS di Heroku.
  • È possibile utilizzare la distribuzione automatica o creare il proprio.

7
ElasticBeanstalk è molto più conveniente di Heroku in quanto non esiste un markup per il servizio oltre ai server utilizzati. Puoi anche utilizzare ElasticBeanstalk con il livello gratuito di AWS aws.amazon.com/elasticbeanstalk/pricing
Zags

25
@Zags "conveniente" è una questione di opinione. Se riesco a creare e distribuire un'app Heroku in meno di un minuto e ci vogliono potenzialmente ore per configurare Beanstalk - questo non è conveniente considerando che diverse ore di tempo degli sviluppatori distruggono qualsiasi "risparmio" che si potrebbe avere da Beanstalk. Dipende davvero dalle priorità: le funzionalità di spedizione sono più importanti o la configurazione e la manutenzione delle infrastrutture sono più importanti?
Brian Dear

5
La facilità di installazione di @BrianDear dipende dalla familiarità con i vari sistemi. Anche se ElasticBeanstalk impiega più tempo a configurarsi, data la stessa familiarità, AWS è in genere il 60% del costo di Heroku (confronta un rendimento Heruku-m con un AWS m4.xlarge). Con una fattura del server di soli $ 100 al mese, un risparmio del 40% recupererà il costo di "diverse ore di ingegneria" entro un anno. Maggiore è il conto del server, più forte è l'argomento per AWS.
Zags

4
Sono necessari ~ 5 minuti per la distribuzione su Beanstalk. Scegli la piattaforma -> Carica zip -> Rallegrati. Vuoi distribuire spingendo al master? Passa altri 5 minuti a configurare CodePipeline. Entrambi questi flussi di lavoro possono essere eseguiti utilizzando solo la console della GUI se la CLI è intimidatoria per te.
Anthony Manning-Franklin,

1
Sfortunatamente, la documentazione non è elencata in AWS. AWS ha una delle migliori documentazioni di qualsiasi tecnologia / piattaforma. L'avevo usato anche prima che questa risposta fosse pubblicata, intorno al 2013.
Lupchiazoem,

2055

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-easte 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 webdynos e 10 workerdynos 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/cpuinfoe 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


33
Si noti che ora beanstalk elastico supporta pienamente le app ruby ​​dietro il passeggero.
riscritto il

4
Heroku ora supporta anche server nell'UE e non solo nella regione degli Stati Uniti.
Thomas Welton,

7
Dato AWS BeanStalk, l'intera discussione su come Heroku sia una soluzione PaaS mentre AWS è "solo" un'offerta IaaS non è valida?
Gmu,

6
@KristianGlass Sarebbe fantastico se potessimo ottenere una risposta aggiornata che guardi davvero alle due offerte PaaS (Beanstalk e Heroku)
Alex Chumbley,

3
Sono contento che questo sia stato utile alle persone :) @Gmu Al momento della risposta, EB era sufficientemente limitato che assumere "AWS" significava "EC2" sembrava abbastanza ragionevole, ma come suggerisce Alex, guarderò a rispondere ora che EB ha migliorato in modo significativo.
Kristian Glass,

68

Come ha detto Kristian Glass, non vi è alcun confronto tra IaaS ( AWS ) e PaaS ( Heroku , EngineYard ).

PaaS aiuta sostanzialmente gli sviluppatori ad accelerare lo sviluppo di app, risparmiando così denaro e soprattutto innovando le loro applicazioni e attività commerciali invece di impostare configurazioni e gestire cose come server e database. Altre caratteristiche che acquistano per usare PaaS sono il processo di distribuzione dell'applicazione come agilità, alta disponibilità, monitoraggio, scalabilità / decalcificazione, necessità limitata di esperienza, facilità di implementazione e costi e tempi di sviluppo ridotti.

Ma c'è ancora un lato oscuro di PaaS che ostacola l'adozione di PaaS:

  • Meno controllo su server e database
  • I costi saranno molto elevati se non gestiti correttamente
  • Prematuro e dubbioso al giorno d'oggi

A parte quanto sopra, dovresti avere abbastanza abilità per gestire IaaS:

  • Acquisizione hardware
  • Sistema operativo
  • Software server
  • Ambiente di scripting lato server
  • server web
  • Sistema di gestione database (Mysql, Redis ecc.)
  • Configurare il server di produzione
  • Strumento per test e distribuzione
  • App di monitoraggio
  • Alta disponibilità
  • Carica Blancing / Http Routing
  • Politiche di backup del servizio
  • Collaborazione in team
  • Ricostruire la produzione

Se hai attività su piccola scala, PaaS sarà l'opzione migliore per te:

  • Paga mentre vai
  • Basso costo di avviamento
  • Lasciare l'impianto idraulico all'esperto
  • PaaS gestisce il ridimensionamento / decalcificazione automatico, il bilanciamento del carico, il ripristino di emergenza
  • PaaS gestisce tutti i requisiti di sicurezza
  • PaaS gestisce affidabilità, alta disponibilità
  • Paas gestisce molti componenti aggiuntivi di terze parti per te

Sarà una scelta totalmente individuale in base alle esigenze. Puoi avere dettagli sulle mie app PPT Hosting Rails .


3
Vedo EngineYard e Heroku, e ovviamente ElasticBeanstalk ... tutti sotto AWS. In effetti, ci sono dei principali PaaS che NON funzionano su aws sotto? Qualche idea? Saluti
Fattie,

5
Joe, so che è tardi, ma per rispondere alla tua domanda IBM Bluemix funziona su SoftLayer.
Antonio Cangiano,

PaaS gestisce tutti i requisiti di sicurezza Protezione del server, forse, ma altamente fuorviante (specialmente in un mondo in cui gli sviluppatori sembrano presumere che il loro sistema sia sicuro per impostazione predefinita). Certamente non ti proteggerà da XSS, CSRF e probabilmente non imposterà alcuna importante intestazione HTTP per te. Posso solo vedere subito: Thank you for your concerns. We assure you that we take security very seriously and run or systems on secure servers. There is no need to worry about [insert security issue here] as all that is handled by.... -1 ma lo inverterei se modificato correttamente.
Nateowami,

4
Esiste sempre più una categoria di soluzioni PaaS (PaaS fai-da-te) che funzionano sulla propria infrastruttura, risolvendo così alcune delle preoccupazioni relative alla flessibilità / controllo di PaaS. Alcuni esempi: openshift , cloudfoundry , Hasura . Disclaimer: lavoro a Hasura.
iamnat,

35

Esistono molti modi diversi di considerare questa decisione in base allo sviluppo, all'IT e agli obiettivi aziendali, quindi non sentirti male se sembra travolgente. Ma anche - non pensare troppo alla scalabilità.

Pensa alle tue esigenze .

Ho progettato siti Web che hanno servito oltre 8 milioni di utenti unici al giorno e distribuito terabyte di video alla settimana basati su infrastrutture a partire da $ 250.000 in capitale hardware a fronte di un enorme personale di lavoro IT da $ MM.

Ma ho anche avuto siti Web più piccoli che sono stati progettati per generare $ 10- $ 20k all'anno, senza requisiti di traffico, db o elaborazione molto elevati, e ho eseguito quelli con un account di hosting generico da $ 10 / mese senza compromessi.

In futuro, l'implementazione assomiglierà più a Heroku che ad AWS, proprio a causa dei progressi. Non vi è alcun valore nella rotazione IT del ridimensionamento delle infrastrutture Internet che non è sempre più automatizzabile, e nessuna di queste ha a che fare con il valore del prodotto o servizio che stai offrendo.

Inoltre, tieni presente un sito Web commerciale: la scalabilità è ciò che spesso chiamiamo un "buon problema da avere" - sebbene i problemi di scalabilità con siti come Facebook e Twitter fossero di alto profilo, non hanno avuto effetti negativi sul loro successo - le notizie potrebbe anche aver contribuito a più iscrizioni (tutta la stampa è buona stampa).

Se hai un servizio che genera 100k + unici al giorno e che ha problemi di ridimensionamento, sarei felice di togliertelo di dosso, indipendentemente dalla lingua, dal db, dalla piattaforma o dall'infrastruttura in esecuzione!

La scalabilità è un problema di implementazione risolvibile - non avere clienti è un problema esistenziale.


35

In realtà è possibile utilizzare entrambi: è possibile sviluppare un'app con i server Amazon ec2. Quindi spingilo (con git) a heroku gratuitamente per un po '(usa il livello gratuito di heroku per servirlo al pubblico) e testalo in questo modo. È molto conveniente rispetto al noleggio di un server, ma dovrai parlare con un heroku api più restrittivo che è qualcosa a cui dovresti pensare. Fonte: questo metodo è stato adottato per una delle mie lezioni online "Startup engineering da Coursera / Stanford di Balaji S. Srinivasan e Vijay S. Pande

Aggiunto uno schema in modo che la mia spiegazione sarà più facile da capire


15
Qual è il vantaggio di usare la microistanza come macchina di sviluppo, invece di usare il tuo computer locale? Non vedo l'ulteriore vantaggio di aggiungere l'AWS in questo caso particolare. Grazie!
Mateo,

5
probabilmente perché in un ambiente accademico renderà le istruzioni per l'impostazione dell'ambiente di sviluppo più coerenti e non devono preoccuparsi di farlo funzionare su Windows
Jeff Dickey,

2
Tale architettura aiuta a evitare molte incompatibilità del sistema operativo Windows / Linux. Inoltre, impara il sistema operativo Linux senza doverlo installare sul tuo computer locale. Se hai un Mac è un problema minore ma molte persone usano Windows.
sivi,

13
Si chiama macchina virtuale, non vedo ancora molto senso farlo.
Abe Petrillo,

2
Avere una piattaforma separata per la messa in scena e la produzione è un'idea super terribile; le principali versioni del software differiranno in modi incompatibili. Dovresti essere in grado di eseguire il tuo codice localmente per lo sviluppo, anche se il sistema operativo nativo differisce dal sistema operativo di produzione (nel peggiore dei casi con qualcosa di simile a VMware o vagabondo o con un emulatore se costruisci per una piattaforma integrata; ma nativamente è generalmente più facile da lavorare con). Essere sempre in grado di distribuire il codice in remoto sul cloud è un orribile ostacolo allo sviluppo rapido delle applicazioni che rende inutili i tempi di test e debug.
Iain Collins, il

28

Bene, le persone di solito fanno questa domanda: Heroku o AWS quando iniziano a distribuire qualcosa.

Il mio esperimento di utilizzo di entrambi Heroku e AWS, ecco la mia rapida recensione e confronto:

Heroku

  • Un comando per distribuire qualsiasi tipo di progetto: Ruby on Rails, Nodejs
  • Così tanti clic per integrare plug-in e terze parti: è semplicissimo iniziare con qualcosa.
  • Non avere il ridimensionamento automatico; ciò significa che è necessario ridimensionare su / giù manualmente
  • Il costo è costoso, soprattutto quando il sistema ha bisogno di più risorse
  • Istanza gratuita disponibile
  • L'istanza gratuita va in sospensione se è inattiva.
  • Data center: solo USA e UE
  • PUOI immergerti / accedere al livello della macchina usando Heroku run bash(Grazie, MJafar Mash per il consiglio) ma è un po 'limitato! Non hai pieno accesso!
  • Non c'è bisogno di sapere troppo su DevOps

AWS - EC2

  • Questo è proprio come una macchina con sistema operativo preconfigurato (o meno), quindi è necessario installare software, libreria per rendere il tuo sito Web / servizio online.
  • Plugin e libreria devono essere integrati manualmente o script di automazione (script pubblico e scritti da te)
  • Il ridimensionamento automatico e il bilanciamento del carico sono i servizi supportati, basta imparare come configurare e integrare nel proprio sistema
  • Il costo è abbastanza economico, dipende da quali servizi e numero di ore lo usi
  • Ci sono diverse ore gratuite per le istanze T2.micro, ma di solito pagherai pochi dollari ogni mese (se usi ancora T2.micro)
  • La tua istanza gratuita non andrà a dormire, disponibile 24 ore su 24, 7 giorni su 7 (perché potresti pagare :))
  • Data center: in tutto il mondo. Scegli la regione più adatta a te.
  • Tuffati a livello di macchina. Quindi puoi godertelo
  • Alcune conoscenze su DevOps, ma va bene, StackOverflow è utile lì!

AWS Elastic Beanstalk è un'alternativa di Heroku, ma più economica

  • Elastic Beanstalk è stato annunciato come beta pubblica dal 2010; ci aiuta a lavorare più facilmente con la distribuzione. Per i dettagli, vai qui

  • Beanstalk è gratuito, il costo che pagherai sarà per i servizi che utilizzi e il numero di ore di utilizzo.

  • Uso l'Elastic Beanstalk da molto tempo e penso che possa essere la sostituzione di Heroku e più economica!

Sommario

  • Heroku: facile all'inizio, istanza GRATUITA , ma costoso in seguito
  • AWS: Non facile, ore libere disponibili, tipo di più economico , Beanstalk dovrebbe essere preoccupato da usare

Quindi nel mio sistema attuale, utilizzo Heroku per la messa in scena e Beanstalk per la produzione!


3
Mi piace il modo in cui rispondi alla domanda. Ho provato Heroku e AWS. Sono d'accordo con te a raccomandare:Use Heroku for staging, and Beanstalk for production!
Chetabahana,

1
heroku run bashe hai accesso shell al tuo dyno
Mohammad Jafar Mashhadi

Puoi dare una stima dei prezzi? dovrò pubblicare Java Web App su Tomcat (Spring framework, angularJS ecc.), pensiamo a circa 1000 utenti al mese, ognuno dei quali utilizza l'app per 5 minuti. Qual è il prezzo stimato? (come un utilizzo molto basso, ma disponibilità per l'intero mese)
rasoio

1
@razor se usi la microistanza t2 (buona per la pre-produzione o un piccolo progetto), il prezzo è così economico, è di circa 5 $ a 10 $ al mese come la mia memoria nel progetto precedente. Il dettaglio qui aws.amazon.com/ec2/pricing
Hieu Pham,

e Heroku sarà molto più costoso? (2 volte?) Con un utilizzo simile? conosco le pagine dei prezzi, ma è difficile calcolare / immaginare quanta potenza CPU impiegherà un'app così semplice o quale sarà l'utilizzo del DB dopo un mese (DB sarà abbastanza piccolo di coraggio)
rasoio

27

Le risposte esistenti sono sostanzialmente accurate:

  • Heroku è molto facile da usare e distribuire, può essere facilmente configurato per l'implementazione automatica di un repository (ad esempio GitHub), ha molti componenti aggiuntivi di terze parti e addebita di più per istanza.

  • AWS offre una gamma più ampia di servizi di prima qualità a prezzi competitivi, tra cui DNS, bilanciamento del carico, archiviazione di file a basso costo e caratteristiche aziendali come la possibilità di definire politiche di sicurezza.

Per il tl; dr salta alla fine di questo post.

AWS ElasticBeanstalk è un tentativo di fornire una scalabilità automatica simile a Heroku e una piattaforma di distribuzione semplice. Poiché utilizza istanze EC2 (che crea automaticamente), i server EB possono fare qualsiasi altra istanza EC2 ed è economico da eseguire.

La distribuzione con EB è molto lenta; La distribuzione di un aggiornamento può richiedere 10-15 minuti per server e la distribuzione in un cluster più grande può richiedere la parte migliore di un'ora, rispetto a pochi secondi per distribuire un aggiornamento su Heroku. Le distribuzioni su EB non vengono gestite in modo particolarmente uniforme, il che può imporre vincoli alla progettazione dell'applicazione.

Puoi usare tutti i servizi che ElasticBeanstalk usa dietro le quinte per costruire il tuo sistema su misura (con CodeDeploy, Elastic Load Balancer, Auto Scaling Groups - e CodeCommit, CodeBuild e CodePipeline se vuoi andare all in) ma puoi sicuramente spendere un buon un paio di settimane configurandolo per la prima volta in quanto è abbastanza contorto e leggermente più complicato della semplice configurazione delle cose in EC2.

AWS Lightsail offre un'opzione di hosting a prezzi competitivi, ma non aiuta con l'implementazione o il ridimensionamento: è davvero solo un wrapper per la loro offerta EC2 (ma costa molto di più). Ti consente di eseguire automaticamente uno script bash sulla configurazione iniziale, il che è un bel tocco ma è costoso rispetto al costo della semplice configurazione di un'istanza EC2 (che puoi anche fare a livello di codice).

Alcune riflessioni sul confronto (per cercare di rispondere alle domande, anche se in modo rotatorio):

  1. Non sottovalutare la quantità di lavoro gestita dall'amministrazione del sistema, incluso tenere aggiornato tutto ciò che è stato installato con patch di sicurezza (e occasionali aggiornamenti del sistema operativo).

  2. Non sottovalutare i vantaggi di distribuzione automatica, ridimensionamento automatico, provisioning e configurazione SSL.

    La distribuzione automatica quando aggiorni il tuo repository Git è facile con Heroku. È quasi istantaneo, grazioso, quindi non ci sono interruzioni per gli utenti finali e può essere impostato per l'aggiornamento solo se i test / Integrazione continua passano in modo da non interrompere il sito se si distribuisce codice non funzionante.

    Puoi anche utilizzare ElasticBeanstalk per la distribuzione automatica, ma tieniti pronto a trascorrere una settimana impostandola per la prima volta: potresti dover modificare il modo in cui distribuisci e costruisci risorse (come CSS e JS) per lavorare con il modo in cui ElasticBeanstalk gestisce le distribuzioni o la logica di costruzione nella tua app per gestire le distribuzioni.

    Tieni presente nella stima dei costi che per una distribuzione senza interruzioni su EB devi eseguire più istanze: EB distribuisce gli aggiornamenti su ciascun server singolarmente in modo che il tuo servizio non sia degradato, dove Heroku lancia un nuovo dyno per te e si depreca il vecchio servizio fino a quando non vengono gestite tutte le richieste (quindi lo elimina).

    È interessante notare che il costo di hosting per l'esecuzione di più server con EB può essere più economico di una singola istanza Heroku, soprattutto una volta incluso il costo dei componenti aggiuntivi.

Alcune altre questioni non specificamente poste, ma sollevate da altre risposte:

  1. L'uso di un fornitore diverso per la produzione e lo sviluppo è una cattiva idea.

    Sto chiedendo che la gente lo stia suggerendo. Mentre idealmente il codice dovrebbe funzionare bene su qualsiasi piattaforma ragionevole in modo che sia il più portatile possibile, le versioni del software su ciascun host varieranno notevolmente e solo perché il codice viene eseguito in staging non significa che verrà eseguito in produzione (ad es. Node.js / Le versioni di Ruby / Python / PHP / Perl possono differire in modi che rendono il codice incompatibile, spesso in modi silenziosi che potrebbero non essere catturati anche se si ha una copertura decente del test).

    Ciò che è una buona idea è sfruttare qualcosa come Heroku per la prototipazione, progetti più piccoli e micrositi, in modo da poter costruire e distribuire rapidamente le cose senza investire molto tempo in configurazione e manutenzione.

    Assicurati di tenere conto del costo di esecuzione delle istanze di produzione e pre-produzione quando prendi quella decisione, senza dimenticare il costo della replica dell'intero ambiente (inclusi servizi di terze parti come archivi dati / componenti aggiuntivi, installazione e configurazione SSL, ecc.) .

  2. Se usi AWS, fai attenzione alle istanze preconfigurate di AWS di fornitori come Bitnami: sono un incubo per la sicurezza. Possono esporre molte applicazioni notoriamente vulnerabili per impostazione predefinita senza menzionarle nella descrizione.

    Considera invece di utilizzare solo una distribuzione mainstream ben supportata, come Ubuntu o Debian (o CentOS se hai bisogno del supporto RPM).

    Nota: l'offerta Amazon ha una propria distribuzione chiamata Amazon Linux, che utilizza RPM, ma è specifica per EC2 e meno ben supportata da software di terze parti / open source.

  3. Puoi anche impostare un'istanza EC2 su AWS (o Lightsail) e configurarla con qualcosa come flynn o dokku su cui puoi quindi distribuire facilmente più siti, il che può valerne la pena se mantieni molti servizi o vuoi essere in grado di far girare nuove cose facilmente. Tuttavia, configurarlo non è così automagico come usare Heroku e puoi finire per dedicare molto tempo a configurarlo e mantenerlo (al punto che ho scoperto che distribuire utilizzando il clustering Amazon e Docker Swarm è più semplice che configurarli; YMMV).

Ho usato istanze AWS EC (da sole e in cluster), Elastic Beanstalk e Lightsail e Heroku allo stesso tempo, a seconda delle esigenze del progetto a cui sto lavorando.

Odio perdere tempo a configurare i servizi, ma la mia fattura Heroku sarebbe di migliaia all'anno se la usassi per tutto e AWS calcolasse una frazione del costo.

tl; dr

Se il denaro non è mai stato un problema, userei Heroku per quasi tutto in quanto è un enorme risparmio di tempo, ma vorrei comunque usare AWS per progetti più complicati in cui ho bisogno della flessibilità e dei servizi più avanzati che Heroku non offre.

Lo scenario ideale per me sarebbe se ElasticBeanstalk funzionasse più come Heroku, ovvero con una configurazione più semplice e un meccanismo di distribuzione più rapido e migliore.

Un esempio di un servizio che è quasi questo è now.sh , che in realtà utilizza AWS dietro le quinte, ma rende le implementazioni e il clustering facili come su Heroku (con SSL automatico, DNS, distribuzioni graziose, configurazione del cluster super facile e gestione).

L'ho usato abbastanza sia per le app Node.js che per le distribuzioni di immagini Docker, il principale avvertimento è che le istanze sono condivise (qualcosa si riflette nel loro costo inferiore) e attualmente nessuna opzione per acquistare istanze dedicate. Tuttavia, il loro strumento di distribuzione open source "ora" può essere utilizzato anche per distribuire istanze dedicate su AWS, Google Cloud e Azure.


8

È stata una percentuale significativa della nostra attività di migrazione delle persone da Heroku ad AWS. Ci sono vantaggi per entrambi, ma dopo un po 'diventa disordinato su Heroku ... una volta che hai bisogno di un certo livello di complessità non è più facile da mantenere con i limiti di Heroku.

Detto questo, ci sono sempre più opzioni per avere la facilità di Heroku e la flessibilità di AWS essendo su AWS con fantastici framework / strumenti.


Puoi dare una stima dei prezzi? dovrò pubblicare Java Web App su Tomcat (Spring framework, angularJS ecc.), pensiamo a circa 1000 utenti al mese, ognuno dei quali utilizza l'app per 5 minuti. Qual è il prezzo stimato? (come un utilizzo molto basso, ma disponibilità per l'intero mese)
rasoio

3

La cosa divertente è che Heroku in realtà usa AWS sul backend. Ti toglie tutte le spese generali e fa la gestione dell'architettura su EC2 per te. (Ho avuto quella conoscenza da un ingegnere senior in una grande azienda durante un'intervista)


1

Bene! Osservo che Heroku è famoso per gli sviluppatori in erba e appena nati, mentre AWS ha una personalità sviluppatore avanzata. Anche DigitalOcean è uno dei principali attori in questo campo. Cloudways ha reso molto semplice la creazione di stack di lampade in un clic su DigitalOcean e AWS. Avere tutti gli aggiornamenti di servizi e pacchetti in un clic è molto meglio che fare tutto manualmente.

Puoi dare un'occhiata qui: https://www.cloudways.com/blog/host-php-on-aws-cloud/


1

Bene Heroku usa AWS in background, tutto dipende dal tipo di soluzione di cui hai bisogno. Se sei un core di Linux e un devops non sei preoccupato di creare vm da zero come selezionare ami scegliendo opzioni di palcement ecc., Puoi andare con AWS. Se vuoi fare le cose a livello di superficie senza avere quelle nettigrità puoi andare con heroku.


0

Amazon Web Services (AWS) offre molti servizi da IaaS a PaaS con una durabilità del 99.9999999% garantita e disponibilità di dati e infrastruttura. AWS offre l'automazione dell'infrastruttura insieme a numerosi strumenti per gli sviluppatori per organizzare il processo di distribuzione delle applicazioni.

D'altra parte, Heroku è solo PaaS che offre servizi per gestire la tua piattaforma sul loro cloud. In nessun caso AWS è infrastruttura o sicurezza.


6
Citazione necessaria per "In nessun caso sta con AWS, che si tratti di infrastruttura o sicurezza".
pdoherty926,

0

A volte, mi chiedo perché la gente paragona AWS a Heroku. AWS è un IAAS (infrastruttura come servizio) che indica chiaramente quanto sia solido e calcolativo il sistema. Heroku, d'altra parte, è solo un SAAS, in pratica è solo una frazione dei servizi AWS. Quindi perché lottare con la configurazione di AWS quando puoi spedire il tuo primo prodotto al massimo usando Heroku.

Heroku è gratuito, semplice e facile da distribuire sul web quasi tutti i tipi di stack. Heroku è appositamente progettato per bypassare tutte le seccature della spedizione della tua applicazione su un server live in pochissimo tempo.

Tuttavia, potresti voler distribuire la tua applicazione usando uno qualsiasi dei tutorial di entrambe le parti e confrontarli

AWS DOCS e Heroku Docs


0

Sebbene sia AWS che Heroku siano piattaforme cloud, sono diverse poiché AWS è IaaS e Heroku è PaaS


2
Questo non è corretto AWS offre sia offerte IAAS che PAAS.
Glenn Bech,

0

Heroku è come un sottoinsieme di AWS. È solo una piattaforma come servizio, mentre AWS può essere implementato come qualsiasi cosa e ad ogni livello.

L'implementazione dipende dalle esigenze aziendali. Se si adatta a uno dei due, utilizzare di conseguenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.