Ein Service Mesh ist eine dedizierte, konfigurierbare Infrastruktur-Schicht mit niedriger Latenz, die darauf ausgelegt ist, große Mengen netzwerkbasierter Kommunikation zwischen den verschiedenen Teilen beziehungsweise Services einer App zu ermöglichen und zu verwalten. Der Begriff dient als Sammelbezeichnung für Produkte, die Probleme und Herausforderungen der Service-Architektur lösen. Dazu gehören Herausforderungen in den Bereichen Sicherheit, Anwendungstelemetrie und Netzwerkverkehrskontrolle.
Ein Service Mesh besteht aus Netzwerk-Proxys, die jeweils mit den Anwendungsservices sowie mit bestimmten Prozessen zur Aufgabenverwaltung gekoppelt sind. Diese Proxys werden gemeinsam als Data Plane bezeichnet. Ihre Aufgabe besteht darin, Aufrufe zwischen verschiedenen Services abzufangen und zu verarbeiten. Die Verwaltungsprozesse werden hingegen auch als Control Plane bezeichnet. Sie gilt als das Gehirn des Service Mesh und koordiniert das Verhalten der Proxys. Die Control Plane stellt außerdem Anwendungsprogrammierschnittstellen (APIs) bereit, mit denen das Betriebs- und Wartungspersonal das gesamte Netzwerk steuert und überwacht.
Im Gegensatz zu anderen Systemen, die die Kommunikation und den Datenaustausch zwischen verschiedenen Anwendungsservices verwalten, ist ein Service Mesh direkt in die App integriert. Es kann dokumentieren, wie die App-Services miteinander interagieren – einschließlich der Qualität dieser Interaktionen –, sodass sich diese Kommunikation leichter optimieren lässt. Und wenn die Kommunikation optimiert ist, kann eine App beim Wachstum Ausfallzeiten leichter vermeiden.
Zu den gängigen Funktionen eines Service Mesh gehören Load-Balancing, Service Discovery, Fehlerbehebung und Verschlüsselung. Es kann die Kommunikation zwischen Services sicher, schnell und zuverlässig machen.
Wie funktioniert ein Service Mesh?
Ein Service Mesh führt keine neuen Funktionen in die Laufzeitumgebung einer Anwendung ein. Schließlich benötigen Apps schon immer Regeln, die festlegen, wie eine Anfrage von Punkt A nach Punkt B gelangt. Stattdessen löst ein Service Mesh die Logik, die die Kommunikation zwischen Services steuert, aus den einzelnen Services heraus und abstrahiert sie in eine Infrastruktur-Schicht. Daher ist ein Service Mesh als Sammlung von Netzwerk-Proxys in eine Anwendung integriert.
In einem Service Mesh werden Anfragen über Proxys in der Infrastruktur-Schicht zwischen den Services weitergeleitet. Die einzelnen Proxys eines Service Mesh laufen daher neben jedem Service und nicht innerhalb der Services. Deshalb werden sie Sidecars genannt.
Außerdem lesenswert: Microservices im Netzwerk produktiv einsetzen
Vorteile eines Service Mesh
Ein Service Mesh löst Probleme, die mit der Verwaltung der Kommunikation zwischen Services verbunden sind. Konkret:
- Es vereinfacht die Kommunikation zwischen Services sowohl bei der Entwicklung von Microservices als auch von Containern.
- Es erleichtert die Diagnose von Kommunikationsfehlern, da diese in der Infrastruktur-Schicht der Services auftreten.
- Es ermöglicht eine schnellere Entwicklung von Anwendungen sowie schnelleres Testen und Bereitstellen.
- Es unterstützt Sicherheitsfunktionen wie Authentifizierung, Autorisierung und Verschlüsselung.
- Proxy-Instanzen, auch Sidecars genannt, die neben Container-Clustern platziert werden, sind bei der Verwaltung von Netzwerkservices effektiv.
Zu den wichtigsten Funktionen eines Service Mesh gehören:
- Sicherheit. Ein Service Mesh kann die Kommunikation automatisch verschlüsseln und Sicherheitsrichtlinien wie Autorisierung und Authentifizierung vom Netzwerk an die App und alle Microservices verteilen. Die zentrale Verwaltung dieser Sicherheitsrichtlinien über die Control Plane und Sidecar-Proxys hilft dabei, mit den zunehmend komplexen Verbindungen zwischen und innerhalb verteilter Anwendungen Schritt zu halten.
- Beobachtbarkeit. Ein Service-Mesh-Framework bietet Einblicke in den Zustand und das Verhalten jedes Services. Die Control Plane sammelt und aggregiert Telemetriedaten aus Interaktionen zwischen Komponenten, um den Zustand eines Services zu bewerten – einschließlich Latenz und Datenverkehr, Zugriffsprotokollen und verteilter Ablaufverfolgung.
- Zuverlässigkeit.Die Verwaltung der Kommunikation über Sidecar-Proxys verbessert die Effizienz und Zuverlässigkeit bestimmter Richtlinien, Konfigurationen und Anfragen. Auch die Fehlerinjektion und das Load-Balancing gehören zu den spezifischen Funktionen.
Service Mesh: Herausforderungen und Nachteile
Ein Service Mesh bringt jedoch auch eigene Herausforderungen und Nachteile mit sich. Dazu gehören:
- Höhere Anzahl von Laufzeitinstanzen.
- Es befasst sich nicht mit der Integration in andere Systeme, dem Routing-Typ, der Transformationszuordnung und den Services.
- Jeder Service-Aufruf muss zunächst den Proxy durchlaufen, was einen zusätzlichen Schritt bedeutet.
- Die Komplexität der Netzwerkverwaltung wird zentralisiert und abstrahiert, muss aber von jemandem in die Workflows integriert werden.
Ohne ein Service Mesh müssten Entwickler jeden Microservice einer App mit Logik zur Steuerung und Verwaltung der Kommunikation zwischen Services programmieren. Dadurch könnten sie sich weniger auf ihre Geschäftsziele und das große Ganze konzentrieren. Außerdem wären Kommunikationsausfälle und -fehler deutlich schwieriger zu diagnostizieren und zu beheben, da die Logik, die diese Kommunikation zwischen Services steuert, in jedem Teil der App verborgen ist.