{"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\/sv\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","title":{"rendered":"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Heisenbergs os\u00e4kerhetsprincip s\u00e4ger att man inte kan m\u00e4ta ett objekts position och dess hastighet samtidigt. Om objektet r\u00f6r sig s\u00e5 har det ingen position. Om det finns en position \u2013 d\u00e5 har det ingen hastighet.<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/617ace5f892b62652b404b24585537b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4r det kommer till mikrotj\u00e4nster p\u00e5 Red Hat OpenShift-plattformen (som drivs av Kubernetes), kan de tack vare l\u00e4mplig \u00f6ppen mjukvara rapportera b\u00e5de sin prestanda och sitt tillst\u00e5nd samtidigt. Detta motbevisar f\u00f6rst\u00e5s inte den gamla Heisenberg, men det eliminerar os\u00e4kerheten vid arbete med molnapplikationer. Istio g\u00f6r det enkelt att organisera sp\u00e5rning och \u00f6vervakning av s\u00e5dana applikationer f\u00f6r att h\u00e5lla allt under kontroll.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Vi best\u00e4mmer oss f\u00f6r terminologin<\/h3>\n<p>\nPod <b>sp\u00e5rning<\/b> (Tracing) f\u00f6rst\u00e5r vi som loggning av systemaktivitet. Det l\u00e5ter ganska allm\u00e4nt, men en av de grundl\u00e4ggande reglerna h\u00e4r \u00e4r att skicka sp\u00e5rningsdata till ett l\u00e4mpligt lagringsutrymme utan att bekymra sig om deras formatering. Allt arbete med att s\u00f6ka och analysera data \u00f6verl\u00e4mnas till deras anv\u00e4ndare. I Istio anv\u00e4nds Jaeger sp\u00e5rningssystem som implementerar OpenTracing datamodellen.<\/p>\n<p><b>Sp\u00e5r<\/b> (Traces, och ordet \"sp\u00e5r\" anv\u00e4nds h\u00e4r i betydelsen \"tecken\", som i exempelvis ballistisk analys) kommer vi att kalla de data som helt beskriver en f\u00f6rfr\u00e5ga eller en arbetsenhet, som sagt, \"fr\u00e5n och med till tillbaka\". Till exempel, allt som h\u00e4nder fr\u00e5n det \u00f6gonblick anv\u00e4ndaren trycker p\u00e5 en knapp p\u00e5 en webbsida tills data returneras, inklusive alla involverade mikrotj\u00e4nster. Man kan s\u00e4ga att ett sp\u00e5r helt och h\u00e5llet beskriver (eller modellerar) f\u00f6rfr\u00e5gans v\u00e4g dit och tillbaka. I Jaeger gr\u00e4nssnittet bryts sp\u00e5ren ner i komponenter l\u00e4ngs tidsaxeln, ungef\u00e4r som en kedja kan delas upp i individuella l\u00e4nkar. Skillnaden \u00e4r att ist\u00e4llet f\u00f6r l\u00e4nkar best\u00e5r sp\u00e5ret av s\u00e5 kallade span.<\/p>\n<p><b>Span<\/b> \u2013 \u00e4r intervallet fr\u00e5n b\u00f6rjan av en arbetsenhet till dess avslutning. F\u00f6r att forts\u00e4tta analogin kan man s\u00e4ga att varje span representerar en individuell l\u00e4nk i kedjan. En span kan ha (eller inte ha) en eller flera underliggande spans. Som en f\u00f6ljd av detta kommer den h\u00f6gsta niv\u00e5n av span (root span) att ha samma totala varaktighet som det sp\u00e5r det h\u00f6r till.<\/p>\n<p><b>\u00d6vervakning<\/b> \u00f6vervakning av ditt system \u2013 med \u00f6gon, via UI eller automatiseringsverktyg. Grunden f\u00f6r \u00f6vervakning ligger i sp\u00e5rningsdata. I Istio implementeras \u00f6vervakning med hj\u00e4lp av Prometheus och har en motsvarande UI. Prometheus st\u00f6der automatisk \u00f6vervakning med hj\u00e4lp av aviseringar Alerts och Alert Managers.<\/p>\n<h3>Vi l\u00e4mnar snitt<\/h3>\n<p>\nF\u00f6r att sp\u00e5rning ska vara m\u00f6jlig m\u00e5ste applikationen skapa en samling av spans. Dessa m\u00e5ste exporteras till Jaeger, som i sin tur skapar en visuell representation av sp\u00e5rningen. Bland annat markerar dessa spans operationens namn, samt tidsst\u00e4mplar f\u00f6r dess b\u00f6rjan och slut. \u00d6verf\u00f6ringen av spans sker genom att omdirigera HTTP-beg\u00e4rans huvuden som \u00e4r avsedda f\u00f6r Jaeger fr\u00e5n inkommande till utg\u00e5ende beg\u00e4rningar. Beroende p\u00e5 vilket programmeringsspr\u00e5k som anv\u00e4nds kan detta kr\u00e4va n\u00e5gra mindre \u00e4ndringar i applikationens k\u00e4llkod. Nedan f\u00f6ljer ett exempel p\u00e5 Java-kod (vid anv\u00e4ndning av Spring Boot-ramverket) som l\u00e4gger till B3 (Zipkin-stil) huvuden till din beg\u00e4ran i konfigurationsklassen i Spring:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/2314e2d156dc9b9fdb299af2dac01f66.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nF\u00f6ljande huvudinst\u00e4llningar anv\u00e4nds:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/18f0a13af27665ec2d154ff4cff48157.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOm du anv\u00e4nder Java kan du l\u00e4mna koden of\u00f6r\u00e4ndrad och i st\u00e4llet l\u00e4gga till n\u00e5gra rader i Maven POM-filen samt ange milj\u00f6variabler. H\u00e4r \u00e4r de rader som m\u00e5ste l\u00e4ggas till i POM.XML-filen f\u00f6r att integrera Jaeger Tracer Resolver:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/a63a634c2c22fc09a237cafc4873855d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOch de motsvarande milj\u00f6variablerna anges i Dockerfile:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/7fe9046242d7e628342a6266e4a2f743.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNu \u00e4r allt konfigurerat, och v\u00e5ra mikrotj\u00e4nster kommer att b\u00f6rja generera sp\u00e5rningsdata.<\/p>\n<h3>\u00d6versiktligt<\/h3>\n<p>\nIstio inkluderar ett enkelt kontrollpanel baserat p\u00e5 Grafana. N\u00e4r allt \u00e4r konfigurerat och fungerar p\u00e5 Red Hat OpenShift PaaS (i v\u00e5rt exempel \u00e4r Red Hat OpenShift och Kubernetes installerade p\u00e5 minishift), startas denna panel med f\u00f6ljande kommando:<\/p>\n<pre><code class=\"plaintext\">\u00f6ppna \"$(minishift openshift service grafana -u)\/d\/1\/istio-dashboard?refresh=5&amp;ord;Id=1\"\n<\/code><\/pre>\n<p>\nGrafana-panelen g\u00f6r det m\u00f6jligt att snabbt utv\u00e4rdera systemets prestanda. Ett utdrag av denna panel visas i bilden nedan:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/2c10cd23fd5166f437c2b3c1d50c6a18.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nH\u00e4r kan vi se att mikrotj\u00e4nsten customer anropar mikrotj\u00e4nsten preference v1, som i sin tur anropar mikrotj\u00e4nsterna recommendation v1 och v2. P\u00e5 Grafana-panelen finns det ett Dashboard Row-block f\u00f6r h\u00f6g niv\u00e5 av metrik, s\u00e5som det totala antalet f\u00f6rfr\u00e5gningar (Global Request Volume), andelen lyckade f\u00f6rfr\u00e5gningar (success rates) samt 4xx-fel. Dessutom finns det en visning av Server Mesh med grafer f\u00f6r varje tj\u00e4nst och ett block Services Row f\u00f6r att se detaljerad information om varje container f\u00f6r varje tj\u00e4nst.<\/p>\n<h3>Nu dyker vi djupare.<\/h3>\n<p>\nMed en korrekt konfigurerad Istio-tracer kan du, s\u00e5 att s\u00e4ga, direkt ut ur l\u00e5dan f\u00f6rdjupa dig i systemets prestandaanalys. I Jaeger UI kan du se sp\u00e5rningar och se hur l\u00e5ngt och djupt de g\u00e5r, samt visuellt lokalisera flaskhalsar i prestandan. Vid anv\u00e4ndning av Red Hat OpenShift p\u00e5 minishift-plattformen startar du Jaeger UI med f\u00f6ljande kommando:<\/p>\n<pre><code class=\"plaintext\">minishift openshift service jaeger-query --in-browser\n<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/074fea646ad191f819a9a67a3f311c8f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVad kan vi s\u00e4ga om sp\u00e5rningen p\u00e5 den h\u00e4r sk\u00e4rmen:<\/p>\n<ul>\n<li>Den delas upp i 7 span.<\/li>\n<li>Den totala exekveringstiden \u00e4r 6,99 ms.<\/li>\n<li>Mikrotj\u00e4nsten recommendation, som \u00e4r den sista i kedjan, tar 0,69 ms.<\/li>\n<\/ul>\n<p>\nDenna typ av diagram g\u00f6r det m\u00f6jligt att snabbt f\u00f6rst\u00e5 situationen n\u00e4r prestandan f\u00f6r hela systemet p\u00e5verkas av en enda icke-fungerande tj\u00e4nst.<\/p>\n<p>Och nu g\u00f6r vi uppgiften sv\u00e5rare genom att k\u00f6ra tv\u00e5 instanser av mikrotj\u00e4nsten recommendation:v2 med kommandot oc scale \u2014replicas=2 deployment\/recommendation-v2. S\u00e5 h\u00e4r ser v\u00e5ra poddar ut efter detta:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/0ecb8d78d6967d0392de67be6553b870.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOm vi nu g\u00e5r tillbaka till Jaeger och expanderar span f\u00f6r tj\u00e4nsten recommendation, kommer vi att se vilken pod f\u00f6rfr\u00e5gningarna dirigeras till. P\u00e5 s\u00e5 s\u00e4tt kan vi l\u00e4tt lokalisera f\u00f6rseningar p\u00e5 niv\u00e5n av en specifik pod. Titta p\u00e5 node_id-f\u00e4ltet:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/474da66c581692cd11070a1732ac5458.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Var och hur allt g\u00e5r<\/h3>\n<p>\nNu g\u00e5r vi till Prometheus-gr\u00e4nssnittet och ser ganska f\u00f6rv\u00e4ntat att f\u00f6rfr\u00e5gningar mellan den andra och f\u00f6rsta versionen av tj\u00e4nsten recommendation f\u00f6rdelas med en f\u00f6rh\u00e5llande p\u00e5 2:1, strikt baserat p\u00e5 antalet aktiva poddar. Detta diagram kommer att f\u00f6r\u00e4ndras dynamiskt n\u00e4r poddar skalas upp och ner, vilket \u00e4r s\u00e4rskilt anv\u00e4ndbart vid Canary Deployment (vi kommer att titta n\u00e4rmare p\u00e5 detta deploymentschema n\u00e4sta g\u00e5ng).<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/c080fffd2398b0a2eac3e63665bdb0a7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Det h\u00e4r \u00e4r bara b\u00f6rjan<\/h3>\n<p>\nI sj\u00e4lva verket har vi idag bara l\u00e4tt ber\u00f6rt en skatt av nyttig information om Jaeger, Grafana och Prometheus. Det var fr\u00e4mst v\u00e5rt syfte \u2013 att v\u00e4gleda er i r\u00e4tt riktning och \u00f6ppna upp perspektiven f\u00f6r Istio.<\/p>\n<p>Och kom ih\u00e5g, allt detta \u00e4r redan inbyggt i Istio. Genom att anv\u00e4nda vissa programmeringsspr\u00e5k (till exempel Java) och ramverk (till exempel Spring Boot) kan allt detta implementeras utan att r\u00f6ra koden i applikationerna. Ja, koden m\u00e5ste modifieras n\u00e5got om du anv\u00e4nder andra spr\u00e5k, framf\u00f6r allt Node.js eller C#. Men eftersom sp\u00e5rbarhet (l\u00e4s: \"tracing\") \u00e4r en av de obligatoriska kraven f\u00f6r att bygga p\u00e5litliga molnsystem, m\u00e5ste du i vilket fall som helst justera koden, oavsett om du har Istio eller inte. S\u00e5 varf\u00f6r inte l\u00e4gga ner anstr\u00e4ngningarna p\u00e5 ett mer meningsfullt s\u00e4tt?<\/p>\n<p>\u00c5tminstone f\u00f6r att alltid kunna svara p\u00e5 fr\u00e5gorna \"var?\" och \"hur snabbt?\" med 100% s\u00e4kerhet.<\/p>\n<h3>Kaosengineering i Istio: s\u00e5 var det t\u00e4nkt<\/h3>\n<p><\/p>\n<h3>Att kunna bryta saker hj\u00e4lper till att se till att de inte g\u00e5r s\u00f6nder<\/h3>\n<p>\nProgramvarutestning \u00e4r inte bara komplicerat utan ocks\u00e5 viktigt. Samtidigt \u00e4r testning f\u00f6r korrekthet (till exempel om en funktion returnerar r\u00e4tt resultat) en sak, medan testning under op\u00e5litliga n\u00e4tverksf\u00f6rh\u00e5llanden \u00e4r en helt annan uppgift (det antas ofta att n\u00e4tverket alltid fungerar utan avbrott, och detta \u00e4r en av \u00e5tta missuppfattningar om distribuerad computing). En av sv\u00e5righeterna med att l\u00f6sa detta problem \u00e4r hur man kan simulera fel i systemet eller inf\u00f6ra dem avsiktligt genom s\u00e5 kallad felinjektion. Detta kan g\u00f6ras genom att modifiera applikationens k\u00e4llkod. Men d\u00e5 testar du inte din ursprungliga kod, utan en version som speciellt simulerar fel. Som ett resultat riskerar du att hamna i de d\u00f6dliga f\u00e4llorna av felinjektion och konfronteras med gejserbuggar \u2013 fel som f\u00f6rsvinner n\u00e4r man f\u00f6rs\u00f6ker uppt\u00e4cka dem.<\/p>\n<p>Och nu visar vi hur Istio hj\u00e4lper till att hantera dessa sv\u00e5righeter p\u00e5 ett \u00f6gonblick.<\/p>\n<h3>S\u00e5 h\u00e4r ser det ut n\u00e4r allt fungerar perfekt<\/h3>\n<p>\nL\u00e5t oss \u00f6verv\u00e4ga f\u00f6ljande scenario: vi har tv\u00e5 poddar f\u00f6r v\u00e5r mikrotj\u00e4nst recommendation, som vi tog fr\u00e5n Istio-handboken. En podd \u00e4r m\u00e4rkt som v1, och den andra som v2. Som vi ser fungerar allt utm\u00e4rkt tills vidare:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/c50387b7cfd12298cfab8123f13b2ca4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(F\u00f6r \u00f6vrigt \u00e4r numret till h\u00f6ger bara en r\u00e4knare f\u00f6r varje pod.)<\/p>\n<p>Men vi beh\u00f6ver ju inte detta, eller hur? L\u00e5t oss f\u00f6rs\u00f6ka bryta allt utan att r\u00f6ra koden.<\/p>\n<h3>Vi skapar avbrott i mikrotj\u00e4nsten<\/h3>\n<p>\nNedan finns en yaml-fil f\u00f6r routingregeln i Istio, som i h\u00e4lften av fallen kommer att ge ett fel (fel) <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sv\/server\/dts-los-angeles\/\"   title=\"servern\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3597\">servern<\/a> 503):<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/8fb3ed7f16ed7fd1a57b27dfc3bfd2da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nObservera att vi uttryckligen anger att ett 503-fel ska returneras i h\u00e4lften av fallen.<\/p>\n<p>S\u00e5 h\u00e4r ser sk\u00e4rmbilden ut f\u00f6r den curl-kommando som k\u00f6rs i en loop efter att vi aktiverar denna regel f\u00f6r att simulera avbrott. Som vi ser, returnerar h\u00e4lften av f\u00f6rfr\u00e5gningarna ett 503-fel oavsett vilken pod \u2013 v1 eller v2 \u2013 de g\u00e5r till:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/3d9760cf5abc7480ad3aab826c274766.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nF\u00f6r att \u00e5terst\u00e4lla normal drift r\u00e4cker det att ta bort denna regel, i v\u00e5rt fall med kommandot istioctl delete routerule recommendation-503 -n tutorial. H\u00e4r \u00e4r 'Tutorial' namnet p\u00e5 projektet Red Hat OpenShift d\u00e4r v\u00e5r Istio-handledning k\u00f6rs.<\/p>\n<h3>Vi inf\u00f6r konstgjorda f\u00f6rdr\u00f6jningar<\/h3>\n<p>\nKonstgjorda 503-fel hj\u00e4lper till att testa systemets motst\u00e5ndskraft mot avbrott, men att kunna f\u00f6rutse och hantera f\u00f6rdr\u00f6jningar b\u00f6r imponera \u00e4nnu mer p\u00e5 dig. Och f\u00f6rdr\u00f6jningar h\u00e4nder oftare i verkliga livet \u00e4n avbrott. En l\u00e5ngsam mikrotj\u00e4nst \u00e4r en cancer f\u00f6r hela systemet. Med Istio kan du testa koden som r\u00f6r hanteringen av f\u00f6rdr\u00f6jningar utan att \u00e4ndra den. F\u00f6rst visar vi hur man g\u00f6r detta i fall av konstgjorda n\u00e4tverksf\u00f6rdr\u00f6jningar.<\/p>\n<p>Observera att efter s\u00e5dan testning kan det h\u00e4nda att du beh\u00f6ver (eller vill) f\u00f6rb\u00e4ttra din kod. Den goda nyheten \u00e4r att i detta fall kommer du att agera proaktivt snarare \u00e4n reaktivt. S\u00e5 h\u00e4r b\u00f6r utvecklingscykeln se ut: kodning-testning-feedback-kodning-testning\u2026<\/p>\n<p>S\u00e5 h\u00e4r ser regeln ut, som\u2026 Men vet du vad? Istio \u00e4r s\u00e5 enkelt, och denna yaml-fil \u00e4r s\u00e5 tydlig att allt i detta exempel talar f\u00f6r sig sj\u00e4lvt, ta bara en titt:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/e077e891cbccc66ebc4d4c7b67a0f1ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI h\u00e4lften av fallen kommer vi att f\u00e5 en 7-sekunders f\u00f6rdr\u00f6jning. Och det \u00e4r verkligen inte samma sak som att vi skulle ha lagt till en sleep-kommando i koden, eftersom Istio faktiskt f\u00f6rdr\u00f6jer f\u00f6rfr\u00e5gan med 7 sekunder. Eftersom Istio st\u00f6der Jaeger-sp\u00e5rning kan denna f\u00f6rdr\u00f6jning observeras tydligt i Jaeger-gr\u00e4nssnittet, som visas i sk\u00e4rmdumpen nedan. Observera den l\u00e5nga f\u00f6rfr\u00e5gan i det \u00f6vre h\u00f6gra h\u00f6rnet av diagrammet \u2013 dess varaktighet \u00e4r 7,02 sekunder:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/97a7b33fb7e0455973c7fd1b2aefadf3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDetta scenario till\u00e5ter oss att testa koden under n\u00e4tverksf\u00f6rdr\u00f6jningar. Och det \u00e4r tydligt att om vi tar bort denna regel, kommer vi att eliminera den artificiella f\u00f6rdr\u00f6jningen. L\u00e5t oss upprepa oss, men vi gjorde allt detta utan att r\u00f6ra koden.<\/p>\n<h3>Inte ge upp och inte backa<\/h3>\n<p>\nEn annan anv\u00e4ndbar funktion f\u00f6r kaosingenj\u00f6rskonst i Istio \u00e4r m\u00f6jligheten att g\u00f6ra om f\u00f6rfr\u00e5gningar till tj\u00e4nsten ett visst antal g\u00e5nger. Po\u00e4ngen h\u00e4r \u00e4r att inte sluta f\u00f6rs\u00f6ka n\u00e4r den f\u00f6rsta f\u00f6rfr\u00e5gan misslyckas med fel 503 \u2013 och kanske, vid det N:te f\u00f6rs\u00f6ket, har vi tur. Kanske tj\u00e4nsten bara vilade f\u00f6r en stund av n\u00e5gon anledning. Ja, denna anledning b\u00f6r vi nog gr\u00e4va fram och \u00e5tg\u00e4rda. Men det \u00e4r senare, s\u00e5 l\u00e5t oss f\u00f6rs\u00f6ka f\u00e5 systemet att forts\u00e4tta fungera f\u00f6rst.<\/p>\n<p>S\u00e5, vi vill att tj\u00e4nsten med j\u00e4mna mellanrum ska ge ett fel 503, och Istio efter det ska f\u00f6rs\u00f6ka att kontakta den igen. Och h\u00e4r beh\u00f6vs tydligt ett s\u00e4tt att generera fel 503 utan att r\u00f6ra koden sj\u00e4lv...<\/p>\n<p>V\u00e4nta, stopp! Vi gjorde just detta.<\/p>\n<p>Denna fil kommer att g\u00f6ra s\u00e5 att tj\u00e4nsten recommendation-v2 i h\u00e4lften av fallen ger ett fel 503:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/f446528f9c968e40cc2cf318cf0acde9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet \u00e4r uppenbart att en del f\u00f6rfr\u00e5gningar kommer att misslyckas:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/f998513746604beda241b8d6de2ed727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOch nu involverar vi Istio-funktionen Retry:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/32e210b6ecbf4c1ecf121ee73e64ba35.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDenna rutningsregel g\u00f6r tre omf\u00f6rs\u00f6k med tv\u00e5 sekunders intervall och b\u00f6r minska (eller helst helt ta bort) fel 503:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/7f9711c52949072b823399e59141cb64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSammanfattningsvis: vi har gjort s\u00e5 att Istio, f\u00f6r det f\u00f6rsta, genererar fel 503 f\u00f6r h\u00e4lften av f\u00f6rfr\u00e5gningarna. F\u00f6r det andra, utf\u00f6r samma Istio tre f\u00f6rs\u00f6k att kontakta tj\u00e4nsten vid fel 503. Som ett resultat fungerar allt utm\u00e4rkt. S\u00e5ledes, genom att anv\u00e4nda funktionen Retry, har vi h\u00e5llit v\u00e5rt l\u00f6fte att inte ge upp och inte backa.<\/p>\n<p>Och ja, vi gjorde det igen, utan att r\u00f6ra koden. Allt vi beh\u00f6vde var tv\u00e5 rutningsregler i Istio:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/c21a1cfd2d78ae4145a57d1cefcc6c59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Hur man inte sviker anv\u00e4ndaren eller att sju inte v\u00e4ntar p\u00e5 en<\/h3>\n<p>\nOch nu v\u00e4nder vi situationen in och ut och unders\u00f6ker scenariot d\u00e4r det endast \u00e4r v\u00e4rt att inte ge efter eller ge upp under en viss best\u00e4md tid. Sedan m\u00e5ste vi helt enkelt sluta f\u00f6rs\u00f6ka bearbeta beg\u00e4ran f\u00f6r att inte f\u00e5 alla att v\u00e4nta p\u00e5 en tr\u00f6gr\u00f6rlig tj\u00e4nst. Med andra ord kommer vi inte att f\u00f6rsvara den f\u00f6rlorade positionen, utan ist\u00e4llet dra oss tillbaka till en reservfront f\u00f6r att inte l\u00e5ta webbplatsens anv\u00e4ndare lida av os\u00e4kerhet.<\/p>\n<p>I Istio kan man st\u00e4lla in en tidsgr\u00e4ns f\u00f6r beg\u00e4rningsbehandling. Om tj\u00e4nsten \u00f6verskrider denna tidsgr\u00e4ns returneras felkod 504 (Gateway Timeout) \u2013 allt detta g\u00f6rs \u00e5terigen genom Istios konfiguration. Men vi m\u00e5ste l\u00e4gga till kommandot sleep i tj\u00e4nstens k\u00e4llkod (och givetvis genomf\u00f6ra en ombyggnad och omdeploy), f\u00f6r att simulera en l\u00e5ngsam tj\u00e4nst. Tyv\u00e4rr g\u00e5r det inte att g\u00f6ra p\u00e5 n\u00e5got annat s\u00e4tt.<\/p>\n<p>S\u00e5 vi har infogat en tre sekunder l\u00e5ng sleep i koden f\u00f6r tj\u00e4nsten recommendation v2, \u00e5terbyggt den aktuella bilden och genomf\u00f6rt en omdeploy av containern, och nu kommer vi att l\u00e4gga till en tidsgr\u00e4ns med hj\u00e4lp av f\u00f6ljande routingregel i Istio:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/c03fc452b98dd875a8a7d3ac561893ca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI sk\u00e4rmbilden ovan kan vi se att vi slutar att f\u00f6rs\u00f6ka kontakta tj\u00e4nsten recommendation om vi inte f\u00e5r n\u00e5got svar inom en sekund, det vill s\u00e4ga \u00e4ven innan felkod 504 intr\u00e4ffar. Efter att denna routingregel till\u00e4mpats (och med en tre sekunder l\u00e5ng sleep i koden f\u00f6r tj\u00e4nsten recommendation:v2), f\u00e5r vi f\u00f6ljande resultat:<\/p>\n<p><img decoding=\"async\" alt=\"Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen\" src=\"\/wp-content\/uploads\/2020\/01\/ed6e80052c67254718b1fde2bd873e71.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVi upprepar oss, men tidsgr\u00e4nsen kan st\u00e4llas in utan att vidr\u00f6ra k\u00e4llkoden. En extra bonus h\u00e4r \u00e4r att du nu kan modifiera din kod s\u00e5 att den reagerar p\u00e5 tidsgr\u00e4nsen, och enkelt testa dessa \u00e4ndringar med hj\u00e4lp av Istio.<\/p>\n<h3>Och nu allt tillsammans<\/h3>\n<p>\nAtt skapa lite kaos med hj\u00e4lp av Istio \u00e4r ett utm\u00e4rkt s\u00e4tt att testa din kod och systemets tillf\u00f6rlitlighet som helhet. M\u00f6nster f\u00f6r fallback, bulkhead och circuit breaker, metoder f\u00f6r att skapa artificiella fel och f\u00f6rseningar, samt \u00e5terkommande anrop och tidsgr\u00e4nser kommer att vara mycket anv\u00e4ndbara vid skapandet av robusta molnsystem. Tillsammans med Kubernetes och Red Hat OpenShift kommer dessa verktyg att hj\u00e4lpa dig att m\u00f6ta framtiden med sj\u00e4lvf\u00f6rtroende.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Sp\u00e5rning och \u00f6vervakning i Istio: mikrotj\u00e4nster och os\u00e4kerhetsprincipen | ProHoster","description":"Heisenbergs os\u00e4kerhetsprincip s\u00e4ger att man inte kan m\u00e4ta ett objekts l\u00e4ge och dess hastighet samtidigt. Om objektet r\u00f6r sig finns det ingen specifik plats.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/trassirovka-i-monitoring-v-istio-mikroservisy-i-printsip-neopredelennosti","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/55700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55700"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55700\/revisions"}],"predecessor-version":[{"id":162124,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55700\/revisions\/162124"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}