Service Mesh-Kommunikationsinfrastruktur
Tipp
Diese Inhalte sind ein Auszug aus dem E-Book „Architecting Cloud Native .NET Applications for Azure“, verfügbar in der .NET-Dokumentation oder als kostenlos herunterladbare PDF-Datei, die offline gelesen werden kann.
In diesem Kapitel haben wir uns mit den Herausforderungen der Microservice-Kommunikation beschäftigt. Wir haben gesagt, dass die Entwicklungsteams vertraulich damit umgehen müssen, wie Back-End-Dienste miteinander kommunizieren. Im Idealfall heißt das: je weniger Kommunikation zwischen Diensten, desto besser. Dies lässt sich jedoch nicht stets vermeiden, da Back-End-Dienste oft voneinander abhängig sind, um Vorgänge abzuschließen.
Wir haben verschiedene Ansätze für die Implementierung synchroner HTTP-Kommunikation und asynchronem Messaging untersucht. In jedem dieser Fälle ist der Entwickler mit der Implementierung von Kommunikationscode gefordert. Kommunikationscode ist komplex und zeitintensiv. Falsche Entscheidungen können zu erheblichen Leistungsproblemen führen.
Ein modernerer Ansatz für die Kommunikation von Microservices basiert auf einer neuen und sich schnell entwickelnden Technologie namens Service Mesh. Ein Service Mesh ist eine konfigurierbare Infrastrukturebene mit integrierten Funktionen zur Handhabung von Dienst-zu-Dienst-Kommunikation, Resilienz und vielen übergreifenden Belangen. Es verlagert die Verantwortung für diese Belange vom Microservice in die Service Mesh-Ebene. Die Kommunikation wird von Ihren Microservices abstrahiert.
Eine Service Mesh-Schlüsselkomponente ist ein Proxy. In einer cloudnativen Anwendung wird in der Regel für jeden Microservice eine Instanz eines Proxys bereitgestellt. Obwohl sie in getrennten Prozessen ausgeführt werden, sind beide eng miteinander verbunden und haben den gleichen Lebenszyklus. Dieses Muster, das als Sidecar-Muster bekannt ist, wird in Abbildung 4-24 gezeigt.
Abbildung 4-24. Service Mesh mit einem Sidecar
Beachten Sie in der vorherigen Abbildung, wie Nachrichten von einem Proxy abgefangen werden, der neben den einzelnen Microservices ausgeführt wird. Jeder Proxy kann mit spezifischen Datenverkehrsregeln für den jeweiligen Microservice konfiguriert werden. Der Proxy erkennt Nachrichten und kann sie zwischen Ihren Diensten und der Außenwelt weiterleiten.
Das Service Mesh verwaltet nicht nur die Kommunikation zwischen den Diensten, sondern unterstützt auch die Ermittlung von Diensten und den Lastausgleich.
Nach der Konfiguration ist ein Service Mesh äußerst leistungsfähig. Das Mesh ruft einen entsprechenden Pool von Instanzen von einem Dienstermittlungsendpunkt ab. Es sendet eine Anforderung an eine bestimmte Dienstinstanz und zeichnet die Wartezeit und den Antworttyp des Ergebnisses auf. Es wählt die Instanz aus, die am wahrscheinlichsten eine schnelle Antwort liefert, basierend auf verschiedenen Faktoren, einschließlich der beobachteten Wartezeit für die letzten Anforderungen.
Ein Service Mesh verwaltet den Datenverkehr, die Kommunikation und die Netzwerkbelange auf der Ebene der Anwendung. Es versteht Nachrichten und Anforderungen. Ein Service Mesh ist in der Regel mit einem Containerorchestrator integriert. Kubernetes unterstützt eine erweiterbare Architektur, in der ein Service Mesh hinzugefügt werden kann.
In Kapitel 6 befassen wir uns eingehend mit Service Mesh-Technologien, einschließlich einer Diskussion über die Architektur und verfügbare Open-Source-Implementierungen.
Zusammenfassung
In diesem Kapitel haben wir cloudnative Kommunikationsmuster besprochen. Wir haben uns zunächst angesehen, wie Front-End-Clients mit Back-End-Microservices kommunizieren. Dabei haben wir über API-Gatewayplattformen und Echtzeitkommunikation gesprochen. Anschließend haben wir uns angesehen, wie Microservices mit anderen Back-End-Diensten kommunizieren. Wir haben sowohl synchrone HTTP-Kommunikation als auch asynchrones Messaging über Dienste hinweg betrachtet. Wir haben über gRPC berichtet, eine aufkommende Technologie in der cloudnativen Welt. Schließlich haben wir eine neue und sich schnell entwickelnde Technologie mit dem Titel „Service Mesh“ eingeführt, die die Mikroservice-Kommunikation optimieren kann.
Besonderer Schwerpunkt lag auf verwalteten Azure-Diensten, die bei der Implementierung der Kommunikation in cloudnativen Systemen helfen können:
- Azure Application Gateway
- Azure API Management
- Azure SignalR Service
- Azure Storage-Warteschlangen
- Azure Service Bus
- Azure Event Grid
- Azure Event Hub
Als nächstes befassen wir uns mit verteilten Daten in cloudnativen Systemen und den Vorteilen und Herausforderungen, die sich daraus ergeben.