{"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 leichtgewichtige Service-Mesh-L\u00f6sung","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Beim \u00dcbergang von einer monolithischen Anwendung zu einer Microservices-Architektur sto\u00dfen wir auf neue Herausforderungen.<\/p>\n<p><\/p>\n<p>In einer monolithischen Anwendung ist es meist einfach zu bestimmen, wo im System ein Fehler aufgetreten ist. Wahrscheinlich liegt das Problem im Code des Monolithen oder in der Datenbank. Doch wenn wir ein Problem in einer Microservices-Architektur suchen, ist das nicht mehr so offensichtlich. Wir m\u00fcssen den gesamten Weg finden, den die Anfrage von Anfang bis Ende zur\u00fcckgelegt hat, und diesen aus Hunderten von Microservices herausfiltern. Viele von ihnen verf\u00fcgen zudem \u00fcber eigene Datenbanken, in denen sowohl logische Fehler als auch Leistungs- und Ausfallsicherheitsprobleme auftreten k\u00f6nnen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/f583f3d8d4a2239411628aa8f4d06041.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lange habe ich nach einem Tool gesucht, das bei solchen Problemen hilft (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 diesem Artikel beschreibe ich die Vorteile des Service-Mesh-Ansatzes und teile ein neues Tool zur Umsetzung. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Distributed Tracing ist eine g\u00e4ngige L\u00f6sung zur Fehlersuche in verteilten Systemen. Aber was, wenn in einem System ein solcher Ansatz zur Erfassung von Informationen \u00fcber Netzwerkinteraktionen noch nicht implementiert ist oder, noch schlimmer, dieser Ansatz in einem Teil des Systems bereits funktioniert, w\u00e4hrend er in einem anderen nicht implementiert wurde? Um die genaue Wurzel des Problems zu bestimmen, ist es notwendig, ein vollst\u00e4ndiges Bild dessen zu haben, was im System geschieht. Besonders wichtig ist es zu verstehen, welche Mikrodienste an den wichtigsten gesch\u00e4ftskritischen Prozessen beteiligt sind.<\/p>\n<p><\/p>\n<p>Hier kann uns der Ansatz des Service Mesh behilflich sein, der sich um die gesamte Mechanik der Netzwerkinformationserfassung k\u00fcmmert, auf einer Ebene, die unterhalb der Funktion der Dienste arbeitet. Dieser Ansatz erm\u00f6glicht es uns, den gesamten Datenverkehr abzufangen und in Echtzeit zu analysieren. Die Anwendungen m\u00fcssen dabei nicht einmal etwas dar\u00fcber 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 Infrastruktur-Ebene \u00fcber dem Netzwerk hinzuzuf\u00fcgen, die es uns erm\u00f6glicht, s\u00e4mtliche Aspekte der Interaktion zwischen Diensten zu verwalten. Die meisten Implementierungen funktionieren folgenderma\u00dfen: An jeden Mikrodienst wird ein zus\u00e4tzlicher Sidecar-Container mit einem transparenten Proxy angef\u00fcgt, \u00fcber den der gesamte eingehende und ausgehende Datenverkehr des Dienstes geleitet wird. An genau dieser Stelle k\u00f6nnen wir Client-Balancing durchf\u00fchren, Sicherheitsrichtlinien anwenden, Anfragen limitieren und wichtige Informationen \u00fcber die Interaktion der Dienste in der Produktionsumgebung sammeln.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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 eine Vielzahl von Funktionen direkt nach der Installation an. Gleichzeitig bringt dies jedoch einen hohen 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 zu unterst\u00fctzen. Bei Avito nutzen wir Kubernetes-Cluster, in denen sich Tausende von Serviceinstanzen befinden (und ihre Zahl w\u00e4chst weiterhin schnell). In der aktuellen Implementierung ben\u00f6tigt Istio etwa 300 MB RAM pro Serviceinstanz. Aufgrund der umfangreichen Funktionen hat auch die transparente Lastverteilung Einfluss auf die Gesamtantwortzeit der Dienste (bis zu 10 ms).<\/p>\n<p><\/p>\n<p>Schlie\u00dflich haben wir uns angesehen, welche Funktionen wir im Moment wirklich ben\u00f6tigen, und entschieden, dass der Hauptgrund f\u00fcr die Implementierung solcher L\u00f6sungen die M\u00f6glichkeit war, Tracing-Informationen transparent aus dem gesamten System zu sammeln. Au\u00dferdem wollten wir Kontrolle \u00fcber die Interaktionen zwischen den Diensten haben und verschiedene Manipulationen mit den Headern durchf\u00fchren, die zwischen den Diensten \u00fcbertragen werden. <\/p>\n<p><\/p>\n<p>Schlie\u00dflich sind wir zu unserer L\u00f6sung gekommen:\u200a <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> \u2014 ist eine leichtgewichtige Service-Mesh-L\u00f6sung, die unbegrenzte Skalierbarkeit bietet, unabh\u00e4ngig von der Anzahl der Dienste im System.<\/p>\n<p><\/p>\n<p>Die Hauptziele der neuen L\u00f6sung waren ein geringer Ressourcenoverhead und hohe Leistung. Zu den grundlegenden Funktionen wollten wir sofort die M\u00f6glichkeit haben, Tracing-Spans transparent an unser Jaeger-System zu senden.<\/p>\n<p><\/p>\n<p>Heute werden die meisten Cloud-L\u00f6sungen in Golang umgesetzt. Und das hat nat\u00fcrlich seine Gr\u00fcnde. Es ist bequem und relativ einfach, mit Golang Netzwerkanwendungen zu schreiben, die asynchron mit Ein- und Ausgaben arbeiten und sich bei Bedarf auf die Kerne skalieren. Zudem ist die Leistung f\u00fcr diese Aufgabe ausreichend. Daher haben auch wir uns f\u00fcr Golang entschieden.<\/p>\n<p><\/p>\n<h1 id=\"proizvoditelnost\">Leistung<\/h1>\n<p><\/p>\n<p>Wir haben unsere Bem\u00fchungen darauf konzentriert, maximale Leistung zu erreichen. F\u00fcr eine L\u00f6sung, die neben jedem Instanz eines Dienstes bereitgestellt wird, sind ein geringer Verbrauch von Arbeitsspeicher und CPU-Zeit erforderlich. Und nat\u00fcrlich sollte auch die Antwortverz\u00f6gerung so gering wie m\u00f6glich sein.<\/p>\n<p><\/p>\n<p>Lassen Sie uns schauen, welche Ergebnisse erzielt wurden. <\/p>\n<p><\/p>\n<h2 id=\"ram\">RAM<\/h2>\n<p><\/p>\n<p>Netramesh ben\u00f6tigt ~10 Mb ohne Traffic und maximal 50 Mb bei einer Belastung von bis zu 10.000 RPS pro Instanz.<\/p>\n<p><\/p>\n<p>Der Istio Envoy-Proxy ben\u00f6tigt immer ~300 Mb in unseren Clustern mit Tausenden von Instanzen. Das macht eine Skalierung auf gesamten Cluster unm\u00f6glich.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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 leichtgewichtige 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 Zehnfache reduziert.<\/p>\n<p><\/p>\n<h2 id=\"cpu\">CPU<\/h2>\n<p><\/p>\n<p>Der CPU-Verbrauch bleibt unter Last relativ konstant. Er h\u00e4ngt von der Anzahl der Anfragen pro Zeiteinheit an das Sidecar ab. Werte bei 3.000 Anfragen pro Sekunde im Peak:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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 leichtgewichtige Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/5a2eff682a457b620cbf71b520d90ca4.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Ein weiterer wichtiger Punkt: Netramesh ist eine L\u00f6sung ohne Control Plane und verbraucht ohne Last keine CPU-Zeit. Mit Istio aktualisieren die Sidecars st\u00e4ndig die Endpunkte der Dienste. Daher sehen wir dieses Bild ohne Last:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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 Diensten. Die Erh\u00f6hung der Antwortzeit bei Istio beim Proxying \u00fcber Envoy betrug bis zu 5-10 ms, was f\u00fcr Dienste, die bereit sind, in Millisekunden zu reagieren, recht viel ist. Mit Netramesh verk\u00fcrzte sich diese Zeit auf 0,5-2 ms.<\/p>\n<p><\/p>\n<h1 id=\"masshtabiruemost\">Skalierbarkeit<\/h1>\n<p><\/p>\n<p>Die geringe Menge an Ressourcen, die jeder Proxy ben\u00f6tigt, erm\u00f6glicht es, ihn in der N\u00e4he jedes Dienstes zu platzieren. Netramesh wurde absichtlich ohne einen Control-Plane-Komponenten entwickelt, um die Leichtigkeit jedes Sidecars zu gew\u00e4hrleisten. Oft verbreitet in Service-Mesh-L\u00f6sungen der Control Plane Informationen zur Dienstentdeckung in jedes Sidecar. Damit kommen auch Informationen \u00fcber Timeouts und Lastenausgleichs-Konfigurationen. All dies erm\u00f6glicht viele n\u00fctzliche Dinge, f\u00fchrt jedoch leider zu einer Vergr\u00f6\u00dferung der Sidecars. <\/p>\n<p><\/p>\n<h1 id=\"service-discovery\">Service Entdeckung<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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 zur Dienstentdeckung 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 HTTP-Interaktionen erfolgen. Zum Beispiel verwenden wir 80, 8890 und 8080 f\u00fcr die Interaktion zwischen Diensten und externen Anfragen. In diesem Fall k\u00f6nnen sie \u00fcber eine Umgebungsvariable konfiguriert werden. <code>NETRA_HTTP_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>Wenn Sie Kubernetes als Orchestrator verwenden und dessen Service-Mechanismus f\u00fcr die Interaktion zwischen den Diensten im Cluster nutzen, bleibt der Mechanismus unver\u00e4ndert. Zun\u00e4chst erh\u00e4lt der Mikroservice die Service-IP-Adresse \u00fcber kube-dns und \u00f6ffnet eine neue Verbindung zu dieser. Diese Verbindung wird zuerst mit dem lokalen netra-sidecar hergestellt und alle TCP-Pakete gelangen urspr\u00fcnglich genau zu netra. Anschlie\u00dfend stellt das netra-sidecar die Verbindung zum urspr\u00fcnglichen Ziel her. 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 Kontextweitergabe<\/h1>\n<p><\/p>\n<p>Netramesh bietet die Funktionalit\u00e4t, die erforderlich ist, um Tracing-Spans \u00fcber HTTP-Interaktionen zu senden. Das netra-sidecar analysiert das HTTP-Protokoll, misst die Anfragenlatenzen und extrahiert die erforderlichen Informationen aus den HTTP-Headern. Letztlich erhalten wir alle Traces in einem einheitlichen Jaeger-System. F\u00fcr eine feine Konfiguration k\u00f6nnen auch Umgebungsvariablen verwendet werden, die von der offiziellen Bibliothek bereitgestellt werden. <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 leichtgewichtige 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 leichtgewichtige Service-Mesh-L\u00f6sung\" src=\"\/wp-content\/uploads\/2019\/04\/20ff67f0c7f3590dce3d41db2a10267e.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Es gibt jedoch ein Problem. Solange die Dienste keinen speziellen Uber-Header generieren und \u00fcbermitteln, werden wir die verbundenen Tracing-Spans im System nicht sehen. Und genau das ist notwendig, um schnell die Ursachen von Problemen zu identifizieren. Hier bietet Netramesh erneut eine L\u00f6sung an. Die Proxys lesen die HTTP-Header und wenn der Uber Trace ID nicht vorhanden ist, generieren sie ihn. Netramesh speichert ebenfalls Informationen \u00fcber eingehende und ausgehende Anfragen im Sidecar und erg\u00e4nzt sie mit den notwendigen Headern der ausgehenden Anfragen. Alles, was in den Diensten erforderlich ist, besteht darin, nur einen Header zu \u00fcbermitteln. <code>X-Request-Id<\/code>, der \u00fcber die Umgebungsvariable konfiguriert werden kann <code>NETRA_HTTP_REQUEST_ID_HEADER_NAME<\/code>. Um die Gr\u00f6\u00dfe des Kontextes in Netramesh zu steuern, k\u00f6nnen folgende Umgebungsvariablen gesetzt werden: <code>NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS<\/code> (die Zeit, in 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 durch Markierung mit einem speziellen Sitzungsmarker zu kombinieren. Netra erm\u00f6glicht die Einstellung von <code>HTTP_HEADER_TAG_MAP<\/code> Um HTTP-Header in die entsprechenden Tracing-Span-Tags umzuwandeln. Dies kann besonders n\u00fctzlich f\u00fcr Tests sein. Nach dem Abschluss eines Funktionstests kann man sehen, welcher Teil des Systems betroffen war, indem man nach dem entsprechenden Session-Schl\u00fcssel filtert.<\/p>\n<p><\/p>\n<h1 id=\"opredelenie-istochnika-zaprosa\">Bestimmung der Anfragequelle<\/h1>\n<p><\/p>\n<p>Um herauszufinden, woher die Anfrage kam, kann die Funktion zur automatischen Hinzuf\u00fcgung des Quell-Header verwendet werden. Mit der Umgebungsvariablen <code>NETRA_HTTP_X_SOURCE_HEADER_NAME<\/code> kann der Name des Headers festgelegt werden, der automatisch gesetzt wird. Mit <code>NETRA_HTTP_X_SOURCE_VALUE<\/code> kann der Wert festgelegt werden, der im X-Source-Header f\u00fcr alle ausgehenden Anfragen gesetzt wird. <\/p>\n<p><\/p>\n<p>Dies erm\u00f6glicht die einheitliche Verbreitung dieses n\u00fctzlichen Headers im gesamten Netzwerk. Anschlie\u00dfend kann dieser in den Diensten verwendet und in Logs sowie Metriken hinzugef\u00fcgt werden.<\/p>\n<p><\/p>\n<h1 id=\"routing-trafika-i-vnutrennosti-netramesh\">Traffic-Routing und die Architektur von Netramesh<\/h1>\n<p><\/p>\n<p>Netramesh besteht aus zwei Hauptkomponenten. Die erste, netra-init, legt die Netzwerkregeln zum Abfangen des Verkehrs fest. Sie verwendet <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 an einem Sidecar, das den zweiten Hauptbestandteil von Netramesh darstellt. Es kann konfiguriert werden, welche Ports f\u00fcr eingehende und ausgehende TCP-Sitzungen abgerufen werden sollen: <code>EINGEHENDE_ABFANG_PORTS, AUSGEHENDE_ABFANG_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>Das Tool bietet auch eine interessante M\u00f6glichkeit \u2014 probabilistisches Routing. Wenn Netramesh ausschlie\u00dflich zur Sammlung von Tracing-Spans verwendet wird, kann im Produktionsumfeld Ressourcen gespart werden, indem probabilistisches Routing \u00fcber Variablen aktiviert wird. <code>NETRA_EINGEHENDE_WAHRSCHEINLICHKEIT<\/code> und <code>NETRA_AUSGEHENDE_WAHRSCHEINLICHKEIT<\/code> (von 0 bis 1). Der Standardwert ist 1 (alle Daten werden abgefangen).<\/p>\n<p><\/p>\n<p>Nach erfolgreichem Abfangen akzeptiert der Netra Sidecar eine neue Verbindung und verwendet <code>SO_ORIGINAL_DST<\/code> die Socket-Option, um den urspr\u00fcnglichen Zielpunkt zu ermitteln. Anschlie\u00dfend \u00f6ffnet Netra eine neue Verbindung zur urspr\u00fcnglichen IP-Adresse und stellt eine bidirektionale TCP-Kommunikation zwischen den Parteien her, wobei der gesamte durchlaufende Traffic \u00fcberwacht wird. Wenn der Port als HTTP definiert ist, versucht Netra, ihn zu parsen und zu tracen. Wenn das Parsen von HTTP fehlschl\u00e4gt, greift Netra auf TCP zur\u00fcck und leitet die Bytes transparent weiter.<\/p>\n<p><\/p>\n<h1 id=\"postroenie-grafa-zavisimostey\">Erstellung eines Abh\u00e4ngigkeitsgraphen<\/h1>\n<p><\/p>\n<p>Nach dem Erhalt von umfangreichen Tracing-Informationen in Jaeger m\u00f6chte man ein vollst\u00e4ndiges Interaktionsdiagramm im System erstellen. Doch wenn Ihr System stark belastet ist und im Laufe eines Tages Milliarden von Tracing-Spans anfallen, wird es schwieriger, 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 das vollst\u00e4ndige Diagramm zu erstellen und alle Daten aus Jaeger f\u00fcr die letzten 24 Stunden herunterzuladen. <\/p>\n<p><\/p>\n<p>Falls Sie Elasticsearch zur Speicherung von Tracing-Spans verwenden, k\u00f6nnen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Lookyan\/jaeger-dependencies\">ein einfaches Tool in Golang<\/a><\/noindex>, das in wenigen Minuten dasselbe Diagramm erstellt, indem es die Funktionen und M\u00f6glichkeiten von Elasticsearch nutzt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 eine leichtgewichtige 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\">Wie man Netramesh nutzt<\/h1>\n<p><\/p>\n<p>Netra kann einfach zu jedem Service hinzugef\u00fcgt werden, der unter einem beliebigen Orchestrator l\u00e4uft. Ein Beispiel finden Sie <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2HVRv7D\">hier<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Derzeit bietet Netra keine M\u00f6glichkeit zur automatischen Einf\u00fchrung von Sidecars f\u00fcr Services, aber es gibt Pl\u00e4ne zur Implementierung. <\/p>\n<p><\/p>\n<h1 id=\"buduschee-netramesh\">Die 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, die Ressourcen kosten minimal zu halten und gleichzeitig eine hohe Leistung zu gew\u00e4hrleisten, um grundlegende Funktionen f\u00fcr Observability und Kontrolle des interservice Interactions anzubieten. <\/p>\n<p><\/p>\n<p>In Zukunft wird Netramesh die Unterst\u00fctzung weiterer Anwendungsprotokolle neben HTTP bieten. Demn\u00e4chst wird die M\u00f6glichkeit des L7-Routings verf\u00fcgbar sein.<\/p>\n<p><\/p>\n<p>Verwenden Sie Netramesh, wenn Sie auf \u00e4hnliche Probleme sto\u00dfen, und schreiben 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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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":"Beim \u00dcbergang von einer monolithischen Anwendung zu einer Microservice-Architektur sto\u00dfen wir auf neue Herausforderungen. In einer monolithischen Anwendung reicht es normalerweise aus, den Fehlort im System zu identifizieren. Wahrscheinlich liegt das Problem im Code des Monolithen selbst oder in der Datenbank. Doch wenn wir das Problem in einer Microservice-Architektur suchen, ist alles nicht so offensichtlich. Es gilt, das gesamte...","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 \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","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"},"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}]}}