
Anmerkung des Ăbersetzers.: Der Autor dieses Artikels (Luc Perkins) ist Developer Advocate bei der CNCF, die das Zuhause fĂŒr Open-Source-Projekte wie Linkerd, SMI (Service Mesh Interface) und Kuma ist (ĂŒbrigens, haben Sie sich auch schon gefragt, warum Istio in dieser Liste fehlt?). Wiederholt versucht er, der DevOps-Community ein besseres VerstĂ€ndnis des modischen Hypes mit dem Namen âService Meshâ zu vermitteln, indem er 16 charakteristische Möglichkeiten aufzeigt, die solche Lösungen bieten.
Heute ist eines der heiĂesten Themen im Bereich der Softwaretechnik (und zu Recht!). Ich halte diese Technologie fĂŒr unglaublich vielversprechend und trĂ€ume davon, Zeuge ihrer breiten Verbreitung zu werden (natĂŒrlich, wenn es sinnvoll ist). Nichtsdestotrotz ist sie fĂŒr die meisten Menschen noch von einem Hauch Geheimnis umgeben. Sogar diejenigen, die gut damit vertraut sind, haben oft Schwierigkeiten, ihre Vorteile und was sie tatsĂ€chlich darstellt, zu formulieren (inklusive des bescheidenen Autors). In diesem Artikel werde ich versuchen, die Situation zu korrigieren, indem ich verschiedene AnwendungsfĂ€lle von âService Meshesâ aufliste.
* Anmerkung des Ăbersetzers: Hier und im Folgenden wird die Ăbersetzung âService Meshâ als âService-Netzâ fĂŒr den noch relativ neuen Begriff verwendet.
Aber zunÀchst möchte ich einige Bemerkungen machen:
- Ich habe nie mit Service Meshes gearbeitet und sie nicht auĂerhalb von Projekten verwendet, die ich fĂŒr mein eigenes Lernen angestoĂen habe. Auf der anderen Seite habe ich 2015 eine Menge Dokumentation fĂŒr das interne Service Mesh von Twitter geschrieben (es hieĂ damals noch nicht einmal âService Meshâ) und war an der Entwicklung der Website und der Dokumentation fĂŒr , was doch etwas bedeutet.
- Meine Liste ist exemplarisch und unvollstÀndig. Es sind durchaus mir unbekannte AnwendungsfÀlle möglich, und im Laufe der Zeit werden sicherlich neue Varianten auftreten, wÀhrend sich die Technologie weiterentwickelt und ihre Beliebtheit wÀchst.
- Zur gleichen Zeit unterstĂŒtzt nicht jede bestehende Implementierung eines Service Mesh alle aufgefĂŒhrten AnwendungsfĂ€lle. Daher sollten meine Formulierungen wie âService Mesh kannâŠâ als âEinzelne, möglicherweise auch alle gĂ€ngigen Implementierungen von Service Mesh könnenâŠâ gelesen werden.
- Die Reihenfolge der Beispiele spielt dabei keine Rolle.
Kurze Liste:
- Serviceerkennung;
- VerschlĂŒsselung;
- Authentifizierung und Autorisierung;
- Lastverteilung;
- Circuit Breaking;
- Automatische Skalierung;
- Canary Deployments;
- Blue-Green Deployments;
- Health Checks;
- Load Shedding;
- Traffic-Spiegelung;
- Isolation;
- Begrenzung der Anfragefrequenz, Wiederholungsversuche und Timeouts;
- Telemetrie;
- Audit;
- Visualisierung.
1. Dienstentdeckung
TL;DR: Verbinden Sie sich mit anderen Diensten im Netzwerk ĂŒber einfache Namen.
Dienste sollten in der Lage sein, einander automatisch zu âfindenâ durch angemessene Namen â zum Beispiel, service.api.production, pets/staging oder cassandra. Cloud-Umgebungen zeichnen sich durch ihre ElastizitĂ€t aus, und hinter einem Namen können sich zahlreiche Instanzen eines Dienstes verbergen. Es ist klar, dass es in einer solchen Situation physisch unmöglich ist, alle IP-Adressen fest zu codieren.
DarĂŒber hinaus, wenn ein Dienst einen anderen findet, sollte er in der Lage sein, Anfragen an diesen Dienst zu senden, ohne befĂŒrchten zu mĂŒssen, dass sie bei einer nicht funktionierenden Instanz landen. Mit anderen Worten, das Service Mesh sollte die VerfĂŒgbarkeit aller Dienstinstanzen ĂŒberwachen und die Liste der Hosts so aktuell wie möglich halten.
Jedes Service Mesh implementiert den Dienstentdeckungsmechanismus auf seine Weise. Derzeit ist der verbreitetste Ansatz die Delegation an externe Prozesse wie DNS Kubernetes. FrĂŒher verwendeten wir bei Twitter fĂŒr solche Zwecke ein Namenssystem . AuĂerdem ermöglicht die Technologie des Service Mesh das Auftreten benutzerdefinierter Namensmechanismen (obwohl ich noch keine Implementierung von SM mit dieser FunktionalitĂ€t gesehen habe).
2. VerschlĂŒsselung
TL;DR: Beseitigen Sie unverschlĂŒsselten Verkehr zwischen den Diensten und lassen Sie diesen Prozess automatisiert und skalierbar sein.
Es ist beruhigend zu wissen, dass Angreifer nicht in Ihr internes Netzwerk eindringen können. Firewalls erledigen dies hervorragend. Aber was passiert, wenn ein Hacker trotzdem eindringt? Kann er mit dem internen Dienstverkehr machen, was er will? Lassen wir uns hoffen, dass dies nicht der Fall sein wird. Um ein solches Szenario zu verhindern, sollte ein Netzwerk mit Null-Vertrauen (Zero-Trust) implementiert werden, bei dem der gesamte Verkehr zwischen den Diensten verschlĂŒsselt ist. Die meisten modernen Dienstnetzwerke erreichen dies durch gegenseitige (mutual TLS, mTLS). In einigen FĂ€llen funktioniert mTLS in gesamten Clouds und Clustern (ich denke, interplanetare Kommunikation wird eines Tages Ă€hnlich strukturiert sein).
NatĂŒrlich ist mTLS fĂŒr das Service Mesh nicht zwingend erforderlich.. Jeder Dienst kann sich um sein eigenes TLS kĂŒmmern, aber das bedeutet, dass er einen Weg finden muss, um Zertifikate zu generieren, diese auf die Hosts des Dienstes zu verteilen und Code in die Anwendung einzufĂŒgen, der diese Zertifikate aus Dateien lĂ€dt. Vergessen Sie nicht, diese Zertifikate in bestimmten ZeitabstĂ€nden zu aktualisieren. Dienstgitter automatisieren mTLS mit Systemen wie , die ihrerseits den Prozess der Ausstellung und Rotation von Zertifikaten automatisieren.
3. Authentifizierung und Autorisierung
TL;DR: Bestimmen Sie, wer der Anfragesteller ist, und legen Sie fest, was ihm erlaubt ist, noch bevor die Anfrage den Dienst erreicht.
Dienste möchten oft wissen, wer die Anfrage ausfĂŒhrt (Authentifizierung), und entscheiden dann anhand dieser Information, was was diesem Subjekt erlaubt ist (Autorisierung). In diesem Fall kann hinter dem Pronomen âwerâ Folgendes stecken:
- Andere Dienste. Dies wird als âPeer-Authentifizierungâ bezeichnet. Zum Beispiel möchte der DienstZugriff auf den Dienst
webdbdbEinige Benutzer. Dies wird als âAnfrage-Authentifizierungâ bezeichnet. - Zum Beispiel möchte der Benutzer haxor69eine neue Lampe kaufen. Dienstgitter bieten verschiedene Mechanismen, wie z. B.
JSON Web Tokens.Viele von uns haben das im Anwendungscode gemacht. Eine Anfrage kommt, wir durchsuchen die Tabelle .usw. Bei einem Dienstgitter geschieht dies noch bevor die Anfrage den Dienst erreicht.
usersNachdem wir festgestellt haben, von wem die Anfrage stammt, mĂŒssen wir bestimmen, was diesem Subjekt erlaubt ist. Einige Dienstgitter erlauben es, grundlegende Richtlinien (wer was tun darf) in Form von YAML-Dateien oder ĂŒber die Befehlszeile festzulegen, wĂ€hrend andere Integrationen mit Frameworks wieBerechtigungenunterstĂŒtzen. Das Endziel ist es, dass Ihre Dienste jede Anfrage annehmen, in der Annahme, dass sie aus einer vertrauenswĂŒrdigen Quelle stammt.
Diese Handlung ist erlaubt. 4. Lastverteilung und TL;DR: Verteilen Sie die Last auf die Instanzen des Dienstes nach einem bestimmten Muster.
4. Lastverteilung
TL;DR: Verteilen Sie die Last auf die Instanzen des Dienstes nach einem bestimmten Muster.
Der âServiceâ in einer Service-Sektion besteht sehr hĂ€ufig aus vielen identischen Instanzen. Zum Beispiel besteht der Service heute aus 5 Kopien, morgen könnte ihre Zahl auf 11 steigen. Die Anfragen, die an cache , mĂŒssen entsprechend einem definierten Ziel verteilt werden. Zum Beispiel, um die Verzögerung zu minimieren oder die Wahrscheinlichkeit zu maximieren, eine funktionierende Instanz zu erreichen. Am hĂ€ufigsten wird der Round-Robin-Algorithmus verwendet, es gibt jedoch auch viele andere â wie die Methode mit gewichtetem cache(weighted) Anfragen (man kann bevorzugte Ziele auswĂ€hlen), ringförmiges (ring) Hashing (Verwendung von konsistentem Hashing fĂŒr Upstream-Hosts) oder die Methode der geringsten Anzahl von Anfragen (Bevorzugung der Instanz mit der geringsten Anzahl von Anfragen). Klassische Lastverteiler haben auch andere Funktionen, wie HTTP-Caching und DDoS-Schutz, sind jedoch fĂŒr den East-West-Traffic (d.h. fĂŒr Traffic, der innerhalb des Rechenzentrums flieĂt â Anm. d. Ă.) nicht sehr relevant (typisches Anwendungsgebiet eines Service Mesh). NatĂŒrlich ist es nicht zwingend erforderlich, ein Service Mesh fĂŒr die Lastverteilung zu verwenden, jedoch ermöglicht es, die Lastverteilungsrichtlinien fĂŒr jeden Service aus einer zentralen Verwaltungsschicht festzulegen und zu kontrollieren, wodurch die Notwendigkeit entfĂ€llt, separate Lastverteiler im Netzwerkstack zu starten und zu konfigurieren.
5. Circuit Breaking
TL;DR: Stoppen Sie den Traffic zu dem problematischen Service und kontrollieren Sie den Schaden bei den schlechtesten Szenarien.
Wenn aus irgendeinem Grund der Service mit dem Traffic nicht zurechtkommt, bietet das Service Mesh mehrere Lösungsmöglichkeiten fĂŒr dieses Problem (andere werden in den entsprechenden Abschnitten behandelt). Circuit Breaking ist die strengste Möglichkeit, den Service vom Traffic abzuschneiden. Allerdings macht es alleine keinen Sinn â ein Notfallplan ist notwendig. Es kann ein Backpressure
backpressure () Service-Meshes ermöglichen nicht nur zu definieren,
wann eine Deaktivierung erfolgen sollte und es wird eine Abschaltung folgen und was Das folgt dem. In diesem Fall kann âwannâ jede Kombination der festgelegten Parameter umfassen: die Gesamtzahl der Anfragen ĂŒber einen bestimmten Zeitraum, die Anzahl der parallelen Verbindungen, ausstehende Anfragen, aktive Wiederholungsversuche usw.
Sie werden wahrscheinlich nicht den Circuit Breaking ĂŒberbeanspruchen wollen, aber es ist angenehm zu wissen, dass es einen Notfallplan gibt.
6. Automatische Skalierung
TL;DR: Erhöhen oder verringern Sie die Anzahl der Dienstinstanzen basierend auf bestimmten Kriterien.
Service-Meshes sind keine Planer, daher fĂŒhren sie kein Scaling eigenstĂ€ndig durch. Sie können jedoch Informationen bereitstellen, auf deren Grundlage Planer Entscheidungen treffen können. Da Service-Meshes Zugriff auf den gesamten Verkehr zwischen den Diensten haben, verfĂŒgen sie ĂŒber umfassende Informationen darĂŒber, was vor sich geht: welche Dienste Probleme haben, welche nur schwach ausgelastet sind (die ihnen zugewiesenen Ressourcen werden verschwendet) usw. Zum Beispiel skaliert Kubernetes die Dienste basierend auf der CPU- und Speicherauslastung der Pods.
(Siehe unseren Bericht â , aber wenn Sie die Skalierung auf der Grundlage eines anderen Parameters durchfĂŒhren möchten (in unserem Fall â verkehrsbezogen), wird eine spezielle Metrik benötigt. Eine Anleitungâ â Anm. d. Ă.)wie diese macht, aber der Prozess ist ziemlich komplex. Wir wĂŒrden uns wĂŒnschen, dass das Service Mesh es vereinfacht, indem es einfach erlaubt, Bedingungen wie âErhöhe die Anzahl der Dienstinstanzen , und auth auth7. Canary-Deployments
TL;DR: Testen Sie neue Funktionen oder Versionen des Dienstes an einer Teilmenge der Benutzer.
TL;DR: Testen Sie neue Funktionen oder Versionen des Dienstes an einer Teilgruppe von Nutzern.
Angenommen, Sie entwickeln ein gewisses SaaS-Produkt und planen, eine neue coole Version herauszubringen. Sie haben sie in der Staging-Umgebung getestet, und sie hat hervorragend funktioniert. Dennoch gibt es bestimmte Bedenken bezĂŒglich ihres Verhaltens unter realen Bedingungen. Mit anderen Worten, die neue Version muss an realen Aufgaben getestet werden, ohne das Vertrauen der Nutzer zu gefĂ€hrden. Canary-Deployments eignen sich hervorragend dafĂŒr. Sie ermöglichen es, eine neue Funktion einer bestimmten Untergruppe von Nutzern zu prĂ€sentieren. Diese Untergruppe kann aus den loyalsten Nutzern, denjenigen, die die kostenlose Version des Produkts nutzen, oder aus Nutzern bestehen, die bereit sind, âVersuchskaninchenâ zu sein.
Service-Meshes setzen dies um, indem sie Kriterien angeben, die bestimmen, wer welche Version der Anwendung sieht, und den Datenverkehr entsprechend leiten. FĂŒr die Dienste selbst Ă€ndert sich dabei nichts. Version 1.0 des Dienstes geht davon aus, dass alle Anfragen von Nutzern kommen, die diese auch sehen sollen, wĂ€hrend Version 1.1 das Gleiche fĂŒr ihre Nutzer annimmt. In der Zwischenzeit können Sie den Prozentsatz des Datenverkehrs zwischen der alten und der neuen Version Ă€ndern und eine wachsende Zahl von Nutzern zur neuen Version leiten, sofern sie stabil funktioniert und Ihre âVersuchskaninchenâ zustimmen.
8. Blau-GrĂŒne Deployments
TL;DR: Bringen Sie eine neue coole Funktion heraus, sind Sie jedoch bereit, alles sofort zurĂŒckzunehmen.
Bedeutung besteht darin, den neuen âblauenâ Dienst parallel zum alten âgrĂŒnenâ Dienst zu veröffentlichen. Wenn alles gut lĂ€uft und der neue Dienst sich bewĂ€hrt, kann der alte Dienst schrittweise abgeschaltet werden. (Leider wird auch dieser neue âblaueâ Dienst eines Tages das Schicksal des âgrĂŒnenâ teilen und verschwindenâŠ) Blau-GrĂŒne Deployments unterscheiden sich von Canary-Deployments dadurch, dass die neue Funktion allen Nutzern zur VerfĂŒgung steht (und nicht nur einem Teil); der Sinn besteht darin, einen âFallbackâ bereit zu haben, falls etwas schiefgeht.
Service-Mesh bieten eine sehr bequeme Möglichkeit, den âblauenâ Dienst zu testen und im Falle von Problemen sofort auf den funktionierenden âgrĂŒnenâ zu wechseln. Ganz zu schweigen davon, dass sie nebenbei eine Menge Informationen bereitstellen (siehe Punkt âTelemetrieâ unten) ĂŒber die Funktionsweise des âblauenâ, was hilft zu verstehen, ob dieser bereit ist, umfassend genutzt zu werden.
Anmerkung des Ăbersetzers.: Weitere Informationen zu verschiedenen Bereitstellungsstrategien in Kubernetes (einschlieĂlich der erwĂ€hnten Canary-, Blue/Green- und anderen Strategien) sind verfĂŒgbar in .
9. GesundheitsprĂŒfung
TL;DR: Achten Sie darauf, welche Instanzen von Diensten betriebsbereit sind, und reagieren Sie auf die, die es nicht mehr sind.
GesundheitsprĂŒfung (health check) hilft zu entscheiden, ob die Instanzen des Dienstes bereit sind, Verkehr zu empfangen und zu verarbeiten. Bei HTTP-Diensten könnte die GesundheitsprĂŒfung beispielsweise wie ein GET-Anruf an den Endpoint aussehen /health. Eine Antwort 200 OK wĂŒrde bedeuten, dass die Instanz gesund ist, jede andere Antwort, dass sie nicht bereit ist, Verkehr zu akzeptieren. Service-Mesh erlauben es, sowohl die Methode, wie die BetriebsfĂ€higkeit geprĂŒft wird, als auch die HĂ€ufigkeit, mit der diese PrĂŒfung stattfindet, anzugeben. Diese Informationen können dann fĂŒr andere Zwecke verwendet werden â zum Beispiel zur Lastverteilung und Circuit Breaking.
Auf diese Weise ist die GesundheitsprĂŒfung kein eigenstĂ€ndiges Nutzungsszenario, sondern wird normalerweise zur Erreichung anderer Ziele eingesetzt. AbhĂ€ngig von den Ergebnissen der GesundheitsprĂŒfungen können zudem externe MaĂnahmen erforderlich sein (im VerhĂ€ltnis zu anderen Zielen der Service-Meshs): Zum Beispiel könnte es nötig sein, den Statusbereich zu aktualisieren, ein Issue bei GitHub zu erstellen oder ein Ticket in JIRA auszufĂŒllen. Und Service-Mesh bieten einen praktischen Mechanismus, um all dies zu automatisieren.
10. Lastabwurf (load shedding)
TL;DR: Leiten Sie den Verkehr als Antwort auf einen vorĂŒbergehenden Anstieg der Nutzung um.
Wenn ein Dienst mit Verkehr ĂŒberlastet ist, können Sie vorĂŒbergehend einen Teil dieses Verkehrs woanders hinleiten (d.h. âabwerfenâ, âumleitenâ (shed) ihn dorthin). Beispielsweise zu einem Backup-Dienst oder einem Rechenzentrum oder zu einem permanenten Thema. Infolgedessen wird der Dienst weiterhin einen Teil der Anfragen verarbeiten, anstatt zuversagen und die gesamte Verarbeitung einzustellen. Eine Lastablösung ist vorzuziehen, als den gesamten Kreis zu unterbrechen, aber es ist dennoch unerwĂŒnscht, dies ĂŒbermĂ€Ăig auszunutzen. Sie ermöglicht es, kaskadierende AusfĂ€lle zu verhindern, bei denen nachgelagerte Dienste ausfallen.
11. Parallelisierung / Traffic-Mirroring
TL;DR: Senden Sie eine Anfrage gleichzeitig an mehrere Stellen.
Manchmal besteht die Notwendigkeit, eine Anfrage (oder eine bestimmte Auswahl von Anfragen) gleichzeitig an mehrere Dienste zu senden. Ein typisches Beispiel ist das Senden eines Teils des Produktionsverkehrs zu einem Staging-Dienst. Der zentrale Webserver der Produktion sendet eine Anfrage an den nachgelagerten Dienst products.production und nur zu diesem. Der Service-Mesh kopiert diese Anfrage intelligent und sendet sie an products.staging, dessen Webserver sich dessen nicht einmal bewusst ist.
Ein weiteres verwandtes Nutzungsszenario eines Service-Mesh, das ĂŒber die Parallelisierung des Verkehrs implementiert werden kann, ist das . Dies sieht vor, dass dieselben Anfragen an verschiedene Versionen eines Dienstes gesendet werden, um zu ĂŒberprĂŒfen, ob sich alle Versionen gleich verhalten. Mir ist bisher keine Implementierung eines Service-Mesh mit einem integrierten Regressionstestssystem wie , begegnet, aber die Idee scheint vielversprechend.
12. Isolierung
TL;DR: Unterteilen Sie Ihr Service-Mesh in Mininetze.
Auch bekannt als Segmentierung, ist Isolierung die Kunst, ein Service-Mesh in logisch abgegrenzte Segmente zu unterteilen, die nichts voneinander wissen. Isolierung Àhnelt ein wenig der Einrichtung von virtuellen privaten Netzwerken. Der grundlegende Unterschied besteht jedoch darin, dass Sie weiterhin alle Vorteile eines Service-Mesh (wie die Dienstentdeckung) nutzen können, jedoch mit zusÀtzlicher Sicherheit. Wenn es einem Angreifer gelingt, in einen Dienst innerhalb eines der Subnetze einzudringen, kann er nicht sehen, welche Dienste in anderen Subnetzen laufen oder deren Traffic abfangen.
DarĂŒber hinaus können die Vorteile auch organisatorischer Natur sein. Möglicherweise möchten Sie Dienste in Subnetze unterteilen, abhĂ€ngig von der Unternehmensstruktur, und Entwickler von der kognitiven Belastung befreien, die durch die Notwendigkeit entsteht, sich an das gesamte Service-Mesh zu erinnern.
13. Anfragerate begrenzen, Wiederholungen und ZeitĂŒberschreitungen
TL;DR: Es mĂŒssen keine dringenden Aufgaben zum Management von Anfragen mehr in den Code-Basis aufgenommen werden.
All diese Dinge könnten als separate AnwendungsfĂ€lle betrachtet werden, aber ich habe mich entschieden, sie aufgrund einer gemeinsamen Eigenschaft zusammenzufassen: Sie ĂŒbernehmen das Management des Lebenszyklus von Anfragen, normalerweise von Anwendungslibraries bearbeitet. Wenn Sie einen Webserver in Ruby on Rails (nicht integriert mit Service Mesh) entwickeln, der Anfragen an Backend-Dienste ĂŒberstellt, , muss die Anwendung selbst entscheiden, was zu tun ist, wenn N Anfragen fehlschlagen. AuĂerdem muss ermittelt werden, wie viel Traffic diese Dienste bewĂ€ltigen können, und diese Parameter mĂŒssen mit einer speziellen Bibliothek 'hardcodiert' werden. DarĂŒber hinaus muss die Anwendung entscheiden, wann es Zeit ist aufzugeben und die Anfrage verfallen zu lassen (nach Timeout). Um einen der oben genannten Parameter zu Ă€ndern, muss der Webserver angehalten, neu konfiguriert und neu gestartet werden.
Die Ăbertragung dieser Aufgaben an das Service Mesh bedeutet nicht nur, dass die Entwickler der Dienste nicht mehr darĂŒber nachdenken mĂŒssen, sondern auch, dass sie aus einer ĂŒbergeordneten Perspektive betrachtet werden können. Wenn eine komplexe Kette von Diensten verwendet wird, sagen wir A -> B -> C -> D -> E, muss der gesamte Lebenszyklus der Anfrage berĂŒcksichtigt werden. Wenn es darum geht, die Timeouts im Dienst C zu verlĂ€ngern, ist es sinnvoll, dies alles auf einmal zu tun und nicht in Teilen: den Code des Dienstes zu aktualisieren und darauf zu warten, dass der Pull-Request akzeptiert wird und das CI-System den aktualisierten Dienst bereitstellt.
14. Telemetrie
TL;DR: Sammeln Sie alle notwendigen (und nicht ganz notwendigen) Informationen von den Dienstleistungen.
Telemetrie ist ein allgemeiner Begriff, der Metriken, verteilte Tracing und Protokolle umfasst. Service Meshes bieten Mechanismen zum Sammeln und Verarbeiten aller drei Datentypen. Hier wird es etwas vage, da die Anzahl der möglichen Entscheidungen zu groĂ ist. FĂŒr das Sammeln von Metriken gibt es und andere Werkzeuge, zum Sammeln von Protokollen kann man verwenden , , usw. (zum Beispiel ClickHouse mit unserem fĂŒr K8s â Anm. d. Ăbers., fĂŒr verteiltes Tracing gibt es usw. Jedes Service Mesh kann einige Instrumente unterstĂŒtzen und andere nicht. Es wird interessant sein zu sehen, ob das Projekt eine gewisse Konvergenz erreichen kann.
In diesem Fall liegt der Vorteil der Service-Mesh-Technologie darin, dass Sidecar-Container grundsÀtzlich alle oben genannten Daten von ihren Diensten sammeln können. Anders gesagt, Sie erhalten ein einheitliches System zur Erfassung von Telemetriedaten, und das Service Mesh kann all diese Informationen auf verschiedene Arten verarbeiten. Zum Beispiel:
- Die Logs eines bestimmten Dienstes im CLI verfolgen;
- den Datenverkehr ĂŒber das Dashboard des Service Mesh ĂŒberwachen;
- verteilte Traces sammeln und diese an ein System wie Jaeger weiterleiten.
Achtung, subjektive Meinung: Im Allgemeinen ist Telemetrie der Bereich, in den das Eingreifen eines Service Mesh unerwĂŒnscht ist. Das Sammeln grundlegender Informationen und die EchtzeitĂŒberwachung bestimmter âGoldmetrikenâ wie die Erfolgsquote von Anfragen und Latenzen sind in Ordnung, aber lassen Sie uns hoffen, dass wir nicht Zeugen der Entstehung solcher Frankenstein-Stacks werden, die versuchen, spezialisierte Systeme zu ersetzen, von denen einige sich bereits hervorragend bewĂ€hrt haben und gut untersucht sind.
15. Audit
TL;DR: Wer die Lehren der Geschichte vergisst, ist dazu verurteilt, sie zu wiederholen.
Audit ist die Kunst, wichtige Ereignisse im System zu beobachten. Im Falle des Service Mesh kann dies bedeuten, zu verfolgen, wer Anfragen an bestimmte Endpoints bestimmter Dienste gestellt hat oder wie oft in den letzten Monat ein Ereignis im Zusammenhang mit der Sicherheit aufgetreten ist.
Es ist klar, dass das Audit sehr eng mit der Telemetrie verbunden ist. Der Unterschied besteht jedoch darin, dass Telemetrie ĂŒblicherweise mit Dingen wie Leistung und technischer Feinheit assoziiert wird, wĂ€hrend das Audit sich auf rechtliche und andere Fragen beziehen kann, die ĂŒber die rein technische SphĂ€re hinausgehen (zum Beispiel die Einhaltung der GDPR â der allgemeinen Datenschutzverordnung der EU).
16. Visualisierung
TL;DR: Es lebe React.js â eine unerschöpfliche Quelle skurriler Schnittstellen.
Vielleicht gibt es einen passenderen Begriff, aber ich kenne ihn nicht. Ich meine einfach die grafische Darstellung des Service Mesh oder einiger seiner Komponenten. Diese Visualisierungen können Indikatoren wie durchschnittliche Latenzen, Informationen zur Konfiguration der Sidecar-Container, Ergebnisse von Gesundheitschecks und Benachrichtigungen enthalten.
Die Arbeit in einer serviceorientierten Umgebung ist mit einer deutlich höheren kognitiven Belastung verbunden im Vergleich zu Seiner MajestĂ€t dem Monolithen. Daher sollte der kognitive Druck um jeden Preis verringert werden. Eine banale grafische BenutzeroberflĂ€che fĂŒr das Service-Mesh, mit der Möglichkeit, auf einen Knopf zu klicken und das gewĂŒnschte Ergebnis zu erhalten, kann entscheidend fĂŒr das Wachstum der PopularitĂ€t dieser Technologie sein.
Wurden nicht in die Liste aufgenommen
UrsprĂŒnglich hatte ich vor, noch einige weitere AnwendungsfĂ€lle in die Liste aufzunehmen, aber ich habe mich dann entschieden, dies nicht zu tun. Hier sind sie zusammen mit den GrĂŒnden fĂŒr meine Entscheidung:
- Multi-Data-Center. Meiner Ansicht nach handelt es sich hierbei nicht so sehr um einen Anwendungsfall, sondern um einen engen und spezifischen Anwendungsbereich von Service-Meshes oder einer bestimmten FunktionalitÀt wie der Dienstentdeckung.
- Ingress und Egress. Dies ist ein verwandter Bereich, aber ich habe mich (vielleicht kĂŒnstlich) auf den Anwendungsfall âTraffic East-Westâ beschrĂ€nkt. Ingress und Egress verdienen einen eigenen Artikel.
Fazit
Das ist vorerst alles! Noch einmal, diese Liste ist sehr subjektiv und wahrscheinlich unvollstĂ€ndig. Wenn Sie der Meinung sind, dass ich etwas ĂŒbersehen habe oder einen Fehler gemacht habe, wenden Sie sich bitte ĂŒber Twitter an mich (). Bitte beachten Sie die guten Manieren.
P.S. vom Ăbersetzer
Als Grundlage fĂŒr die Titelillustration des Artikels wurde ein Bild aus dem Artikel ââ (Autor â Gregory MacKinnon) verwendet. Es zeigt, wie ein Teil der FunktionalitĂ€t aus Anwendungen (grĂŒn) in das Service-Mesh ĂŒbergegangen ist, das die Beziehungen zwischen ihnen (blau) gewĂ€hrleistet.
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «».
Quelle: habr.com
