{"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\/pl\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","title":{"rendered":"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Zasada nieoznaczono\u015bci Heisenberga m\u00f3wi, \u017ce nie mo\u017cna jednocze\u015bnie zmierzy\u0107 po\u0142o\u017cenia obiektu i jego pr\u0119dko\u015bci. Je\u015bli obiekt si\u0119 porusza, nie ma okre\u015blonego po\u0142o\u017cenia. A je\u015bli po\u0142o\u017cenie istnieje \u2013 oznacza to, \u017ce nie ma pr\u0119dko\u015bci.<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/617ace5f892b62652b404b24585537b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJe\u015bli chodzi o mikrous\u0142ugi na platformie Red Hat OpenShift (i zarz\u0105dzane przez Kubernetes), to dzi\u0119ki odpowiedniemu oprogramowaniu z otwartym kodem mog\u0105 jednocze\u015bnie raportowa\u0107 zar\u00f3wno swoje osi\u0105gi, jak i stan. To nie podwa\u017ca oczywi\u015bcie zasady Heisenberga, ale eliminuje niepewno\u015b\u0107 w pracy z aplikacjami w chmurze. Istio umo\u017cliwia \u0142atwe zorganizowanie \u015bledzenia i monitorowania takich aplikacji, aby mie\u0107 nad nimi pe\u0142n\u0105 kontrol\u0119.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Okre\u015blamy terminologi\u0119<\/h3>\n<p>\nPod <b>\u015bledzeniem<\/b> (Tracing) rozumiemy logowanie aktywno\u015bci systemowej. Brzmi do\u015b\u0107 og\u00f3lnie, ale w rzeczywisto\u015bci jedn\u0105 z podstawowych zasad jest, aby zrzuca\u0107 dane \u015bledzenia do odpowiedniego magazynu, nie martwi\u0105c si\u0119 o ich formatowanie. Ca\u0142a praca zwi\u0105zana z poszukiwaniem i analiz\u0105 danych spoczywa na ich odbiorcy. W Istio u\u017cywana jest system \u015bledzenia Jaeger, realizuj\u0105cy model danych OpenTracing.<\/p>\n<p><b>\u015aladami<\/b> (Traces, a s\u0142owo \u201e\u015bladami\u201d u\u017cywane jest tutaj w znaczeniu \u201eods\u0142on g\u0142\u00f3wnych\u201d, jak na przyk\u0142ad w ekspertyzie balistycznej) b\u0119dziemy nazywa\u0107 dane, kt\u00f3re w pe\u0142ni opisuj\u0105 przep\u0142yw \u017c\u0105dania lub jednostki pracy, jak si\u0119 m\u00f3wi, \u201eod pocz\u0105tku do ko\u0144ca\u201d. Na przyk\u0142ad wszystko, co dzieje si\u0119 od momentu, gdy u\u017cytkownik naciska przycisk na stronie internetowej, a\u017c do momentu zwr\u00f3cenia danych, w\u0142\u0105cznie ze wszystkimi mikrous\u0142ugami, kt\u00f3re bior\u0105 w tym udzia\u0142. Mo\u017cna powiedzie\u0107, \u017ce jeden \u015blad w pe\u0142ni opisuje (lub modeluje) przep\u0142yw \u017c\u0105dania w obie strony. W interfejsie Jaeger, \u015blady s\u0105 rozk\u0142adane na sk\u0142adniki wzd\u0142u\u017c osi czasu, podobnie jak \u0142a\u0144cuch mo\u017cna roz\u0142o\u017cy\u0107 na pojedyncze ogniwa. Tylko zamiast ogniw \u015blad sk\u0142ada si\u0119 z tak zwanych span\u2019\u00f3w.<\/p>\n<p><b>Span<\/b> \u2013 to przedzia\u0142 od pocz\u0105tku wykonania jednostki pracy do jej zako\u0144czenia. Kontynuuj\u0105c analogi\u0119, mo\u017cna powiedzie\u0107, \u017ce ka\u017cdy span jest osobnym ogniwem \u0142a\u0144cucha. Span mo\u017ce mie\u0107 (lub nie mie\u0107) jeden lub wi\u0119cej potomnych span\u2019\u00f3w. W zwi\u0105zku z tym, span najwy\u017cszego poziomu (root span) b\u0119dzie mia\u0142 ten sam og\u00f3lny czas trwania, co \u015blad, do kt\u00f3rego si\u0119 odnosi.<\/p>\n<p><b>Monitoring<\/b> \u2013 to w\u0142a\u015bciwie samo obserwowanie twojego systemu \u2013 oczami, przez UI lub za pomoc\u0105 narz\u0119dzi automatyzacji. U podstaw monitorowania le\u017c\u0105 dane \u015bledzenia. W Istio monitorowanie jest realizowane za pomoc\u0105 Prometheusa i posiada odpowiedni interfejs u\u017cytkownika. Prometheus wspiera automatyczne monitorowanie z u\u017cyciem powiadomie\u0144 Alerts i Alert Managers.<\/p>\n<h3>Robimy znaki<\/h3>\n<p>\nAby \u015bledzenie sta\u0142o si\u0119 mo\u017cliwe, aplikacja musi stworzy\u0107 kolekcj\u0119 span\u00f3w. Nast\u0119pnie musz\u0105 by\u0107 one eksportowane do Jaeger, aby ten z kolei stworzy\u0142 wizualn\u0105 reprezentacj\u0119 \u015bledzenia. Mi\u0119dzy innymi te spany oznaczaj\u0105 nazw\u0119 operacji oraz znaczniki czasowe jej rozpocz\u0119cia i zako\u0144czenia. Przekazywanie span\u00f3w odbywa si\u0119 przez przekierowanie nag\u0142\u00f3wk\u00f3w HTTP zapyta\u0144 przeznaczonych dla Jaeger z zapyta\u0144 przychodz\u0105cych do wychodz\u0105cych. W zale\u017cno\u015bci od u\u017cywanego j\u0119zyka programowania mo\u017ce to wymaga\u0107 niewielkiej modyfikacji kodu \u017ar\u00f3d\u0142owego aplikacji. Poni\u017cej przedstawiony jest przyk\u0142ad kodu w Javie (przy u\u017cyciu frameworka Spring Boot), kt\u00f3ry dodaje nag\u0142\u00f3wki B3 (w stylu Zipkin) do twojego zapytania w klasie konfiguracyjnej Spring:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/2314e2d156dc9b9fdb299af2dac01f66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nW tym celu wykorzystuje si\u0119 nast\u0119puj\u0105ce ustawienia nag\u0142\u00f3wk\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/18f0a13af27665ec2d154ff4cff48157.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJe\u015bli u\u017cywasz Javy, to kod mo\u017cna zostawi\u0107 w spokoju i po prostu doda\u0107 kilka linii do pliku POM w Mavenie oraz ustawi\u0107 zmienne \u015brodowiskowe. Oto jakie linie nale\u017cy doda\u0107 do pliku POM.XML, aby wdro\u017cy\u0107 Jaeger Tracer Resolver:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/a63a634c2c22fc09a237cafc4873855d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA odpowiednie zmienne \u015brodowiskowe ustawia si\u0119 w Dockerfile:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/7fe9046242d7e628342a6266e4a2f743.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nWszystko, teraz wszystko jest skonfigurowane, a nasze mikrous\u0142ugi zaczn\u0105 generowa\u0107 dane \u015bledzenia.<\/p>\n<h3>Przygl\u0105daj\u0105c si\u0119 z grubsza<\/h3>\n<p>\nIstio zawiera prost\u0105 desktopy opart\u0105 na Grafanie. Kiedy wszystko jest skonfigurowane i dzia\u0142a na platformie Red Hat OpenShift PaaS (w naszym przyk\u0142adzie Red Hat OpenShift i Kubernetes s\u0105 uruchomione na minishift), ten pulpit uruchamia si\u0119 nast\u0119puj\u0105c\u0105 komend\u0105:<\/p>\n<pre><code class=\"plaintext\">open &quot;$(minishift openshift service grafana -u)\/d\/1\/istio-dashboard?refresh=5&ord;Id=1&quot;\n<\/code><\/pre>\n<p>\nPanel Grafany pozwala szybko oceni\u0107 dzia\u0142anie systemu. Fragment tego panelu jest pokazany na poni\u017cszym rysunku:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/2c10cd23fd5166f437c2b3c1d50c6a18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTut mo\u017cna zauwa\u017cy\u0107, \u017ce mikroserwis customer wywo\u0142uje mikroserwis preference v1, a ten z kolei wywo\u0142uje mikroserwisy recommendation v1 i v2. Na panelu Grafana znajduje si\u0119 blok Dashboard Row dla metryk na wysokim poziomie, takich jak og\u00f3lna liczba zapyta\u0144 (Global Request Volume), wska\u017anik udanych zapyta\u0144 (success rates) oraz b\u0142\u0119dy 4xx. Dodatkowo znajduje si\u0119 tam widok Server Mesh z wykresami dla ka\u017cdego serwisu oraz blok Services Row do przegl\u0105dania szczeg\u00f3\u0142owych informacji o ka\u017cdym kontenerze dla ka\u017cdego serwisu.<\/p>\n<h3>Teraz zag\u0142\u0119bimy si\u0119 w temat<\/h3>\n<p>\nPrzy odpowiednio skonfigurowanym \u015bledzeniu Istio, co mo\u017cna powiedzie\u0107, \u017ce dzia\u0142a wr\u0119cz od razu, umo\u017cliwia to g\u0142\u0119bsz\u0105 analiz\u0119 wydajno\u015bci systemu. W interfejsie Jaeger mo\u017cna przegl\u0105da\u0107 \u015bledzenia i zobaczy\u0107, jak daleko i g\u0142\u0119boko si\u0119gaj\u0105, a tak\u017ce wizualnie zlokalizowa\u0107 w\u0105skie gard\u0142a w wydajno\u015bci. Przy u\u017cyciu Red Hat OpenShift na platformie minishift uruchomienie interfejsu Jaeger UI wykonuje si\u0119 poleceniem:<\/p>\n<pre><code class=\"plaintext\">minishift openshift service jaeger-query --in-browser\n<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/074fea646ad191f819a9a67a3f311c8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCo mo\u017cna powiedzie\u0107 o \u015bledzeniu na tym zrzucie ekranu:<\/p>\n<ul>\n<li>Dzieli si\u0119 na 7 span'\u00f3w.<\/li>\n<li>Ca\u0142kowity czas wykonania wynosi 6.99 ms.<\/li>\n<li>Na mikroserwisie recommendation, kt\u00f3ry jest ostatni w \u0142a\u0144cuchu, sp\u0119dza si\u0119 0.69 ms.<\/li>\n<\/ul>\n<p>\nTego rodzaju diagramy pozwalaj\u0105 szybko zrozumie\u0107 sytuacj\u0119, gdy z powodu jednego niew\u0142a\u015bciwie dzia\u0142aj\u0105cego serwisu t.j. ca\u0142a wydajno\u015b\u0107 systemu na tym cierpi.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u0432\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430 recommendation:v2 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 oc scale &#8212;replicas=2 deployment\/recommendation-v2. \u0412\u043e\u0442 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 pod\u2019\u044b:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/0ecb8d78d6967d0392de67be6553b870.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJe\u015bli teraz prze\u0142\u0105czymy si\u0119 z powrotem do Jaeger i rozwinimy span dla serwisu recommendation, zobaczymy, na kt\u00f3ry pod s\u0105 kierowane zapytania. Dzi\u0119ki temu mo\u017cemy \u0142atwo zlokalizowa\u0107 problemy na poziomie konkretnych pod'\u00f3w. Nale\u017cy przy tym zwr\u00f3ci\u0107 uwag\u0119 na pole node_id:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/474da66c581692cd11070a1732ac5458.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Dok\u0105d i jak wszystko si\u0119 porusza<\/h3>\n<p>\nTeraz przechodzimy do interfejsu Prometheus i zupe\u0142nie przewidywanie widzimy, \u017ce zapytania mi\u0119dzy drug\u0105 a pierwsz\u0105 wersj\u0105 serwisu recommendation dziel\u0105 si\u0119 w proporcji 2:1, dok\u0142adnie zgodnie z liczb\u0105 dzia\u0142aj\u0105cych pod'\u00f3w. Przy czym ten wykres b\u0119dzie dynamicznie si\u0119 zmienia\u0142 przy skalowaniu pod'\u00f3w w g\u00f3r\u0119 i w d\u00f3\u0142, co b\u0119dzie szczeg\u00f3lnie przydatne przy Canary Deployment (szczeg\u00f3\u0142owiej przyjrzymy si\u0119 tej metodzie wdra\u017cania nast\u0119pnym razem).<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/c080fffd2398b0a2eac3e63665bdb0a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>To dopiero pocz\u0105tek<\/h3>\n<p>\nDzisiaj jedynie lekko dotkn\u0119li\u015bmy skarbnicy przydatnych informacji o Jaegerze, Grafanie i Prometheusie. To by\u0142o naszym celem \u2013 wskaza\u0107 wam w\u0142a\u015bciwy kierunek i otworzy\u0107 perspektywy Istio.<\/p>\n<p>Pami\u0119tajcie, \u017ce to wszystko jest ju\u017c wbudowane w Istio. U\u017cywaj\u0105c okre\u015blonych j\u0119zyk\u00f3w programowania (np. Java) i framework\u00f3w (np. Spring Boot), mo\u017cna to wszystko zrealizowa\u0107, nie dotykaj\u0105c samego kodu aplikacji. Tak, kod trzeba nieco zmodyfikowa\u0107, je\u015bli u\u017cywasz innych j\u0119zyk\u00f3w, przede wszystkim Nodejs lub C#. Poniewa\u017c jednak \u015bledzenie (czytaj: \u201etracing\u201d) jest jednym z wymog\u00f3w przy tworzeniu solidnych system\u00f3w chmurowych, w ka\u017cdym razie b\u0119dziesz musia\u0142 edytowa\u0107 kod, niezale\u017cnie od tego, czy masz Istio, czy nie. Dlaczego wi\u0119c nie wykorzysta\u0107 tego wysi\u0142ku bardziej korzystnie?<\/p>\n<p>Przynajmniej po to, aby zawsze odpowiada\u0107 na pytania \u201egdzie?\u201d i \u201ejak szybko?\u201d z 100% pewno\u015bci\u0105.<\/p>\n<h3>Chaos engineering w Istio: tak to by\u0142o zaplanowane<\/h3>\n<p><\/p>\n<h3>Umiej\u0119tno\u015b\u0107 psucia rzeczy pomaga sprawi\u0107, by nie psu\u0142y si\u0119<\/h3>\n<p>\nTestowanie oprogramowania to nie tylko skomplikowana, ale i wa\u017cna sprawa. W tym samym czasie testowanie poprawno\u015bci (np. czy funkcja zwraca prawid\u0142owy wynik) to jedno, a testowanie w warunkach niestabilnej sieci to zupe\u0142nie inne zadanie (cz\u0119sto zak\u0142ada si\u0119, \u017ce sie\u0107 dzia\u0142a bez awarii, co jest pierwszym z o\u015bmiu mit\u00f3w dotycz\u0105cych oblicze\u0144 rozproszonych). Jednym z wyzwa\u0144 w rozwi\u0105zaniu tego problemu jest to, jak symulowa\u0107 awarie w systemie lub wprowadza\u0107 je celowo, wykonuj\u0105c tzw. fault injection. Mo\u017cna to zrobi\u0107, modyfikuj\u0105c kod \u017ar\u00f3d\u0142owy samej aplikacji. Ale wtedy nie b\u0119dziesz testowa\u0142 swojego pierwotnego kodu, lecz jego wersj\u0119, kt\u00f3ra specjalnie symuluje awarie. W rezultacie ryzykujesz wpadni\u0119cie w \u015bmiertelne obj\u0119cia fault injection i natrafienie na gejzenbugi \u2013 b\u0142\u0119dy, kt\u00f3re znikaj\u0105, gdy pr\u00f3bujesz je wykry\u0107.<\/p>\n<p>A teraz poka\u017cemy, jak Istio pomaga poradzi\u0107 sobie z tymi trudno\u015bciami b\u0142yskawicznie.<\/p>\n<h3>Jak to wszystko wygl\u0105da, gdy wszystko dzia\u0142a \u015bwietnie<\/h3>\n<p>\nRozwa\u017cmy nast\u0119puj\u0105cy scenariusz: mamy dwa pod\u2019y dla naszego mikroserwisu recommendation, kt\u00f3re wzi\u0119li\u015bmy z podr\u0119cznika po Istio. Jeden pod oznaczony jest jako v1, a drugi jako v2. Jak wida\u0107, na razie wszystko dzia\u0142a doskonale:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/c50387b7cfd12298cfab8123f13b2ca4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(Na marginesie, liczba po prawej to po prostu licznik wywo\u0142a\u0144 dla ka\u017cdego poda)<\/p>\n<p>Ale to nie o to nam chodzi, prawda? Spr\u00f3bujmy wszystko z\u0142ama\u0107, zupe\u0142nie nie dotykaj\u0105c kodu \u017ar\u00f3d\u0142owego.<\/p>\n<h3>Tworzymy przestoje w pracy mikroserwisu<\/h3>\n<p>\nPoni\u017cej znajduje si\u0119 plik yaml dla regu\u0142y routingu Istio, kt\u00f3ra w po\u0142owie przypadk\u00f3w b\u0119dzie powodowa\u0107 b\u0142\u0105d (b\u0142\u0105d <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/dts-los-angeles\/\"   title=\"serwera\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3597\">serwera<\/a> 503):<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/8fb3ed7f16ed7fd1a57b27dfc3bfd2da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZauwa\u017c, \u017ce wyra\u017anie okre\u015blamy, \u017ce w po\u0142owie przypadk\u00f3w powinien by\u0107 zwracany b\u0142\u0105d 503.<\/p>\n<p>Tak wygl\u0105da zrzut ekranu polecenia curl uruchomionego w p\u0119tli po aktywacji tej regu\u0142y, aby symulowa\u0107 awarie. Jak wida\u0107, po\u0142owa \u017c\u0105da\u0144 zwraca b\u0142\u0105d 503, niezale\u017cnie od tego, do kt\u00f3rego poda \u2013 v1 czy v2 \u2013 s\u0105 wysy\u0142ane:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/3d9760cf5abc7480ad3aab826c274766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAby przywr\u00f3ci\u0107 normalne dzia\u0142anie, wystarczy usun\u0105\u0107 t\u0119 regu\u0142\u0119, w naszym przypadku poleceniem istioctl delete routerule recommendation-503 -n tutorial. Tutaj Tutorial to nazwa projektu Red Hat OpenShift, w ramach kt\u00f3rego dzia\u0142a nasz podr\u0119cznik dotycz\u0105cy Istio.<\/p>\n<h3>Wprowadzamy sztuczne op\u00f3\u017anienia<\/h3>\n<p>\nSztuczne b\u0142\u0119dy 503 pomagaj\u0105 przetestowa\u0107 system pod k\u0105tem odporno\u015bci na awarie, ale umiej\u0119tno\u015b\u0107 przewidywania i radzenia sobie z op\u00f3\u017anieniami powinna Ci\u0119 jeszcze bardziej zaimponowa\u0107. W ko\u0144cu op\u00f3\u017anienia w rzeczywisto\u015bci wyst\u0119puj\u0105 cz\u0119\u015bciej ni\u017c awarie. Wolno dzia\u0142aj\u0105cy mikroserwis to trucizna, kt\u00f3ra szkodzi ca\u0142emu systemowi. Dzi\u0119ki Istio mo\u017cesz przetestowa\u0107 kod zwi\u0105zany z obs\u0142ug\u0105 op\u00f3\u017anie\u0144, nie zmieniaj\u0105c go przy tym. Na pocz\u0105tek poka\u017cemy, jak to zrobi\u0107 w przypadku wprowadzenia sztucznych op\u00f3\u017anie\u0144 w sieci.<\/p>\n<p>Zauwa\u017c, \u017ce po takim te\u015bcie mo\u017cesz potrzebowa\u0107 (lub chcie\u0107) dopracowa\u0107 sw\u00f3j kod. Dobr\u0105 wiadomo\u015bci\u0105 jest to, \u017ce w tym przypadku b\u0119dziesz dzia\u0142a\u0107 proaktywnie, a nie reaktywnie. Tak powinien by\u0107 skonstruowany cykl programowania: kodowanie-testowanie-opinia zwrotna-kodowanie-testowanie\u2026<\/p>\n<p>Oto jak wygl\u0105da regu\u0142a, kt\u00f3ra\u2026 Chocia\u017c wiesz co? Istio jest tak proste, a ten plik yaml tak zrozumia\u0142y, \u017ce wszystko w tym przyk\u0142adzie m\u00f3wi samo za siebie, po prostu sp\u00f3jrz:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/e077e891cbccc66ebc4d4c7b67a0f1ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nW po\u0142owie przypadk\u00f3w napotkamy 7-sekundowe op\u00f3\u017anienie. I to nie to samo, co wstawienie polecenia sleep do kodu \u017ar\u00f3d\u0142owego, poniewa\u017c Istio rzeczywi\u015bcie op\u00f3\u017ania \u017c\u0105danie o 7 sekund. Poniewa\u017c Istio wspiera \u015bledzenie Jaeger, to op\u00f3\u017anienie jest wyra\u017anie widoczne w interfejsie u\u017cytkownika Jaeger\u2019a, jak pokazano na zrzucie ekranu poni\u017cej. Zauwa\u017c d\u0142ugie \u017c\u0105danie w prawym g\u00f3rnym rogu wykresu \u2013 jego czas trwania wynosi 7,02 sekundy:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/97a7b33fb7e0455973c7fd1b2aefadf3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTen scenariusz pozwala przetestowa\u0107 kod w warunkach op\u00f3\u017anie\u0144 sieciowych. I oczywi\u015bcie, usuwaj\u0105c t\u0119 regu\u0142\u0119, zlikwidujemy sztuczne op\u00f3\u017anienie. Powtarzamy, ale znowu zrobili\u015bmy to wszystko, nie dotykaj\u0105c kodu \u017ar\u00f3d\u0142owego.<\/p>\n<h3>Nie ust\u0119powa\u0107 i nie poddawa\u0107 si\u0119<\/h3>\n<p>\nInn\u0105 przydatn\u0105 funkcj\u0105 Istio w in\u017cynierii chaosu jest wielokrotne pr\u00f3bowanie wezwania us\u0142ugi okre\u015blon\u0105 liczb\u0119 razy. Chodzi o to, aby nie przerywa\u0107 pr\u00f3b, gdy pierwsze \u017c\u0105danie ko\u0144czy si\u0119 b\u0142\u0119dem 503 \u2013 a wtedy, mo\u017ce za N-ty razem, b\u0119dziemy mieli szcz\u0119\u015bcie. Mo\u017ce us\u0142uga po prostu chwilowo odpocz\u0119\u0142a z jakiego\u015b powodu. Tak, ten pow\u00f3d trzeba by zbada\u0107 i wyeliminowa\u0107. Ale to p\u00f3\u017aniej, a na razie spr\u00f3bujmy zrobi\u0107 tak, aby system wci\u0105\u017c dzia\u0142a\u0142.<\/p>\n<p>Zatem chcemy, aby us\u0142uga od czasu do czasu zg\u0142asza\u0142a b\u0142\u0105d 503, a Istio po tym ponownie pr\u00f3bowa\u0142o si\u0119 z ni\u0105 po\u0142\u0105czy\u0107. I tutaj wyra\u017anie potrzebny jest spos\u00f3b generowania b\u0142\u0119du 503, nie dotykaj\u0105c samego kodu\u2026<\/p>\n<p>Stop, czekajcie! Przecie\u017c dopiero to robili\u015bmy.<\/p>\n<p>Ten plik sprawi, \u017ce us\u0142uga recommendation-v2 w po\u0142owie przypadk\u00f3w zwr\u00f3ci b\u0142\u0105d 503:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/f446528f9c968e40cc2cf318cf0acde9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOczywi\u015bcie, cz\u0119\u015b\u0107 \u017c\u0105da\u0144 zako\u0144czy si\u0119 niepowodzeniem:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/f998513746604beda241b8d6de2ed727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA teraz wykorzystajmy funkcj\u0119 Retry w Istio:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/32e210b6ecbf4c1ecf121ee73e64ba35.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTa zasada routingu wykonuje trzy pr\u00f3by z dwu-sekundowym interwa\u0142em i powinna skr\u00f3ci\u0107 (a idealnie ca\u0142kowicie wyeliminowa\u0107) b\u0142\u0119dy 503:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/7f9711c52949072b823399e59141cb64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPodsumowuj\u0105c: sprawili\u015bmy, \u017ce Istio, po pierwsze, generuje b\u0142\u0105d 503 dla po\u0142owy \u017c\u0105da\u0144. Po drugie, to samo Istio wykonuje trzy pr\u00f3by ponownego po\u0142\u0105czenia si\u0119 z us\u0142ug\u0105 w przypadku wyst\u0105pienia b\u0142\u0119du 503. W rezultacie wszystko dzia\u0142a po prostu doskonale. W ten spos\u00f3b, wykorzystuj\u0105c funkcj\u0119 Retry, spe\u0142nili\u015bmy nasze obietnice, aby nie ust\u0119powa\u0107 i nie poddawa\u0107 si\u0119.<\/p>\n<p>I tak, znowu to zrobili\u015bmy, ca\u0142kowicie nie dotykaj\u0105c kodu. Wszystko, czego potrzebowali\u015bmy, to dwie zasady routingu w Istio:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/c21a1cfd2d78ae4145a57d1cefcc6c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Jak nie zawie\u015b\u0107 u\u017cytkownika lub siedmiu os\u00f3b nie czeka.<\/h3>\n<p>\nA teraz odwr\u00f3\u0107my sytuacj\u0119 i rozwa\u017cmy scenariusz, w kt\u00f3rym nie poddawanie si\u0119 i nie rezygnowanie ma sens tylko przez pewien okre\u015blony czas. Nast\u0119pnie nale\u017cy po prostu zako\u0144czy\u0107 pr\u00f3by przetworzenia zapytania, aby nie zmusza\u0107 wszystkich do czekania na jeden spowalniaj\u0105cy serwis. Innymi s\u0142owy, nie b\u0119dziemy broni\u0107 straconej pozycji, lecz ust\u0105pimy do zapasowej linii, aby nie zawodzi\u0107 u\u017cytkownika strony i nie zmusza\u0107 go do biernego czekania.<\/p>\n<p>W Istio mo\u017cna ustawi\u0107 limit czasu wykonywania zapytania. Je\u015bli serwis przekroczy ten limit, zwracany jest b\u0142\u0105d 504 (Gateway Timeout) \u2013 i to wszystko jest konfigurowane przez Istio. Ale b\u0119dziemy musieli doda\u0107 do kodu \u017ar\u00f3d\u0142owego serwisu polecenie sleep (a nast\u0119pnie, oczywi\u015bcie, wykona\u0107 rebuild i redeploy), aby zasymulowa\u0107 wolne dzia\u0142anie serwisu. Niestety, inaczej si\u0119 nie da.<\/p>\n<p>Zatem wstawili\u015bmy trzysekundowy sleep w kodzie serwisu recommendation v2, przebudowali\u015bmy odpowiedni obraz i dokonali\u015bmy redeploy kontenera, a teraz dodamy limit czasu za pomoc\u0105 nast\u0119puj\u0105cej regu\u0142y routingu Istio:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/c03fc452b98dd875a8a7d3ac561893ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNa powy\u017cszym zrzucie ekranu mo\u017cna zobaczy\u0107, \u017ce rezygnujemy z pr\u00f3b kontaktu z serwisem recommendation, je\u015bli nie otrzymujemy odpowiedzi w ci\u0105gu jednej sekundy, to znaczy jeszcze przed wyst\u0105pieniem b\u0142\u0119du 504. Po zastosowaniu tej regu\u0142y routingu (i dodaniu trzysekundowego sleep'a w kodzie serwisu recommendation:v2) uzyskamy nast\u0119puj\u0105cy wynik:<\/p>\n<p><img decoding=\"async\" alt=\"\u015aledzenie i monitorowanie w Istio: mikrous\u0142ugi i zasada nieoznaczono\u015bci\" src=\"\/wp-content\/uploads\/2020\/01\/ed6e80052c67254718b1fde2bd873e71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZn\u00f3w powtarzamy, ale limit czasu mo\u017cna ustawi\u0107, nie zmieniaj\u0105c kodu \u017ar\u00f3d\u0142owego. A dodatkowym plusem jest to, \u017ce teraz mo\u017cesz modyfikowa\u0107 sw\u00f3j kod tak, aby reagowa\u0142 na limit czasu i \u0142atwo testowa\u0107 te zmiany za pomoc\u0105 Istio.<\/p>\n<h3>A teraz wszystko razem<\/h3>\n<p>\nWprowadzenie odrobiny chaosu za pomoc\u0105 Istio to doskona\u0142y spos\u00f3b na przetestowanie swojego kodu i niezawodno\u015bci ca\u0142ego systemu. Wzorce fallback, bulkhead i circuit breaker, mechanizmy wprowadzania sztucznych awarii i op\u00f3\u017anie\u0144, a tak\u017ce ponowne wywo\u0142ania i limity czasowe b\u0119d\u0105 bardzo przydatne przy tworzeniu odpornych na b\u0142\u0119dy system\u00f3w chmurowych. W po\u0142\u0105czeniu z Kubernetes i Red Hat OpenShift te narz\u0119dzia pomog\u0105 pewnie zmierzy\u0107 si\u0119 z przysz\u0142o\u015bci\u0105.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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\/pl\/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=\"pl_PL\" \/>\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\/pl\/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\udd47\u015aledzenie i monitorowanie w Istio: mikroserwisy i zasada nieoznaczono\u015bci | ProHoster","description":"Zasada nieoznaczono\u015bci Heisenberga m\u00f3wi, \u017ce nie mo\u017cna jednocze\u015bnie zmierzy\u0107 po\u0142o\u017cenia obiektu i jego pr\u0119dko\u015bci. Je\u015bli obiekt si\u0119 porusza, nie ma swojego miejsca.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/55700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=55700"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55700\/revisions"}],"predecessor-version":[{"id":162124,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/55700\/revisions\/162124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=55700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=55700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=55700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}