{"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\/da\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","title":{"rendered":"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Heisenbergs usikkerhedsprincip siger, at man ikke kan m\u00e5le en objekts position og hastighed samtidig. Hvis et objekt bev\u00e6ger sig, har det ikke en pr\u00e6cis placering. Og hvis der er en placering \u2013 har det ikke nogen hastighed.<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/617ace5f892b62652b404b24585537b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e5r det kommer til mikrotjenester p\u00e5 Red Hat OpenShift-platformen (under Kubernetes), kan de takket v\u00e6re den rette open source-software rapportere om b\u00e5de deres ydeevne og tilstand samtidig. Dette modsiger ikke Heisenbergs teori, men fjerner usikkerheden i arbejdet med skyapplikationer. Istio g\u00f8r det let at organisere sporing og overv\u00e5gning af s\u00e5danne applikationer for at holde alt under kontrol.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Lad os definere terminologien<\/h3>\n<p>\nUnder <b>sporing<\/b> (Tracing) forst\u00e5r vi som logning af systemaktivitet. Det lyder ret generelt, men en af de grundl\u00e6ggende regler her er, at man skal gemme sporingsdata i den passende opbevaring uden at bekymre sig om deres formatering. Alt arbejdet med at finde og analysere data overlades til forbrugeren. I Istio anvendes sporing systemet Jaeger, som implementerer OpenTracing datamodel.<\/p>\n<p><b>Spor<\/b> (Traces, hvor ordet \"spor\" her bruges i betydningen \"f\u00f8dder\", som i ballistisk analyse) kalder vi de data, der fuldt ud beskriver forl\u00f8bet af en foresp\u00f8rgsel eller en arbejdsenhed, s\u00e5 at sige \"fra start til slut\". For eksempel alt hvad der sker fra det \u00f8jeblik, brugeren trykker en knap p\u00e5 en webside, til dataene returneres, inklusive alle involverede mikrotjenester. Man kan sige, at et spor fuldt ud beskriver (eller modellerer) forl\u00f8bet af en foresp\u00f8rgsel frem og tilbage. I Jaeger-gr\u00e6nsefladen nedbrydes sporene i komponenter langs tidsaksen, ligesom en k\u00e6de kan opdeles i individuelle led. Men i stedet for led best\u00e5r et spor af s\u00e5kaldte spans.<\/p>\n<p><b>Span<\/b> \u2013 er intervallet fra begyndelsen af en arbejdsenheds udf\u00f8relse til dens afslutning. Forts\u00e6tter vi analogien, kan vi sige, at hver span repr\u00e6senterer et enkelt led i k\u00e6den. En span kan have (eller ikke have) en eller flere underordnede spans. Som f\u00f8lge heraf vil den \u00f8verste spans (root span) have den samme samlede varighed som det spor, som den tilh\u00f8rer.<\/p>\n<p><b>Overv\u00e5gning<\/b> \u2013 det er i grunden selve overv\u00e5gningen af dit system \u2013 med \u00f8jnene, gennem UI eller automatiseringsmidler. I bunden af overv\u00e5gningen ligger sporingsdata. I Istio er overv\u00e5gning implementeret ved hj\u00e6lp af Prometheus og har en tilsvarende UI. Prometheus underst\u00f8tter automatisk overv\u00e5gning med brug af advarsler Alerts og Alert Managers.<\/p>\n<h3>Lader os lave m\u00e6rker<\/h3>\n<p>\nFor at sporingen kan finde sted, skal applikationen oprette en samling af spans. Derefter skal de eksporteres til Jaeger, s\u00e5 Jaeger til sin side kan oprette en visuel repr\u00e6sentation af sporingen. Blandt andet m\u00e6rker disse spans navnet p\u00e5 operationen samt tidsstempler for dens start og slutning. Overf\u00f8rslen af spans udf\u00f8res ved at omdirigere de HTTP-anmodningsoverskrifter, der er beregnet til Jaeger, fra indkommende til udg\u00e5ende anmodninger. Afh\u00e6ngig af det anvendte programmeringssprog kan det kr\u00e6ve mindre \u00e6ndringer af kildeteksten i applikationerne. Nedenfor er et eksempel p\u00e5 kode i Java (ved brug af Spring Boot-rammen), som tilf\u00f8jer B3-overskrifter (Zipkin-stil) til din anmodning i Spring-konfigurationsklassen:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/2314e2d156dc9b9fdb299af2dac01f66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDer anvendes f\u00f8lgende overskriftsindstillinger:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/18f0a13af27665ec2d154ff4cff48157.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHvis du bruger Java, beh\u00f8ver du ikke \u00e6ndre koden, men kan blot tilf\u00f8je et par linjer i POM-filen Maven og angive milj\u00f8variabler. Her er de linjer, du skal tilf\u00f8je i POM.XML-filen for at implementere Jaeger Tracer Resolver:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/a63a634c2c22fc09a237cafc4873855d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDe tilsvarende milj\u00f8variabler angives i Dockerfilen:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/7fe9046242d7e628342a6266e4a2f743.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAlt er nu konfigureret, og vores mikrotjenester vil begynde at generere sporingsdata.<\/p>\n<h3>Lad os se p\u00e5 det overordnede billede<\/h3>\n<p>\nIstio inkluderer et simpelt kontrolpanel baseret p\u00e5 Grafana. N\u00e5r alt er konfigureret og fungerer p\u00e5 Red Hat OpenShift PaaS-platformen (i vores eksempel er Red Hat OpenShift og Kubernetes implementeret p\u00e5 minishift), startes dette panel med f\u00f8lgende kommando:<\/p>\n<pre><code class=\"plaintext\">\u00e5ben \"$(minishift openshift service grafana -u)\/d\/1\/istio-dashboard?refresh=5&amp;ord;Id=1\"\n<\/code><\/pre>\n<p>\nGrafana-panelet g\u00f8r det muligt hurtigt at vurdere systemets ydeevne. Et udsnit af dette panel vises p\u00e5 billedet nedenfor:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/2c10cd23fd5166f437c2b3c1d50c6a18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHer kan man se, at microservicen customer kalder microservicen preference v1, som igen kalder microservices recommendation v1 og v2. P\u00e5 Grafana-panelet findes der et Dashboard Row for overordnede metrics, s\u00e5som det samlede antal anmodninger (Global Request Volume), andelen af succesfulde anmodninger (success rates), samt 4xx-fejl. Derudover er der en visning af Server Mesh med grafer for hver service og et Services Row for detaljeret visning af oplysninger pr. container for hver service.<\/p>\n<h3>Lad os dykke dybere.<\/h3>\n<p>\nMed korrekt konfigureret Istio-tracing kan man, s\u00e5 at sige, direkte ud af boksen dykke ned i systemets ydeevneanalyse. I Jaeger UI kan man gennemse tracing og se, hvor langt og dybt de g\u00e5r, samt visuelt lokalisere flaskehalse i ydeevnen. N\u00e5r man bruger Red Hat OpenShift p\u00e5 minishift-platformen, udf\u00f8rer man opstart af Jaeger UI med f\u00f8lgende kommando:<\/p>\n<pre><code class=\"plaintext\">minishift openshift service jaeger-query --in-browser\n<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/074fea646ad191f819a9a67a3f311c8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHvad kan man sige om tracing p\u00e5 dette screenshot:<\/p>\n<ul>\n<li>Det er opdelt i 7 spans.<\/li>\n<li>Den samlede udf\u00f8relsestid er 6,99 ms.<\/li>\n<li>Microservicen recommendation, som er den sidste i k\u00e6den, bruger 0,69 ms.<\/li>\n<\/ul>\n<p>\nDiagrammer af denne type g\u00f8r det muligt hurtigt at f\u00e5 indsigt i situationen, n\u00e5r ydeevnen i hele systemet lider p\u00e5 grund af en enkelt, mindre fungerende service.<\/p>\n<p>Og nu g\u00f8r vi opgaven sv\u00e6rere og starter to instanser af mikrotjenesten recommendation:v2 med kommandoen oc scale --replicas=2 deployment\/recommendation-v2. Her er hvilke pod'er vi f\u00e5r efter dette:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/0ecb8d78d6967d0392de67be6553b870.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nHvis vi nu skifter tilbage til Jaeger og udvider span for servicen recommendation, vil vi se, hvilken pod anmodningerne rutes til. P\u00e5 den m\u00e5de kan vi nemt lokalisere flaskehalse p\u00e5 niveauet for en bestemt pod. Man skal se p\u00e5 feltet node_id:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/474da66c581692cd11070a1732ac5458.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Hvor og hvordan alt bev\u00e6ger sig.<\/h3>\n<p>\nNu g\u00e5r vi ind i Prometheus-gr\u00e6nsefladen og ser, som forventet, at anmodningerne mellem anden og f\u00f8rste version af servicen recommendation fordeles i forholdet 2:1, strengt efter antallet af aktive pods. Denne graf vil dynamisk \u00e6ndre sig ved skalering af pods op og ned, hvilket vil v\u00e6re s\u00e6rligt nyttigt ved Canary Deployment (vi vil se n\u00e6rmere p\u00e5 denne implementeringsmetode n\u00e6ste gang).<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/c080fffd2398b0a2eac3e63665bdb0a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Det er kun begyndelsen.<\/h3>\n<p>\nI virkeligheden har vi i dag kun n\u00e6vnt en lille del af den v\u00e6rdifulde information om Jaeger, Grafana og Prometheus. Det var egentlig vores m\u00e5l \u2013 at guide jer i den rigtige retning og \u00e5bne op for perspektiverne ved Istio.<\/p>\n<p>Og husk, alt dette er allerede indbygget i Istio. Ved brug af bestemte programmeringssprog (f.eks. Java) og rammev\u00e6rker (f.eks. Spring Boot) kan alt dette implementeres uden at r\u00f8re selve kodebasen. Ja, koden skal have lidt modifikation, hvis du bruger andre sprog, is\u00e6r Nodejs eller C#. Men da sporbarhed (l\u00e6s: \u201etracing\u201c) er et af de obligatoriske krav for at skabe p\u00e5lidelige cloud-systemer, bliver du n\u00f8dt til at \u00e6ndre koden, uanset om du bruger Istio eller ej. S\u00e5 hvorfor ikke bruge kr\u00e6fterne mere fordelagtigt?<\/p>\n<p>Bare for at kunne svare p\u00e5 sp\u00f8rgsm\u00e5lene \u201ehvor?\u201c og \u201ehvor hurtigt?\u201c med 100% sikkerhed.<\/p>\n<h3>Chaos engineering i Istio: det var hele id\u00e9en.<\/h3>\n<p><\/p>\n<h3>Evnen til at bryde ting hj\u00e6lper med at sikre, at de ikke bryder.<\/h3>\n<p>\nSoftwaretest er ikke kun kompliceret, men ogs\u00e5 vigtig. Samtidig er test for korrekthed (f.eks. returnerer funktionen det korrekte resultat) \u00e9n ting, mens test under uh\u00e5ndterlig netv\u00e6rksforhold er en helt anden opgave (man antager ofte, at netv\u00e6rket altid fungerer uden problemer, og det er den prim\u00e6re af otte misforst\u00e5elser om distribuerede beregninger). En af udfordringerne ved at l\u00f8se denne opgave er, hvordan man simulerer fejl i systemet eller indf\u00f8rer dem med vilje ved at udf\u00f8re s\u00e5kaldt fault injection. Dette kan g\u00f8res ved at \u00e6ndre selve kildekoden til applikationen. Men s\u00e5 tester du ikke din oprindelige kode, men en version af den, der specifikt simulerer fejl. Som f\u00f8lge heraf risikerer du at falde ind i de fatale omfavnelse af fault injection og st\u00f8de p\u00e5 geizenbugs \u2013 fejl, der forsvinder, n\u00e5r man fors\u00f8ger at opdage dem.<\/p>\n<p>Og nu vil vi vise, hvordan Istio hj\u00e6lper med at tackle disse udfordringer nemt.<\/p>\n<h3>Hvordan det ser ud, n\u00e5r alt fungerer perfekt.<\/h3>\n<p>\nLad os overveje f\u00f8lgende scenario: vi har to pods til vores recommendations-mikrotjeneste, som vi har taget fra Istio-leksikonet. Den ene pod er markeret som v1, og den anden som v2. Som vi kan se, fungerer alt fremragende indtil videre:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/c50387b7cfd12298cfab8123f13b2ca4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(For resten, tallet til h\u00f8jre er bare en t\u00e6ller for hver pod.)<\/p>\n<p>Men det er ikke det, vi har brug for, er det? Lad os pr\u00f8ve at bryde det hele uden at r\u00f8re ved kildekoden.<\/p>\n<h3>Lad os for\u00e5rsage nedbrud i mikrotjenesten<\/h3>\n<p>\nNedenfor er yaml-filen for routingreglen i Istio, som vil fejle (give en fejl) i halvdelen af tilf\u00e6ldene <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/da\/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=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/8fb3ed7f16ed7fd1a57b27dfc3bfd2da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nBem\u00e6rk, at vi eksplicit angiver, at der skal returneres en fejl 503 i halvdelen af tilf\u00e6ldene.<\/p>\n<p>Her er hvordan sk\u00e6rmbilledet ser ud, n\u00e5r kommandoen curl k\u00f8res i en loop, efter at vi aktiverer denne regel for at simulere nedbrud. Som vi kan se, returnerer halvdelen af anmodningerne fejl 503, uanset hvilken pod \u2013 v1 eller v2 \u2013 de sendes til:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/3d9760cf5abc7480ad3aab826c274766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFor at genoprette normal drift er det tilstr\u00e6kkeligt at slette denne regel, i vores tilf\u00e6lde med kommandoen istioctl delete routerule recommendation-503 -n tutorial. Her er Tutorial navnet p\u00e5 det Red Hat OpenShift-projekt, hvor vores Istio-tutorial k\u00f8rer.<\/p>\n<h3>Indf\u00f8rer kunstige forsinkelser<\/h3>\n<p>\nKunstige fejl 503 hj\u00e6lper med at teste systemets modstandsdygtighed overfor nedbrud, men evnen til at forudsige og h\u00e5ndtere forsinkelser burde imponere dig endnu mere. I virkeligheden opst\u00e5r forsinkelser oftere end nedbrud. En langsomt fungerende mikrotjeneste er en gift for hele systemet. Med Istio kan du teste koden, der relaterer sig til h\u00e5ndtering af forsinkelser, uden at \u00e6ndre den. F\u00f8rst vil vi vise, hvordan man g\u00f8r dette i tilf\u00e6lde af kunstigt indf\u00f8rte netv\u00e6rksforsinkelser.<\/p>\n<p>Bem\u00e6rk, at efter en s\u00e5dan test, vil du m\u00e5ske have behov for (eller \u00f8nske at) forbedre din kode. Den gode nyhed her er, at i s\u00e5 fald vil du handle proaktivt frem for reaktivt. Det er s\u00e5dan, udviklingscyklus b\u00f8r bygges: kodning-test-feedback-kodning-test\u2026<\/p>\n<p>Her er hvordan reglen ser ud, der... Men ved du hvad? Istio er s\u00e5 enkelt, og denne yaml-fil er s\u00e5 klar, at alt i dette eksempel taler for sig selv, kig bare:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/e077e891cbccc66ebc4d4c7b67a0f1ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI halvdelen af tilf\u00e6ldene vil vi opleve en 7-sekunders forsinkelse. Og det er slet ikke det samme som at inds\u00e6tte en sleep-kommando i kildekoden, da Istio reelt forsinker foresp\u00f8rgslen i 7 sekunder. Da Istio underst\u00f8tter Jaeger-tracing, er denne forsinkelse tydeligt synlig i Jaeger UI, som vist p\u00e5 sk\u00e6rmbilledet nedenfor. Bem\u00e6rk den lange foresp\u00f8rgsel i \u00f8verste h\u00f8jre hj\u00f8rne af diagrammet \u2013 varigheden er 7,02 sekunder:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/97a7b33fb7e0455973c7fd1b2aefadf3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDette scenarie giver mulighed for at teste koden under netv\u00e6rksforsinkelser. Og det er klart, at hvis vi fjerner denne regel, vil vi fjerne den kunstige forsinkelse. Lad os gentage det, men vi har alligevel gjort alt dette uden at r\u00f8re ved kildekoden.<\/p>\n<h3>Efter ikke at give op<\/h3>\n<p>\nEn anden nyttig funktion ved chaos engineering i Istio er muligheden for at gentage anmodninger til tjenesten et bestemt antal gange. Ideen her er at forts\u00e6tte med at fors\u00f8ge, n\u00e5r den f\u00f8rste foresp\u00f8rgsel returnerer fejl 503 \u2013 og s\u00e5 er det m\u00e5ske i den N-te gang, vi har held. M\u00e5ske hvilede tjenesten bare lidt af en eller anden grund. Ja, den \u00e5rsag skal unders\u00f8ges og udbedres. Men det kan vi tage senere, for nu vil vi fors\u00f8ge at holde systemet i gang.<\/p>\n<p>S\u00e5 vi \u00f8nsker, at tjenesten indimellem skal returnere en fejl 503, og Istio skal efterf\u00f8lgende fors\u00f8ge at oprette forbindelse igen. Her har vi klart brug for en m\u00e5de at generere fejl 503 uden at r\u00f8re ved selve koden\u2026<\/p>\n<p>Stop, vent! Det gjorde vi lige.<\/p>\n<p>Denne fil vil f\u00e5 tjenesten recommendation-v2 til at returnere fejl 503 i halvdelen af tilf\u00e6ldene:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/f446528f9c968e40cc2cf318cf0acde9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet er \u00e5benlyst, at nogle anmodninger vil ende med at fejle:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/f998513746604beda241b8d6de2ed727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLad os nu aktivere Istio-funktionen Retry:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/32e210b6ecbf4c1ecf121ee73e64ba35.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDenne routingregel laver tre fors\u00f8g med et interval p\u00e5 to sekunder og b\u00f8r reducere (og ideelt set helt fjerne fra radar) fejl 503:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/7f9711c52949072b823399e59141cb64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSammenfattet: vi har f\u00e5et Istio til dels at generere fejl 503 for halvdelen af anmodningerne. For det andet udf\u00f8rer Istio de tre fors\u00f8g p\u00e5 at oprette forbindelse til tjenesten, n\u00e5r der opst\u00e5r en fejl 503. Som et resultat fungerer alt bare fantastisk. Ved at bruge Retry-funktionen har vi indfriet vores l\u00f8fte om ikke at give op.<\/p>\n<p>Og ja, vi har igen gjort dette uden at r\u00f8re ved koden. Alt, hvad vi havde brug for, var to routingregler i Istio:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/c21a1cfd2d78ae4145a57d1cefcc6c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Hvordan man ikke skuffer brugeren, eller syv venter ikke p\u00e5 en<\/h3>\n<p>\nOg nu vender vi situationen p\u00e5 hovedet og ser p\u00e5 et scenarie, hvor det kun er v\u00e6rd at holde stand i en bestemt tidsperiode. Derefter skal vi bare stoppe med at fors\u00f8ge at behandle anmodningen for ikke at f\u00e5 alle til at vente p\u00e5 en enkelt bremse-service. Med andre ord, vi vil ikke forsvare den tabte position, men i stedet tr\u00e6kke os tilbage til en sikker linje for ikke at skuffe brugeren af hjemmesiden og ikke tvinge dem til at v\u00e6re i uvisshed.<\/p>\n<p>I Istio kan man angive en timeout for udf\u00f8relsen af anmodningen. Hvis servicen overskrider denne timeout, returneres fejl 504 (Gateway Timeout) \u2013 alt dette g\u00f8res igen gennem Istios konfiguration. Men vi bliver n\u00f8dt til at tilf\u00f8je en sleep-kommando i koden til servicen (og derefter selvf\u00f8lgelig udf\u00f8re rebuild og redeploy) for at simulere en langsom servicerespons. Desv\u00e6rre kan vi ikke undg\u00e5 det.<\/p>\n<p>S\u00e5, vi har indsat et tre-sekunders sleep i koden til servicen recommendation v2, bygget det relevante billede, og udf\u00f8rt redeploy af containeren, og nu skal vi tilf\u00f8je en timeout ved hj\u00e6lp af f\u00f8lgende Istio routingregel:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/c03fc452b98dd875a8a7d3ac561893ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSom vist i sk\u00e6rmbilledet ovenfor, stopper vi med at fors\u00f8ge at kontakte servicen recommendation, hvis vi ikke f\u00e5r svar inden for et sekund, det vil sige f\u00f8r fejlen 504 opst\u00e5r. Efter anvendelsen af denne routingregel (og tilf\u00f8jelsen af et tre-sekunders sleep i koden til servicen recommendation:v2) vil vi f\u00e5 f\u00f8lgende:<\/p>\n<p><img decoding=\"async\" alt=\"Sporing og overv\u00e5gning i Istio: mikrotjenester og usikkerhedsprincippet\" src=\"\/wp-content\/uploads\/2020\/01\/ed6e80052c67254718b1fde2bd873e71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVi gentager igen, men du kan angive en timeout uden at r\u00f8re ved koden. Og en ekstra fordel her er, at du nu kan modificere din kode, s\u00e5 den reagerer p\u00e5 timeouten, og let teste disse \u00e6ndringer med Istio.<\/p>\n<h3>Og nu alt sammen<\/h3>\n<p>\nAt tilf\u00f8je lidt kaos via Istio er en fremragende m\u00e5de at teste din kode og p\u00e5lideligheden af dit system generelt. Fallback-, bulkhead- og circuit breaker-m\u00f8nstre, mekanismer til at skabe kunstige fejl og forsinkelser, samt genkaldelser og timeouts vil v\u00e6re meget nyttige ved opbygning af fejltolerante cloud-systemer. I kombination med Kubernetes og Red Hat OpenShift vil disse v\u00e6rkt\u00f8jer hj\u00e6lpe med at m\u00f8de fremtiden med selvtillid.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 og overv\u00e5gning i Istio: mikroservices og usikkerhedsprincippet | ProHoster","description":"Heisenbergs usikkerhedsprincip siger, at man ikke samtidig kan m\u00e5le et objekts position og dens hastighed. Hvis objektet bev\u00e6ger sig, har det ikke en bestemt placering.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/55700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=55700"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55700\/revisions"}],"predecessor-version":[{"id":162124,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55700\/revisions\/162124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=55700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=55700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=55700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}