Was sind die Vor- und Nachteile von AWS Elastic Beanstalk im Vergleich zu anderen Bereitstellungsstrategien?

17

Ich bin ziemlich neu im gesamten Netflix OSS-Stack und den Bereitstellungen im Allgemeinen. Als Hintergrund für meinen aktuellen Wissensstand bin ich hauptsächlich als Front-End-Anwendungsingenieur tätig. Ich mag jedoch die betriebliche Seite der Dinge und versuche, eine neue Bereitstellungsstrategie und die Werkzeuge für ein neues Projekt einzurichten.

Unsere Ziele

  • Super einfache Bereitstellung (wir möchten einen Knopf drücken, um die Produktion zu aktualisieren)
  • Automatisierte Bereitstellung in Testumgebungen (mit Jenkins)
  • Einfache Wartung (wir haben eine App zum Schreiben, wir möchten uns nicht mit Produktionsproblemen befassen)
  • Fähigkeit, mit einer serviceorientierten Architektur umzugehen (viele kleine Apps, verschiedene Sprachen und Datenspeicher)
  • Genug Flexibilität, um sicherzustellen, dass wir die Strategien nicht bald ändern müssen (wir versuchen bereits, RightScale zu umgehen).

Wir sind in Ordnung mit etwas mehr anfänglicher Einrichtungszeit, wenn dies uns in Zukunft einige Kopfschmerzen erspart.

In diesem Sinne habe ich mir Podcasts angehört, Ops-Talks angesehen und Unmengen von Blog-Posts gelesen. Auf der Grundlage unserer Ziele und meiner Meinung nach bewährter Vorgehensweisen haben wir begonnen, einen Plan zu erstellen Asgard, wir rollen unser Paket in ein Glas und das in einen AMI.

Wir hatten dies alles geplant und mochten die Vorteile des Prozesses gegenüber der Verwendung eines Chef-Servers und der sofortigen Konvergenz von Instanzen (wir waren der Meinung, dass dies aufgrund unserer begrenzten Zeitleiste und des Mangels an Verständnis für einen Chef-Server-Workflow fehleranfällig war). Ein Kollege hat sich jedoch ein wenig selbst umgesehen und hatte das Gefühl, dass Elastic Beanstalk unsere Anforderungen erfüllt.

Ich habe es mir angesehen und eine Testumgebung mit einer WAR-Datei und einer angehängten RDS-Datenbank gestartet. Die Dinge scheinen zu funktionieren, und ich glaube, dass wir mithilfe von Jenkins über die AWS-API Bereitstellungen in einer Testumgebung automatisieren können. Scheint einfach genug ... vielleicht zu einfach.

Was ich mich frage ist, was ist der Haken? Wenn Elastic Beanstalk so einfach und effektiv ist, warum wird dann nicht mehr darüber gesprochen? Es fällt mir schwer, genug objektive Meinungen und Fakten zu den beiden verschiedenen Bereitstellungsstrategien zu finden.

Verwenden Sie elastische Bohnenstange? Wenn ja, warum und welche Faktoren haben zu dieser Entscheidung geführt? Was magst du und was nicht?

Wenn Sie Elastic Beanstalk nicht verwenden, es aber in Betracht ziehen, was verwenden Sie und warum haben Sie Elastic Beanstalk nicht verwendet?

Was sind die Vor- und Nachteile einer auf Elastic Beanstalk basierenden Bereitstellungsstrategie für eine SOA? Funktioniert Elastic Beanstalk also gut mit vielen kleinen Anwendungen, die aufeinander angewiesen sind?

James van Dyke
quelle

Antworten:

11

Ich habe Elastic Beanstalk zusätzlich zu anderen AWS-Angeboten evaluiert, während ich versucht habe, unsere handgerollten AWS-Instanzen zu verbessern. Die Gründe, warum ich mich dafür entschieden habe, es nicht zu verwenden, waren auf Komplikationen zurückzuführen, die die Migration meiner vorhandenen Anwendung und nicht das Angebot selbst zur Folge hatten. Der Haken ist, dass Sie nicht so viel Kontrolle über die Anwendungsbereitstellung / -konfiguration der Server haben. Wenn Sie eine neue Anwendung starten, kann es hilfreich sein, diese Dinge momentan nicht zu behandeln. Wenn Sie eine vorhandene Anwendung haben, ist es eine größere Herausforderung, in das Beanstalk-Modell zu passen.

Beanstalk bietet Heroku und anderen PaaS-Anbietern ein ähnliches Angebot, aber nicht viele Vorteile für diejenigen, die sich nur auf ihre Bewerbung konzentrieren möchten. Sie können die virtualisierten Ressourcen zumindest in höherem Maße bestimmen als andere PaaS-Anbieter.

Probleme, auf die ich mit meinen Anwendungen gestoßen bin:

  • Git-basierte Bereitstellungen - ich liebe sie, aber unser Repo ist 1+ GB. Eher groß, um regelmäßig zu pushen. Dieses Repo enthält auch ungefähr 40 Anwendungen (die eigentlich aufgeteilt werden sollten), aber das würde einige Zeit in Anspruch nehmen. Das Hochladen aller Arten von Paketen könnte funktionieren, aber die meisten unserer Anwendungen würden viel Arbeit in Anspruch nehmen, um ein Paket daraus zu machen.

  • Integration mit anderen Diensten - Beanstalk geht davon aus, dass alles, mit dem Sie eine Verbindung herstellen, ein einziger Dienst ist. Dies funktioniert gut, wenn sich Ihre Dienste hinter ELB befinden, unsere Knoten jedoch getrennt sind und wir über HAProxy auf jedem Anwendungsserver ausgeführt werden. Wenn Sie Ihre Datenspeicher und andere Dienste als einen einzelnen Endpunkt ausführen, sollte es Ihnen gut gehen.

In meine Evaluierung habe ich auch OpsWorks und CloudFormation einbezogen. OpsWorks hat ähnliche Integrationsprobleme mit der Funktionsweise der vorhandenen Automatisierung für diese Anwendungen. CloudFormation hat nicht viel mehr getan, als einige Python-Skripte und Chef bereits für uns erledigt haben.

Ich entschied mich dafür, stattdessen AWS Autoscaling Groups mit einer von Asgard bereitgestellten Automatisierung zu verwenden . Dies war die kleinste Änderung am vorhandenen Konfigurations- / Anwendungscode und bot uns die gewünschten Vorteile, nämlich die einfache Verwaltung mehrerer Server, die über die AWS-API verfügbar sind.

Die Einschränkungen, die Elastic Beanstalk für Ihre Anwendung festlegt, sind sehr hilfreich. Sie müssen sicherstellen, dass Ihre Anwendung größtenteils statusfrei ist, einen Endpunkt für einen Dienst bereitstellt und andere Dienste für den Status verwendet. Wenn Sie versuchen, wiederverwendbare eigenständige Dienste zu erstellen, sind mehrere Anwendungen in Beanstalk ein guter Anfang.

Wenn Sie mehr Konfiguration benötigen, ist OpsWorks ein guter nächster Schritt. Die vordefinierten Rollen sollten den Übergang zu Beginn vereinfachen und ein Automatisierungsframework für Chef bereitstellen, mit dem die Bereitstellung mehrerer Server koordiniert werden kann.

Philip Cristiano
quelle
2
Tolle Antwort, Philip. Es scheint, dass die größte Einschränkung für Elastic Beanstalk darin besteht, welche Basis AMI darauf eingerichtet hat. Also, ja, für einen einfachen, staatenlosen Dienst scheint es großartig zu sein. Wenn Sie jedoch mehrere Services (z. B. nginx, spezialisiertes Monitoring) in einer einzigen Instanz ausführen müssen, müssen Sie Ihre eigene AMI-Version erstellen und verlieren dann die automatischen Updates der Basis-AMI-Version für die AWS-Services. Zu diesem Zeitpunkt befinden Sie sich bereits in einem benutzerdefinierten Bereitstellungsprozess. Meiner Meinung nach ist das ungefähr die Zeit, in der Sie überlegen sollten, sich von EB zu entfernen.
James van Dyke
0

Ich sehe den Punkt des Kontrollverlustes, aber ich sehe nicht unbedingt die vorgeschriebene Staatenlosigkeit. Alles, was eb wirklich tut, ist die Bereitstellung von Automatisierung, was übrigens fantastisch ist. Ich sehe den Sinn eines großen Repository. Ich denke im Allgemeinen, dass es wirklich nett ist, logische App-Funktionen in separate Beans-Apps zu unterteilen und dann Umgebungen mit "Staging" und "Prod" darunter zu haben. Wir haben Modulumgebungen wie Uploader, die nicht viel bewirken und theoretisch eine Menge Kosten verursachen, aber dann verwenden Sie kleinere Instanzen, nur mehr davon. Wir haben einen zentralisierten Nginx ausgeführt und mussten viele benutzerdefinierte SNS-Nachrichtenhandles schreiben, um Ngnix über Änderungen in der automatischen Skalierungsrichtlinie zu benachrichtigen. Ein weiteres großes Problem bei Eb ist die Unfähigkeit, Lastausgleiche auszuschalten, da wir ngnix verwenden. Warum? elb unterstützt kein websocket.

Zeevs Glozman
quelle