{"id":32777,"date":"2019-10-31T21:48:52","date_gmt":"2019-10-31T18:48:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/netramesh-legkovesnoe-service-mesh-reshenie\/"},"modified":"2019-10-31T21:48:52","modified_gmt":"2019-10-31T18:48:52","slug":"netramesh-legkovesnoe-service-mesh-reshenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","title":{"rendered":"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Beim \u00dcbergang von einer monolithischen Anwendung zu einer Mikroservice-Architektur sehen wir uns neuen Herausforderungen gegen\u00fcber.<\/p>\n<p><\/p>\n<p>In einer monolithischen Anwendung reicht es in der Regel aus, nur zu bestimmen, in welchem Teil des Systems der Fehler aufgetreten ist. Wahrscheinlich liegt das Problem im Code des Monolithen oder in der Datenbank. Aber wenn wir beginnen, das Problem in einer Mikroservice-Architektur zu suchen, ist es bereits nicht mehr so offensichtlich. Wir m\u00fcssen den gesamten Weg finden, den die Anfrage von Anfang bis Ende zur\u00fcckgelegt hat, und ihn aus Hunderten von Mikroservices herausheben. Viele von ihnen haben zudem eigene Speicherorte, wo sowohl logische Fehler als auch Leistungs- und Ausfallsicherheitsprobleme auftreten k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/f583f3d8d4a2239411628aa8f4d06041.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ich habe lange nach einem Werkzeug gesucht, das mir hilft, mit solchen Problemen umzugehen (ich habe dar\u00fcber auf Habr\u00e9 geschrieben: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/419319\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/433650\/\">2<\/a><\/noindex>), aber letztendlich habe ich eine eigene Open-Source-L\u00f6sung entwickelt. In dem Artikel spreche ich \u00fcber die Vorteile des Service-Mesh-Ansatzes und teile ein neues Werkzeug zur Umsetzung. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Verteiltes Tracing ist eine verbreitete L\u00f6sung f\u00fcr die Fehlersuche in verteilten Systemen. Aber was ist, wenn in dem System ein solcher Ansatz zur Informationssammlung \u00fcber Netzinteraktionen noch nicht implementiert ist oder, was schlimmer ist, er in einem Teil des Systems bereits gut funktioniert, im anderen Teil jedoch nicht, da er nicht zu den alten Services hinzugef\u00fcgt wurde? Um die genaue Wurzelursache des Problems zu bestimmen, ist es notwendig, ein vollst\u00e4ndiges Bild dessen zu haben, was im System passiert. Besonders wichtig ist es, zu verstehen, welche Mikroservices an den kritischen Gesch\u00e4ftspfaden beteiligt sind.<\/p>\n<p><\/p>\n<p>Hier kann uns der Ansatz des Service Mesh helfen, der sich um die gesamte Infrastruktur zur Sammlung von Netzwerkdaten auf einer Ebene k\u00fcmmert, die unterhalb der Funktionsweise der Services liegt. Dieser Ansatz erm\u00f6glicht es uns, den gesamten Verkehr abzufangen und in Echtzeit zu analysieren. Dabei m\u00fcssen die Anwendungen davon nichts wissen.<\/p>\n<p><\/p>\n<h1 id=\"service-mesh-podhod\">Service-Mesh-Ansatz<\/h1>\n<p><\/p>\n<p>Die Hauptidee des Service-Mesh-Ansatzes besteht darin, eine zus\u00e4tzliche Infrastrukturebene \u00fcber dem Netzwerk hinzuzuf\u00fcgen, die es uns erm\u00f6glicht, beliebige Dinge mit der Kommunikation zwischen Diensten zu tun. Die meisten Implementierungen funktionieren folgenderma\u00dfen: Zu jedem Mikrodienst wird ein zus\u00e4tzlicher Sidecar-Container mit einem transparenten Proxy hinzugef\u00fcgt, \u00fcber den der gesamte eingehende und ausgehende Verkehr des Dienstes geleitet wird. Und dies ist der Punkt, an dem wir Lastenausgleich f\u00fcr Clients durchf\u00fchren, Sicherheitsrichtlinien anwenden, Beschr\u00e4nkungen f\u00fcr die Anzahl der Anfragen einf\u00fchren und wichtige Informationen \u00fcber die Interaktion der Dienste in der Produktion sammeln k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/b1f8636e3b99a3814138b6443b3e0799.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"resheniya\">L\u00f6sungen<\/h1>\n<p><\/p>\n<p>Es gibt bereits mehrere Implementierungen dieses Ansatzes: <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/\">Istio<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/linkerd.io\/2\/overview\/\">linkerd2<\/a><\/noindex>. Sie bieten viele Funktionen \u201eout of the box\u201c. Aber gleichzeitig bringt das auch einen gro\u00dfen Overhead an Ressourcen mit sich. Je gr\u00f6\u00dfer der Cluster, in dem ein solches System l\u00e4uft, desto mehr Ressourcen sind erforderlich, um die neue Infrastruktur aufrechtzuerhalten. Bei Avito betreiben wir Kubernetes-Cluster, die Tausende von Dienst-Instanzen beherbergen (und deren Zahl w\u00e4chst schnell). In der aktuellen Implementierung ben\u00f6tigt Istio ~300 MB RAM pro Dienst-Instanz. Aufgrund der vielen Funktionen hat die transparente Lastenverteilung auch Einfluss auf die Gesamtlatenz der Dienste (bis zu 10 ms).<\/p>\n<p><\/p>\n<p>Letztendlich haben wir uns angesehen, welche Funktionen wir derzeit ben\u00f6tigen, und beschlossen, dass der Hauptgrund, warum wir angefangen haben, solche L\u00f6sungen zu implementieren, die F\u00e4higkeit war, Tracing-Informationen transparent aus dem gesamten System zu sammeln. Au\u00dferdem wollten wir die Kontrolle \u00fcber die Interaktion zwischen den Diensten haben und verschiedene Manipulationen an den Headern vornehmen, die zwischen den Diensten \u00fcbertragen werden. <\/p>\n<p><\/p>\n<p>Am Ende kamen wir zu unserer eigenen L\u00f6sung: <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"netramesh\">Netramesh<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex> ist eine leichte Service-Mesh-L\u00f6sung mit unendlichen Skalierungsm\u00f6glichkeiten, unabh\u00e4ngig von der Anzahl der Dienste im System.<\/p>\n<p><\/p>\n<p>Die Hauptziele der neuen L\u00f6sung waren ein geringer Ressourcen-Overhead und hohe Leistung. Zu den grundlegenden Funktionen wollten wir sofort die M\u00f6glichkeit haben, transparently Tracing-Spans in unser Jaeger-System zu senden.<\/p>\n<p><\/p>\n<p>Heute werden die meisten Cloud-L\u00f6sungen in Golang realisiert. Und nat\u00fcrlich gibt es daf\u00fcr seine Gr\u00fcnde. Es ist einfach und angenehm, Netzwerkapplikationen in Golang zu schreiben, die asynchron mit Ein- und Ausgabe arbeiten und sich je nach Bedarf auf die Kerne skalieren. Und was ebenfalls sehr wichtig ist, die Leistung ist ausreichend, um diese Aufgabe zu bew\u00e4ltigen. Daher haben wir uns ebenfalls f\u00fcr Golang entschieden.<\/p>\n<p><\/p>\n<h1 id=\"proizvoditelnost\">Leistung<\/h1>\n<p><\/p>\n<p>Wir haben unsere Bem\u00fchungen auf die Maximierung der Leistung fokussiert. F\u00fcr eine L\u00f6sung, die neben jeder Instanz des Dienstes bereitgestellt wird, ist ein geringer Speicher- und CPU-Verbrauch erforderlich. Und nat\u00fcrlich sollte auch die Antwortzeit so niedrig wie m\u00f6glich sein.<\/p>\n<p><\/p>\n<p>Lassen Sie uns sehen, welche Ergebnisse erzielt wurden. <\/p>\n<p><\/p>\n<h2 id=\"ram\">RAM<\/h2>\n<p><\/p>\n<p>Netramesh verbraucht ~10Mb ohne Verkehr und maximal 50Mb mit einer Last von bis zu 10000 RPS pro Instanz.<\/p>\n<p><\/p>\n<p>Der Istio Envoy-Proxy verbraucht in unseren Clustern mit Tausenden von Instanzen immer ~300Mb. Das erlaubt es nicht, ihn im gesamten Cluster zu skalieren.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/665b46c30183d502900027b7b3fcf2aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/d862122a15eb92402e35cb68c448f7c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit Netramesh haben wir den Speicherverbrauch um etwa das 10-fache reduziert.<\/p>\n<p><\/p>\n<h2 id=\"cpu\">CPU<\/h2>\n<p><\/p>\n<p>Die CPU-Nutzung ist unter Last relativ gleich. Sie h\u00e4ngt von der Anzahl der Anfragen pro Zeiteinheit an das Sidecar ab. Werte bei 3000 Anfragen pro Sekunde im H\u00f6chstfall:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/6dbae38c42706dc3fbb833fdaf058b48.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/5a2eff682a457b620cbf71b520d90ca4.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Es gibt noch einen weiteren wichtigen Punkt: Netramesh ist eine L\u00f6sung ohne Control Plane und verbraucht unter Last keine CPU-Zeit. Bei Istio aktualisieren die Sidecars immer die Endpunkte der Dienste. Infolgedessen sehen wir bei fehlender Last folgendes Bild:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/6e0212c6d34f8fdabf7b2f50a4f8137a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wir verwenden HTTP\/1 f\u00fcr die Interaktion zwischen den Diensten. Die Erh\u00f6hung der Antwortzeit bei Istio beim Proxyn \u00fcber Envoy lag bei bis zu 5-10ms, was f\u00fcr Dienste, die bereit sind, in Millisekunden zu antworten, ziemlich viel ist. Mit Netramesh wurde diese Zeit auf 0.5-2ms reduziert.<\/p>\n<p><\/p>\n<h1 id=\"masshtabiruemost\">Skalierbarkeit<\/h1>\n<p><\/p>\n<p>Die geringe Menge an Ressourcen, die von jedem Proxy verbraucht wird, erm\u00f6glicht es, ihn neben jedem Dienst zu platzieren. Netramesh wurde absichtlich ohne einen Control Plane-Komponenten entwickelt, um die Leichtigkeit jedes Sidecars zu gew\u00e4hrleisten. Oft verbreitet der Control Plane in Service Mesh-L\u00f6sungen die Informationen zur Service-Entdeckung in jedes Sidecar. Damit kommen auch Informationen \u00fcber Timeouts und Lastverteilungseinstellungen. All dies erm\u00f6glicht viele n\u00fctzliche Dinge, bl\u00e4ht jedoch leider die Gr\u00f6\u00dfe der Sidecars auf. <\/p>\n<p><\/p>\n<h1 id=\"service-discovery\">Service-Entdeckung<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/26bc86ed2ebf15a8d51388982e23e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Netramesh f\u00fcgt keine zus\u00e4tzlichen Mechanismen f\u00fcr die Service-Entdeckung hinzu. Der gesamte Verkehr wird transparent \u00fcber das Netra Sidecar geleitet. <\/p>\n<p><\/p>\n<p>Netramesh unterst\u00fctzt das HTTP\/1-Anwendungsprotokoll. Zur Definition wird eine konfigurierbare Liste von Ports verwendet. In der Regel gibt es in einem System mehrere Ports, \u00fcber die die Interaktion \u00fcber HTTP erfolgt. Zum Beispiel verwenden wir f\u00fcr die Interaktion zwischen Diensten und externen Anfragen die Ports 80, 8890, 8080. In diesem Fall k\u00f6nnen diese \u00fcber eine Umgebungsvariable festgelegt werden. <code>NETRA_HTTP_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>Wenn Sie Kubernetes als Orchestrator nutzen und dessen Service-Mechanismus f\u00fcr die internen Interaktionen zwischen Diensten verwenden, bleibt der Mechanismus unver\u00e4ndert. Zun\u00e4chst erh\u00e4lt der Microservice die Service-IP-Adresse \u00fcber kube-dns und \u00f6ffnet eine neue Verbindung. Diese Verbindung wird zun\u00e4chst mit dem lokalen netra-sidecar hergestellt, und alle TCP-Pakete gelangen zun\u00e4chst an netra. Anschlie\u00dfend stellt netra-sidecar die Verbindung zum urspr\u00fcnglichen Ziel her. Das NAT auf die Pod-IP auf dem Knoten bleibt genau wie ohne netra.<\/p>\n<p><\/p>\n<h1 id=\"raspredelennyy-tracing-i-prokidyvanie-konteksta\">Verteiltes Tracing und Weitergabe des Kontextes<\/h1>\n<p><\/p>\n<p>Netramesh bietet die Funktionalit\u00e4t, die erforderlich ist, um Tracing-Spans \u00fcber HTTP-Interaktionen zu senden. Netra-sidecar analysiert das HTTP-Protokoll, misst die Verz\u00f6gerungen von Anfragen und extrahiert die notwendigen Informationen aus den HTTP-Headern. Letztendlich erhalten wir alle Traces in einem einheitlichen Jaeger-System. F\u00fcr eine feinere Konfiguration k\u00f6nnen auch Umgebungsvariablen verwendet werden, die die offizielle Bibliothek bereitstellt. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-go#environment-variables\">jaeger go library<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/22a2d3be2cef1e495702ad75e062676f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/20ff67f0c7f3590dce3d41db2a10267e.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Aber es gibt ein Problem. Solange die Dienste keinen speziellen Uber-Header generieren und weitergeben, werden wir die verbundenen Tracing-Spans im System nicht sehen. Und genau das ben\u00f6tigen wir, um schnell die Ursachen von Problemen zu finden. Hier hat Netramesh erneut eine L\u00f6sung. Proxys lesen die HTTP-Header; wenn der Uber Trace ID nicht vorhanden ist, wird er generiert. Netramesh speichert au\u00dferdem Informationen \u00fcber eingehende und ausgehende Anfragen im Sidecar und ordnet sie an, indem erforderliche Header aus den ausgehenden Anfragen hinzugef\u00fcgt werden. Alles, was in den Diensten getan werden muss, ist, einen einzigen Header weiterzugeben. <code>X-Request-Id<\/code>, der \u00fcber eine Umgebungsvariable konfiguriert werden kann. <code>NETRA_HTTP_REQUEST_ID_HEADER_NAME<\/code>. Um die Gr\u00f6\u00dfe des Kontextes in Netramesh zu verwalten, k\u00f6nnen die folgenden Umgebungsvariablen festgelegt werden: <code>NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS<\/code> (die Zeit, w\u00e4hrend der der Kontext gespeichert wird) und <code>NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL<\/code> (die H\u00e4ufigkeit der Kontextbereinigung).<\/p>\n<p><\/p>\n<p>Es ist auch m\u00f6glich, mehrere Pfade in Ihrem System zu kombinieren, indem Sie sie mit einem speziellen Sitzungsmarker kennzeichnen. Netra erm\u00f6glicht es, <code>HTTP_HEADER_TAG_MAP<\/code> um HTTP-Header in entsprechende Tracing-Span-Tags umzuwandeln. Dies kann besonders n\u00fctzlich f\u00fcr Tests sein. Nach dem Durchlaufen eines Funktionstests kann man sehen, welcher Teil des Systems betroffen war, indem man nach dem entsprechenden Sitzungs-Schl\u00fcssel filtert.<\/p>\n<p><\/p>\n<h1 id=\"opredelenie-istochnika-zaprosa\">Bestimmung der Anforderungsquelle<\/h1>\n<p><\/p>\n<p>Um festzustellen, woher die Anfrage kam, k\u00f6nnen Sie die Funktion zur automatischen Hinzuf\u00fcgung des Quell-Headers nutzen. Mit der Umgebungsvariablen <code>NETRA_HTTP_X_SOURCE_HEADER_NAME<\/code> kann der Headername festgelegt werden, der automatisch gesetzt wird. Mit <code>NETRA_HTTP_X_SOURCE_VALUE<\/code> kann der Wert festgelegt werden, der den X-Source-Header f\u00fcr alle ausgehenden Anfragen erhalten soll. <\/p>\n<p><\/p>\n<p>Dies erm\u00f6glicht eine einheitliche Verbreitung dieses n\u00fctzlichen Headers im gesamten Netzwerk. Anschlie\u00dfend kann er in Diensten verwendet und in Protokollen oder Metriken hinzugef\u00fcgt werden.<\/p>\n<p><\/p>\n<h1 id=\"routing-trafika-i-vnutrennosti-netramesh\">Traffic-Routing und die Inneren von Netramesh<\/h1>\n<p><\/p>\n<p>Netramesh besteht aus zwei Hauptkomponenten. Die erste, netra-init, legt Netzwerkregeln zum Abfangen von Traffic fest. Sie nutzt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Lookyan\/netramesh\/blob\/master\/iptables-rules.sh\">iptables redirect Regeln<\/a><\/noindex> zum Abfangen des gesamten oder eines Teils des Traffics auf den Sidecar, der die zweite Hauptkomponente von Netramesh ist. Es kann konfiguriert werden, welche Ports f\u00fcr eingehende und ausgehende TCP-Sitzungen abgefangen werden sollen: <code>INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>Das Tool bietet auch eine interessante M\u00f6glichkeit: probabilistisches Routing. Wenn Sie Netramesh ausschlie\u00dflich zur Sammlung von Tracing-Spans verwenden, k\u00f6nnen Sie im Produktionsumfeld Ressourcen sparen und probabilistisches Routing mithilfe der Variablen <code>NETRA_INBOUND_PROBABILITY<\/code> und <code>NETRA_OUTBOUND_PROBABILITY<\/code> (von 0 bis 1) aktivieren. Der Standardwert betr\u00e4gt 1 (der gesamte Traffic wird abgefangen).<\/p>\n<p><\/p>\n<p>Nach erfolgreichem Abfangen nimmt der Netra-Sidecar eine neue Verbindung an und verwendet die <code>SO_ORIGINAL_DST<\/code> Socket-Option, um den urspr\u00fcnglichen Zielort zu erhalten. Anschlie\u00dfend \u00f6ffnet Netra eine neue Verbindung zur urspr\u00fcnglichen IP-Adresse und stellt eine bidirektionale TCP-Kommunikation zwischen den Parteien her, indem es den gesamten durchlaufenden Traffic \u00fcberwacht. Wenn der Port als HTTP festgelegt ist, versucht Netra, diesen zu parsen und zu tracen. Sollte das Parsen von HTTP nicht erfolgreich sein, f\u00e4llt Netra auf TCP zur\u00fcck und proxyed die Bytes transparent.<\/p>\n<p><\/p>\n<h1 id=\"postroenie-grafa-zavisimostey\">Aufbau eines Abh\u00e4ngigkeitsdiagramms<\/h1>\n<p><\/p>\n<p>Nach dem Sammeln einer gro\u00dfen Menge an Tracing-Informationen in Jaeger m\u00f6chte man ein vollst\u00e4ndiges Interaktionsdiagramm im System erhalten. Wenn Ihr System jedoch stark ausgelastet ist und im Laufe eines Tages Milliarden von Tracing-Spans angeh\u00e4uft werden, wird es nicht so einfach sein, diese zu aggregieren. Es gibt einen offiziellen Weg daf\u00fcr: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/spark-dependencies\">spark-dependencies<\/a><\/noindex>. Dennoch wird es Stunden dauern, um ein vollst\u00e4ndiges Diagramm zu erstellen und das gesamte Dataset von Jaeger f\u00fcr die vergangenen 24 Stunden herunterzuladen. <\/p>\n<p><\/p>\n<p>Wenn Sie Elasticsearch zur Speicherung von Tracing-Spans verwenden, k\u00f6nnen Sie ein <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Lookyan\/jaeger-dependencies\">einfaches Tool in Golang<\/a><\/noindex>, das ein \u00e4hnliches Diagramm in Minuten erstellt, nutzen, indem es die Funktionen und M\u00f6glichkeiten von Elasticsearch nutzt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichte Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/26eb13e066ed8482010fde103d3832fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"kak-ispolzovat-netramesh\">Netramesh verwenden<\/h1>\n<p><\/p>\n<p>Netra kann einfach zu jedem Dienst hinzugef\u00fcgt werden, der unter einem beliebigen Orchestrator arbeitet. Sie k\u00f6nnen ein Beispiel ansehen. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2HVRv7D\">hier<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Momentan hat Netra nicht die M\u00f6glichkeit, eine Sidecar automatisch in Dienste einzuf\u00fcgen, aber es gibt Pl\u00e4ne f\u00fcr eine Umsetzung. <\/p>\n<p><\/p>\n<h1 id=\"buduschee-netramesh\">Zukunft von Netramesh<\/h1>\n<p><\/p>\n<p>Das Hauptziel <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex> besteht darin, minimale Ressourcenaufwand und hohe Leistung zu erreichen, indem grundlegende Funktionen f\u00fcr Observability und Kontrolle der inter-Service-Interaktionen bereitgestellt werden. <\/p>\n<p><\/p>\n<p>In Zukunft wird Netramesh Unterst\u00fctzung f\u00fcr andere Anwendungsprotokolle neben HTTP erhalten. Bald wird es die M\u00f6glichkeit des L7-Routings geben.<\/p>\n<p><\/p>\n<p>Verwenden Sie Netramesh, wenn Sie mit \u00e4hnlichen Problemen konfrontiert sind, und senden Sie uns Ihre Fragen und Vorschl\u00e4ge.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/449974\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u043b\u0438\u0431\u043e \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u0432\u0441\u0451 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24554,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32777","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Netramesh \u2013 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u043e\u0435 service mesh \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Netramesh \u2013 leichte Service-Mesh-L\u00f6sung | ProHoster","description":"Im Prozess des \u00dcbergangs von einer monolithischen Anwendung zu einer Microservices-Architektur stehen wir vor neuen Herausforderungen. In einer monolithischen Anwendung reicht es normalerweise aus, einfach zu bestimmen, in welchem Teil des Systems dies geschah.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Netramesh \u2013 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u043e\u0435 service mesh \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster","og:description":"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:52+00:00","article:modified_time":"2019-10-31T18:48:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32777","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:29:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:20:44","updated":"2026-01-21 12:29:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=32777"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32777\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/24554"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=32777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=32777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=32777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}