Die Rolle von Service Meshes in der Microservices-Architektur
In einer Welt, in der Microservices das Rückgrat moderner Anwendungen bilden, stellt sich die Frage, wie diese zahlreichen, voneinander unabhängigen Dienste effizient miteinander kommunizieren können. Oftmals tauschen Microservices Daten direkt untereinander aus, was jedoch zu Ineffizienz und Anfälligkeit führen kann. Hier kommt das Konzept des Service Mesh ins Spiel, das eine Lösung für diese Herausforderungen bietet.
Was genau ist ein Service Mesh?
Ein Service Mesh ist eine Infrastrukturschicht, die die Kommunikation zwischen verschiedenen Microservices einer Anwendung steuert und optimiert. Im Kern handelt es sich um Software, die sich um die essentiellen Aspekte der Microservices-Kommunikation kümmert:
- Identifizierung der Anwendungen
- Verteilung der Last
- Authentifizierung der Dienste
- Verschlüsselung des Datenverkehrs
Durch die Einrichtung paralleler Verbindungen über Proxys entsteht ein flexibles Netzwerk, das Microservices miteinander verbindet. Dieses Netzwerk wird nahtlos in ein übergreifendes Data Center Management System integriert. Dies ermöglicht eine einfachere Optimierung der Kommunikation, ohne dass während der Weiterentwicklung der Anwendung Ausfallzeiten entstehen. In der Realität benötigt jeder Dienst in einer Anwendung eine Vielzahl anderer Dienste, um Benutzeranfragen zu bearbeiten.
Ein anschauliches Beispiel ist eine Online-Verkaufsanwendung. Bevor ein Benutzer einen Artikel kauft, muss die Anwendung die Verfügbarkeit des Artikels prüfen. Dies erfordert eine Kommunikation zwischen dem Dienst, der für die Datenbank zuständig ist, und der Produktseite der Webseite. Zusätzlich muss die Produktseite mit dem Online-Warenkorb des Nutzers in Kontakt treten.
Zusätzlich kann ein Händler einen Produktempfehlungsdienst einsetzen, um Benutzern relevantere Produkte vorzuschlagen. Dieser Dienst muss nicht nur mit einer Datenbank von Produkt-Tags kommunizieren, sondern auch mit der Bestandsdatenbank, die ebenfalls für die Produktseite relevant ist. Hier sehen wir eine Reihe wiederverwendbarer Dienste, die zusammenarbeiten.
Moderne Anwendungen werden zunehmend als ein Netzwerk von Diensten konzipiert, von denen jeder eine bestimmte Geschäftsfunktion erfüllt.
Wie funktioniert ein Service Mesh und welche Vorteile bietet es?
Es ist wichtig zu betonen, dass ein Service Mesh keine zusätzlichen Funktionen zur bestehenden Arbeitsweise einer Anwendung hinzufügt. Ein Service Mesh besteht im Wesentlichen aus einer Gruppe von Netzwerk-Proxys, einem Konzept, das in der Unternehmens-IT gut etabliert ist.
Proxys werden häufig verwendet, wenn man mit einem Arbeitscomputer Webseiten aufruft. Im Kontext von Microservices helfen Proxys auf der Infrastrukturschicht beim Weiterleiten von Anfragen zwischen den Diensten. Deshalb werden diese Proxys auch als „Sidecar“ bezeichnet, da sie nicht innerhalb, sondern neben den Diensten selbst ausgeführt werden. Die „Sidecar“-Proxys der verschiedenen Dienste bilden ein Mesh-Netzwerk.
Ohne ein Service Mesh müsste jeder Microservice entsprechend der jeweiligen Kommunikationsstrategie der einzelnen Dienste programmiert werden. Da die Kommunikationslogik in jedem Dienst versteckt ist, haben Entwickler Schwierigkeiten, Geschäftsziele zu erreichen und komplexe Kommunikationsprobleme zu diagnostizieren. Ein Service Mesh löst genau diese Schwierigkeiten, indem es die Kommunikation zwischen Diensten auf einer eigenen Schicht verwaltet.
Ein Service Mesh ermöglicht die Automatisierung dieser Kommunikation, da benötigte Daten und Erkenntnisse in der ausgelagerten Infrastruktur des Mesh-Netzwerks leicht zugänglich sind. Dies erleichtert das Auffinden und Beheben von Problemen und Störungen. Darüber hinaus wird die IT des Unternehmens entlastet, so dass sie sich auf wertschöpfende Aufgaben konzentrieren kann.
Durch die Abstraktion der Kommunikation können ausgefallene Dienste automatisch umgangen werden, ohne den Datenaustausch funktionierender Teile der Anwendung zu beeinträchtigen. Die leicht zugänglichen Daten des Service-Mesh-Systems ermöglichen eine einfache Analyse und Optimierung der Betriebsleistung der Anwendung.
Nachdem wir die Funktionsweise von Service Mesh erläutert haben, betrachten wir nun einige der führenden Service-Mesh-Manager:
Übersicht einiger Service Mesh Manager
Im Folgenden werden einige populäre Service Mesh Manager vorgestellt, die in modernen Anwendungsarchitekturen eine Rolle spielen können.
Meshery
Meshery ist ein Service Mesh Manager, mit dem sich verschiedene Service Mesh Lösungen ausführen lassen. Er kann auf Kubernetes und Docker eingesetzt werden. Meshery bietet sowohl eine grafische Benutzeroberfläche (UI) als auch eine Kommandozeilen-Schnittstelle (CLI), um diverse Mesh-Service-Lösungen, einschließlich Linkerd und Istio, zu verwalten. Die Bereitstellung kann direkt auf dem Cluster oder lokal erfolgen.
Amazon App Mesh
AWS App Mesh ist ein Service Mesh, das für die Kubernetes-Plattform (EKS) von Amazon entwickelt wurde. Es ermöglicht die Verwaltung auf Anwendungsebene durch den Envoy Sidecar Proxy für ein- und ausgehenden Datenverkehr. Durch die Verwendung von Circuit Breaking und Beobachtbarkeitsmetriken mit AWS X-Ray, bietet AWS App Mesh eine umfassende Lösung. Es ist ebenfalls mit anderen Diensten wie Amazon EC2 und AWS Fargate kompatibel.
Linkerd
Linkerd ist ein Open-Source Service Mesh Manager, der einen maßgeschneiderten Proxy auf Basis von Rust verwendet, um Microservices zu verwalten. Linkerd wird mit einem vorinstallierten Grafana ausgeliefert, um Überwachungsmetriken bereitzustellen. Im Gegensatz zu anderen Open-Source Service Mesh Managern bietet Linkerd eine grafische Benutzeroberfläche und unterstützt nicht nur Prometheus, sondern auch Ingress Controller wie Traefik, Kong und Gloo. Zudem bietet Linkerd automatische Upgrade-Funktionen über Cluster hinweg.
Istio
Istio ist ein Open-Source Service Mesh, das den Envoy Proxy für die Verwaltung von Microservices nutzt. Istio bietet eine Vielzahl von Funktionen, wie Lastausgleich, Richtlinienerstellung, Traffic Routing, Timeouts, Circuit Breaking, Traffic Shifting und Wiederholungsversuche. Zusätzlich ermöglicht Istio die verteilte Ablaufverfolgung über Container oder Maschinen hinweg, ohne dass zusätzliche Software installiert werden muss.
Kuma
Kuma ist ein Service Mesh von Kong, der entwickelt wurde, um die Funktionen bestehender Dienste über den Envoy Proxy zu erweitern. Kuma unterstützt diverse Microservices und bietet verbesserte Sicherheits- und Überwachungsfunktionen für Netzwerke. Kuma enthält eine Reihe vorkonfigurierter Richtlinien für Routing, mTLS, Verkehrssteuerung und verschiedene Sicherheitsfunktionen. Mit Kuma lassen sich verschiedene isolierte Meshes zentral über eine einzige Steuerungs- und Datenebene verwalten.
Nginx Mesh
Nginx ist ein Service Mesh für Kubernetes, das den Datenverkehr zwischen Containern mithilfe der Datenebene von Nginx Plus verschlüsselt. Nginx verwendet Ratenbegrenzung und Circuit Breaker, um den Datenverkehr zwischen Diensten zu steuern, und bietet ein Grafana-Dashboard zur Beobachtung von Service Mesh Metriken.
Consul
Consul von HashiCorp ist ein Service Mesh, das eine integrierte Proxy-Schicht bietet und ebenfalls den Envoy Sidecar Proxy unterstützt. Consul bietet pfadbasiertes Routing, Traffic Shifting und Load Balancing. Es ist in HashiCorp Vault integriert und unterstützt auch mTLS. Zur Visualisierung von Überwachungsmetriken kann Consul in Prometheus und Grafana integriert werden.
Gloo Mesh
Gloo Mesh ist ein Service Mesh, das auf Istio aufbaut und den Envoy Proxy verwendet. Mit Gloo Mesh lässt sich ein Zero-Trust-Sicherheitsmodell implementieren. Gloo Mesh unterstützt Multi-Tenancy auf Kubernetes, virtuelle Maschinen und andere Microservices. Es ist sowohl CI/CD als auch GitOps-freundlich, was die Bereitstellung erheblich vereinfacht.
Fazit
Service Mesh ist eine entscheidende Technologie zur Bewältigung der Kommunikationsherausforderungen von Microservice-basierten Anwendungen und bietet gleichzeitig verschiedene Sicherheitsvorteile. Angesichts der Vielzahl von Service Mesh Lösungen auf dem Markt ist es wichtig, einen Manager auszuwählen, der Ihren spezifischen Anforderungen entspricht und gleichzeitig einfach zu verwalten ist.