Was ist ein Service-Mesh?

Ein Service-Mesh ist eine dedizierte Infrastrukturebene, die Netzwerkkonnektivität, Sicherheit und Überwachbarkeit für Microservices innerhalb eines verteilten Systems bietet. Sie funktioniert, indem sie komplexe Service-to-Service-Kommunikation wie Lastausgleich, Leitungsunterbrechungen, Trafficverlagerung und Wiederholungsmechanismen abwehrt.

Die Definition eines Service-Mesh erfordert zunächst die Definition von Microservices. Wenn Sie nicht wissen, wie Microservices funktionieren, dann ist eine Erklärung für ein Service-Mesh wie ein Vergleich von First Class und Bus, wenn Sie noch nie von einem Flugzeug gehört haben. Ein Service-Mesh ist eine Technologie, die entwickelt wurde, um Microservices-basierte Anwendungen besser auszuführen, obwohl es einige gibt, die argumentieren, dass sie die Dinge oft kompliziert machen.

Mikroservices verstehen

Microservices sind ein moderner Ansatz für die Architektur von Softwareanwendungen, bei dem eine Anwendung in lose gekoppelte kleinere Komponenten aufgeteilt wird, die als „Services“ bezeichnet werden. Zusammen bieten diese Microservices die allgemeine Funktionalität der Anwendung. Dieser Ansatz steht im Gegensatz zur herkömmlichen „monolithischen“ Anwendungsarchitektur, die alle Funktionen in einer einzigen Software vereint.

Netflix ist ein bekanntes Beispiel für Microservices. Vor einem Jahrzehnt war Netflix eine einheitliche und gigantische Softwareanwendung. Jede Funktion von Netflix befand sich in einer einzigen riesigen Codebasis. Das Problem dabei war, dass durch die Änderung eines Teils der App die gesamte Lösung neu bereitgestellt werden musste – keine wünschenswerte Situation für eine geschäftige und wirtschaftlich bedeutende Software.

Nach der Migration zu einer Microservices-Architektur existiert jeder Bereich von Netflix – von der Inhaltsverwaltung über die Kontoverwaltung bis hin zu Spielern und so weiter – als eigener Microservice. Wenn wir hier wirklich detailliert werden wollen, besteht jeder dieser Bereiche aus mehreren Microservices. Entwickler können jeden Microservice isoliert bearbeiten. Sie können sie ändern, skalieren oder neu konfigurieren, ohne sich Gedanken über ihre Auswirkungen auf andere Microservices machen zu müssen. Wenn ein Microservice ausfällt, wird der Rest der Anwendung theoretisch nicht heruntergefahren (obwohl es Ausreißer gibt).

Was ist ein Service-Mesh?

Denken Sie an die Microservices-Architektur, und betrachten Sie einige der Herausforderungen, die sich beim Versuch ergeben könnten, eine Microservices-basierte Anwendung zuverlässig zu machen. Die Architektur ist zwar revolutionär in der Fähigkeit, Anwendungen in unabhängige Services zu trennen, birgt jedoch eine Reihe von Schwierigkeiten.

Insbesondere die Kommunikation zwischen Microservices kann ohne einen Mechanismus problematisch sein, der sicherstellt, dass Microservices wissen, wo sich andere Microservices befinden, wie sie kommunizieren und wie Administratoren einen Eindruck davon erhalten können, was in der Anwendung passiert. Wie weiß der Streaming-Microservice in Netflix beispielsweise, wo Informationen über das Konto eines Abonnenten zu finden sind? Hier kommt ein Service-Mesh ins Spiel. Um jedoch die Leute zu besänftigen, die keine Fans von Service-Mesh sind, ist es wichtig, darauf hinzuweisen, dass dafür kein Service-Mesh benötigt wird.

Ein Service-Mesh ist eine Infrastrukturebene, die die Kommunikation zwischen Microservices über ein Netzwerk verwaltet. Es steuert Anfragen für Services innerhalb der App. Ein Service-Mesh bietet in der Regel auch Service-Erkennung, Failover und Lastausgleich sowie Sicherheitsfunktionen wie Verschlüsselung.

Wie funktioniert ein Service-Mesh?

Die Aufgabe eines Service-Mesh besteht darin, einem Microservices-basierten System Sicherheit, Überwachbarkeit und Zuverlässigkeit hinzuzufügen. Dies wird durch die Verwendung von Proxys erreicht, die als „Sidecars“ bezeichnet werden und an jeden Microservice angebunden sind (es gibt auch „Nicht-Sidecar“-Servicenetze, die auf eBPF basieren). Sidecars arbeiten auf Layer 7 des OSI-Stacks. Wenn die Anwendung containerbasiert ist, wird das Sidecar an jeden Container oder jede virtuelle Maschine (VM) angehängt. Die Proxys arbeiten dann auf einer „Datenebene“ und „Steuerebene“.

Die Datenebene umfasst Services, die neben ihren Sidecar-Proxys ausgeführt werden. Für jedes Service-/Sidecar-Paar befasst sich der Service mit der Geschäftslogik der Anwendung, während sich der Proxy zwischen dem Service und anderen Services im System befindet. Der Sidecar-Proxy verarbeitet den gesamten Traffic, der zum und vom Service geht. Er bietet auch Verbindungsfunktionen wie Mutual Transport Layer Security (mTLS), mit denen jeder Service im Anforderungs-/Antwortnachrichtenfluss das Zertifikat des anderen validiert.

Auf der Steuerebene interagieren Administratoren mit dem Service-Mesh. Es befasst sich mit der Proxy-Konfiguration und -Steuerung, der Verwaltung des Service-Mesh und bietet eine Möglichkeit, die Proxys einzurichten und zu koordinieren. Administratoren arbeiten über die Steuerebene, um Zugriffskontrollrichtlinien durchzusetzen und Routing-Regeln für Nachrichten zu definieren, die zwischen Microservices übertragen werden. Die Steuerebene kann auch den Export von Protokollen und anderen Daten im Zusammenhang mit der Beobachtbarkeit von Microservice ermöglichen.

Gemeinsam ermöglichen die Daten- und Steuerebene des Service-Mesh Folgendes:

  • Sicherheit: Verteilung von Sicherheitsrichtlinien, wie Authentifizierung und Autorisierung, an Microservices und automatische Verschlüsselung der Kommunikation zwischen Microservices. Ein Service-Mesh kann Sicherheitsrichtlinien über seine Steuerungsebene verwalten, überwachen und durchsetzen.

  • Zuverlässigkeit: Verwaltung der Kommunikation zwischen Microservices über Sidecar-Proxys in der Steuerungsebene und Verbesserung der Zuverlässigkeit von Serviceanfragen während des Prozesses. Das Service-Mesh kann auch das Lastausgleichsmanagement von Fehlern bewältigen, um die Zuverlässigkeit zu erhöhen und eine hohe Verfügbarkeit (HA) bereitzustellen.

  • Beobachtbarkeit: Zeigt Systemeigentümern, wie Microservices funktionieren. Ein Service-Mesh kann Microservices aufdecken, die „heiß“ laufen oder ausfallen könnten. Die Steuerungsebene des Service-Mesh sammelt Telemetriedaten zu Interaktionen zwischen Microservices und anderen Anwendungskomponenten.

Kubernetes- und Service-Mesh-Integration

Kubernetes spielt als weit verbreitete Containerorchestrierungsplattform eine entscheidende Rolle bei der Verwaltung von Microservices. Die Integration eines Service-Mesh in Kubernetes verbessert die Kontrolle, Sicherheit und Überwachbarkeit von Microservices, die im Kubernetes-Ökosystem ausgeführt werden. Kubernetes ermöglicht in Kombination mit Servicenetzwerken wie Istio und Linkerd eine automatische Service-Erkennung, einen Lastausgleich und eine Wiederherstellung nach einem Fehler. Kubernetes und Service-Meshes sind Open-Source-Systeme, sodass Unternehmen von einer breiten Community und einer Vielzahl von Tools profitieren können, die sich ständig weiterentwickeln, um cloudnative Anwendungen zu unterstützen. Durch die Verwendung von Kubernetes als Grundlage für das Containermanagement und die Kopplung mit einem Service-Mesh erhalten Unternehmen bessere Einblicke in die Service-to-Service-Kommunikation, reduzieren die Latenz bei Serviceinteraktionen und verbessern die allgemeine Ausfallsicherheit des Systems.

Service-Mesh im Vergleich zu Microservices

Microservices und Service-Mesh können leicht verwechselt werden. Die Microservices sind die Bestandteile eines Microservices-basierten Systems. Das Service-Mesh kann sie verbinden. Wie der Name schon sagt, liegt das Service-Mesh wie eine Verbindungsstruktur über den Microservices. Anders ausgedrückt ist ein Service-Mesh ein „Muster“, das implementiert werden kann, um die Verbindungen und die relevante Logik zu verwalten, die eine Microservices-basierte Anwendung antreibt.

Warum wird ein Service-Mesh benötigt?

Monolithische Anwendungen funktionieren nicht gut, da sie größer und komplexer werden. Es wird allmählich sinnvoll, die Anwendung in Microservices aufzuteilen. Dieser Ansatz passt gut zu modernen Methoden zur Anwendungsentwicklung wie Agile, DevOps und Continuous Integration/Continuous Delivery (CI/CD). Softwareentwicklungsteams und ihre Partner für Tests und Betrieb können sich auf neuen Code für einzelne, unabhängige Microservices konzentrieren. Dies ist in der Regel am besten für die Software und das gesamte Geschäft geeignet.

Da die Anzahl der Services in der Microservices-basierten App jedoch zunimmt, kann es schwierig werden, mit allen Verbindungen Schritt zu halten. Stakeholder können Schwierigkeiten haben, nachzuverfolgen, wie jeder Service mit anderen vernetzt werden muss und interagiert. Die Überwachung des Servicezustands wird schwierig. Da Dutzende oder sogar Hunderte von Microservices miteinander verbunden und überwacht werden müssen, kann auch Zuverlässigkeit zu einem Problem werden.

Ein Service-Mesh löst diese Probleme, indem Entwickler die Service-to-Service-Kommunikation auf einer dedizierten Ebene der Infrastruktur verarbeiten können. Anstatt sich mit Hunderten von Verbindungen auseinanderzusetzen, können Entwickler die gesamte Anwendung über Proxys in der Steuerungsebene verwalten. Das Service-Mesh bietet effiziente Verwaltungs- und Überwachungsfunktionen.

Kurz gesagt: Die Hauptvorteile eines Service-Mesh umfassen:

  • Vereinfachung der Kommunikation zwischen Microservices

  • Einfacheres Erkennen und Verstehen von Kommunikationsfehlern

  • Mehr Anwendungssicherheit durch Verschlüsselung, Authentifizierung und Autorisierung

  • Beschleunigung der App-Entwicklung durch schnellere Entwicklung, Tests und Bereitstellung neuer Microservices

Herausforderungen beim Service-Mesh

Ein Service-Mesh kann jedoch seine eigenen Schwierigkeiten darstellen. Beispielsweise werden die Ebenen des Service-Mesh zu einem weiteren Element eines Systems, das Infrastruktur, Wartung, Support usw. erfordert. Sie können eine Ressourcenbelastung darstellen, die sich auf die gesamte Netzwerk- und Hardware-Performance auswirkt. Das Hinzufügen von Sidecar-Proxys kann eine bereits komplexe Umgebung noch komplexer machen. Die Ausführung von Serviceaufrufen über das Sidecar fügt einen Schritt hinzu, der die Anwendung möglicherweise verlangsamen kann. Es kann Probleme im Zusammenhang mit der Integration mehrerer Microservices-Architekturen geben. Das Netzwerk muss immer noch verwaltet werden, ungeachtet des Service-Mesh-Managements und der Nachrichten zwischen den Services.

Reduzierung der Latenz in Servicenetzwerken durch Automatisierung

Eines der Hauptprobleme bei Service-Meshes ist die Gefahr einer erhöhten Latenz aufgrund der zusätzlichen Proxys, die die Servicekommunikation verarbeiten. Service-Meshes wie Istio und Linkerd sind jedoch mit Automatisierungsfunktionen ausgestattet, die diese Latenzprobleme mindern. Durch intelligentes Traffic-Management und automatisierte Wiederholungen kann das Service-Mesh die Kommunikationspfade optimieren und so Verzögerungen minimieren. Darüber hinaus nutzt Istio Envoy, um Routing-Entscheidungen zu optimieren und schnellere Reaktionen zwischen Services zu ermöglichen, indem sie die Automatisierung nutzt, um potenzielle Netzwerkengpässe zu umgehen. So wird sichergestellt, dass Anwendungen selbst in großen, cloudnativen Umgebungen, in denen Latenz andernfalls ein erhebliches Problem darstellen könnte, eine hohe Performance gewährleisten. Mit kontinuierlichen Updates und Optimierungen aus der Open-Source-Community sind moderne Servicemethoden zunehmend in der Lage, erweiterte Traffic-Management-Funktionen mit minimalem Overhead auszugleichen.

Fazit

Ein Service-Mesh ist eine Unterstützung, Microservices erfolgreich zu nutzen. Die Technologie bietet eine dringend benötigte Infrastrukturebene für die Kommunikation zwischen Services und zugehörigen Verwaltungsfunktionen. Ein Service-Mesh wird auf die richtige Weise implementiert und bietet Sicherheit, Zuverlässigkeit und Überwachbarkeit für Microservices-basierte Anwendungen und Systeme.

Häufig gestellte Fragen

Service-Meshes und herkömmliche API-Gateways haben unterschiedliche Rollen bei der Verwaltung des Netzwerktraffics innerhalb eines verteilten Systems. Service-Meshes konzentrieren sich auf die interne Kommunikation zwischen Microservices und bieten eine detaillierte Kontrolle über das Traffic-Management, den Lastausgleich und die Sichtbarkeit, ohne dass Änderungen am Anwendungscode erforderlich sind. Im Gegensatz dazu dienen API-Gateways als zentralisierte Einstiegspunkte für externe Clients, die Aufgaben wie Authentifizierung, Autorisierung und Anforderungsweiterleitung für clientseitige APIs verarbeiten.

Die Service-Mesh-Architektur verbessert die Sicherheit innerhalb von Microservices durch eine Reihe von Funktionen, die eine sichere Kommunikation und einen sicheren Datenschutz gewährleisten. Eine wichtige Sicherheitsfunktion ist Mutual TLS (mTLS), die eine verschlüsselte Kommunikation zwischen Services ermöglicht. Darüber hinaus ermöglichen Service-Meshes detaillierte Richtlinien zur Zugriffskontrolle, mit denen Administratoren Zugriffsberechtigungen auf Serviceebene definieren und durchsetzen können. 

Die Implementierung eines Service-Mesh mag zunächst komplex erscheinen, doch die langfristigen Vorteile überwiegen die anfängliche Komplexität.

Wählen Sie eine Service-Mesh-Lösung, die Ihren Anforderungen und Ihrer Infrastruktur entspricht. Jedes Service-Mesh verfügt über eigene Funktionen und Integrationen. Bewerten Sie sie daher basierend auf Ihren spezifischen Anforderungen. Beginnen Sie mit einer grundlegenden Einrichtung, indem Sie das Service-Mesh in einer Nicht-Produktionsumgebung oder auf einer begrenzten Untergruppe von Microservices bereitstellen. Definieren Sie Zugriffskontrollrichtlinien, Traffic-Routing-Regeln und Anwendungssicherheitskonfigurationen basierend auf den Anforderungen Ihres Unternehmens.

Führen Sie das Service-Mesh schrittweise in zusätzliche Microservices und Umgebungen ein, während Sie sich auf seine Stabilität und Performance verlassen. Wiederholen und verbessern Sie Ihre Service-Mesh-Einrichtung kontinuierlich basierend auf Feedback, Performancekennzahlen und sich ändernden Anforderungen.

Hier sind einige Faktoren, die Sie bei der Auswahl des besten Service-Mesh für Ihre Anforderungen berücksichtigen sollten:

  • Community-Support: Halten Sie Ausschau nach Service-Meshes mit aktivem Community-Support, die wertvolle Ressourcen, Dokumentation und Community-gesteuerte Beiträge bereitstellen können.

  • Nutzerfreundlichkeit: Entscheiden Sie sich für eine Lösung, die intuitive Tools, eine klare Dokumentation und nutzerfreundliche Schnittstellen bietet, um die Einführung und laufende Wartung zu vereinfachen.

  • Funktionsumfang: Bewerten Sie die Funktionen jedes Service-Mesh und bewerten Sie, ob es Ihren Anforderungen entspricht. Achten Sie auf Funktionen zur Trafficverwaltung, Überwachungstools und Sicherheitsfunktionen.

  • Kompatibilität: Stellen Sie sicher, dass das Service-Mesh mit Ihrer vorhandenen Infrastruktur kompatibel ist, einschließlich Containerorchestrierungsplattformen und Cloudumgebungen

  • Performance und Skalierbarkeit: Wählen Sie eine Lösung, die Ihren erwarteten Workload bewältigen und mit dem Infrastrukturwachstum skalieren kann.

Warum entscheiden sich Kunden für Akamai?

Akamai ist das Unternehmen für Cybersicherheit und Cloud Computing, das das digitale Leben unterstützt und schützt. Unsere marktführenden Sicherheitslösungen, überlegene Threat Intelligence und unser globales Betriebsteam bieten ein gestaffeltes Sicherheitskonzept, um die Daten und Anwendungen von Unternehmen überall zu schützen. Die Cloud-Computing-Lösungen von Akamai bieten als Full-Stack-Gesamtpaket Performance und erschwingliche Preise auf der weltweit am stärksten verteilten Plattform. Globale Unternehmen vertrauen auf Akamai für die branchenführende Zuverlässigkeit, Skalierbarkeit und Expertise, die sie benötigen, um ihr Geschäft selbstbewusst auszubauen.

Verwandte Blogbeiträge

Auf dem Weg in die moderne Cloud
Akamai kündigt weltweit neue Standorte, neue Services für Kunden aus dem kommerziellen Sektor und Verbesserungen an, die die Performance unserer Cloud-Computing-Services verbessern.
Wie können wir die Cloudanforderungen von SaaS erfüllen?
Der neue cloudnative Ansatz von Akamai zur Bereitstellung von SaaS-Anwendungen kann sowohl Kosten- als auch Performanceanforderungen gerecht werden.
Verbesserung des Spielerlebnisses durch Microservices mit geringer Latenz
Die stark verteilte Akamai Cloud ist ideal, um Microservices mit geringer Latenz bereitzustellen, die für ein nahtloses Spielerlebnis unerlässlich sind.