Zum Inhalt wechseln

Bereitstellen von Microservices mit Amazon ECS

Technology

12 Januar 2021 - 5 Minuten lesen

768_440_Deployment_Microservices_AWS_ECS
1394 DE Resources Thumbs

Teilen

Microservices sind ein architektonischer und organisatorischer Ansatz für die Softwareentwicklung, mit dem Bereitstellungszyklen beschleunigt, Innovation und Eigenverantwortung gefördert und die Wartbarkeit und Skalierbarkeit von Softwareanwendungen verbessert werden sollen. In einer Microservices-Architektur besteht die Anwendung aus kleinen unabhängigen Diensten, die über genau definierte APIs kommunizieren. Diese Dienste gehören zu kleinen, geschlossenen Teams.

In diesem Beitrag werde ich kurz die Herausforderungen erläutern, denen Sie bei der Einführung der Microservices-Architektur begegnen könnten, sowie die AWS-Services, die diese Probleme lösen.

Dieser Artikel soll Ihnen den Einstieg in den Amazon Elastic Container Service (Amazon ECS) von AWS erleichtern, wobei ich meine Erfahrungen mit der Bereitstellung vollständig skalierbarer und gut gestalteter Workloads erläutere.

Die Herausforderungen

Microservices-Architektur

Es gibt viele Konzepte hinter der Microservices-Architektur, aber die grundlegendsten sind:

  • Dezentralisierung - Architekturen sind verteilte Systeme mit dezentraler Datenverwaltung.
  • Unabhängigkeit - Ein Microservice kann individuell geändert, aktualisiert oder ersetzt werden. Dies sollte keine Auswirkungen auf andere Microservices haben.
  • Aufteilung - jeder Microservice konzentriert sich auf eine bestimmte Domäne. Wenn er zu komplex ist, sollte er in kleinere unterteilt werden.
  • Polyglott - Ein Microservice ist heterogen zu Betriebssystem, Programmiersprache oder Datenspeicher.
  • Black Box - ein Microservice verbirgt seine Komplexität vor anderen Microservices.

Sie bauen es, Sie führen es aus - nach den DevOps-Prinzipien ist das Team für den Aufbau, den Betrieb und die Wartung einzelner Services verantwortlich.

Alle oben genannten Eigenschaften von Microservices-Architekturen ermöglichen es, monolithische Einschränkungen mit Agilität und Skalierbarkeit in Frage zu stellen. Die Einführung von Microservices kann jedoch auch eine Herausforderung sein. Beispielsweise verursachen verteilte Systeme Probleme für Anfänger, die nicht an Latenz, Bandbreite, Zuverlässigkeit, Störungen, Serviceerkennung und Versionierung gedacht haben. Wie können Sie sicher sein, dass Service A mit der neuesten Version von Service B interagiert, da die Microservices-Architektur aus vielen Diensten besteht?

Es gibt viele andere Herausforderungen, denen Sie während der Einführung von Microservices begegnen können. In den folgenden Abschnitten dieses Artikels werde ich erläutern, wie AWS diese Herausforderungen durch das Angebot des von Amazon ECS verwalteten Dienstes angeht.

Was ist der Amazon Elastic Container Service?

Amazon ECS ist ein vollständig verwalteter Container-Orchestrierungsdienst. Es handelt sich um einen sicheren, skalierbaren, zuverlässigen und kostenoptimierten Dienst, der in viele andere AWS-Dienste wie Amazon Routes 53, AWS Identity and Access Management oder Secrets Manager integriert werden kann. Mit Amazon ECS können Docker-Container, in denen Anwendungen, Dienste und Stapelverarbeitungsprozesse ausgeführt werden, einfach bereitgestellt, verwaltet und skaliert werden. Darüber hinaus können Ihre ECS-Dienste auf einer serverlosen Infrastruktur (Fargate-Starttyp) oder auf virtuellen Maschinen (EC2-Starttyp) gehostet werden.

Wie funktioniert Amazon Elastic Cloud Compute?

Um Anwendungen auf Amazon ECS bereitzustellen, müssen Anwendungskomponenten so konzipiert und implementiert werden, dass sie in Containern ausgeführt werden können. Ein Docker-Container ist eine standardisierte Einheit der Softwareentwicklung. Um mehr über Docker zu erfahren, klicken Sie hier. Container-Images werden dann in einer Registrierung gespeichert, von der sie heruntergeladen und auf Amazon ECS ausgeführt werden können. Um die Struktur von Amazon ECS vollständig zu verstehen, ist es wichtig zunächst einige Definitionen zu erklären.

 

  1. Task Definition – dies ist der wichtigste Teil von Amazon ECS. Es handelt sich um eine Textdatei im JSON-Format, die Ihre Anwendung beschreibt. Die Aufgabendefinition besteht aus einer Containerbeschreibung (bis zu zehn). Normalerweise bildet eine Aufgabendefinition eine einzelne Containerdefinition in der Microservices-Architektur. Es kann jedoch auch als Microservices-Einheit behandelt werden und anschließend weitere Behälter enthalten (aus denen einzelne Microservices bestehen).
  2. Tasks and Scheduling – Tasks sind eine Instanziierung von Aufgabendefinitionen. Wenn Sie die Prinzipien der objektorientierten Programmierung kennen, stellen Sie möglicherweise bestimmte Ähnlichkeiten fest. Der Amazon ECS-Scheduler ist dafür verantwortlich, Aufgaben in Amazon ECS genau im ECS-Cluster zu platzieren. (Ich beschreibe den ECS-Cluster weiter unten ausführlicher).
  3. Service – mit Amazon ECS können Sie eine bestimmte Anzahl von Aufgaben (Aufgabendefinitionsinstanzen) gleichzeitig im Cluster ausführen und verwalten. Dies ist der Amazon ECS-Dienst. Wenn eine Aufgabe fehlschlägt, startet der Service Scheduler eine neue Instanz Ihrer Aufgabendefinition und ersetzt die fehlgeschlagene. Der Service verwaltet eine gewünschte Anzahl von Aufgaben basierend auf der gewählten Planungsstrategie.
  4. Cluster – dies ist die logische Gruppierung von Ressourcen, auf denen die Aufgaben ausgeführt werden. Wenn Sie den Fargate-Starttyp auswählen, werden alle Ressourcen von Amazon ECS verwaltet. Wenn Ihr Starttyp jedoch EC2 ist, muss der Cluster eine Gruppe von Containerinstanzen verwalten.
  5. Container Agent – im EC2-Starttyp wird es auf jeder Infrastrukturressource innerhalb des ECS-Clusters ausgeführt. Der Container-Agent ist eine Art Proxy zwischen Aufgaben, die sich in der EC2-Ressource befinden, und Amazon ECS. Es startet und stoppt Aufgaben, wenn es eine Anfrage von Amazon ECS erhält.
  6. Elastic Container Registry – dies ist eine AWS-Registrierung für Docker-Container.

Zusätzlich ist es möglich den Application Load Balancer zu verwenden, um den ECS-Dienst auszuführen, hinter dem der Datenverkehr auf die mit dem Dienst verbundenen Aufgaben verteilt wird. Das folgende Diagramm zeigt, wie Amazon ECS Komponenten zwischen der Docker-Registrierung, dem Programmierer und dem Endbenutzer funktioniert.

Einfache Microservices-Architektur unter AWS

Nehmen wir an, Sie stehen vor einer ernsthaften Herausforderung beim Entwurf von Microservices-Architekturen für eine Ihrer Workloads. Sie werden gebeten einen Workload für einen Online-Shop zu planen und zu entwerfen, welcher abhängig von der Datenlast zuverlässig, sicher und skalierbar sein muss.

Zuerst müssen Sie herausfinden wie die aktuelle Architektur der Anwendung aussieht. Angenommen, Sie haben es geschafft Ihre Anwendung erfolgreich in domänengesteuerte Microservices zu entkoppeln, dann setzen wir Amazon ECS ein. Wir haben einige Docker-Container, aus denen die Anwendung besteht. Einige von ihnen sind anfälliger für Latenz. Konzentrieren wir uns also eine Weile auf sie. Da es sich um ein verteiltes System handelt, müssen wir sicherstellen, dass Amazon ECS automatisch reagiert, wenn ein Bandbreitenspitzenwert auftritt oder einer unserer Microservices ausfällt, um den Zustand und die Zuverlässigkeit der Anwendungen ohne Verzögerungen zu gewährleisten.

  1. Wir sollten den Application Load Balancer in den Vordergrund stellen. Dieser Teil unserer IT-Architektur funktioniert sofort, um den Datenverkehr gleichmäßig zu verteilen. Das Einzige, woran wir denken müssen, ist das Routing. Die häufigste Art des Routings ist pfadbasiert. Sie leitet den Datenverkehr basierend auf dem empfangenen API-Pfad an den richtigen Mikrodienst weiter.
  2. Der Application Load Balancer leitet den Datenverkehr an die Zielgruppen weiter. In unserem Fall handelt es sich um eine Auto Scaling-Gruppe (Gruppe von EC2-Ressourcen, auf denen sich Container Agenten befinden). Die Gruppe "Automatische Skalierung" kann unsere Herausforderung bei Bandbreitenspitzen bewältigen, indem sie nach Bedarf nach oben und unten skaliert.
  3. Zu diesem Zeitpunkt ist die Infrastruktur aufgebaut und wir sind bereit, den Amazon ECS-Dienst zu entwerfen. Wir erstellen eine Aufgabendefinition unter Verwendung der URL unseres Docker-Containers. Der Klebstoff zwischen dem Application Load Balancer und der Aufgabendefinition ist der Service. Jeder Dienst ist einer Zielgruppe zugeordnet. Dies vereinfacht den Ablauf unter dem Application Load Balancer und dem Task.
  4. Unsere Architektur löst die Herausforderung der Kaskadenfehler auf zwei Arten. Zunächst prüft Amazon ECS, ob die Tasks ausgeführt werden. Andernfalls wird ein fehlgeschlagener Task durch eine neue Instanz ersetzt, um die gewünschte Anzahl von Tasks innerhalb des Dienstes zu erfüllen. Zweitens werden auf Infrastrukturebene Zielgruppen-Integritätsprüfungen auf dem bereitgestellten Microservice-Pfad durchgeführt.

     

     

  5. Immer wenn eine neue Version der Aufgabendefinition angezeigt wird, wird die Version der Aufgabendefinition aktualisiert, alle ausgeführten Aufgaben werden reduziert und neue Instanzen werden, basierend auf der neuesten Version, bereitgestellt. Dies ist ein fortlaufender Update-Bereitstellungstyp. Eine andere Art der Bereitstellung, welche die ECS-Aufgabe bietet, ist blau / grün.

Zusammenfassung

Zusammenfassend lässt sich sagen, dass Sie mit Amazon ECS die Microservices-Architektur schnell ausführen, warten und skalieren können. Die meisten Herausforderungen bei der Einführung der Microservices-Architektur werden durch ECS-Orchestrierung gelöst. Mit Amazon ECS können Sie Ihre Microservices-Workloads einfach und kostengünstig erstellen (sowohl in Bezug auf CAPEX als auch in Bezug auf OPEX). Amazon ECS bietet auch Flexibilität in Bezug auf die Infrastruktur. Je nach Art der Arbeitslast kann zwischen serverlosem Fargate oder EC2 gewählt werden.

1394 DE Resources Thumbs

Was Sie noch interesieren könnte

Kontakt

Starten Sie Ihr Projekt mit Objectivity

CTA Pattern - Contact - Middle