Hinweis.: Service Mesh â ein Konzept, das noch keinen stabilen deutschen Begriff hat (vor ĂŒber 2 Jahren schlugen wir âDienstnetzâ vor, wĂ€hrend einige Kollegen spĂ€ter die Kombination âDienstsiebâ aktiv propagierten). StĂ€ndige GesprĂ€che ĂŒber diese Technologie fĂŒhrten zu einer Situation, in der sich marketingtechnische und technische Aspekte zu eng vermischten. Dieses hervorragende Material eines der Autoren des Originalbegriffs soll Klarheit fĂŒr Ingenieure und darĂŒber hinaus schaffen.

Comic von
EinfĂŒhrung
Wenn Sie ein Softwareingenieur sind, der in Backend-Systemen arbeitet, ist der Begriff âService Meshâ wahrscheinlich in den letzten Jahren fest in Ihrem Bewusstsein verankert worden. Durch eine seltsame Verkettung von UmstĂ€nden gewinnt dieser Ausdruck in der Branche immer mehr an Bedeutung, wĂ€hrend der Hype und die damit verbundenen Werbeangebote wie ein Schneeball an Fahrt aufnehmen und keine Anzeichen einer Verlangsamung zeigen.
Service Mesh hat seinen Ursprung in den undurchsichtigen, voreingenommenen GewĂ€ssern des Cloud-Native-Ăkosystems. Leider bedeutet dies, dass ein erheblicher Teil der damit verbundenen Debatten von "oberflĂ€chlichem Gerede" bis hin zu â um einen technischen Begriff zu verwenden â purer Unsinn reicht. Doch wenn man den gesamten LĂ€rm ausblendet, wird klar, dass Service Mesh eine durchaus echte, spezifische und wichtige Funktion hat.
In diesem Beitrag werde ich genau das versuchen: eine ehrliche, tiefgehende, ingenieurlastige Anleitung zu Service Mesh zu prĂ€sentieren. Ich werde nicht nur die Frage beantworten: âWas ist das?â, sondern auch âWarum?â, sowie âWarum gerade jetzt?â. SchlieĂlich werde ich versuchen zu skizzieren, warum (meiner Meinung nach) gerade diese Technologie solch einen unglaublichen Hype ausgelöst hat â was an sich eine interessante Geschichte ist.
Wer bin ich?
Hallo zusammen! Mein Name ist . Ich bin einer der Erfinder â des allerersten Projekts fĂŒr Service Mesh und des Projekts, das den Begriff Service Mesh in seiner heutigen Form geprĂ€gt hat (Entschuldigung, Jungs!). (Ăbersetzung:: Ăbrigens, zu Beginn dieser Begrifflichkeit, vor ĂŒber 2,5 Jahren, haben wir bereits frĂŒhe Materialien des gleichen Autors mit dem Titel â».) AuĂerdem leite ich â ein Startup, das coole Service-Mesh-Lösungen wie Linkerd und .
Sie haben wahrscheinlich eine recht persönliche und subjektive Meinung zu diesem Thema. Dennoch werde ich versuchen, die Tendenz so gering wie möglich zu halten (mit einer Ausnahme: âWarum gibt es so viele Diskussionen ĂŒber Service Mesh?â, â in dem ich jedoch meine voreingenommenen Gedanken teilen werde). Ich werde auch mein Bestes tun, um diesen Leitfaden so objektiv wie möglich zu gestalten. In konkreten Beispielen werde ich hauptsĂ€chlich auf die Erfahrungen mit Linkerd zurĂŒckgreifen und dabei bekannte Unterschiede (sofern vorhanden) bei der Implementierung anderer Arten von Service Meshs erwĂ€hnen.
Okay, kommen wir zu den interessanten Punkten.
Was ist ein Service Mesh?
Trotz des ganzen Hypes ist die Struktur eines Service Meshs ziemlich einfach. Es handelt sich lediglich um eine Vielzahl von Userspace-Proxys, die ânebenâ den Diensten positioniert sind (darĂŒber werden wir spĂ€ter noch sprechen, was ânebenâ bedeutet), plus eine Reihe von Steuerungsprozessen. Die Proxys zusammen werden als Datenebenebezeichnet, wĂ€hrend die Steuerungsprozesse als Steuerungsebene. Der Datenverkehrsbereich interceptiert Aufrufe zwischen Services und verarbeitet diese auf verschiedene Weise; der Steuerungsbereich koordiniert entsprechend das Verhalten des Proxys und verschafft Ihnen, also dem Betreiber, Zugriff auf die API, um das Netzwerk als Gesamtheit zu steuern und zu messen.

Was ist dieser Proxy? Es handelt sich um einen TCP-Proxy der Kategorie âLayer 7-awareâ (d.h. âberĂŒcksichtigendâ Schicht 7 des OSI-Modells) wie HAProxy und NGINX. Sie können den Proxy nach Ihrem Geschmack auswĂ€hlen; Linkerd verwendet einen Proxy in Rust, der unaufwendig . Wir haben ihn speziell fĂŒr das Service Mesh entwickelt. Andere Meshes bevorzugen andere Proxys (Envoy ist eine hĂ€ufige Wahl). Doch die Wahl des Proxys ist letztendlich eine Frage der Implementierung.
Was machen diese Proxys? Offensichtlich leiten sie Aufrufe zu den Services und von diesen weiter (strikt gesprochen fungieren sie als Proxys sowie als Reverse-Proxys, indem sie sowohl eingehende als auch ausgehende Aufrufe behandeln). Dabei implementieren sie eine Reihe von Funktionen, die sich auf die Aufrufe zwischen Services konzentrieren. Dieser Fokus auf den Verkehr zwischen Services unterscheidet den Service Mesh-Proxy von beispielsweise API-Gates oder Ingress-Proxys (letztere konzentrieren sich auf Aufrufe, die aus der AuĂenwelt in das Cluster gelangen). (Hinweis.: Vergleich der bestehenden Ingress-Controller fĂŒr Kubernetes, von denen viele bereits das erwĂ€hnte Envoy verwenden, siehe in .)
So, der Datenfluss ist geklĂ€rt. Der Kontrollfluss ist einfacher aufgebaut: Es handelt sich um eine Sammlung von Komponenten, die die gesamte Mechanik bereitstellen, die der Datenfluss benötigt, um koordiniert zu arbeiten, einschlieĂlich Dienstentdeckung, Ausstellung von TLS-Zertifikaten, Aggregation von Metriken usw. Der Datenfluss informiert den Kontrollfluss ĂŒber sein Verhalten; umgekehrt stellt der Kontrollfluss eine API bereit, die es ermöglicht, das Verhalten des Datenflusses als ein einheitliches Ganzes zu Ă€ndern und zu ĂŒberwachen.
Im Folgenden ist das Schema des Kontrollflusses und des Datenflusses in Linkerd dargestellt. Wie zu sehen ist, umfasst der Kontrollfluss mehrere verschiedene Komponenten, darunter eine Instanz von Prometheus, die Metriken von den Proxies sammelt, sowie andere Komponenten wie abgekĂŒrzt werden (Dienstentdeckung), identity (Zertifizierungsstelle, CA) und public-api (Endpunkte fĂŒr Web und CLI). Im Gegensatz dazu besteht der Datenfluss aus einem einfachen linkerd-proxy neben einer Anwendungsinstanz. Dies ist nur ein logisches Schema; im tatsĂ€chlichen Einsatz können Sie drei Replikate jeder Komponenten des Kontrollflusses und Hunderte oder Tausende von Proxies im Datenfluss haben.
(Die blauen Rechtecke in diesem Diagramm symbolisieren die Grenzen der Kubernetes-Pods. Es ist ersichtlich, dass die Container mit linkerd-proxy im selben Pod wie die Anwendungscontainer platziert sind. Solch ein Diagramm ist als Sidecar-Container.)

Die Architektur von Service Mesh hat mehrere wichtige Konsequenzen. Erstens, da es die Aufgabe des Proxys ist, Aufrufe zwischen den Diensten abzufangen, macht ein Service Mesh nur Sinn, wenn Ihre Anwendung auf einer bestimmten Anzahl von Diensten basiert. Mesh kann kann mit Monolithen verwendet werden, aber das ist eindeutig ĂŒberflĂŒssig fĂŒr einen einzigen Proxy, und die FunktionalitĂ€t wird wahrscheinlich nicht benötigt.
Eine weitere wichtige Konsequenz ist, dass ein Service Mesh eine enorme Anzahl an Proxys benötigt. TatsĂ€chlich koppelt Linkerd den linkerd-proxy an jede Instanz jedes Dienstes (andere Implementierungen fĂŒgen Proxys zu jedem Knoten/Host/virtuellen Maschine hinzu. In jedem Fall ist das nicht wenig). Der extensive Einsatz von Proxys selbst bringt eine Reihe zusĂ€tzlicher Komplikationen mit sich:
- Proxys im Data Plane mĂŒssen schnell sein, da auf jeden Aufruf mehrere Anfragen an den Proxy entfallen: eine auf der Client-Seite, eine auf der Server-Seite.
- Auch mĂŒssen Proxys klein und leichtgewichtig. Jede wird Ressourcen fĂŒr Speicher und CPU konsumieren, und dieser Verbrauch wird linear mit der Anwendung wachsen.
- Sie benötigen einen Mechanismus, um eine groĂe Anzahl von Proxys bereitzustellen und zu aktualisieren. Dies manuell zu tun, ist keine Option.
Im Allgemeinen sieht ein Service Mesh so aus (zumindest aus der Vogelperspektive): Sie setzen eine Vielzahl von Benutzerspace-Proxys ein, die âetwas tunâ mit dem internen, dienstĂŒbergreifenden Datenverkehr, und verwenden die Steuerungsebene zur Ăberwachung und Verwaltung dieser.
Jetzt stellt sich die Frage: âWarum?â
Wozu dient ein Service Mesh?
Es ist verstĂ€ndlich, wenn Neulinge auf dem Gebiet eines Service Meshs ein leichtes Unbehagen verspĂŒren. Die Struktur eines Service Mesh bedeutet, dass sie nicht nur die Latenz der Anwendung erhöht, sondern auch Ressourcen verbrauchen und neue Mechanismen in die Infrastruktur einfĂŒgt. Zuerst installieren Sie das Service Mesh und stellen dann plötzlich fest, dass Sie Hunderte (wenn nicht Tausende) von Proxys verwalten mĂŒssen. Man fragt sich, wer freiwillig dafĂŒr bereit ist?
Die Antwort auf diese Frage besteht aus zwei Teilen. Erstens können die Betriebskosten, die mit der Bereitstellung dieser Proxys verbunden sind, durch einige Entwicklungen in der Umgebung erheblich gesenkt werden (darĂŒber spĂ€ter mehr).
Zweitens ist ein solches GerĂ€t tatsĂ€chlich eine ausgezeichnete Möglichkeit, zusĂ€tzliche Logik in das System einzufĂŒhren. Das liegt nicht nur daran, dass mit einem Service Mesh viele neue Funktionen hinzugefĂŒgt werden können, sondern auch daran, dass dies ohne Eingriffe in die bestehende Umgebung möglich ist. TatsĂ€chlich basiert das gesamte Modell des Service Mesh auf diesem Postulat: In einem Multiservice-System, unabhĂ€ngig davon, was die einzelnen Dienste tun, ist der Datenverkehr zwischen ihnen der ideale Punkt, um FunktionalitĂ€t hinzuzufĂŒgen.
Beispielsweise konzentriert Linkerd (wie die meisten Meshes) die FunktionalitĂ€t hauptsĂ€chlich auf HTTP-Anfragen, einschlieĂlich HTTP/2 und gRPC*. Die FunktionalitĂ€t ist recht umfangreich und lĂ€sst sich in drei Klassen unterteilen:
- Funktionen, die mit ZuverlĂ€ssigkeit. Wiederholte Anfragen, ZeitĂŒberschreitungen, canary approach (Traffic-Shifting/Redirecting) usw.
- Funktionen, die mit Ăberwachung. Aggregation von Leistungskennzahlen, Latenzen und Anfragenvolumen fĂŒr jeden Dienst oder spezifische Bereiche; Erstellung von topologischen Karten der Dienste usw.
- Funktionen, die mit Sicherheit. Mutual TLS, Zugangskontrolle usw.
* Aus der Perspektive von Linkerd unterscheidet sich gRPC praktisch nicht von HTTP/2: lediglich in der Nutzlast wird protobuf verwendet. FĂŒr den Entwickler sind diese beiden Dinge natĂŒrlich unterschiedlich.
Viele dieser Mechanismen arbeiten auf der Anfrageebene (daher der Begriff âL7-Proxyâ). Wenn z. B. der Dienst Foo einen HTTP-Aufruf an den Dienst Bar sendet, kann der linkerd-proxy auf der Seite von Foo eine intelligente Lastverteilung durchfĂŒhren und Anfragen von Foo je nach beobachteter Latenz an die Instanzen von Bar weiterleiten; er kann die Anfrage bei Bedarf wiederholen (sofern idempotent); er kann den Antwortcode und die Wartezeit protokollieren usw. Ebenso kann der linkerd-proxy auf der Seite von Bar die Anfrage ablehnen, wenn sie nicht genehmigt ist oder das Anfrage-Limit ĂŒberschritten wurde; er kann die Latenz von seiner Seite protokollieren usw.
Proxys können auf Verbindungsebene "etwas tun". Zum Beispiel kann der linkerd-proxy auf der Foo-Seite eine TLS-Verbindung initiieren, wĂ€hrend der linkerd-proxy auf der Bar-Seite diese trennt. Beide Seiten können die TLS-Zertifikate des jeweiligen GegenĂŒbers ĂŒberprĂŒfen*. Damit wird nicht nur die VerschlĂŒsselung zwischen den Diensten sichergestellt, sondern auch eine kryptografisch sichere Identifikation der Dienste: Foo und Bar können "beweisen", dass sie tatsĂ€chlich das sind, was sie vorgeben zu sein.
* "Gegeneinander" bedeutet, dass auch das Zertifikat des Clients ĂŒberprĂŒft wird (mutual TLS). In klassischem TLS, wie zum Beispiel zwischen Browser und Server, wird normalerweise nur das Zertifikat einer Seite (des Servers) ĂŒberprĂŒft.
UnabhĂ€ngig davon, ob sie auf Anfrage- oder Verbindungsebene arbeiten, ist es wichtig zu betonen, dass alle Funktionen eines Service Mesh betrieblich sind. Linkerd kann die Semantik der Nutzlast nicht transformieren â zum Beispiel keine Felder zu einem JSON-Ausschnitt hinzufĂŒgen oder Ănderungen an Protobuf vornehmen. Auf diese wichtige Besonderheit werden wir spĂ€ter eingehen, wenn es um ESB und Middleware geht.
Dies ist die FunktionalitĂ€t, die ein Service Mesh bietet. Die Frage stellt sich: Warum nicht diese Funktionen direkt in der Anwendung implementieren? Und warum ĂŒberhaupt mit einem Proxy arbeiten?
Warum ist ein Service Mesh eine gute Idee?
Obwohl die Möglichkeiten eines Service Mesh beeindruckend sind, liegt der wahre Wert nicht in den Funktionen selbst. SchlieĂlich können wir sie direkt in der Anwendung implementieren (wir werden spĂ€ter sehen, dass genau dies der Ursprung des Service Mesh ist). Wenn man diesen Gedanken in einem Satz zusammenfassen möchte, besteht der Wert eines Service Mesh darin, dass es Funktionen bereitstellt, die fĂŒr den Betrieb moderner Serveranwendungen entscheidend sind, einheitlich fĂŒr den gesamten Stack und unabhĂ€ngig vom Anwendungscode..
Lassen Sie uns dieses Statement analysieren.
«Funktionen, die fĂŒr den Betrieb moderner Serveranwendungen entscheidend sind.Wenn Sie eine transaktionale Serveranwendung erstellen, die mit dem öffentlichen Internet verbunden ist, externe Anfragen entgegennimmt und innerhalb kurzer Zeit darauf reagiert â zum Beispiel ein Webanwendung, einen API-Server oder die ĂŒberwiegende Mehrheit anderer moderner Anwendungen â und wenn Sie diese als eine Suite von Services implementieren, die synchron miteinander interagieren, wobei Sie die Software stĂ€ndig aktualisieren, um neue Funktionen hinzuzufĂŒgen, und gezwungen sind, dieses System wĂ€hrend der Modifikationen betriebsfĂ€hig zu halten â dann gratuliere ich Ihnen, denn Sie sind dabei, moderne Serversoftware zu entwickeln. All diese groĂartigen Funktionen sind tatsĂ€chlich entscheidend fĂŒr Sie. Die Anwendung muss zuverlĂ€ssig und sicher sein, und Sie mĂŒssen in der Lage sein, das Verhalten zu ĂŒberwachen. Genau diese Fragen kann ein Service-Mesh beantworten.
(Okay, in den vorherigen Absatz hat sich dennoch meine Ăberzeugung geschlichen, dass dieser Ansatz eine moderne Methode ist, um Server-Software zu erstellen. Andere ziehen es vor, Monolithen, âreaktive Mikrodiensteâ und andere Dinge zu entwickeln, die nicht der obigen Definition entsprechen. Diese Menschen haben sicherlich eine andere Meinung als ich. Ich persönlich glaube, dass sie ânicht recht habenâ â obwohl der Service-Mesh in jedem Fall fĂŒr sie nicht besonders nĂŒtzlich ist.)
«Einheitlich fĂŒr den gesamten StackDie von Service Mesh bereitgestellten Funktionen sind nicht nur von entscheidender Bedeutung. Sie gelten fĂŒr alle Dienste innerhalb der Anwendung, unabhĂ€ngig davon, in welcher Sprache sie geschrieben sind, welches Framework verwendet wird, wer sie erstellt hat, wie sie implementiert wurden und all die anderen Feinheiten ihrer Entwicklung und Anwendung.
«UnabhĂ€ngig vom Anwendungs-CodeLetztendlich bietet das Service Mesh nicht nur einheitliche Funktionen fĂŒr den gesamten Stack â es geschieht auf eine Weise, die keine Ănderungen am Anwendungscode erfordert. Die grundlegende FunktionalitĂ€t des Service Mesh, einschlieĂlich der Aufgaben wie Konfiguration, Aktualisierung, Betrieb, Wartung usw., liegt ausschlieĂlich auf der Plattformebene und ist unabhĂ€ngig von der Anwendung. Die Anwendung kann sich Ă€ndern, ohne das Service Mesh zu beeintrĂ€chtigen. Umgekehrt kann sich das Service Mesh Ă€ndern, ohne dass die Anwendung eingreift.
Kurz gesagt, das Service Mesh bietet nicht nur wesentliche Funktionen, sondern tut dies auf eine globale, einheitliche und anwendungsunabhĂ€ngige Weise. Daher, obwohl die Funktionen des Service Mesh im Anwendungscode (zum Beispiel in Form einer Bibliothek, die in jeden Dienst integriert ist) implementiert werden können, gewĂ€hrleistet dieser Ansatz nicht die HomogenitĂ€t und UnabhĂ€ngigkeit, die fĂŒr ein Service Mesh so wertvoll sind.
Und alles, was dafĂŒr erforderlich ist, ist die HinzufĂŒgung einer Reihe von Proxys! Ich verspreche, dass wir sehr bald die Betriebskosten betrachten werden, die mit der HinzufĂŒgung dieser Proxys verbunden sind. Aber zuerst lassen Sie uns anhalten und diesen Gedanken der UnabhĂ€ngigkeit aus der Perspektive verschiedener Aspekte betrachten. Menschen.
Wer profitiert von Service Mesh?
So unangenehm es auch sein mag, aber damit eine Technologie ein wichtiger Bestandteil eines Ăkosystems wird, muss sie von den Menschen akzeptiert werden. Wer hat also ein Interesse an Service Mesh? Wer gewinnt durch deren Einsatz?
Wenn Sie moderne Serversoftware entwickeln, können Sie Ihr Team grob als eine Gruppe von Service-Besitzern, die gemeinsam die GeschĂ€ftslogik entwickeln und implementieren, sowie Plattformbesitzern, die sich mit der Entwicklung der internen Plattform beschĂ€ftigen, auf der diese Services betrieben werden. In kleinen Organisationen können das die gleichen Personen sein, aber mit dem Wachstum des Unternehmens werden diese Rollen in der Regel deutlicher und sogar in Unterrollen aufgeteilt⊠(Hier könnte man viel ĂŒber die sich verĂ€ndernde Natur von DevOps, den organisatorischen Einfluss von Microservices usw. sagen. Aber lassen Sie uns diese Beschreibungen vorerst als gegeben hinnehmen).
Aus dieser Perspektive sind die offensichtlichen NutznieĂer des Service Mesh die Plattformbesitzer. Denn letztendlich besteht das Ziel des Plattformteams darin, eine interne Plattform zu schaffen, auf der die Servicebesitzer ihre GeschĂ€ftslogik umsetzen können â und zwar in einer Weise, die ihnen maximale UnabhĂ€ngigkeit von den komplexen Details ihrer Verwaltung garantiert. Das Service Mesh bietet nicht nur die Möglichkeiten, die fĂŒr das Erreichen dieses Ziels entscheidend sind, sondern tut dies auf eine Art und Weise, die keine AbhĂ€ngigkeiten fĂŒr die Servicebesitzer mit sich bringt.
Auch die Servicebesitzer profitieren, wenn auch auf eine indirektere Weise. Das Ziel eines Servicebesitzers ist es, so produktiv wie möglich bei der Umsetzung der Logik von GeschĂ€ftsprozessen zu sein. Je weniger er sich um Betriebsfragen kĂŒmmern muss, desto besser ist es. Anstatt sich beispielsweise mit der Implementierung von Wiederholungsrichtlinien oder TLS zu befassen, können sie sich ausschlieĂlich auf ihre GeschĂ€ftstĂ€tigkeiten konzentrieren und darauf vertrauen, dass die Plattform sich um all das andere kĂŒmmert. Dies stellt einen erheblichen Vorteil fĂŒr sie dar.
Der organisatorische Wert einer solchen Trennung zwischen den Besitzern von Plattformen und Diensten ist kaum zu ĂŒberschĂ€tzen. Ich denke, dass er einen die Hauptdomain Beitrag zum Wert von Service Mesh leistet.
Wir haben diese Lektion gelernt, als einer der ersten Linkerd-AnhĂ€nger uns erzĂ€hlte, warum sie sich fĂŒr ein Service Mesh entschieden haben: weil es ihnen ermöglichte, "die GesprĂ€che auf ein Minimum zu reduzieren". Hier sind einige Details: Die Jungs von einem groĂen Unternehmen migrierten ihre Plattform nach Kubernetes. Da die Anwendung mit vertraulichen Informationen arbeitete, wollten sie alle Kommunikation in den Clustern verschlĂŒsseln. Die Situation wurde jedoch durch die hundert Dienste und hunderten Entwicklerteams kompliziert. Die Aussicht, sich mit allen in Verbindung zu setzen und sie davon zu ĂŒberzeugen, TLS in ihre PlĂ€ne aufzunehmen, bereitete ihnen groĂe Sorgen. Nachdem sie Linkerd installiert hatten, ĂŒbertrugen sie die Verantwortung von den Entwicklern (fĂŒr die es zusĂ€tzliche MĂŒhe bedeutete) auf die Plattformverantwortlichen, fĂŒr die dies eine oberste PrioritĂ€t darstellte. Mit anderen Worten, Linkerd löste fĂŒr sie weniger ein technisches als vielmehr ein organisatorisches Problem.
Kurz gesagt, ein Service Mesh ist eher eine Lösung fĂŒr ein nicht-technisches sozio-technisches Problem. (Danke um mit diesem Begriff vertraut zu werden.)
Löst ein Service Mesh all meine Probleme?
Ja. Ich meine, nein!
Wenn man sich die drei oben genannten Funktionskategorien ansieht: ZuverlĂ€ssigkeit, Sicherheit und Ăberwachbarkeit, wird klar, dass ein Service Mesh keine vollstĂ€ndige Lösung fĂŒr eines dieser Probleme ist. Obwohl Linkerd Wiederholungsanfragen senden kann (wenn es weiĂ, dass sie idempotent sind), ist es nicht in der Lage zu entscheiden, was dem Benutzer zurĂŒckgegeben werden soll, wenn der Service endgĂŒltig ausgefallen ist â solche Entscheidungen mĂŒssen von der Anwendung getroffen werden. Linkerd kann die Statistik der erfolgreichen Anfragen fĂŒhren, doch es kann nicht in den Service eintauchen und seine internen Metriken bereitstellen â solche Werkzeuge mĂŒssen in der Anwendung vorhanden sein. Und obwohl Linkerd in der Lage ist, mTLS zu organisieren, erfordern vollstĂ€ndige Sicherheitslösungen weitaus mehr.
Ein Teil der in diesen Bereichen angebotenen Funktionen des Service Mesh gehört zu den Plattformfeatures. Damit meine ich Funktionen, die:
- UnabhĂ€ngig von der GeschĂ€ftslogik sind.Die Art und Weise, wie Histogramme von Aufrufen zwischen Foo und Bar erstellt werden, hĂ€ngt ĂŒberhaupt nicht davon ab, das ob Foo Bar aufruft.
- Es ist schwierig, es richtig zu implementieren.. In Linkerd werden die Wiederholungsversuche mithilfe verschiedener ausgeklĂŒgelter Mechanismen wie Retry Budgets parametrisiert. (Retry Budgets), da ein naiver Ansatz bei der Umsetzung solcher Dinge mit Sicherheit zu einem sogenannten "Retry-Sturm" fĂŒhren wird. (Retry-Sturm) und anderen Problemen, die typisch fĂŒr verteilte Systeme sind.
- Sie sind am effektivsten, wenn sie einheitlich angewendet werden.Ein TLS-Mechanismus macht nur dann Sinn, wenn er ĂŒberall eingesetzt wird.
Da diese Funktionen auf Proxys (und nicht auf Anwendungsebene) implementiert sind, bietet das Service Mesh sie auf der Plattformebene an, der Plattformnicht auf Anwendungsebene. Es spielt also keine Rolle, in welcher Programmiersprache die Dienste geschrieben sind, welches Framework sie verwenden, wer sie geschrieben hat oder warum. Proxys arbeiten unabhĂ€ngig von all diesen Details, und die grundlegende Basis dieser FunktionalitĂ€t, einschlieĂlich der Aufgaben im Zusammenhang mit Konfiguration, Aktualisierung, Betrieb, Wartung usw., liegt ausschlieĂlich auf Plattformebene.
Beispiele fĂŒr Funktionen des Service Mesh

Zusammenfassend möchte ich sagen, dass ein Service-Mesh keine vollstĂ€ndige Lösung fĂŒr ZuverlĂ€ssigkeit, Sichtbarkeit oder Sicherheit darstellt. Der Umfang dieser Bereiche erfordert das zwingende Engagement der Servicebesitzer, Ops/SRE-Teams und anderer Stakeholder im Unternehmen. Ein Service-Mesh bietet lediglich eine "Sicht" auf Plattformebene fĂŒr jeden dieser Bereiche.
Warum ist das Service-Mesh gerade jetzt so populÀr geworden?
Wahrscheinlich fragen Sie sich gerade: Wenn das Service-Mesh so effektiv ist, warum haben wir dann nicht bereits vor zehn Jahren Millionen von Proxys im Stack bereitgestellt?
Es gibt eine offensichtliche Antwort auf diese Frage: Vor zehn Jahren baute jeder Monolithen, und niemand brauchte ein Service Mesh. Das ist zwar wahr, aber meiner Meinung nach wird in dieser Antwort das Wesentliche vernachlĂ€ssigt. Selbst vor zehn Jahren wurde das Konzept der Mikrodienste als vielversprechender Ansatz zur Erstellung groĂangelegter Systeme weit diskutiert und in Unternehmen wie Twitter, Facebook, Google und Netflix angewendet. Der allgemeine Konsens â zumindest in den Teilen der Branche, mit denen ich in Kontakt war â war, dass Mikrodienste der 'richtige Weg' sind, groĂe Systeme zu erstellen, auch wenn es extrem herausfordernd war.
NatĂŒrlich gab es vor zehn Jahren Unternehmen, die Mikrodienste einsetzten, doch sie haben nicht ĂŒberall auf Proxy gesetzt, um ein Service Mesh zu bilden. Wenn man genauer hinsieht, haben sie jedoch etwas Ăhnliches gemacht: In vielen dieser Unternehmen war es vorgeschrieben, eine bestimmte interne Bibliothek fĂŒr die Netzwerkinteraktion zu verwenden (manchmal als dicke Client-Bibliothek bezeichnet, fat client library).
Netflix hatte Hysterix, Google hatte Stubby und Twitter â die Finagle-Bibliothek. Finagle war beispielsweise fĂŒr jeden neuen Dienst bei Twitter unverzichtbar. Sie verwaltete sowohl die Client- als auch die Serverseite von Verbindungen, erlaubte Wiederholungsanforderungen, unterstĂŒtzte die Anforderungsweiterleitung, die Lastverteilung und das Monitoring. Sie stellte eine einheitliche Schicht von ZuverlĂ€ssigkeit und Sichtbarkeit fĂŒr den gesamten Twitter-Stack bereit, unabhĂ€ngig davon, womit der Dienst beschĂ€ftigt war. NatĂŒrlich funktionierte sie nur fĂŒr JVM-Sprachen und basierte auf dem Programmieransatz, der fĂŒr die gesamte Anwendung verwendet werden musste. Ihre FunktionalitĂ€ten waren jedoch nahezu identisch mit denen eines Service Mesh. (Die erste Version von Linkerd war tatsĂ€chlich nur Finagle, eingepackt in ein Proxy-Format.)
Vor zehn Jahren gab es also nicht nur Mikrodienste, sondern auch spezielle Proto-Service-Mesh-Bibliotheken, die dieselben Probleme lösten, die heute von einem Service Mesh gelöst werden. Aber ein echtes Service Mesh gab es damals noch nicht. Es musste noch eine weitere Verschiebung eintreten, bevor es erschien.
Und genau hier liegt die tiefere Antwort, verborgen in einer anderen VerĂ€nderung, die in den letzten 10 Jahren stattgefunden hat: Die Kosten fĂŒr die Bereitstellung von Microservices sind drastisch gesunken. Die oben genannten Unternehmen, die vor zehn Jahren Microservices nutzten â Twitter, Netflix, Facebook, Google â waren riesige Unternehmen mit enormen Ressourcen. Sie hatten nicht nur den Bedarf, sondern auch die Mittel, groĂe Anwendungen auf der Basis von Microservices zu entwickeln, bereitzustellen und zu betreiben. Die Energie und die Anstrengungen, die die Ingenieure von Twitter fĂŒr den Ăbergang von einem monolithischen zu einem mikroservicesbasierten Ansatz aufgebracht haben, sind einfach beeindruckend. (Ehrlich gesagt, ebenso wie die Tatsache, dass es gelungen ist.) Solche infrastrukturellen Manöver waren damals fĂŒr kleinere Unternehmen unmöglich.
Lassen Sie uns in die Gegenwart reisen. Heute gibt es Startups, bei denen das VerhĂ€ltnis von Microservices zu Entwicklern 5:1 betrĂ€gt (oder sogar ), und darĂŒber hinaus meistern sie diese Herausforderung erfolgreich! Wenn ein Startup mit 5 Personen problemlos 50 Microservices betreiben kann, muss etwas die Kosten fĂŒr deren Implementierung eindeutig gesenkt haben.
1500 Microservices in Monzo; jede Zeile ist eine festgelegte Netzwerkregel, die den Datenverkehr erlaubt.
Der drastische RĂŒckgang der Betriebskosten von Microservices ist das Ergebnis eines Prozesses: des Anstiegs der Beliebtheit von Containern. und Orchestratoren. Genau hier liegt die tiefere Antwort auf die Frage, was zur Entstehung von Service Mesh beigetragen hat. Dieselbe Technologie hat sowohl Service Mesh als auch Microservices attraktiv gemacht: Kubernetes und Docker.
Warum? Nun, Docker löst ein groĂes Problem â das Problem der Verpackung. Indem es die Anwendung und ihre (nicht-netzwerkbezogenen) LaufzeitabhĂ€ngigkeiten in einem Container verpackt, verwandelt Docker die Anwendung in eine austauschbare Einheit, die ĂŒberall bereitgestellt und ausgefĂŒhrt werden kann. Gleichzeitig vereinfacht es erheblich den Betrieb. multilingual Stacks: Da Container die atomare AusfĂŒhrungseinheit sind, spielt es fĂŒr Bereitstellung und Betrieb keine Rolle, was sich darin befindet, ob es sich um eine Anwendung in JVM, Node, Go, Python oder Ruby handelt. Sie starten sie einfach, und das war's.
Kubernetes hebt alles auf ein neues Level. Angesichts der Vielzahl an âausfĂŒhrbaren Einheitenâ und der vielen Maschinen, auf denen sie laufen können, ergibt sich der Bedarf nach einem Tool, das diese miteinander verknĂŒpfen kann. Im weitesten Sinne stellt man Kubernetes eine Menge Container und eine Vielzahl von Maschinen zur VerfĂŒgung, und es verbindet diese untereinander (natĂŒrlich ist das ein dynamischer und sich stĂ€ndig Ă€ndernder Prozess: neue Container bewegen sich im System, Maschinen werden hoch- und heruntergefahren usw. Kubernetes berĂŒcksichtigt all das).
Nach der Einrichtung von Kubernetes unterscheiden sich die zeitlichen AufwĂ€nde fĂŒr das Deployment und den Betrieb eines Dienstes kaum von denen fĂŒr den Deployment und Betrieb von zehn Diensten (tatsĂ€chlich sind sie nahezu identisch, sogar bei 100 Diensten). FĂŒgen Sie dazu Container als Verpackungsmechanismus hinzu, der mehrsprachige Implementierungen fördert, und Sie erhalten eine Vielzahl neuer Anwendungen, die in Form von Mikrodiensten in verschiedenen Sprachen implementiert sind â genau die Umgebung, fĂŒr die Service Mesh so gut geeignet ist.
Jetzt können wir die Frage beantworten, warum die Idee des Service Mesh gerade jetzt an PopularitĂ€t gewinnt: Die HomogenitĂ€t, die Kubernetes fĂŒr Dienste bereitstellt, lĂ€sst sich direkt auf die betrieblichen Herausforderungen anwenden, die ein Service Mesh mit sich bringt. Man packt Proxys in Container, lĂ€sst Kubernetes die Aufgabe ĂŒbernehmen, sie ĂŒberall anzubringen, und voilĂ ! Am Ende erhĂ€lt man ein Service Mesh, wobei Kubernetes die gesamte Mechanik des Rollouts steuert. (Zumindest aus einer Vogelperspektive. NatĂŒrlich gibt es in diesem Prozess viele Nuancen.)
Zusammenfassend lĂ€sst sich sagen, dass der Grund, warum das Service Mesh gerade jetzt populĂ€r ist und nicht vor zehn Jahren, darin besteht, dass Kubernetes und Docker nicht nur die Nachfrage deutlich erhöht haben, indem sie die Implementierung von Anwendungen als Sets von mehrsprachigen Mikrodiensten erleichtert haben, sondern auch die Betriebskosten wesentlich gesenkt haben, indem sie Mechanismen fĂŒr die Bereitstellung und UnterstĂŒtzung von Sidecar-Proxys bereitgestellt haben.
Warum gibt es so viele GesprĂ€che ĂŒber das Service Mesh?
Warnung: In diesem Abschnitt greife ich auf verschiedene Annahmen, Vermutungen, Ăberlegungen und interne Informationen zurĂŒck.
Wenn Sie nach dem Begriff âService Meshâ suchen, stoĂen Sie auf eine Vielzahl von wiederaufbereitetem, kalorienarmem Inhalt, merkwĂŒrdigen Projekten und einem Kaleidoskop von Verzerrungen, die fĂŒr Echokammern typisch sind. Jede neue, trendige Technologie hat das oft, doch im Falle von Service Mesh ist das Problem besonders ausgeprĂ€gt. Warum?
Nun, teilweise ist das meine Schuld. Ich habe alles in meiner Macht Stehende getan, um Linkerd und Service Mesh bei jeder Gelegenheit zu fördern, durch unzĂ€hlige BlogbeitrĂ€ge und Artikel wie diesen. Doch ich bin nicht so mĂ€chtig. Um diese Frage wirklich zu beantworten, sollten wir ein wenig ĂŒber die allgemeine Situation sprechen. Dabei ist es unmöglich, ein Projekt zu ignorieren: â ein Open-Source-Service-Mesh, das gemeinsam von Google, IBM und Lyft entwickelt wird.
(Diese drei Unternehmen haben völlig unterschiedliche Rollen: Lyft scheint nur namentlich beteiligt zu sein; sie sind die Autoren von Envoy, nutzen jedoch Istio nicht oder sind nicht an dessen Entwicklung beteiligt. IBM ist an der Entwicklung von Istio beteiligt und nutzt es. Google ist aktiv an der Entwicklung von Istio beteiligt, verwendet es jedoch meines Wissens nach tatsÀchlich nicht.)
Das Projekt Istio fĂ€llt durch zwei Merkmale auf. Erstens sind es die enormen Marketinganstrengungen, die Google, insbesondere, in seine Förderung steckt. SchĂ€tzungsweise haben die meisten Menschen, die heute mit dem Konzept des Service Mesh vertraut sind, erstmals dank Istio davon erfahren. Das zweite Merkmal ist, wie schlecht Istio aufgenommen wurde. In dieser Hinsicht bin ich offenbar befangen, aber ich versuche, so objektiv wie möglich zu bleiben, kann jedoch nicht umhin, , was nicht gerade charakteristisch ist (obwohl nicht einzigartig: systemd fĂ€llt mir ein, âŠ) fĂŒr ein Open-Source-Projekt.
(In der Praxis scheint Istio nicht nur Probleme mit der KomplexitĂ€t und der Benutzerfreundlichkeit zu haben, sondern auch mit der Leistung. Zum Beispiel wĂ€hrend der , die von Dritten durchgefĂŒhrt wurde, stellten die Experten Situationen fest, in denen die Tail-Latenz von Istio 100 Mal höher war als der entsprechende Wert von Linkerd, sowie Situationen mit Ressourcenmangel, bei denen Linkerd weiterhin erfolgreich funktionierte, wĂ€hrend Istio völlig ausfiel.)
Ich lasse meine Theorien darĂŒber beiseite, warum das so ist, aber ich denke, dass der enorme Hype um Service Mesh insbesondere durch das Engagement von Google erklĂ€rt wird. Genauer gesagt, durch die Kombination der folgenden drei Faktoren:
- die aggressive Promotion von Istio durch Google;
- eine entsprechende ablehnende, kritische Haltung gegenĂŒber dem Projekt;
- der jĂŒngste rasante Aufstieg der PopularitĂ€t von Kubernetes, dessen Erinnerungen noch frisch sind.
Diese Faktoren vereinen sich in einer Art berauschenden, sauerstoffarmen Umgebung, in der die FĂ€higkeit zu rationalem Urteilen schwindet und nur eine wunderbare Art von .
In Bezug auf Linkerd wĂŒrde ich es als ein zwiespĂ€ltiges Gut beschreiben. Es ist groĂartig, dass Service Mesh in den Mainstream eingedrungen ist â etwas, das 2016, als Linkerd erstmals erschien, nicht der Fall war und es durchaus schwierig war, die Aufmerksamkeit der Leute auf das Projekt zu lenken. Dieses Problem gibt es jetzt nicht mehr! Aber das Negative ist, dass die Situation mit Service Mesh heute so verworren ist, dass es praktisch unmöglich ist zu verstehen, welche Projekte wirklich zur Kategorie Service Mesh gehören (ganz zu schweigen davon, herauszufinden, welches am besten fĂŒr den spezifischen Anwendungsfall geeignet ist). Das erschwert es allen, und in einigen FĂ€llen passt Istio oder ein anderes Projekt besser als Linkerd, da letzteres nicht wirklich eine universelle Lösung darstellt.
Von Linkerd aus gesehen bestand unsere Strategie darin, den LÀrm zu ignorieren, uns weiterhin auf die Lösung echter Probleme in der Community zu konzentrieren und im Grunde darauf zu warten, dass der Hype nachlÀsst. Letztendlich wird der Hype abnehmen und wir können ruhig weiterarbeiten.
Bis dahin mĂŒssen wir alle ein wenig Geduld haben.
Wird mir, einem bescheidenen Software-Ingenieur, Service Mesh nĂŒtzlich sein?
Um diese Frage zu beantworten, hilft Ihnen der folgende Fragebogen:
KĂŒmmern Sie sich ausschlieĂlich um die Implementierung von GeschĂ€ftslogik? In diesem Fall ist ein Service Mesh fĂŒr Sie nicht erforderlich. NatĂŒrlich können Sie sich dafĂŒr interessieren, aber idealerweise sollte ein Service Mesh keinen direkten Einfluss auf Ihre Umgebung haben. Konzentrieren Sie sich weiterhin auf das, wofĂŒr Sie bezahlt werden.
UnterstĂŒtzen Sie eine Plattform in Ihrem Unternehmen, die Kubernetes verwendet? Ja, in diesem Fall benötigen Sie ein Service Mesh (es sei denn, Sie verwenden K8s nur zum AusfĂŒhren eines Monolithen oder fĂŒr die batchverarbeitung â aber dann wĂŒrde ich gerne wissen, warum Sie K8s verwenden). Wahrscheinlich befinden Sie sich in einer Situation mit vielen Mikrodiensten, die von verschiedenen Personen entwickelt wurden. Diese interagieren miteinander und sind in ein Netz von LaufzeitabhĂ€ngigkeiten verwickelt, und Sie mĂŒssen einen Weg finden, damit umzugehen. Die Verwendung von Kubernetes ermöglicht es Ihnen, ein Service Mesh auszuwĂ€hlen, das zu Ihnen passt. Informieren Sie sich ĂŒber deren Möglichkeiten und Eigenschaften und prĂŒfen Sie, ob eines der bestehenden Projekte fĂŒr Sie geeignet ist (ich empfehle, mit Linkerd zu beginnen).
Leiten Sie eine Plattform in einem Unternehmen, das KEIN Kubernetes verwendet, aber Mikrodienste einsetzt? In diesem Fall könnte ein Service Mesh hilfreich fĂŒr Sie sein, aber die Implementierung wird nicht trivial sein. NatĂŒrlich können Sie simulieren wie ein Service Mesh funktioniert, indem Sie eine Gruppe von Proxys einrichten, aber ein wichtiges Merkmal von Kubernetes ist gerade das Bereitstellungsmodell: Das manuelle Management dieser Proxys erfordert wesentlich mehr Zeit, Aufwand und Kosten.
Sind Sie verantwortlich fĂŒr die Plattform in einem Unternehmen, das mit Monolithen arbeitet? In diesem Fall benötigen Sie wahrscheinlich kein Service Mesh. Wenn Sie mit Monolithen (oder sogar mit SĂ€tzen von Monolithen) arbeiten, die klar definierte und selten wechselnde Interaktionsmuster aufweisen, wird Ihnen ein Service Mesh kaum etwas bieten können. Daher können Sie es einfach ignorieren und darauf hoffen, dass es wie ein böser Traum verschwindetâŠ
Fazit
Wahrscheinlich sollte man service mesh nicht als âdie angesagteste Technologie der Weltâ bezeichnen â dieser fragwĂŒrdige Titel gehört wahrscheinlich Bitcoin oder KI. Vielleicht gehört es jedoch zu den Top fĂŒnf. Wenn man durch die Schichten von LĂ€rm und Hektik blickt, wird deutlich, dass service mesh echten Nutzen fĂŒr diejenigen bietet, die Anwendungen in Kubernetes entwickeln.
Ich möchte, dass Sie Linkerd ausprobieren â die Installation in einem Kubernetes-Cluster (oder sogar in Minikube auf Ihrem Laptop) , und Sie können selbst sehen, worum es geht.
FAQ
â Wenn ich service mesh ignoriere, wird es dann verschwinden?
â Ich muss Sie enttĂ€uschen: service mesh ist gekommen, um zu bleiben.
â Aber ich WILL service mesh nicht verwenden!
â Nun, das mĂŒssen Sie auch nicht! Lesen Sie einfach meinen Fragebogen oben, um herauszufinden, ob Sie sich zumindest mit den Grundlagen vertraut machen sollten.
â Ist das nicht einfach das altbekannte ESB/Middleware in neuem Gewand?
â Service mesh beschĂ€ftigt sich mit der Betriebslogik, nicht mit der Bedeutung. der Unternehmensservicelinie (). Diese Trennung zu wahren, hilft service mesh, das gleiche Schicksal zu vermeiden.
â Was unterscheidet service mesh von API-Gateways?
â Es gibt Millionen von Artikeln zu diesem Thema. Einfach mal googeln.
â Ist Envoy ein service mesh?
â Nein, Envoy ist kein Service Mesh, sondern ein Proxy-Server. Er kann verwendet werden, um ein Service Mesh zu organisieren (und noch vieles mehr â es handelt sich um einen universellen Proxy). Aber allein ist er kein Service Mesh.
â Ist Network Service Mesh ein Service Mesh?
â Nein. Trotz des Namens ist es kein Service Mesh (wie Marketingwunder landen?).
â Wird mir ein Service Mesh bei meinem reaktiven, asynchronen System auf Basis von Nachrichtenwarteschlangen helfen?
â Nein, ein Service Mesh wird Ihnen nicht helfen.
â Welches Service Mesh sollte ich verwenden?
â , das versteht jeder.
â Der Artikel ist Mist! / Der Autor gehört ins GefĂ€ngnis!
â Bitte teilen Sie den Link mit all Ihren Freunden, damit sie sich davon ĂŒberzeugen können!
Danksagungen
Wie Sie am Titel erkennen können, wurde dieser Artikel von dem fantastischen Traktat von Jay Kreps inspiriert ââ. Ich habe Jay vor zehn Jahren bei einem Interview in LinkedIn getroffen, und seitdem ist er eine Inspiration fĂŒr mich.
Obwohl ich mich gerne als âLinkerd-Entwicklerâ bezeichne, ist die RealitĂ€t so, dass ich eher der Verantwortliche fĂŒr die README.md-Datei im Projekt bin. An Linkerd arbeiten heute , , Menschen, und dieses Projekt wĂ€re ohne die UnterstĂŒtzung der groĂartigen Gemeinschaft von Mitwirkenden und Nutzern nicht zustande gekommen.
Und abschlieĂend ein besonderer Dank an den Schöpfer von Linkerd, (primus inter pares), der zusammen mit mir vor vielen Jahren in das ganze GetĂŒmmel rund um Service Mesh eingetaucht ist.
P.S. vom Ăbersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «»;
- «».
Quelle: habr.com
