zur Übersicht

Service Mesh - Teil 2

Lesedauer ca. 4 Minuten
26.09.2024

In unserem letzten Beitrag haben unsere Xperten die Herausforderungen von Microservice-Architekturen beleuchtet. Dabei stand im Fokus, wie ein Service Mesh diese bewältigen kann. Wir haben die Grundlagen dieser Infrastrukturschicht erläutert und die gängigsten Implementierungen vorgestellt. Nun möchten wir einen genaueren Blick auf die Features und Herausforderungen dieser Technologie werfen.

Die Features von Service Mesh

Monitoring
Monitoring in einem Service Mesh ermöglicht die umfassende Überwachung der Kommunikation zwischen Microservices. Das Ganze geschieht ohne Modifikationen am Anwendungscode oder an der Konfiguration der einzelnen Services. Um einen klaren Überblick über die Systemleistung zu gewährleisten, erfasst und analysiert das Monitoring-System wichtige Metriken wie Fehlerraten, Latenzzeiten und Anfragen pro Sekunde.

Beispiel: Mit einem Service Mesh wie bspw. Istio können alle Netzwerk-Metriken durch Sidecar-Proxys erfasst werden, die an jeder Microservice-Instanz angebracht sind. Diese Proxys sammeln Daten wie HTTP-Statuscodes, Antwortzeiten und die Rate der eingehenden und ausgehenden Anfragen. Diese Informationen werden anschließend an die Control Plane gesendet und von einer Prometheus-Instanz abgefragt. Das Dashboard von Kiali, das auf diesen Metriken basiert, visualisiert die Leistung des gesamten Microservice-Systems. Wenn bspw. ein Service eine ungewöhnlich hohe Fehlerrate aufweist, kann dies sofort im Dashboard erkannt werden, und das Entwicklungsteam kann gezielt Maßnahmen ergreifen, um das Problem zu beheben.

Resilienz
Resilienz in einem Service Mesh bezieht sich auf die Fähigkeit des Systems, sich von Fehlern zu erholen und die Verfügbarkeit der Dienste auch bei Problemen aufrechtzuerhalten. Zu den Mechanismen, die zur Verbesserung der Resilienz beitragen, gehören Circuit Breaking, Retry-Mechanismen und Timeouts.

Beispiel: Ein Microservice ist in einem System aufgrund eines externen Dienstes, auf den er angewiesen ist, vorübergehend nicht erreichbar. Ein Service Mesh kann automatisch Circuit Breaker einsetzen, um zu verhindern, dass Anfragen an diesen fehlerhaften Dienst weitergeleitet werden. Der Circuit Breaker erkennt den Ausfall und unterbricht die Verbindung, sodass der Microservice nicht weiterhin gescheiterte Anfragen sendet. Parallel dazu können Retry-Mechanismen konfiguriert werden, um fehlgeschlagene Anfragen automatisch erneut zu senden, sobald der Dienst wieder verfügbar ist. Das erhöht die Gesamtstabilität des Systems und minimiert die Auswirkungen von temporären Störungen.

Routing
Routing in einem Service Mesh ermöglicht die feingranulare Steuerung des Datenverkehrs zwischen den Microservices. Das geschieht auf verschiedene Arten, einschließlich Lastverteilung, Canary Releases und A/B-Tests, um sicherzustellen, dass der Datenverkehr effizient und zielgerichtet verteilt wird.

Beispiel: Ein Unternehmen führt eine neue Version eines Microservices ein und möchte diese schrittweise an eine kleine Gruppe von Usern ausrollen, um mögliche Fehler frühzeitig zu erkennen. Mit dem Service Mesh kann das Routing so konfiguriert werden, dass nur ein bestimmter Prozentsatz des gesamten Verkehrs an die neue Version des Microservices geleitet wird. Das kann z. B. durch Istio’s Traffic-Management-Funktionen erfolgen, bei denen spezifische Routing-Regeln definiert werden, die den Datenverkehr basierend auf User-Attributen oder Anfragetypen steuern. Läuft die neue Version stabil, kann der Datenverkehr schrittweise erhöht werden, bis schließlich 100 % des Verkehrs die neue Version nutzen.


Verwendung_von_Service_Mesh_2 Routing-Konfiguration fürs Ausrollen einer neuen Softwareversion (Quelle: Istio)


Sicherheit
Sicherheit ist ein entscheidendes Feature eines Service Mesh. Es umfasst verschiedene Funktionen wie Verschlüsselung, Authentifizierung und Autorisierung, um die Kommunikation zwischen den Microservices zu sichern und potenzielle Sicherheitsrisiken zu minimieren.

Beispiel: In einer hochsicheren Umgebung verwendet ein Unternehmen das Service Mesh Istio, um die Kommunikation zwischen seinen Microservices zu verschlüsseln. Istio ermöglicht die Verschlüsselung des Datenverkehrs durch mTLS (mutual TLS), wodurch sichergestellt wird, dass nur autorisierte Services miteinander kommunizieren können. Jeder Service erhält ein digitales Zertifikat, und alle Daten, die zwischen den Services ausgetauscht werden, werden verschlüsselt. Zusätzlich kann Istio Richtlinien zur Authentifizierung und Autorisierung durchsetzen, um sicherzustellen, dass nur berechtigte User oder Dienste auf bestimmte Ressourcen zugreifen können. Das schützt sensible Daten und hilft, Sicherheitsvorfälle zu verhindern.

Nachteile eines Service Mesh

Bei der Begeisterung für Innovationen wie Service Mesh wird oft übersehen, dass damit auch Kosten verbunden sind, die nicht zu unterschätzen sind. Zu den wesentlichen Herausforderungen gehören der Lernaufwand, die erhöhte Latenz und der zusätzliche Ressourcenverbrauch.

Hohe Lernkurve

Ein Service Mesh stellt einen erheblichen Eingriff in die Microservices-Architektur dar. Auch wenn die meisten Implementierungen versuchen, diesen Eingriff möglichst unsichtbar zu halten, müssen Entwickelnde die Funktionsweise und das Zusammenspiel der Service Proxys genau verstehen. Der Lernaufwand variiert je nach Service-Mesh-Implementierung, abhängig von der API-Qualität, der Dokumentation und den verfügbaren Tools.

Latenz & Ressourcen

Die Einführung zusätzlicher Anwendungen für die Control Plane und die Data Plane erhöht den Ressourcenverbrauch. Auch wenn die dadurch entstehende Latenz in der Regel nur wenige Millisekunden beträgt, kann sie bei langen Ketten von Services spürbar werden. Daher ist es ratsam, in der eigenen Umgebung Benchmarks durchzuführen, um die Auswirkungen auf Latenz und Ressourcenverbrauch zu messen und verschiedene Service-Mesh-Implementierungen vergleichen zu können.

Fazit

Der Hype um Service Mesh ist angesichts der umfangreichen Funktionen wie Monitoring, Routing, Resilienz und Sicherheit gut verständlich. Ein Service Mesh bringt gezielt die notwendige Intelligenz in die Netzwerkkommunikation, ohne die Microservices-Architektur unnötig zu verkomplizieren oder schwer wartbar zu machen. Für Unternehmen, die Microservices einführen, kann ein Service Mesh den Implementierungsaufwand erheblich senken. Auch bestehende Microservice-Systeme können von einem Service Mesh profitieren, sofern das Team die zusätzliche Komplexität bewältigen kann und ausreichend technische Ressourcen vorhanden sind.

Die Zukunft von Service Mesh wird von der steigenden Nachfrage nach Microservices-Architekturen und der Notwendigkeit einer besseren Verwaltung dieser verteilten Anwendungen vorangetrieben. Auch wenn Service-Mesh-Technologien sich immer noch in der Entwicklung befinden, ist zu erwarten, dass diese in den kommenden Jahren stetig an Reife und Leistungsfähigkeit gewinnen werden.


Quellen

www.istio.io
www.smi-spec.io
www.redhat.com