Service-Mesh
Ein Service-Mesh ist eine dedizierte Infrastrukturebene, die Service-zu-Service-Kommunikation über ein Netzwerk steuert. Über ein Service-Mesh können separate Teile einer Anwendung miteinander kommunizieren. Deshalb kommen sie oft bei cloudbasierten Anwendungen, Containern und Microservices zum Einsatz.
Ein Service-Mesh kontrolliert das Verteilen von Serviceanfragen in einer Anwendung. Üblicherweise stellt ein Service-Mesh Diensterkennung, Load Balancing, Verschlüsselung und Wiederherstellung. Hochverfügbarkeit ist ebenfalls ein häufiges Einsatzgebiet, wobei diese durch Software über APIs sichergestellt wird, statt über Hardware. Service-Meshes helfen bei der Sicherheit, Zuverlässigkeit und Geschwindigkeit bei der Service-zu-Service-Kommunikation.
Anwendungen mit einer Microservices-Architektur können aus Hunderten von Services bestehen, die alle ihre eigenen Instanzen in einer Live-Umgebung betreiben. Das kann es Entwicklern erschweren, den Überblick über Interaktionen von Komponenten zu behalten und Änderungen an ihrer Anwendung vorzunehmen, wenn etwas schief geht. Wären Kommunikationsprotokoll in die Services selbst, statt in eine separate und dedizierte Schicht integriert, würde das den Prozess beim Nachvollziehen und Durchführen von Änderungen erheblich verkomplizieren. Durch das Verwenden eines Service-Meshs haben Entwickler die Möglichkeit, die Service-zu-Service-Kommunikation in eine dedizierte Schicht zu trennen.
Unternehmen können Protokolltransaktionen auch über ein API-Gateway statt über ein Service-Mesh abwickeln. Das hat jedoch den Nachteil, dass Entwickler dieses jedes Mal aktualisieren müssen, wenn sie einen Microservice hinzufügen oder entfernen.
Wie ein Service-Mesh funktioniert
Eine Service-Mesh-Architektur verwendet eine Proxy-Instanz, die als Sidecar bezeichnet wird. Das ist immer der Fall, egal welches Entwicklungsparadigma zum Einsatz kommt, wobei im Allgemeinen Container oder Microservices am häufigsten anzutreffen sind. In einer Mikroserviceanwendung wird ein Sidecar an jeden Dienst angehängt. In einem Container wird der Sidecar an jeden Anwendungscontainer, jede virtuelle Maschine (VM) oder Containerorchestrierungs-Einheit, wie zum Beispiel einen Kubernetes-Pod, angeschlossen.
Sidecars können vom Dienst selbst abstrahierte Aufgaben, wie zum Beispiel Überwachung und Sicherheit übernehmen.
Serviceinstanzen, Sidecars und ihre Interaktionen bilden die so genannte Datenebene in einem Service-Mesh. Eine Schicht, die als Steuerungsebene bezeichnet wird, verwaltet Aufgaben wie das Erstellen von Instanzen, sowie die Überwachung und die Implantation von Richtlinien, wie zum Beispiel für die Netzwerkverwaltung oder Netzwerksicherheit. Steuerungsebenen können eine Verbindung zu einer Kommandozeile oder einer graphischen Benutzeroberfläche (Graphic User Interface, GUI) für die Anwendungsverwaltung herstellen.
Vor- und Nachteile von Service-Meshes
Ein Service-Mesh löst viele klassische Probleme bei der Verwaltung der Service-zu-Service-Kommunikation, aber nicht mit allen. Zu den Vorteilen eines Service-Mesh gehören:
- Vereinfacht die Kommunikation zwischen Services sowohl in Microservices als auch in Containern.
- Erleichtert das Diagnostizieren von Kommunikationsfehlern, da diese auf ihrer eigenen Infrastrukturschicht auftreten.
- Unterstützt Sicherheitsmerkmale wie Verschlüsselung, Authentifizierung und Autorisierung.
- Erhöht die Geschwindigkeit beim Entwickeln, Prüfen und Bereitstellen einer Anwendung.
- Sidecar Proxys, die neben einem Container-Cluster platziert werden, ermöglichen die effiziente Verwaltung von Netzwerkdiensten.
Einige Nachteile von Service-Meshes sind:
- Sercive-Meshes erhöhen die Zahl der Runtime-Instanzen.
- Sie fügen einen zusätzlichen Schritt hinzu, da jede Serviceanfrage zunächst über den Sidecar Proxy laufen muss.
- Service-Meshes befassen sich nicht mit Problemen wie der Integration von externen Services oder Systemen und bilden keine Routing-Typen oder Transformationen ab.
Anbieter von Service-Meshes
Service-Meshes sind als Open-Source-Technologie von verschiedenen Entwicklern erhältlich. Es kann auch als Service von großen Cloud-Providern bereitgestellt werden.
Istio ist ein Open-Source-Service-Mesh, das von Google, IBM und Lyft bereitgestellt wird. Istio ist als universelle Steuerungsebene konzipiert, die zunächst für Kubernetes-Bereitstellungen gedacht ist, aber auf mehreren Plattformen verwendet werden kann. Seine Datenebene stützt sich auf Proxies, die als Envoy-Sidecars bezeichnet werden. Dieses Service-Mesh verfügt über Sicherheitsmaßnahmen wie Identitäts- und Schlüsselmanagement. Es unterstützt auch Fehlersimulation und hybride Einsatzszenarien.
Linkerd ist ein weiteres plattformübergreifendes Open-Source-Service-Mesh. Linkerd wurde von Buoyant entwickelt und baut auf der Finagle-Bibliothek von Twitter auf. Dieses Service-Mesh unterstützt Plattformen wie Kubernetes, Docker und Amazon ECS. Zu den Merkmalen gehört die integrierte Diensterkennungs- und Steuerungsebene Namerd.