Anwendungsszenarien fĂŒr Service-Mesh

Anwendungsszenarien fĂŒr Service-Mesh

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 Service Mesh 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 Linkerd, 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 Finagle. 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 TLS (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 SPIFFE, 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:

  1. Andere Dienste. Dies wird als „Peer-Authentifizierung“ bezeichnet. Zum Beispiel möchte der DienstZugriff auf den Dienst web db dbEinige Benutzer. Dies wird als „Anfrage-Authentifizierung“ bezeichnet.
  2. 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 , finden den Benutzer und vergleichen das Passwort, dann ĂŒberprĂŒfen wir die Spalte.

    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 wie Berechtigungen unterstĂŒ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. Open Policy Agent4. 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 (auf die Services, die die Anfragen ausfĂŒhren, vorgesehen werden (vergessen Sie nicht, Ihr Service Mesh dafĂŒr einzurichten!), oder zum Beispiel die Statusseite in rot einfĂ€rben und die Benutzer auf eine alternative Seite mit „schwimmendem Wal“ („Twitter ist down“) umleiten.) 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 AnleitungAutoskalierung und Ressourcenverwaltung in Kubernetes“ — Anm. d. Ü.)wie diese zeigt, wie man dies mit 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 Envoy, Istio und Prometheusauth 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 von Blau-GrĂŒnen Deployments 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 diesem Artikel.

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 Pulsar 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 Regressionstests. 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 Diffy, 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, , wĂŒrden Sie den Port, 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 Prometheus und andere Werkzeuge, zum Sammeln von Protokollen kann man verwenden fluentd, Loki, Vector usw. (zum Beispiel ClickHouse mit unserem loghouse fĂŒr K8s — Anm. d. Übers., fĂŒr verteiltes Tracing gibt es Jaeger usw. Jedes Service Mesh kann einige Instrumente unterstĂŒtzen und andere nicht. Es wird interessant sein zu sehen, ob das Projekt Open Telemetry 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 (@lucperkins). Bitte beachten Sie die guten Manieren.

P.S. vom Übersetzer

Als Grundlage fĂŒr die Titelillustration des Artikels wurde ein Bild aus dem Artikel „What is a Service Mesh (and when to use one)?“ (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

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster