{"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\/et\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","title":{"rendered":"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Heisenbergi ebamugavuse printsiip \u00fctleb, et ei saa samaaegselt m\u00f5\u00f5ta objekti asukohta ja selle kiirus. Kui objekt liigub, pole tal asukohta. Kui asukoht on olemas \u2013 t\u00e4hendab, et tal pole kiirus.<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/617ace5f892b62652b404b24585537b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMis puudutab mikroteenuseid Red Hat OpenShifti (ja Kubernetes'i) platvormil, siis t\u00e4nu sobivale avatud l\u00e4htekoodiga tarkvarale saavad nad samal ajal edastada teavet oma j\u00f5udluse ja toimivuse kohta. See ei vaidlusta vanameest Heisenbergi, kuid kaotab ebamugavuse pilve rakenduste haldamisel. Istio v\u00f5imaldab h\u00f5lpsasti korraldada selliste rakenduste j\u00e4lgimist ja monitooringut, et k\u00f5ik p\u00fcsiks kontrolli all.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>M\u00e4\u00e4ratleme terminoloogia<\/h3>\n<p>\nPod <b>j\u00e4lgimine<\/b> J\u00e4lgimise (Tracing) all m\u00f5istame s\u00fcsteemi tegevuse logimist. See k\u00f5lab \u00fcsna \u00fcldiselt, kuid t\u00f5eliselt \u00fcks olulisemaid reegleid on siin visata j\u00e4lgimisandmed vastavasse salvestusruumi, ilma et oleks vaja nende vormindamisega muretseda. Ning kogu andmete otsimise ja anal\u00fc\u00fcsi t\u00f6\u00f6 lasub nende tarbija \u00f5lul. Istios kasutatakse j\u00e4lgimiss\u00fcsteemi Jaeger, mis rakendab OpenTracing'i andmemudelit.<\/p>\n<p><b>J\u00e4lgedeks<\/b> J\u00e4lgedeks (Traces, ja s\u00f5na \"j\u00e4ljed\" kasutatakse siin t\u00e4henduses \"m\u00e4rgid\", nagu n\u00e4iteks ballistilise ekspertiisi puhul) nimetame andmeid, mis kirjeldavad t\u00e4ielikult p\u00e4ringu v\u00f5i t\u00f6\u00f6\u00fclesande kulgemist, nagu \u00f6eldakse, \"algusest l\u00f5puni\". N\u00e4iteks k\u00f5ik, mis toimub hetkel, kui kasutaja vajutab nuppu veebilehel, ja kuni andmete tagastamiseni, sealhulgas k\u00f5ik kaasatud mikroteenused. \u00dcks j\u00e4lg kirjeldab t\u00e4ielikult (v\u00f5i mudeldab) p\u00e4ringu kulgemist edasi-tagasi. Jaegeri liideses jagunevad j\u00e4ljed ajakava j\u00e4rgi nagu ahel, mida saab jagada eraldi l\u00fcli. Ainult selle asemel, et l\u00fclid oleksid ahelas, koosneb j\u00e4lg nn span'idest.<\/p>\n<p><b>Span<\/b> \u2013 see on intervall t\u00f6\u00f6\u00fclesande algusest kuni selle l\u00f5puni. J\u00e4tkates analoogiat, v\u00f5ib \u00f6elda, et iga span on eraldi ahela l\u00fcli. Span'il v\u00f5ib olla (v\u00f5i mitte olla) \u00fcks v\u00f5i mitu alam-spani. Seega on k\u00f5ige \u00fclemise taseme span (root span) sama \u00fcldine kestus nagu j\u00e4lg, millele see kuulub.<\/p>\n<p><b>J\u00e4lgimine<\/b> \u2013 see, this is the actual observation of your system \u2013 through the eyes, via the UI or through automation tools. The basis of monitoring lies in tracing data. In Istio, monitoring is implemented using Prometheus and has the corresponding UI. Prometheus supports automatic monitoring with alert notifications and Alert Managers.<\/p>\n<h3>We keep score<\/h3>\n<p>\nTo enable tracing, the application must create a collection of spans. They then need to be exported to Jaeger so it can create a visual representation of the trace. Among other things, these spans label the name of the operation, as well as timestamp markers for its start and end. The transmission of spans is carried out by redirecting the HTTP request headers meant for Jaeger from incoming requests to outgoing requests. Depending on the programming language used, this may require slight modifications to the application's source code. Below is an example of Java code (using the Spring Boot framework) that adds B3 (Zipkin-style) headers to your request in the Spring configuration class:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/2314e2d156dc9b9fdb299af2dac01f66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThe following header settings are used:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/18f0a13af27665ec2d154ff4cff48157.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIf you are using Java, you can leave the code unchanged and simply add a few lines to the Maven POM file and set environment variables. Here are the lines to add to the POM.XML file to integrate the Jaeger Tracer Resolver:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/a63a634c2c22fc09a237cafc4873855d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAnd the corresponding environment variables are set in the Dockerfile:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/7fe9046242d7e628342a6266e4a2f743.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nThat's it, everything is set up now, and our microservices will start generating trace data.<\/p>\n<h3>Taking a general look<\/h3>\n<p>\nIstio includes a simple control panel based on Grafana. Once everything is configured and running on the Red Hat OpenShift PaaS platform (in our example, Red Hat OpenShift and Kubernetes are deployed on minishift), this panel can be launched with the following command:<\/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>\nThe Grafana panel allows for a quick assessment of the system's performance. A snippet of this panel is shown in the picture below:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/2c10cd23fd5166f437c2b3c1d50c6a18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSiit on n\u00e4ha, et klienditeeninduse mikroteenus kutsub v\u00e4lja eelistuste mikroteenuse versioon 1, mis omakorda kutsub v\u00e4lja soovituste mikroteenuseid versioon 1 ja 2. Grafana armatuurlaud sisaldab Dashboard Row plokki k\u00f5rgetasemeliste m\u00f5\u00f5dikute jaoks, nagu globaalne p\u00e4ringute maht, eduka p\u00e4ringu osakaal, 4xx vead. Lisaks on seal Server Mesh esitus, kus on graafikud iga teenuse jaoks ja Services Row plokk, et vaadata \u00fcksikasjalikke andmeid iga konteineri kohta igas teenuses.<\/p>\n<h3>N\u00fc\u00fcd kaevame s\u00fcgavamale<\/h3>\n<p>\nKorralikult seadistatud Istio j\u00e4lgimine v\u00f5imaldab otse v\u00e4lja v\u00f5tta s\u00fcsteemi j\u00f5udluse anal\u00fc\u00fcs. Jaegeri kasutajaliideses saab j\u00e4lgimisi vaadata ja n\u00e4ha, kui kaugele ja s\u00fcgavale need ulatuvad, samuti visuaalselt tuvastada j\u00f5udluse kitsaskohti. Kui kasutada Red Hat OpenShift platvormil minishift, k\u00e4ivitatakse Jaegeri kasutajaliides j\u00e4rgmise k\u00e4suga:<\/p>\n<pre><code class=\"plaintext\">minishift openshift service jaeger-query --in-browser\n<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/074fea646ad191f819a9a67a3f311c8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMida saab sellel ekraanil j\u00e4lgimise kohta \u00f6elda:<\/p>\n<ul>\n<li>See jaguneb 7 span'iks.<\/li>\n<li>Kogu t\u00f6\u00f6tlusaeg on 6.99 ms.<\/li>\n<li>Mikroteenusele soovitus, mis on ahela viimane, kulub 0.69 ms.<\/li>\n<\/ul>\n<p>\nSelle t\u00fc\u00fcpi diagrammid aitavad kiiresti m\u00f5ista olukorda, kui m\u00f5ni v\u00e4hem oluline teenus m\u00f5jutab kogu s\u00fcsteemi j\u00f5udlust.<\/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=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/0ecb8d78d6967d0392de67be6553b870.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKui n\u00fc\u00fcd l\u00fclituda tagasi Jaegerisse ja avada soovituste teenuse span, n\u00e4eme, kuhu pod'id jagunevad. Nii saame h\u00f5lpsasti tuvastada t\u00f5rkeid konkreetse pod'i tasemel. Selleks tuleb vaadata node_id v\u00e4lja:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/474da66c581692cd11070a1732ac5458.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Kuhu ja kuidas k\u00f5ik liigub<\/h3>\n<p>\nN\u00fc\u00fcd liigume Prometheuse liidesesse ja ootusp\u00e4raselt n\u00e4eme seal, et p\u00e4ringud teise ja esimese versiooni vahel jagunevad suhtega 2:1, rangelt vastavalt t\u00f6\u00f6kindlate pod'ide arvule. Lisaks muutub see graafik d\u00fcnaamiliselt, kui pod'e \u00fcles-alla skaleerida, mis on eriti kasulik Canary Deployment'i puhul (me vaatame selle rakendusskeemi l\u00e4hemalt j\u00e4rgmine kord).<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/c080fffd2398b0a2eac3e63665bdb0a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>K\u00f5ik on alles alguses<\/h3>\n<p>\nTegelikult puudutasime t\u00e4na vaid kergelt Jaegeri, Grafana ja Prometheuse v\u00e4\u00e4rtuslikku teavet. See oli meie eesm\u00e4rk \u2013 suunata teid \u00f5igesse suunda ja avada Istio perspektiive.<\/p>\n<p>Ja pidage meeles, et see k\u00f5ik on juba Istios sisse ehitatud. Teatud programmeerimiskeelte (nt Java) ja raamistike (nt Spring Boot) kasutamisel saab k\u00f5ik selle realiseerida, puutumata rakenduste koodi. Jah, koodi tuleb veidi kohandada, kui kasutate teisi keeli, eelk\u00f5ige Nodejs v\u00f5i C#. Kuid kuna j\u00e4lgitavus (loe: \"tracing\") on usaldusv\u00e4\u00e4rsete pilves\u00fcsteemide loomise \u00fcks peamisi tingimusi, peate koodi igal juhul muutma, olgu teil Istio v\u00f5i mitte. Miks mitte investeerida oma pingutusi tugevamalt?<\/p>\n<p>Kasv\u00f5i selleks, et alati vastata k\u00fcsimustele \"kus?\" ja \"kui kiiresti?\" 100% kindlusega.<\/p>\n<h3>Kaosetehnika Istios: see oli nii kavandatud<\/h3>\n<p><\/p>\n<h3>Asjade purustamise oskus aitab tagada, et need ei puruneks<\/h3>\n<p>\nTarkvara testimine ei ole mitte ainult keeruline, vaid ka oluline. Samas on korrektsete testide (nt kas funktsioon tagastab \u00f5ige tulemuse) tegemine \u00fcks asi, aga testi tegemine ebastabiilses v\u00f5rgus on hoopis teine \u00fclesanne (tihti arvatakse, et v\u00f5rk t\u00f6\u00f6tab alati t\u00f5rgeteta, ja see on esimene kaheksast valeideest jaotatud arvutuste kohta). \u00dcks selle \u00fclesande keerukustest seisneb selles, kuidas s\u00fcsteemis t\u00f5rkeid simuleerida v\u00f5i neid tahtlikult p\u00f5hjustada, tehes nn fault injection'i. Seda saab teha rakenduse algkoodi modifitseerimise teel. Kuid siis testite mitte oma algset koodi, vaid selle versiooni, mis simuleerib t\u00f5rkeid. Tulemuseks on risk sattuda fault injection'i surmavatesse embustesse ja silmitsi seista geizenbug'idega \u2013 t\u00f5rked, mis kaovad katsetamise katsete ajal.<\/p>\n<p>Ja n\u00fc\u00fcd n\u00e4itame, kuidas Istio aitab nendest raskustest h\u00f5lpsasti \u00fcle saada.<\/p>\n<h3>Kuidas k\u00f5ik v\u00e4lja n\u00e4eb, kui k\u00f5ik on suurep\u00e4rane<\/h3>\n<p>\nVaatame j\u00e4rgmist stsenaariumi: meil on kaks pod'i meie soovituste mikroteenusele, mille v\u00f5tsime Istio \u00f5pikust. \u00dcks pod on t\u00e4histatud kui v1 ja teine kui v2. Nagu n\u00e4eme, t\u00f6\u00f6tab k\u00f5ik praegu suurep\u00e4raselt:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/c50387b7cfd12298cfab8123f13b2ca4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(Muide, number paremal \u2013 see on lihtsalt iga pod'i k\u00f5nede loendur)<\/p>\n<p>Aga me ei vaja tegelikult seda, eks? Proovime k\u00f5ik purustada, puudutamata allika koodi.<\/p>\n<h3>Teeme mikroteenuse t\u00f6\u00f6 katkestusi<\/h3>\n<p>\nAllpool on yaml-fail Istio marsruutimisse reegli kohta, mis katkub pooled korrad (vea) <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/dts-los-angeles\/\"   title=\"serverilt\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3597\">serverilt<\/a> 503):<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/8fb3ed7f16ed7fd1a57b27dfc3bfd2da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPange t\u00e4hele, et oleme selgelt m\u00e4\u00e4ranud, et pooled korrad peab tagastama vea 503.<\/p>\n<p>Nii n\u00e4eb v\u00e4lja ekraanipilt ts\u00fckli k\u00e4ivitamisel curl k\u00e4sust p\u00e4rast reegli aktiveerimist, et simuleerida katkestusi. Nagu n\u00e4eme, tagastab pool p\u00e4ringutest vea 503, olenemata sellest, millisele pod'ile \u2013 v1 v\u00f5i v2 \u2013 need saadetakse:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/3d9760cf5abc7480ad3aab826c274766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTavap\u00e4rase t\u00f6\u00f6 taastamiseks piisab reegli eemaldamisest, meie puhul k\u00e4suga istioctl delete routerule recommendation-503 -n tutorial. Siin Tutorial on Red Hat OpenShift'i projekti nimi, kus meie Istio \u00f5petus toimub.<\/p>\n<h3>Toome sisse kunstlikud viivitused<\/h3>\n<p>\nKunstlikud vead 503 aitavad testida s\u00fcsteemi t\u00f5rgetele vastupidavust, kuid v\u00f5ime ennustada ja t\u00f6\u00f6delda viivitusi peaks teid veelgi enam muljet avaldama. Ja tegelikus elus juhtuvad viivitused sageli rohkem kui t\u00f5rked. Aeglaselt t\u00f6\u00f6tav mikroteenus on m\u00fcrk, millest kannatab kogu s\u00fcsteem. Istio abil saab testida viivituste t\u00f6\u00f6tlemise koodi, muutes seda samal ajal mitte. Alustame n\u00e4itamisega, kuidas seda teha kunstlikult sisse toodud v\u00f5rgu viivituste korral.<\/p>\n<p>Pange t\u00e4hele, et p\u00e4rast sellist testimist v\u00f5ib teil olla vajadus (v\u00f5i soov) oma koodi t\u00e4iustada. Hea uudis on see, et sel juhul tegutsete proaktiivselt, mitte reaktiivselt. Just nii peaks arenguts\u00fckkel v\u00e4lja n\u00e4gema: kodeerimine-testimine-tagasiside-kodeerimine-testimine\u2026<\/p>\n<p>Nii n\u00e4eb v\u00e4lja reegel, mis\u2026 Kuigi tead, mis? Istio on nii lihtne, ja see yaml-fail on nii arusaadav, et k\u00f5ik selles n\u00e4ites r\u00e4\u00e4gib enda eest, vaata lihtsalt:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/e077e891cbccc66ebc4d4c7b67a0f1ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPooles juhtudel tekib meil 7-sekundiline viivitus. Ja see ei ole v\u00f5rreldav sellega, kui me lisaksime l\u00e4htekoodi k\u00e4su sleep, sest Istio viivitab p\u00e4ringu t\u00f5eliselt 7 sekundiks. Kuna Istio toetab Jaegeri j\u00e4lgimist, on see viivitus h\u00e4sti n\u00e4htav Jaegeri kasutajaliideses, nagu on n\u00e4idatud alloleval ekraanipildil. P\u00f6\u00f6rake t\u00e4helepanu pika p\u00e4ringu p\u00f5hja paremas servas \u2013 selle kestus on 7,02 sekundit:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/97a7b33fb7e0455973c7fd1b2aefadf3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSee stsenaarium v\u00f5imaldab testida koodi v\u00f5rgu viivituste tingimustes. Ja on selge, et kui me selle reegli eemaldame, kaotame me kunstliku viivituse. Korrame, et oleme k\u00f5ik selle teinud, mitte puutudes l\u00e4htekoodi.<\/p>\n<h3>\u00c4ra tagane ega anna alla<\/h3>\n<p>\nTeine kasulik funktsioon Istios, mis puudutab kaose inseneritete, on teenusele korduvad p\u00e4ringud m\u00e4\u00e4ratud arvu kordi. Idee on selles, et me ei peata katseid, kui esimene p\u00e4ring l\u00f5ppeb veaga 503 \u2013 ja siis, v\u00f5ib-olla, N-ndal korral me \u00f5nnestume. V\u00f5ib-olla on teenus lihtsalt mingil p\u00f5hjusel \u00fcht\u00e4kki madalal. Jah, selle p\u00f5hjuse tuleks v\u00e4lja leida ja k\u00f5rvaldada. Kuid see on hiljem, n\u00fc\u00fcd proovime teha nii, et s\u00fcsteem j\u00e4tkab t\u00f6\u00f6d.<\/p>\n<p>Nii et tahame, et teenus aeg-ajalt annaks vea 503, ja Istio proovib seej\u00e4rel selle \u00fchenduse loomist. Siin on ilmne vajadus genereerida viga 503, puutumatult koodi...<\/p>\n<p>Peatu, oota! Me tegime just seda.<\/p>\n<p>See fail muudab nii, et teenus recommendation-v2 annab pooled juhtudest vea 503:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/f446528f9c968e40cc2cf318cf0acde9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOn ilmne, et osa p\u00e4ringutest l\u00f5ppeb eba\u00f5nnestumisega:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/f998513746604beda241b8d6de2ed727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa n\u00fc\u00fcd rakendame Istio Retry-funktsiooni:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/32e210b6ecbf4c1ecf121ee73e64ba35.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSee marsruutimisreegel teeb kolm kordust kahe sekundi intervalliga ja peaks v\u00e4hendama (ja ideaalis t\u00e4ielikult k\u00f5rvaldama) vead 503:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/7f9711c52949072b823399e59141cb64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKokkuv\u00f5ttes oleme teinud nii, et Istio, k\u00f5igepealt, genereerib vea 503 pooltele p\u00e4ringutele. Teiseks, sama Istio teeb kolme katset teenusega uuesti \u00fchenduse loomise korral vea 503 esinedes. Tulemus on lihtsalt suurep\u00e4rane. Nii et kasutades Retry-funktsiooni, t\u00e4itsime oma lubaduse mitte taganeda ega alla anda.<\/p>\n<p>Ja jah, me tegime seda j\u00e4lle, t\u00e4iesti puutumatult koodi. K\u00f5ik, mida me vajasime, olid kaks Istio marsruurimisreeglit:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/c21a1cfd2d78ae4145a57d1cefcc6c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Kuidas kasutaja mitte petta v\u00f5i seitse \u00fchte ei oota<\/h3>\n<p>\nJa n\u00fc\u00fcd keerame olukorra pea peale ja vaatame stsenaariumi, kus mitte taganeda ja mitte alla anda tasub ainult mingil kindlal ajal. Ja siis tuleb lihtsalt l\u00f5petada katseid p\u00e4ringu t\u00f6\u00f6tlemiseks, et mitte sundida k\u00f5iki ootama mingit \u00fchte pidurdavat teenust. Teisis\u00f5nu, me ei kaitse kaotatud positsiooni, vaid loovume tagavaraliinile, et mitte petta veebisaidi kasutajat ja mitte sundida teda teadmatuses viibima.<\/p>\n<p>Istios saab seada p\u00e4ringu t\u00f6\u00f6tlemise aja\u00fcletuse. Kui teenus \u00fcletab selle aja, tagastatakse viga 504 (Gateway Timeout) \u2013 see k\u00f5ik toimub j\u00e4lle Istio konfiguratsiooni kaudu. Kuid me peame teenuse l\u00e4htekoodi lisama k\u00e4su sleep (ja seej\u00e4rel loomulikult t\u00e4itma rebuild ja redeploy), et simuleerida teenuse aeglast t\u00f6\u00f6d. Kahjuks muud moodi ei saa.<\/p>\n<p>Nii et me lisasime kolmesekundilise sleep k\u00e4su soovitus teenuse koodis v2, koostasime vastava pildi \u00fcmber ja tegime konteineri redeploy, n\u00fc\u00fcd lisame aegumise j\u00e4rgmise Istio suunamisreegliga:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/c03fc452b98dd875a8a7d3ac561893ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEelmisel ekraanipildil on n\u00e4ha, et me loobume katsetest \u00fchendust v\u00f5tta soovitus teenusega, kui me ei saa vastust \u00fche sekundi jooksul, st enne, kui ilmneb viga 504. P\u00e4rast selle suunamisreegli rakendamist (ja kolme sekundi sleep'i lisamist soovitus teenuse koodi v2), saame j\u00e4rgmise tulemuse:<\/p>\n<p><img decoding=\"async\" alt=\"Traceroute ja j\u00e4lgimine Istios: mikroteenused ja ebakindluse p\u00f5him\u00f5te\" src=\"\/wp-content\/uploads\/2020\/01\/ed6e80052c67254718b1fde2bd873e71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKorratakse, aga aega saab seada, puudutamata l\u00e4htekoodi. Ja siin on veel \u00fcks boonus, et n\u00fc\u00fcd saate oma koodi kohandada nii, et see reageeriks aja\u00fcletusele, ja lihtsalt testida seda t\u00e4iustamist Istio abil.<\/p>\n<h3>Ja n\u00fc\u00fcd k\u00f5ik koos<\/h3>\n<p>\nVeidi kaose tekitamine Istio abil on suurep\u00e4rane viis oma koodi ja s\u00fcsteemi usaldusv\u00e4\u00e4rsuse testimiseks. Tagasirikka, bulkhead ja circuit breaker mudelid, kunstlike riketeni ja viivitusteni viimise mehhanismid, samuti uuesti kutsed ja aegumised on v\u00e4ga kasulikud talitlush\u00e4iretega pilves\u00fcsteemide loomiseks. Koos Kubernetes'e ja Red Hat OpenShift'iga aitavad need t\u00f6\u00f6riistad kindlalt tulevikku vastu v\u00f5tta.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47J\u00e4lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip | ProHoster","description":"Heisenbergi ebakindluse printsiip \u00fctleb, et objekti asukohta ja kiirus ei saa korraga m\u00f5\u00f5ta. Kui objekt liigub, siis ei ole tal asukohta.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/55700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=55700"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55700\/revisions"}],"predecessor-version":[{"id":162124,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55700\/revisions\/162124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}