Anwendungsarchitektur - Amazon Elastic Container Service

Anwendungsarchitektur

Wie Sie Ihre Anwendung auf Amazon ECS entwerfen, hängt von mehreren Faktoren ab, wobei der verwendete Starttyp ein Hauptunterscheidungsmerkmal ist. Wir bieten die folgenden Anleitungen, aufgeschlüsselt nach Starttyp, die Ihnen bei dem Prozess helfen sollen.

Verwenden des Starttyps Fargate

Wenn Sie Ihre Anwendung mithilfe des Starttyps AWS Fargate entwerfen, um auf Amazon ECS zu laufen, ist die wichtigste Frage, wann Sie mehrere Container in derselben Aufgabendefinition verwenden sollen, und wann Sie Containern separat in mehreren Aufgabendefinitionen bereitstellen sollen.

Wenn die folgenden Bedingungen erforderlich sind, wird empfohlen, die Container in einer einzigen Aufgabendefinition bereitzustellen:

  • Ihre Container haben einen gemeinsamen Lebenszyklus (d. h. sie werden gemeinsam gestartet und beendet).

  • Ihre Container müssen auf demselben zugrunde liegenden Host ausgeführt werden (d. h. ein Container verweist auf den anderen auf einem localhost-Port).

  • Sie verlangen von Ihren Containern, dass sie Ressourcen gemeinsam nutzen.

  • Ihre Container nutzen Daten-Volumes gemeinsam.

Andernfalls sollten Sie Ihre Container in separaten Aufgabendefinitionen definieren, sodass Sie sie separate skalieren, bereitstellen und entfernen können.

Verwenden des Starttyps EC2

Wenn Sie darüber nachdenken, wie Sie Aufgabendefinitionen und Services unter Verwendung des Starttyps EC2 abbilden sollen, überlegen Sie, welche Prozesse zusammen auf der gleichen Instance ausgeführt werden müssen und wie jede Komponente skaliert werden soll.

Stellen Sie sich z. B. eine Anwendung vor, die aus folgenden Komponenten besteht:

  • Ein Front-End-Service, der Informationen auf einer Webseite anzeigt

  • Ein Backend-Service, der APIs für den Front-End-Service bereitstellt

  • Ein Datenspeicher

In Ihrer Entwicklungsumgebung werden wahrscheinlich alle drei dieser Container zusammen auf Ihrem Docker-Host ausgeführt. So könnten Sie versucht sein, den gleichen Ansatz auf Ihre Produktionsumgebung anzuwenden. Dies hat jedoch mehrere Nachteile:

  • Änderungen an einer Komponente können sich auf alle drei der Komponenten auswirken, was eine weitreichendere Änderung zu Folge haben könnte als gewünscht.

  • Die einzelnen Komponenten lassen sich schwieriger skalieren, da jeder Container proportional skaliert werden muss.

  • Die Aufgabedefinitionen können nur 10 Containerdefinitionen umfassen; Ihr Anwendungs-Stack braucht möglicherweise aber mehr Definitionen, entweder jetzt oder in der Zukunft.

  • Jeder Container in einer Aufgabendefinition muss in der gleichen Container-Instance landen, was die Auswahl der Instances auf die größten einschränken kann.

Wegen dieser Nachteile sollten Sie Aufgabendefinitionen erstellen, die die Container gruppieren, die für einen gemeinsamen Zweck verwendet werden, und die verschiedenen Komponenten in mehrere, getrennte Aufgabendefinitionen trennen. In dem vorangegangenen Beispiel geben drei Aufgabendefinitionen jeweils einen Container an. Der folgende Beispielcluster (in der Abbildung unten dargestellt) verfügt über drei Container-Instances, die bei drei Front-End-Service-Containern, zwei Backend-Service-Containern und einem Datenspeicher-Service-Container registriert sind.


					Anwendungsarchitektur – Beispiel

Sie können verwandte Container in einer Aufgabendefinition gruppieren, z. B. verknüpfte Container, die gemeinsam ausgeführt werden müssen. Sie könnten beispielsweise einen Protokoll-Streaming-Container zu Ihrem Front-End-Service hinzufügen und dies in die gleiche Aufgabendefinition aufnehmen.

Nachdem Sie die Aufgabendefinitionen fertiggestellt haben, können Sie auf dieser Grundlage Services erstellen, um die Verfügbarkeit Ihrer gewünschten Aufgaben sicherzustellen. Weitere Informationen finden Sie unter Erstellen eines Amazon-ECS-Services. In Ihren Services können Sie Container mit Elastic Load Balancing-Lastenverteilern verknüpfen. Weitere Informationen finden Sie unter Service-Load Balancing. Wenn sich Ihre Anwendungsanforderungen ändern, können Sie Ihre Service aktualisieren, um die Anzahl der gewünschten Aufgaben nach oben oder unten zu skalieren oder um neuere Versionen der Container in Ihren Aufgaben bereitzustellen. Weitere Informationen finden Sie unter Aktualisierung eines Service.