Manuelle Bereitstellung im Vergleich zu Amazon Elastic Beanstalk

114

Welche Vorteile ergeben sich aus der Verwendung von Elastic Beanstalk gegenüber der manuellen Erstellung einer EC2-Instanz und der Einrichtung eines Tomcat-Servers sowie der Bereitstellung usw. für eine typische Java-Webanwendung? Sind Lastausgleich, Überwachung und automatische Skalierung die einzigen Vorteile?

Angenommen, für meine Webanwendung, die eine Datenbank verwendet, habe ich die Datenbank in der EC2-Instanz selbst installiert. Wenn Autoscalling stattfindet, wird die Datenbank in der neu erstellten Instanz erstellt oder greift auf die Datenbank zu, die ich in der Master-Instanz erstellt habe ... Wenn beim automatischen Skalieren nur ein Replikat erstellt wird, wie erfolgt die Datensynchronisierung zwischen den Instanzen?

Elango
quelle

Antworten:

144

Alle Dinge, die Sie erwähnt haben, wie Lastausgleich, Überwachung und automatische Skalierung, sind definitiv Vorteile.

Sie müssen jedoch so denken: In einer echten Platform as a Service (PAAS) besteht das Ziel darin, die Anwendung von der Plattform zu trennen. Als Entwickler kümmern Sie sich nur um Ihre Anwendung. Die Plattform ist an Sie "vermietet". Die Plattform- "Instanzen" werden automatisch für Sie aktualisiert, verwaltet, skaliert, ausgeglichen usw. Sie laden einfach Ihre WAR-Datei hoch und es funktioniert einfach (zumindest theoretisch).

EC2 an sich ist kein PAAS. Es ist eher wie IAAS ( Infrastructure as a Service ). Sie müssen sich noch um die Serverinstanzen kümmern, Software darauf installieren, sie auf dem neuesten Stand halten usw.

Elastic Beanstalk ist ein PAAS-System. So sind App Engine und Azure unter vielen anderen.

In einem echten PAAS-System ist das DBMS eine separate Komponente von den Webanwendungsservern. Der Grund liegt auf der Hand: Das DBMS kann möglicherweise nicht auf den Instanzen installiert werden, die für den Anwendungsserver verwendet werden, da das DBMS beim Erstellen und Zerstören von Instanzen basierend auf Ihrem Datenverkehr verloren gehen würde! Es ist im Allgemeinen sowieso keine gute Idee, DBMS und Anwendungsserver auf demselben Computer / derselben Instanz zu haben.

In einem PAAS-System ist das DBMS ein separater Dienst. Für Amazon wäre es Amazon RDS . Genau wie bei Elastic Beanstalk, bei dem Sie sich nicht um den Anwendungsserver kümmern müssen und nur Ihre WAR-Datei hochladen, müssen Sie sich bei RDS nicht um das DBMS kümmern und nur Ihre Datenbank (en) bereitstellen.

Elastic Beanstalk und RDS arbeiten sehr gut zusammen, insbesondere wenn sie in derselben Verfügbarkeitszone bereitgestellt werden, in der die Latenz sehr gering wäre.

Schließlich kostet die Verwendung von Elastic Beanstalk nichts mehr als die bereitgestellten Ressourcen (EC2-Instanzen und Load Balancer). RDS ist jedoch nicht billig und definitiv teurer als die Verwendung einer einzelnen EC2-Instanz sowohl für den Anwendungsserver als auch für das DBMS.

stepanian
quelle
3
Schön gesagt. Nur eine Ergänzung: Sie können eine benutzerdefinierte AMI angeben, die als Basis für jede Instanzerstellung dient. So können Sie beispielsweise ein Apache-Image mit allen erforderlichen Konfigurationen und Apps anpassen und es als Basis-AMI verwenden (in der Beanstalk-Umgebungskonfiguration befindet sich ein benutzerdefiniertes AMI-ID-Feld). Dennoch werden zur Laufzeit generierte Daten tatsächlich bei jeder Instanzbeendigung gelöscht (und der Load Balancer macht das!).
André Felipe
1
Eine Sache, die mich überrascht hat, war die Tatsache, dass Elastic Beanstalk für jede bereitgestellte Umgebung einen Load Balancer erstellt. Load Balancer sind nicht sehr teuer in der Ausführung, kosten aber ungefähr die gleichen Kosten wie eine Mikroinstanz.
Ken Liu
@ KenLiu, Load Balancer ist leistungsfähiger als eine Mikroinstanz.
BigSack
7
@BigSack - Der Punkt, den ich ansprechen wollte, ist, dass Elastic Beanstalk kostenlos sein soll, aber AWS macht nicht klar, dass jeder Umgebung ein Load Balancer zugewiesen wird, der Sie ungefähr 15 US-Dollar pro Monat kostet. Ich habe nicht mit einer Mikroinstanz verglichen.
Ken Liu
Soweit ich weiß, entspricht RDS heutzutage fast dem Preis von EC2 und bietet gleichzeitig einen weitaus höheren Nutzen, eine bessere Wartbarkeit und Zuverlässigkeit.
Justin Schier
38

Elastic Beanstalk bietet mehr als nur Lastausgleich, Überwachung und automatische Skalierung.

1) Verwaltet Anwendungsversionen durch Speichern und Verwalten verschiedener Versionen Ihrer Anwendung, sodass Sie problemlos zwischen verschiedenen Versionen Ihrer Anwendungen wechseln können.

2) Verfügt über das Konzept "Umgebungen" für jede Anwendung, sodass Sie in jeder Umgebung unterschiedliche Versionen Ihrer Anwendung bereitstellen können. Dies ist beispielsweise praktisch, wenn Sie separate QA- und DEV-Umgebungen einrichten und einen Build zuerst in DEV bereitstellen und dann dieselbe Version der Anwendung in QA bereitstellen möchten, wenn Ihr QA-Team für den nächsten Build bereit ist.

3) Externalisiert die wichtigen Containerkonfigurationseigenschaften (z. B. Tomcat-Speichereinstellungen) in die Elastic Beanstalk-Konsole und die API. Aus diesem Grund können Sie die Einstellungen einfach speichern und zwischen Umgebungen kopieren.

4) Zeigen Sie Anwendungsprotokolldateien über die Konsole an und rollen und archivieren Sie Protokolldateien automatisch in S3. (Zugegeben, diese Funktion ist derzeit etwas schwach.)

Ken Liu
quelle
Wie auch immer, ich denke, er möchte etwas über die Leistung verstehen, die ich bei Bohnenstangen, Fehlfunktionen bei der Bereitstellung und bei Katastrophenfällen nicht mag, und bei Verwendung von LAMBDA kann alles gleich oder besser sein. Schwer, aber es ist eine Silberkugel für Sie hohe Verfügbarkeit.
Lucas Rodrigues Sena
Nur um den letzten Punkt hinzuzufügen: Sie können alle Anwendungsprotokolle problemlos an CloudWatch senden.
SebaGra
6

Ich hatte eine App sowohl in EC2 dediziert (Nginx & Gunicorn) als auch in Beanstalk Environment (CentOS & Apache2) bereitgestellt.

Meine Beobachtungen:

  • BeanStalk ist Paas. Das manuelle Erstellen einer EC2-Instanz (IAAS) ist wie alles von Grund auf neu, aber Sie haben eine solide Kontrolle.

  • BeanStalk wird standardmäßig mit CentOS und Apache (Httpd) geliefert. Sie können das Betriebssystem in einer dedizierten Instanz auswählen.

  • Diese Dinge, die mir wichtig waren,

    • In der Beanstalk-Umgebung wurden viele 504 Fehler angezeigt.
    • Es war schwierig zu debuggen, als der BeanStalk-Server abstürzte, da auch keine Protokolle angezeigt wurden und nicht in den Computer ssh konnten. Dies ist sehr wichtig.
    • Installieren / Konfigurieren von Tools wie Sellerie, Redis (muss einen anderen Port ausführen) usw. in dedizierten Fällen ist viel einfacher.
  • In meinem Fall musste ich den Server (Beanstalk) skalieren, um die Installation einiger Pakete (wie Pandoc) ausführen zu können. Diese Dinge sind in Ubuntu einfacher.

  • Das Skalieren ist in BeanStalk viel einfacher. Das Klonen von Servern ist in BeanStalk unkompliziert.

  • Ich hatte in beiden Fällen Mikro genommen (dediziert & Bohnenstange). Ich fand, dass eine dedizierte Mikroinstanz besser war.

  • Automatisierte Bereitstellung in Beanstalk. Ich musste Skripte schreiben, um dasselbe zu automatisieren, was in Ordnung ist, da es nur einmal ist.

SuperNova
quelle