Die Neudefinition der Anwendungskommunikation

AWS App Mesh: Der Service Mesh von Amazon

AWS App Mesh: Der Service Mesh von Amazon

Die Neudefinition der Anwendungskommunikation

AWS App Mesh: Der Service Mesh von Amazon


Die Kommunikation zwischen Anwendungen findet heutzutage im Bruchteil einer Sekunde statt und mit dem Aufkommen von Microservices werden die Informationsströme, die Anwendungen ablaufen, immer unübersichtlicher. Ein Service Mesh hilft dabei, die Übersicht zu behalten. Neben Istio und Linkerd gibt es ein solches auch von Amazon: AWS App Mesh. Amazon CTO Werner Vogels stellt in diesem Artikel das neue Service Mesh vor.

Bei AWS App Mesh handelt es sich um ein Service Mesh, mit dem Entwickler die Kommunikation zwischen Anwendungen einfach überwachen und steuern können. Ihm liegen folgende Überlegungen zugrunde: Viele Kunden modernisieren ihre bestehenden Anwendungen, um agiler und innovativer zu werden. Architekturmuster wie Microservices ermöglichen es Teams, Dienste unabhängig zu testen und kontinuierlich Änderungen an Anwendungen vorzunehmen. Ein solcher Ansatz erhöht die Teamproduktivität, da die Entwicklergruppen schneller experimentieren und iterieren können. Darüber hinaus ist es für die Teams einfacher möglich, die Erstellung aus Ausführung von Anwendungen zu skalieren.

Entwickler, die neue Dienste gestalten, die alle als Anwendung zusammenarbeiten müssen, benötigen die Möglichkeit, die Kommunikation über die gesamte Anwendung hinweg zu verbinden, zu überwachen, zu steuern und zu debuggen. Beispiele dafür sind die Diensterkennung, Metriken und Protokolle auf Anwendungsebene, Traces beim Debugging von Verkehrsmustern, Traffic Shaping und die Möglichkeit, die Kommunikation zwischen Diensten abzusichern.


Oft besteht die Herausforderung darin, dass die eigentliche Logik zur Verwaltung der Kommunikation in SDKs implementiert werden und jedes Team diese Logik nutzen muss.
Mit dem Wachstum einer Anwendung und größer werdenden Teams wird die Bereitstellung dieser Funktionen über alle Services hinweg jedoch komplex und zeitaufwändig.

Das Ziel von AWS ist es, die Kommunikationsinfrastruktur, die jeder modernen Anwendung zugrunde liegt, zu automatisieren und zu abstrahieren. Damit können sich die Teams auf den Aufbau der Geschäftslogik und schnellere Innovationen konzentrieren.

Das Netzwerk neu definieren

Wenn Entwickler neue Dienste für ihre Anwendung einrichten müssen, gehört zu ihren ersten Aufgaben die Einrichtung eines Netzwerkes in Form einer Virtual Private Cloud (VPC). Schließlich laufen die meisten Prozesse im Rahmen des VPC ab. AWS möchte, dass sich Developer keine Sorgen mehr um die Verwaltung der Netzwerkinfrastruktur machen müssen, wenn sie Anwendungen in der Cloud ausführen. Diese Schritte sollten über das anwendungsorientierte Netzwerk von AWS abgewickelt werden können. Das AWS-Netzwerk automatisiert die Übersetzung der Eingaben der Kunden über die Anforderungen des Service in die Konfiguration, die von der Infrastruktur benötigt ist und verwaltet deren Lebenszyklus. App Mesh ist der erste Schritt auf diesem Weg.

Die App-Mesh-Vision

Wenn Entwickler mehrere Dienste betreiben, die von verschiedenen Teams verwaltet werden, liefert jedes Team idealerweise nur Input für die spezifischen Anforderungen des eigenen Dienstes. Die Beteiligten müssen dabei die Details der Infrastruktur, die einem solchen Dienst zugrunde liegt, nicht verstehen.

Für gewöhnlich kümmern sich Entwickler nicht darum, jedes Element ihrer Anwendung miteinander zu verbinden. Relevante Fragen sind eher: Mit welchen Endpunkten kann mein Service kommunizieren? Auf welche AWS Ressourcen ist der Zugriff möglich? Wie gehe ich mit Fehlern und Retries um? Wie verbinde unf teste ich meine neuen Service-Versionen bevor der vollständige Traffic auf die neue Version trifft? Welche Autorisierungen und Authentifizierungen sind notwendig, um eine Verbindung herzustellen oder Verbindungen akzeptieren? Das ist, was App Mesh versucht zu beantworten.

App Mesh bietet Entwicklern einen einfachen, deklarativen Ansatz für die Modellierung der Servicekommunikation. Entwickler können Regeln für die Service-zu-Service-Kommunikation definieren – alles weitere wird automatisch erledigt. Dadurch ist es möglich, App Mesh als einzigen Kontrollpunkt für die gesamte Kommunikation zwischen Diensten in der Anwendung zu verwenden.

App Mesh bietet konsistente Metriken, Protokolle und Traces und eine durchgängige Transparenz über eine Anwendung. Dadurch können Entwickler Probleme schnell identifizieren und debuggen. Die Lösung ermöglicht außerdem Traffic-Routing-Kontrollen, wodurch das Testen und Bereitstellen neuer Versionen von Diensten einfacher wird.

Die AWS-Vision für App Mesh ist ein AWS-natives Service Mesh, das sich ebenso gut in AWS-Basisdienste und Dienste mit höherer Abstraktion integriert. Dazu gehören Networking-Primitive und erweiterte Dienste wie AWS Cloud Map, Compute-Primitive wie Amazon EC2 und AWS Fargate sowie Orchestrierungswerkzeuge wie AWS EKS, Amazon ECS und kundenverwaltete Kubernetes auf EC2. Mit der nativen Integration von App Mesh in AWS Cloud Map erhält jeder Service im Service Mesh eine Map zu jeder anderen AWS Ressource innerhalb eines AWS-Kontos.

Wie funktioniert App Mesh heute?

App Mesh läuft parallel zu jedem bereitgestellten Mikroservice, verwaltet die Kommunikation und bildet ein Service Mesh für die gesamte Anwendung. App Mesh bietet damit eine von AWS verwaltete Steuerungsebene, mit der IT-Verantwortliche Ihre Dienste modellieren können. Außerdem ist eine deklarative Konfiguration zur Identifizierung von Service-Instanzen und den für jeden Dienst erforderlichen Richtlinien möglich.

App Mesh arbeitet mit einem Open-Source-basierten und leistungsstarken Netzwerk-Proxy namens Envoy, der als Sidecar mit den Anwendungen läuft. Er gilt als der Standard-Proxy für die Verwaltung von Netzwerkverkehrsflüssen in verteilten Anwendungen. Der Hauptgrund, warum AWS auf Envoy setzt ist, weil viele der Kunden bereits Envoy verwenden, was die App Mesh-Integration extrem einfach macht. Wenn Kunden bereits ein Envoy-basiertes Service Mesh laufen haben, erfordert die Übernahme von App Mesh nur einige wenige Schritte.

Über die App-Mesh-Konsole, APIs oder das AWS SDK lässt sich das Service Mesh konfigurieren und der Datenverkehr zwischen den Diensten steuern. Anschließend muss Envoy in die EC2-Instanz, einen ECS- oder Fargate-Task oder eine Amazon EKS- oder Kubernetes-Pod-Definition eingefügt werden. Das gilt für jeden bereitgestellten Dienst.

App Mesh berechnet und verteilt die erforderliche Konfiguration an Proxies, die neben jedem Dienst bereitgestellt werden. Diese Kalkulation basiert auf den Richtlinien, die beim Provider-Service festgelegt wurden. Das Data Plane von App Mesh wird durch eine Menge an Proxies gebildet, die von dem App Mesh Control Plane konfiguriert wird, um den gesamten eingehenden und ausgehenden Datenverkehr für den Service zu verarbeiten.

Mit App Mesh lassen sich Servicemetriken wie Latenzen, Fehlerraten, Fehlercodes, Service-Kommunikations-Traces und Logs auf Service-Ebene einfach exportieren. Auf diese Weise ist es möglich, Metriken an mehrere AWS- und Drittanbieter-Tools zu senden. Dazu gehören auch Amazon CloudWatch, AWS X-Ray und alle Überwachungs- und Tracing-Tools von Drittanbietern, die mit Envoy integriert werden können.

Außerdem ist es durch App Mesh möglich, den Datenverkehr zwischen den Diensten auf gewichtete Weise weiterzuleiten. Das macht es einfach, Services sicher und konsistent bereitzustellen. In Zukunft sind Entwickler in der Lage, neue Traffic-Routing-Funktionen wie Wiederholungsversuche, Timeouts, Circuit Breaking und die serverseitige Begrenzung der Übertragungsrate einheitlich zu konfigurieren.

Wie ist App Mesh aufgebaut?

App Mesh konzentriert sich auf die Bereitstellung eines hochskalierbaren und robusten Servicenetzes, das jede Kundenauslastung unterstützt, von zehn bis zu hundert verschiedenen Diensten. AWS hat App Mesh nach den gleichen hohen Standards für Betriebsverfügbarkeit, Skalierbarkeit und Sicherheit entwickelt, die auch die Grundlage für alle übrigen AWS-Dienste sind.

Das Ziel von AWS ist es, die Lastprobleme beim Betrieb von komplexen Anwendungen zu beseitigen. AWS bietet Werkzeuge, Services und Monitoring-Möglichkeiten, um sicherzustellen, dass AWS-Kunden höchste Standards für ihre Architekturen erreichen können.

App Mesh unterstützt Dienste, die auf EKS, ECS, Fargate, EC2 und Kubernetes auf EC2 laufen. Einige Kunden betreiben ihre Anwendungen bereits auf verwalteten Plattformen innerhalb von AWS. AWS bietet Werkzeuge, Services und Monitoring-Möglichkeiten, um sicherzustellen, dass AWS-Kunden höchste Standards für ihre Architekturen erreichen können.

App Mesh ermöglicht es Entwicklern, das Mesh Dienste-übergreifend in verschiedenen Compute-Umgebungen auszuführen. Also mit einem Migrationspfad, der es ermöglicht, die Compute-Ressourcen nach eigenen Vorstellungen zu nutzen. App Mesh bietet dafür konsistente Monitoring- und Routingkontrollen in verschiedenen Compute-Umgebungen. Damit ist das Ziel, dass jede mit dem Netzwerk verbundene Anwendung zu einem Teilnehmer an der Mesh-Datenebene wird, einfacher erreichbar.

Sobald Anwendungen über das Service-Netz kommunizieren, ist das nächste Ziel, klare Verantwortlichkeiten und die kontrollierte Veränderung der Service-Ressourcen zu gewährleisten. Die App Mesh APIs sind so konzipiert, dass sie die Eigentumsgrenzen für Dienste sowie die Netzwerkkomponenten zu deren Implementierung festlegen. Sowohl für kleine Teams, die das vollständige Mesh betreiben als auch für große Unternehmen mit vielen verschiedenen Teams, bietet App Mesh sichere, transaktionale Änderungen auf Data-Plane-Ebene des Service Mesh.

So können beispielsweise Serviceeigentümer Traffic-Richtlinien für Anwendungen definieren, und App Mesh verteilt diese Richtlinien automatisch an die entsprechenden Verbraucher. Durch die Integration mit anderen AWS-Angeboten wie Amazon CloudWatch Logs, Amazon CloudWatch Metriken und AWS X-Ray bietet AWS die erforderlichen Beobachtungswerkzeuge, um den sicheren Einsatz und Betrieb von Mesh-Anwendungen zu ermöglichen.

Erste Schritte mit App Mesh

Ab sofort können Entwickler App Mesh mit Services verwenden, die von ECS, EKS, Fargate und jeder Kubernetes-Bereitstellung auf AWS mit EC2 verwaltet werden. Dabei lässt sich das Angebot sogar mit Anwendungen einsetzen, die direkt auf EC2 laufen.

AWS sieht die generelle Verfügbarkeit von App Mesh erst als den Beginn und nicht als das Ende an. AWS möchte den Kunden die Möglichkeit bieten, zusammen zu entwickeln. Aus diesem Grund wird in naher Zukunft der AWS App Mesh Beta-Channel eröffnet. Dies ist ein neuer öffentlicher Service Endpoint, der es Kunden erlaubt, neue Features vor dem eigentlichen Launch zu testen und Feedback zurückzuliefern. Dieser Endpoint ist getrennt vom Standard-Produktionsendpoint und ist mit den Preview-Versionen der AWS CLI für App Mesh verbunden. Dadurch lassen sich die neuen Funktionen testen, ohne die aktuelle Produktionsinfrastruktur zu beeinträchtigen.

Weitere Informationen befinden sich auf der Seite von AWS App Mesh unter https://aws.amazon.com/app-mesh/.

Werner Vogels ist Chief Technology Officer (CTO) und Vizepräsident von Amazon.com. Werner bloggt unter https://www.allthingsdistributed.com.