Das Wichtigste zuerst, AWS und Heroku sind verschiedene Dinge. AWS bietet Infrastructure as a Service ( IaaS ) an, während Heroku eine Platform as a Service ( PaaS ) anbietet .
Was ist der Unterschied? In etwa bietet IaaS Ihnen Komponenten, die Sie benötigen, um darauf aufzubauen. PaaS bietet Ihnen eine Umgebung, in der Sie nur Code und einige grundlegende Konfigurationen übertragen und eine laufende Anwendung erhalten. IaaS bietet Ihnen mehr Leistung und Flexibilität, auf Kosten der Notwendigkeit, mehr selbst zu bauen und zu warten.
Um Ihren Code unter AWS zum Laufen zu bringen und ein bisschen wie eine Heroku-Bereitstellung auszusehen, benötigen Sie einige EC2-Instanzen - Sie möchten einen Load Balancer / Caching-Layer darauf installieren (z. B. Varnish ), Sie möchten Instanzen, die so etwas ausführen Passagier und Nginx , um Ihren Code bereitzustellen, möchten Sie eine Cluster-Datenbankinstanz von etwas wie PostgreSQL bereitstellen und konfigurieren . Sie möchten ein Bereitstellungssystem mit so etwas wie Capistrano und etwas, das die Protokollaggregation durchführt.
Das ist keine unbedeutende Menge an Arbeit, die eingerichtet und gewartet werden muss. Bei Heroku sind möglicherweise einige Zeilen Anwendungscode und a erforderlich, um diese Art von Phase zu erreichen git push
.
Sie sind also so weit und möchten skalieren. Großartig. Sie verwenden Puppet für Ihre EC2-Bereitstellung, richtig? Jetzt konfigurieren Sie Ihre Capistrano-Dateien so, dass Instanzen nach Bedarf hoch- und heruntergefahren werden. Sie richten Ihre Puppet-Konfiguration neu aus, damit Varnish Web-Worker-Instanzen kennt und diese automatisch zusammenfasst. Oder du heroku scale web:+5
.
Hoffentlich gibt Ihnen das eine Vorstellung vom Vergleich zwischen den beiden. Um nun Ihre spezifischen Punkte anzusprechen:
Geschwindigkeit
Derzeit läuft Heroku nur auf AWS-Instanzen in us-east
und eu-west
. Für Sie klingt das wie das, was Sie sowieso wollen. Für andere ist es möglicherweise eher eine Überlegung.
Sicherheit
Ich habe viele intern gewartete Produktionsserver gesehen, die bei Sicherheitsupdates weit hinterherhinken oder im Allgemeinen schlecht zusammengestellt sind. Mit Heroku haben Sie jemanden, der so etwas verwaltet, was entweder ein Segen oder ein Fluch ist, je nachdem, wie Sie es betrachten!
Bei der Bereitstellung übergeben Sie Ihren Code effektiv direkt an Heroku. Dies kann ein Problem für Sie sein. Ihr Artikel über Dyno Isolation beschreibt ihre Isolationstechnologien (es scheint, als würden mehrere Dynos auf einzelnen EC2-Instanzen ausgeführt). Mehrere Kollegen haben Probleme mit diesen Technologien und der Stärke ihrer Isolation geäußert. Ich bin leider nicht in der Lage, genug Wissen / Erfahrung zu haben, um wirklich Kommentare abzugeben, aber meine aktuellen Heroku-Bereitstellungen halten dies für "gut genug". Es kann ein Problem für Sie sein, ich weiß es nicht.
Skalieren
Ich habe oben in meinem Vergleich zwischen IaaS und PaaS angesprochen, wie man dies implementieren könnte. Ihre Anwendung hat ungefähr eine Procfile
, die Zeilen des Formulars enthält dyno_type: command_to_run
, z. B. (aus http://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Dies mit einem:
heroku scale web:2 worker:10
Dies führt dazu, dass 2 web
Dynos und 10 worker
Dynos ausgeführt werden. Schön, einfach, leicht. Beachten Sie, dass web
es sich um einen speziellen Dyno-Typ handelt, der Zugriff auf die Außenwelt hat und sich hinter dem netten Web-Traffic-Multiplexer (wahrscheinlich eine Art Lack / Nginx-Kombination) befindet, der den Verkehr entsprechend weiterleitet. Ihre Mitarbeiter interagieren wahrscheinlich mit einer Nachrichtenwarteschlange für ein ähnliches Routing, von dem sie den Standort über eine URL in der Umgebung abrufen.
Kosteneffizienz
Viele Leute haben viele unterschiedliche Meinungen dazu. Derzeit sind es 0,05 USD / h für eine Prüfstandsstunde, verglichen mit 0,025 USD / h für eine AWS-Mikroinstanz oder 0,09 USD / h für eine kleine AWS-Instanz.
Heroku des Dyno - Dokumentation sagt , dass Sie über 512 MB RAM haben, ist es so wahrscheinlich nicht zu unvernünftig , eine Dyno als ein bisschen wie eine EC2 Micro Instanz zu betrachten. Ist es den doppelten Preis wert? Wie sehr schätzt du deine Zeit? Der Zeit- und Arbeitsaufwand, der erforderlich ist, um auf einem IaaS-Angebot aufzubauen, um es auf diesen Standard zu bringen, ist definitiv nicht billig. Ich kann diese Frage für Sie nicht wirklich beantworten, aber unterschätzen Sie nicht die "versteckten Kosten" für Einrichtung und Wartung.
(Ein bisschen beiseite, aber wenn ich von hier aus eine Verbindung zu einem Prüfstand herstelle ( heroku run bash
), zeigt ein flüchtiger Blick 4 Kerne /proc/cpuinfo
und 36 GB RAM - dies lässt mich glauben, dass ich mich auf einer "High-Memory Double Extra Large Instance" befinde " . Die Heroku- Dyno-Dokumentation besagt, dass jeder Dyno 512 MB RAM erhält, sodass ich ihn möglicherweise mit bis zu 71 anderen Dynos teilen kann. (Ich habe nicht genügend Daten über die Homogenität der AWS-Instanzen von Heroku, daher kann Ihre Laufleistung variieren.)
Wie schlagen sie sich gegen ihre Konkurrenten?
Ich fürchte, ich kann dir nicht wirklich helfen. Der einzige Konkurrent, den ich jemals wirklich gesehen habe, war Google App Engine - zu der Zeit, als ich Java-Anwendungen bereitstellen wollte, war die Menge an Einschränkungen für verwendbare Frameworks und Technologien unglaublich abstoßend. Dies ist mehr als "nur eine Java-Sache" - die Menge an allgemeinen Einschränkungen und notwendigen Überlegungen ( die FAQ gibt Hinweise auf mehrere) schien weniger praktisch. Im Gegensatz dazu war der Einsatz bei Heroku ein Traum.
Fazit
Ich hoffe, dies beantwortet Ihre Fragen (bitte kommentieren Sie, wenn es Lücken / andere Bereiche gibt, die Sie ansprechen möchten). Ich denke, ich sollte meine persönliche Position anbieten. Ich liebe Heroku für "schnelle Bereitstellungen". Wenn ich eine Anwendung starte und ein billiges Hosting möchte (die kostenlose Heroku-Stufe ist fantastisch - im Wesentlichen, wenn Sie nur einen Web-Dyno und 5 MB PostgreSQL benötigen, ist es kostenlos, eine Anwendung zu hosten), ist Heroku meine Anlaufstelle . Für "Serious Production Deployment" mit mehreren zahlenden Kunden, mit einem Service-Level-Agreement, mit dedizierter Zeit für Operationen usw. kann ich mich nicht dazu bringen, so viel Kontrolle nach Heroku und dann entweder nach AWS oder nach AWS zu verlagern Unsere eigenen Server waren die Hosting-Plattform der Wahl.
Letztendlich geht es darum, was für Sie am besten funktioniert. Sie sagen, Sie sind "ein Programmieranfänger" - möglicherweise können Sie sich mit Heroku auf das Schreiben von Ruby konzentrieren und müssen keine Zeit damit verbringen, die gesamte andere Infrastruktur rund um Ihren Code aufzubauen. Ich würde es auf jeden Fall versuchen.
Hinweis: AWS verfügt tatsächlich über ein PaaS-Angebot, Elastic Beanstalk , das Ruby, Node.js, PHP, Python, .NET und Java unterstützt. Ich denke, im Allgemeinen springen die meisten Leute, wenn sie "AWS" sehen, zu Dingen wie EC2 und S3 und EBS, die definitiv IaaS-Angebote sind