Was ist ein Service-Mesh? Warum sind sie wichtig?

Quanrong Huang/Shutterstock.com< /figure>

Ein Service Mesh ist eine Infrastrukturschicht, die die Kommunikation zwischen Anwendungskomponenten erleichtert. Meshes bieten Funktionen wie Service Discovery, Load Balancing und Beobachtbarkeit.

Service Meshes finden sich im Allgemeinen in verteilten Systemen, die aus Microservices bestehen. Das Mesh bietet eine Möglichkeit für verschiedene Dienste, Daten auszutauschen. Es verarbeitet nur den internen Datenverkehr und wird an ein API-Gateway oder einen Edge-Knoten übergeben, um Benutzern zu dienen. Beliebte Meshes sind Linkerd und Istio.

Was steckt im Mesh?

Das Grundkonzept eines Service Mesh ist ziemlich einfach. Die Schicht kapselt Netzwerk-Proxys, die den Datenverkehr an einzelne Dienste weiterleiten. Eine Kontrollschicht verwaltet Netzwerkaufrufe zwischen den Diensten und orchestriert die Verwendung der Proxys.

Der grundlegende Zweck des Meshes besteht darin, die Kommunikation von Diensten einfacher und zuverlässiger zu machen. Nehmen wir ein einfaches Paar von Diensten: eine API und ein separates Authentifizierungssystem. Die API muss sich mit dem Authentifizierungsdienst verbinden, wenn sie Anfragen empfängt.

Mit einem Service Mesh erhalten Sie eine zuverlässige Kommunikation zwischen Diensten unter Verwendung bekannter Identifikatoren. Ihre API könnte Netzwerkaufrufe an den Hostnamen des Authentifizierungsdienstes senden und darauf vertrauen, dass sie auch dann korrekt aufgelöst wird, wenn der Authentifizierungsdienst an einen anderen Standort des Rechenzentrums verschoben wird. Das Service Mesh dient dazu, Anfragen transparent an den entsprechenden Service weiterzuleiten.

Werbung

Die Verwendung eines Service Mesh erleichtert das Verschieben von Diensten. Hartcodierte Netzwerkkommunikationslogik kann schnell einschränkend werden. Ein Mesh bietet Ihnen mehr Flexibilität bei der zukünftigen Verteilung Ihrer Arbeitslasten.

Wie werden Service Meshes implementiert?

Die meisten modernen Service Meshes bestehen aus zwei Komponenten: einer Control Plane und einer Data Plane. Die Kernfunktionalität gehört zur Datenebene, die sich mit den Daten befasst, die durch das System fließen.

Jede Anfrage an das Mesh wird von der Datenebene verarbeitet. Es erkennt den richtigen zu verwendenden Dienst, führt alle Protokollierungsaktionen durch und aktiviert bedingtes Verhalten, um den Datenverkehr zu filtern und umzuleiten.

Dienste sind normalerweise Teil Ihrer Anwendung, sodass sie Routinglogik enthalten können. Die Datenebene überprüft Konfigurationsregeln, um den endgültigen Endpunkt basierend auf HTTP-Headern, Anforderungsparametern und anderen Werten aus der Anforderung zu bestimmen.

Während die Datenebene vor Aktivität brummt, ist die Steuerungsebene relativ einfacher. Es überwacht die Proxys in der Datenebene und bietet eine API, damit Sie mit ihnen interagieren können.

Dieses Diagramm aus dem Istio-Projekt veranschaulicht, wie die Komponenten zusammenpassen. Jeder Dienst bekommt seinen eigenen Proxy. Eingehender Datenverkehr fließt durch die Proxys. Sie können mit der Steuerungsebene kommunizieren, um andere Dienste zu entdecken. Proxys werden allgemein als “Sidecars” während sie neben dem Dienst laufen, den sie repräsentieren.

Andere Service-Mesh-Funktionen

Service Meshes bieten in der Regel zusätzliche Funktionen, die über die grundlegende Serviceerkennung hinausgehen. In der Regel finden Sie Load-Balancing, Authentifizierung auf Anforderungsebene und Unterstützung für Datenverschlüsselung. Verschlüsselter Datenverkehr kann das Mesh passieren, wird aber in entschlüsselter Form an Ihre Dienste übergeben.

Werbung

Ihr Mesh bietet normalerweise Schutz gegen vorübergehende Netzwerkausfälle. Automatische Wiederholungen, Failover und Schutzschalter machen die Kommunikation zwischen Diensten widerstandsfähiger. Es ist weniger wahrscheinlich, dass der Endbenutzer einen schwerwiegenden Fehlerstatus sieht. Diese wichtigen Funktionen wären von Hand nur schwer und kostspielig zu implementieren.

In ähnlicher Weise enthalten Service Meshes Leistungsoptimierungen, die dazu beitragen, den Overhead zu minimieren. Das Mesh behält möglicherweise Verbindungen zu Diensten für eine spätere Wiederverwendung bei, wodurch die Latenz bei der nächsten Anfrage reduziert wird.

Mesh-Schichten bieten auch Sicherheitsschutz. Sie können Zugriffssteuerungsrichtlinien auf Netzebene implementieren, die Datenverkehr ablehnen, bevor er Ihre Dienste erreicht. Wenn Sie einen globalen API-Ratenbegrenzer wünschen, wird dieser Teil der Mesh-Konfiguration auf alle Ihre Dienste angewendet – Gegenwart und Zukunft.

Was ist mit den Nachteilen?

Die größte Herausforderung bei Service Meshes ist die zusätzliche Komplexität, die sie mit sich bringen. Sie zielen zwar darauf ab, das Microservice-Networking zu vereinfachen, führen aber auch eine eigene Lernkurve ein.

Entwickler müssen sich mit einer anderen Schicht neben ihren bestehenden Services vertraut machen. Mesh-Terminologien wie Proxys und Sidecars ergänzen die bereits lange Liste von Kubernetes-Ressourcen, die von Betriebsteams verwaltet werden.

Werbung

Obwohl Meshes ihre eigenen Leistungsverbesserungen hinzufügen, können einige Bereitstellungen eine Gesamtreduzierung des Netzwerkdurchsatzes feststellen. Das Netz fügt eine neue Ebene hinzu, die Anforderungen passieren müssen, was sich auf die Gesamteffizienz auswirkt. Dies ist normalerweise am auffälligsten, wenn Sie Ihr Mesh mit vielen Routing-Regeln ausstatten.

Wann sollten Sie ein Service Mesh verwenden?

Service Meshes funktionieren am besten, wenn Sie sich voll und ganz für Container und Microservices einsetzen. Sie wurden entwickelt, um die Herausforderungen beim Betrieb großer verteilter Systeme in der Produktion zu lösen. Kleinere Bereitstellungen können immer noch von einem Mesh profitieren, könnten aber auch einfachere Netzwerkansätze wie Kubernetes’ integrierte Netzwerkressourcen.

Meshes sind am hilfreichsten, wenn Sie häufig neue Dienste starten oder diese auf Server verteilen. Ein Mesh ermöglicht es Entwicklern, sich auf die Funktionalität zu konzentrieren, anstatt verschiedene Dienste miteinander zu verbinden. Wenn Sie eine ständig wachsende Serviceflotte bereitstellen, verbringen Sie mehr Zeit mit der Kommunikation zwischen Service und Service. Ein Mesh automatisiert den Großteil dieser Konfiguration, sodass Sie sich keine Gedanken über Service Discovery und Routing machen müssen.

Der Ansatz hilft auch, Ihr System besser beobachtbar zu machen. Alle Anfragen fließen durch das Mesh, sodass Sie Logging und Tracing auf Infrastrukturebene implementieren können. Dies bietet einen einfacheren Weg zur Diagnose und Lösung von Routing-Problemen. Ohne Mesh haben Sie möglicherweise Dutzende von Diensten, die alle Informationen direkt aneinander weitergeben. Dies macht es schwierig, den Ursprung eines Problems zu finden.

Die meisten gängigen Service Meshes sind einfach einzurichten. Istio und Linkerd verfügen beide über gut dokumentierte Einführungsleitfäden, die Ihnen bei der Bereitstellung eines Mesh in Ihrem Kubernetes-Cluster helfen. Es lohnt sich zu experimentieren, auch wenn Sie nicht sicher sind, ob Ihr System noch auf Mesh-Skala ist. Wenn Sie zu lange an der direkten Servicekommunikation festhalten, können Sie möglicherweise keine neuen Services rechtzeitig und zuverlässig einführen.


Posted

in

by

Tags: