{"id":55700,"date":"2020-01-26T00:00:00","date_gmt":"2020-01-25T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti"},"modified":"2020-02-18T14:03:50","modified_gmt":"2020-02-18T11:03:50","slug":"trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","title":{"rendered":"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Das Heisenbergsche Unsch\u00e4rfeprinzip besagt, dass man nicht gleichzeitig die Position eines Objekts und dessen Geschwindigkeit messen kann. Befindet sich das Objekt in Bewegung, hat es keinen festen Ort. Und wenn es eine Position hat, dann hat es keine Geschwindigkeit.<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/617ace5f892b62652b404b24585537b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWas die Mikrodienste auf der Red Hat OpenShift-Plattform (verwalten durch Kubernetes) betrifft, so k\u00f6nnen sie dank entsprechender Open-Source-Software gleichzeitig \u00fcber ihre Leistung sowie ihre Verf\u00fcgbarkeit berichten. Das widerlegt zwar nicht den alten Heisenberg, beseitigt jedoch die Ungewissheit bei der Arbeit mit Cloud-Anwendungen. Istio erm\u00f6glicht eine einfache Organisation von Tracing und Monitoring solcher Anwendungen, um alles unter Kontrolle zu halten.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Terminologie festlegen<\/h3>\n<p>\nPod <b>Tracing<\/b> (Tracing) verstehen wir als die Protokollierung von Systemaktivit\u00e4ten. Es klingt zwar recht allgemein, aber eine der wichtigsten Regeln hier lautet, dass die Trace-Daten in das entsprechende Speichersystem zur\u00fcckgespielt werden, ohne sich um deren Formatierung zu sorgen. Die gesamte Arbeit mit der Suche und Analyse der Daten obliegt dem Verbraucher. In Istio wird das Tracing-System Jaeger verwendet, das das OpenTracing-Datenmodell umsetzt.<\/p>\n<p><b>Traces<\/b> (Traces, und das Wort \u201eTraces\u201c wird hier im Sinne von \u201eSpuren\u201c, wie zum Beispiel bei der ballistischen Expertise, verwendet) nennen wir die Daten, die den Verlauf einer Anfrage oder einer Arbeitseinheit vollst\u00e4ndig beschreiben, sozusagen \u201evon Anfang bis Ende\u201c. Zum Beispiel alles, was passiert, sobald der Benutzer auf den Button auf der Webseite klickt, bis zu dem Moment, in dem die Daten zur\u00fcckgegeben werden, einschlie\u00dflich aller dabei beteiligten Mikrodienste. Man kann sagen, dass ein Trace den Verlauf der Anfrage in beide Richtungen vollst\u00e4ndig beschreibt (oder modelliert). Im Jaeger-Interface werden die Traces zeitlich aufgeschl\u00fcsselt, \u00e4hnlich wie eine Kette in einzelne Glieder zerlegt werden kann. Anstelle von Gliedern besteht ein Trace aus sogenannten Spans.<\/p>\n<p><b>Span<\/b> \u2013 ist das Intervall vom Beginn der Ausf\u00fchrung einer Arbeitseinheit bis zu ihrem Abschluss. Wenn wir das Bild weiterf\u00fchren, kann man sagen, dass jeder Span ein einzelnes Glied der Kette darstellt. Ein Span kann ein oder mehrere untergeordnete Spans haben (oder auch nicht). Folglich hat der Root Span die gleiche Gesamtdauer wie der Trace, zu dem er geh\u00f6rt.<\/p>\n<p><b>\u00dcberwachung<\/b> Das ist im Wesentlichen die Beobachtung Ihres Systems \u2013 mit den Augen, \u00fcber die Benutzeroberfl\u00e4che oder durch Automatisierungswerkzeuge. Der \u00dcberwachung liegen Nachverfolgungsdaten zugrunde. In Istio wird das Monitoring mit Hilfe von Prometheus umgesetzt und verf\u00fcgt \u00fcber eine entsprechende Benutzeroberfl\u00e4che. Prometheus unterst\u00fctzt die automatische \u00dcberwachung mithilfe von Alerts und Alert Managers.<\/p>\n<h3>Wir machen Striche<\/h3>\n<p>\nUm die Nachverfolgung zu erm\u00f6glichen, muss die Anwendung eine Sammlung von Spans erstellen. Diese m\u00fcssen dann nach Jaeger exportiert werden, damit dieser ein visuelles Darstellung der Nachverfolgung erstellen kann. Unter anderem kennzeichnen diese Spans den Namen der Operation sowie die Zeitstempel ihres Beginns und Endes. Die \u00dcbertragung der Spans erfolgt durch das Weiterleiten der f\u00fcr Jaeger vorgesehenen HTTP-Header von eingehenden zu ausgehenden Anfragen. Je nach Programmiersprache kann es erforderlich sein, den Quellcode der Anwendungen geringf\u00fcgig zu modifizieren. Im Folgenden ist ein Beispiel f\u00fcr Java (bei Verwendung des Frameworks Spring Boot) zu sehen, das die B3-Header (im Zipkin-Stil) zu Ihrer Anfrage im Konfigurationsklasse von Spring hinzuf\u00fcgt:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/2314e2d156dc9b9fdb299af2dac01f66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDabei werden die folgenden Header-Einstellungen verwendet:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/18f0a13af27665ec2d154ff4cff48157.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWenn Sie Java verwenden, k\u00f6nnen Sie den Code unver\u00e4ndert lassen und einfach ein paar Zeilen in die Maven POM-Datei hinzuf\u00fcgen und Umgebungsvariablen festlegen. Folgende Zeilen m\u00fcssen zur POM.XML-Datei hinzugef\u00fcgt werden, um den Jaeger Tracer Resolver zu integrieren:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/a63a634c2c22fc09a237cafc4873855d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDie entsprechenden Umgebungsvariablen werden im Dockerfile festgelegt:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/7fe9046242d7e628342a6266e4a2f743.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAlles ist nun eingestellt, und unsere Mikrodienste werden anfangen, Nachverfolgungsdaten zu generieren.<\/p>\n<h3>Ein allgemeiner \u00dcberblick<\/h3>\n<p>\nIstio enth\u00e4lt ein einfaches Dashboard, das auf Grafana basiert. Wenn alles konfiguriert ist und auf der Red Hat OpenShift PaaS-Plattform (in unserem Beispiel sind Red Hat OpenShift und Kubernetes auf minishift bereitgestellt) l\u00e4uft, wird dieses Dashboard mit dem folgenden Befehl gestartet:<\/p>\n<pre><code class=\"plaintext\">\u00d6ffnen Sie &quot;$(minishift openshift service grafana -u)\\\/d\\\/1\\\/istio-dashboard?refresh=5&amp;ord;Id=1&quot;\n<\/code><\/pre>\n<p>\nDas Grafana-Dashboard erm\u00f6glicht eine schnelle Bewertung der Systemleistung. Ein Ausschnitt dieses Dashboards ist im folgenden Bild dargestellt:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/2c10cd23fd5166f437c2b3c1d50c6a18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHier ist zu sehen, dass der Mikrodienst customer den Mikrodienst preference v1 aufruft, der wiederum die Mikrodienste recommendation v1 und v2 aufruft. Auf dem Grafana-Dashboard gibt es einen Block Dashboard Row f\u00fcr High-Level-Kennzahlen, wie die Gesamtanzahl der Anfragen (Global Request Volume), die Erfolgsquote (success rates) und Fehler 4xx. Dar\u00fcber hinaus gibt es eine Server Mesh-Darstellung mit Diagrammen f\u00fcr jeden Dienst sowie einen Block Services Row, um detaillierte Informationen zu jedem Container f\u00fcr jeden Dienst anzuzeigen.<\/p>\n<h3>Jetzt gehen wir tiefer.<\/h3>\n<p>\nBei einer gut konfigurierten Istio-Tracing, was sprichw\u00f6rtlich aus der Box heraus erm\u00f6glicht, in die Analyse der Systemleistung einzutauchen. Im Jaeger-UI k\u00f6nnen Sie die Traces einsehen und sehen, wie weit und tief sie gehen, sowie visuell Engp\u00e4sse in der Leistung lokalisieren. Bei der Verwendung von Red Hat OpenShift auf der Plattform minishift starten Sie die Jaeger-UI mit folgendem Befehl:<\/p>\n<pre><code class=\"plaintext\">minishift openshift service jaeger-query --in-browser\n<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/074fea646ad191f819a9a67a3f311c8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWas kann man \u00fcber das Tracing in diesem Screenshot sagen:<\/p>\n<ul>\n<li>Es unterteilt sich in 7 Spans.<\/li>\n<li>Die Gesamtdauer betr\u00e4gt 6,99 ms.<\/li>\n<li>Der Mikrodienst recommendation, der der letzte in der Kette ist, ben\u00f6tigt 0,69 ms.<\/li>\n<\/ul>\n<p>\nDiagramme dieser Art helfen schnell zu verstehen, wenn die Leistung des gesamten Systems wegen eines unwichtigen nicht funktionierenden Dienstes leidet.<\/p>\n<p>Nun erschweren wir die Aufgabe und starten zwei Instanzen des Mikrodienstes recommendation:v2 mit dem Befehl oc scale &#8212;replicas=2 deployment\\\/recommendation-v2. So sehen unsere Pods danach aus:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/0ecb8d78d6967d0392de67be6553b870.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWenn wir jetzt wieder zu Jaeger wechseln und den Span f\u00fcr den Dienst recommendation aufklappen, sehen wir, auf welchen Pod die Anfragen weitergeleitet werden. So k\u00f6nnen wir Engp\u00e4sse auf der Ebene eines bestimmten Pods leicht lokalisieren. Dabei sollten wir auf das Feld node_id achten:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/474da66c581692cd11070a1732ac5458.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Wohin und wie alles l\u00e4uft<\/h3>\n<p>\nJetzt gehen wir in die Benutzeroberfl\u00e4che von Prometheus und wie zu erwarten sehen wir dort, dass die Anfragen zwischen der zweiten und der ersten Version des Dienstes recommendation im Verh\u00e4ltnis 2:1 geteilt werden, streng nach der Anzahl der laufenden Pods. Zudem wird dieses Diagramm dynamisch bei der Skalierung der Pods nach oben und unten variieren, was besonders n\u00fctzlich sein wird beim Canary Deployment (wir werden dieses Bereitstellungsschema beim n\u00e4chsten Mal ausf\u00fchrlicher betrachten).<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/c080fffd2398b0a2eac3e63665bdb0a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Alles f\u00e4ngt gerade erst an.<\/h3>\n<p>\nTats\u00e4chlich haben wir heute nur einen kleinen Auszug aus der F\u00fclle n\u00fctzlicher Informationen \u00fcber Jaeger, Grafana und Prometheus behandelt. Das war im Grunde genommen unser Ziel \u2013 Ihnen eine Orientierung zu geben und die Perspektiven von Istio zu er\u00f6ffnen.<\/p>\n<p>Und denken Sie daran, all das ist bereits in Istio integriert. Bei der Verwendung bestimmter Programmiersprachen (zum Beispiel Java) und Frameworks (wie Spring Boot) l\u00e4sst sich das alles umsetzen, ohne den Code der Anwendungen anzufassen. Ja, der Code muss leicht modifiziert werden, wenn Sie andere Sprachen verwenden, insbesondere Nodejs oder C#. Da jedoch die R\u00fcckverfolgbarkeit (sprich \u201eTracing\u201c) eine der Grundvoraussetzungen beim Aufbau zuverl\u00e4ssiger Cloud-Systeme ist, m\u00fcssen Sie in jedem Fall den Code anpassen, unabh\u00e4ngig davon, ob Sie Istio verwenden oder nicht. Warum also nicht die M\u00fche sinnvoller einsetzen?<\/p>\n<p>Mindestens um immer mit 100%iger Sicherheit auf die Fragen \u201eWo?\u201c und \u201eWie schnell?\u201c antworten zu k\u00f6nnen.<\/p>\n<h3>Chaos-Engineering in Istio: So war es geplant<\/h3>\n<p><\/p>\n<h3>Die F\u00e4higkeit, Dinge kaputt zu machen, hilft dabei, sicherzustellen, dass sie nicht kaputt gehen.<\/h3>\n<p>\nSoftwaretests sind nicht nur komplex, sondern auch wichtig. Gleichzeitig ist die \u00dcberpr\u00fcfung der Korrektheit (ob eine Funktion das richtige Ergebnis zur\u00fcckgibt) eine Sache, w\u00e4hrend das Testen unter unsicheren Netzwerkbedingungen eine ganz andere Herausforderung darstellt (oft wird angenommen, dass das Netzwerk stets zuverl\u00e4ssig funktioniert, was eines der acht Missverst\u00e4ndnisse \u00fcber verteilte Berechnungen ist). Eine der Schwierigkeiten bei der L\u00f6sung dieser Aufgabe besteht darin, wie man Ausf\u00e4lle im System simuliert oder absichtlich einf\u00fchrt, indem man sogenanntes Fault Injection durchf\u00fchrt. Dies kann durch Modifikation des Quellcodes der Anwendung geschehen. Aber dann testen Sie nicht mehr Ihren urspr\u00fcnglichen Code, sondern eine Version, die absichtlich Ausf\u00e4lle simuliert. In der Folge riskieren Sie, in die t\u00f6dlichen Umarmungen von Fault Injection zu geraten und auf Geisterfehler zu sto\u00dfen \u2013 Fehler, die bei dem Versuch verschwinden, sie zu entdecken.<\/p>\n<p>Jetzt zeigen wir Ihnen, wie Istio dabei hilft, diese Herausforderungen einfach zu bew\u00e4ltigen.<\/p>\n<h3>So sieht alles aus, wenn alles perfekt funktioniert.<\/h3>\n<p>\nBetrachten wir das folgende Szenario: Wir haben zwei Pods f\u00fcr unseren Mikrodienst zur Empfehlung, den wir aus dem Istio-Leitfaden entnommen haben. Ein Pod ist als v1 gekennzeichnet, der andere als v2. Wie zu sehen ist, funktioniert bisher alles einwandfrei.<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/c50387b7cfd12298cfab8123f13b2ca4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(\u00dcbrigens ist die Zahl rechts einfach ein Z\u00e4hler f\u00fcr die Aufrufe jedes Pods)<\/p>\n<p>Aber das ist nicht das, was wir brauchen, oder? Nun, lasst uns versuchen, alles zu brechen, ohne den Quellcode zu ber\u00fchren.<\/p>\n<h3>Wir verursachen Unterbrechungen im Microservice<\/h3>\n<p>\nNachfolgend finden Sie die yaml-Datei f\u00fcr die Istio-Routingregel, die in der H\u00e4lfte der F\u00e4lle fehlschlagen wird (Fehler <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/server\/dts-los-angeles\/\"   title=\"Server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3597\">Server<\/a> 503):<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/8fb3ed7f16ed7fd1a57b27dfc3bfd2da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBitte beachten Sie, dass wir ausdr\u00fccklich festlegen, dass in der H\u00e4lfte der F\u00e4lle ein Fehler 503 zur\u00fcckgegeben werden soll.<\/p>\n<p>So w\u00fcrde ein Screenshot des in einer Schleife laufenden curl-Befehls aussehen, nachdem wir diese Regel aktiviert haben, um Ausf\u00e4lle zu simulieren. Wie wir sehen, geben die H\u00e4lfte der Anfragen einen Fehler 503 zur\u00fcck, unabh\u00e4ngig davon, an welchen Pod \u2013 v1 oder v2 \u2013 sie gesendet werden:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/3d9760cf5abc7480ad3aab826c274766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nUm den normalen Betrieb wiederherzustellen, reicht es aus, diese Regel zu l\u00f6schen, in unserem Fall mit dem Befehl istioctl delete routerule recommendation-503 -n tutorial. Hier ist Tutorial der Name des Red Hat OpenShift-Projekts, in dem unser Istio-Lehrbuch arbeitet.<\/p>\n<h3>Wir f\u00fchren k\u00fcnstliche Verz\u00f6gerungen ein<\/h3>\n<p>\nK\u00fcnstliche Fehler 503 helfen, das System auf Fehlertoleranz zu testen, aber die F\u00e4higkeit, Verz\u00f6gerungen vorherzusagen und zu handhaben, sollte Sie noch mehr beeindrucken. Tats\u00e4chlich treten Verz\u00f6gerungen im echten Leben h\u00e4ufiger auf als Ausf\u00e4lle. Ein langsamer Microservice ist ein Kernproblem, das das gesamte System belastet. Mit Istio k\u00f6nnen wir den Code, der f\u00fcr die Verarbeitung von Verz\u00f6gerungen zust\u00e4ndig ist, testen, ohne ihn dabei zu \u00e4ndern. Zu Beginn zeigen wir, wie dies bei k\u00fcnstlich eingef\u00fchrten Netzwerkverz\u00f6gerungen funktioniert.<\/p>\n<p>Bitte beachten Sie, dass Sie nach solchen Tests m\u00f6glicherweise Ihren Code \u00fcberarbeiten m\u00fcssen (oder m\u00f6chten). Die gute Nachricht ist, dass Sie in diesem Fall proaktiv und nicht reaktiv handeln. Genau so sollte der Entwicklungszyklus aufgebaut sein: Codierung-Testen-Feedback-Codierung-Testen\u2026<\/p>\n<p>So sieht die Regel aus, die... Aber wissen Sie was? Istio ist so einfach, und diese yaml-Datei ist so klar, dass in diesem Beispiel alles f\u00fcr sich selbst spricht, schauen Sie einfach:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/e077e891cbccc66ebc4d4c7b67a0f1ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn der H\u00e4lfte der F\u00e4lle wird es eine Verz\u00f6gerung von 7 Sekunden geben. Und das ist nicht dasselbe, als h\u00e4tten wir einen sleep-Befehl in den Quellcode eingef\u00fcgt, da Istio die Anfrage tats\u00e4chlich um 7 Sekunden verz\u00f6gert. Da Istio die Jaeger-Traceability unterst\u00fctzt, ist diese Verz\u00f6gerung deutlich im Jaeger-UI zu beobachten, wie im Screenshot unten gezeigt. Beachten Sie die lange Anfrage in der oberen rechten Ecke des Diagramms \u2013 ihre Dauer betr\u00e4gt 7,02 Sekunden:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/97a7b33fb7e0455973c7fd1b2aefadf3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDieses Szenario erm\u00f6glicht es uns, den Code unter Bedingungen mit Netzwerkverz\u00f6gerungen zu testen. Und es ist klar, dass wir, wenn wir diese Regel entfernen, die k\u00fcnstliche Verz\u00f6gerung beseitigen werden. Lassen Sie uns wiederholen: Wir haben all das getan, ohne den Quellcode zu ber\u00fchren.<\/p>\n<h3>Nicht aufgeben und nicht nachlassen<\/h3>\n<p>\nEine weitere n\u00fctzliche Funktion von Istio f\u00fcr Chaos-Engineering ist die mehrfache Anfrage an den Dienst, eine vorgegebene Anzahl von Versuchen. Der Sinn hierbei ist, die Versuche nicht abzubrechen, wenn die erste Anfrage mit einem Fehler 503 endet \u2013 und vielleicht haben wir beim N-ten Versuch Gl\u00fcck. Vielleicht hat der Dienst aus irgendeinem Grund nur kurz pausiert. Ja, dies ist ein Grund, den wir herausfinden und beheben sollten. Aber das sp\u00e4ter, jetzt versuchen wir, die Systemfunktionalit\u00e4t aufrechtzuerhalten.<\/p>\n<p>Wir m\u00f6chten also, dass der Dienst von Zeit zu Zeit einen Fehler 503 ausgibt, und Istio soll danach versuchen, erneut eine Verbindung herzustellen. Und daf\u00fcr brauchen wir offensichtlich einen Weg, um einen Fehler 503 zu erzeugen, ohne den eigentlichen Code zu ber\u00fchren\u2026<\/p>\n<p>Halt, warte! Das haben wir doch gerade gemacht.<\/p>\n<p>Diese Datei sorgt daf\u00fcr, dass der Dienst recommendation-v2 in der H\u00e4lfte der F\u00e4lle einen Fehler 503 ausgibt:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/f446528f9c968e40cc2cf318cf0acde9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEs ist offensichtlich, dass einige Anfragen fehlschlagen werden:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/f998513746604beda241b8d6de2ed727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJetzt aktivieren wir die Istio-Funktion Retry:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/32e210b6ecbf4c1ecf121ee73e64ba35.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDiese Routing-Regel macht drei Wiederholungen mit einem Intervall von zwei Sekunden und sollte die Fehler 503 reduzieren (und idealerweise ganz beseitigen):<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/7f9711c52949072b823399e59141cb64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZusammenfassend haben wir Istio so konfiguriert, dass es erstens einen Fehler 503 f\u00fcr die H\u00e4lfte der Anfragen generiert. Zweitens f\u00fchrt Istio bei einem Fehler 503 drei Versuche durch, erneut mit dem Dienst zu verbinden. Das Ergebnis ist, dass alles hervorragend funktioniert. So haben wir mit der Retry-Funktion unser Versprechen gehalten, nicht aufzugeben und nicht nachzulassen.<\/p>\n<p>Und ja, wir haben es wieder getan, ohne den Code zu ber\u00fchren. Alles, was wir brauchten, waren zwei Istio-Routing-Regeln:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/c21a1cfd2d78ae4145a57d1cefcc6c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Wie man den Benutzer nicht im Stich l\u00e4sst oder sieben auf einen Schlag warten l\u00e4sst.<\/h3>\n<p>\nUnd jetzt drehen wir die Situation um und betrachten das Szenario, in dem man nur f\u00fcr eine bestimmte Zeit nicht zur\u00fcckweichen und nicht aufgeben sollte. Danach muss man einfach versuchen, die Anfrage nicht weiter zu bearbeiten, um nicht alle zum Warten auf einen langsamen Dienst zu zwingen. Anders gesagt, wir werden die verlorene Position nicht verteidigen, sondern uns auf eine sichere Linie zur\u00fcckziehen, um den Webseitenbesucher nicht im Ungewissen zu lassen.<\/p>\n<p>In Istio kann man ein Zeitlimit f\u00fcr die Ausf\u00fchrung von Anfragen festlegen. Wenn der Dienst dieses Zeitlimit \u00fcberschreitet, wird ein Fehler 504 (Gateway Timeout) zur\u00fcckgegeben \u2013 das geschieht wiederum alles \u00fcber die Istio-Konfiguration. Wir m\u00fcssen jedoch im Quellcode des Dienstes einen sleep-Befehl hinzuf\u00fcgen (und dann nat\u00fcrlich ein rebuild und redeploy durchf\u00fchren), um eine langsame Verarbeitung des Dienstes zu simulieren. Leider ist es anders nicht m\u00f6glich.<\/p>\n<p>Also haben wir einen dreisek\u00fcndigen sleep in den Code des recommendation v2-Dienstes eingef\u00fcgt, das entsprechende Image neu gebaut und den Container redeployt. Nun werden wir ein Zeitlimit mit folgender Istio-Routingregel hinzuf\u00fcgen:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/c03fc452b98dd875a8a7d3ac561893ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAuf dem obigen Screenshot sieht man, dass wir die Versuche, mit dem recommendation-Dienst zu kommunizieren, abbrechen, wenn wir innerhalb einer Sekunde keine Antwort erhalten, also noch bevor der Fehler 504 auftritt. Nach der Anwendung dieser Routingregel (und der Hinzuf\u00fcgung des dreisek\u00fcndigen sleep im Code des recommendation:v2-Dienstes) erhalten wir Folgendes:<\/p>\n<p><img decoding=\"async\" alt=\"Tracing und Monitoring in Istio: Mikrodienste und das Prinzip der Unbestimmtheit\" src=\"\/wp-content\/uploads\/2020\/01\/ed6e80052c67254718b1fde2bd873e71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWir wiederholen uns, aber das Zeitlimit kann gesetzt werden, ohne den Quellcode zu ber\u00fchren. Ein zus\u00e4tzlicher Vorteil hierbei ist, dass Sie jetzt Ihren Code so modifizieren k\u00f6nnen, dass er auf das Zeitlimit reagiert, und diese Anpassungen problemlos mit Hilfe von Istio testen k\u00f6nnen.<\/p>\n<h3>Und jetzt alles zusammen<\/h3>\n<p>\nEin wenig Chaos mit Hilfe von Istio einbringen \u2013 das ist eine gro\u00dfartige M\u00f6glichkeit, Ihren Code und die Zuverl\u00e4ssigkeit Ihres Systems insgesamt zu testen. Fallback-, Bulkhead- und Circuit-Breaker-Muster, Mechanismen zur Erzeugung k\u00fcnstlicher Ausf\u00e4lle und Verz\u00f6gerungen sowie Wiederholungsanrufe und Zeitlimits sind sehr n\u00fctzlich beim Erstellen von ausfallsicheren Cloud-Systemen. In Kombination mit Kubernetes und Red Hat OpenShift werden diese Werkzeuge Ihnen helfen, die Zukunft mit Zuversicht zu begegnen.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/485136\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0413\u0435\u0439\u0437\u0435\u043d\u0431\u0435\u0440\u0433\u0430 \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f, \u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0410 \u0435\u0441\u043b\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c \u2013 \u0437\u043d\u0430\u0447\u0438\u0442 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Red Hat OpenShift (\u0438 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Kubernetes), \u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0441\u043e\u0444\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u043f\u043e\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55700","post","type-post","status-publish","format-standard","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=\"\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0413\u0435\u0439\u0437\u0435\u043d\u0431\u0435\u0440\u0433\u0430 \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f, \u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\" \/>\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\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti\" \/>\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\udd47\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432 Istio: \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0413\u0435\u0439\u0437\u0435\u043d\u0431\u0435\u0440\u0433\u0430 \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f, \u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti\" \/>\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=\"2020-01-25T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:50+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\udd47Tracing und Monitoring in Istio: Mikrodienste und das Unsch\u00e4rfeprinzip | ProHoster","description":"Das Heisenbergsche Unsch\u00e4rfeprinzip besagt, dass man die Position eines Objekts und seine Geschwindigkeit nicht gleichzeitig messen kann. Wenn sich das Objekt bewegt, hat es keinen festen Standort.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","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\udd47\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0432 Istio: \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 | ProHoster","og:description":"\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0413\u0435\u0439\u0437\u0435\u043d\u0431\u0435\u0440\u0433\u0430 \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f, \u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","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":"2020-01-25T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:50+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55700","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:38:32","updated":"2026-02-22 15:29:16","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\/55700","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=55700"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55700\/revisions"}],"predecessor-version":[{"id":162124,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55700\/revisions\/162124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=55700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=55700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=55700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}