Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan

Natapos na ang mga holidays ug nibalik kami sa among ikaduhang post sa serye sa Istio Service Mesh.

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan

Ang hilisgutan karon mao ang Circuit Breaker, nga gihubad ngadto sa Russian nga electrical engineering nagpasabut nga "circuit breaker", sa komon nga parlance - "circuit breaker". Sa Istio ra kini nga makina wala mag-disconnect sa usa ka shorted o overloaded circuit, apan sayup nga mga sudlanan.

Sa unsa nga paagi kini kinahanglan nga molihok nga labing maayo

Kung ang mga microservice gidumala sa Kubernetes, pananglitan sa sulod sa OpenShift nga plataporma, kini awtomatiko nga gipataas ug paubos depende sa karga. Tungod kay ang mga microservice nagdagan sa mga pod, mahimong adunay daghang mga higayon sa usa ka containerized nga microservice sa usa ka endpoint, ug ang mga Kubernetes magruta sa mga hangyo ug balanse sa pagkarga tali kanila. Ug - labing maayo - kining tanan kinahanglan nga molihok nga hingpit.

Nahinumdom kami nga ang mga microservice gamay ug ephemeral. Ang ephemerality, nga dinhi nagpasabot sa kasayon ​​sa pagpakita ug pagkahanaw, kasagaran gipakaubos. Ang pagkahimugso ug pagkamatay sa lain nga pananglitan sa usa ka microservice sa usa ka pod mao ang gipaabut nga mga butang, ang OpenShift ug Kubernetes nagdumala niini nga maayo, ug ang tanan nagtrabaho nga maayo - apan usab sa teorya.

Giunsa kini molihok

Karon hunahunaa nga ang usa ka piho nga pananglitan sa usa ka microservice, nga mao, usa ka sudlanan, nahimo nang dili magamit: bisan dili kini motubag (sayup 503), o, kung unsa ang labi ka dili maayo, kini motubag, apan hinay kaayo. Sa laing pagkasulti, kini mahimong glitchy o dili motubag sa mga hangyo, apan dili kini awtomatik nga makuha gikan sa pool. Unsa ang kinahanglan buhaton niini nga kaso? Sa pagsulay pag-usab? Kinahanglan ba nako kini tangtangon gikan sa routing scheme? Ug unsa ang gipasabut sa "hinay kaayo" - pila kini sa mga numero, ug kinsa ang nagtino niini? Basin pahuway lang ug sulayi pag-usab unya? Kon mao, pila unya?

Unsa ang Pool Ejection sa Istio

Ug dinhi ang Istio mitabang sa pagluwas sa mga makina nga proteksyon sa Circuit Breaker, nga temporaryo nga nagtangtang sa mga sayup nga sulud gikan sa routing ug load balancing resource pool, nga nagpatuman sa pamaagi sa Pool Ejection.

Gamit ang outlier detection nga estratehiya, si Istio nakamatikod sa mga curve pod nga wala sa linya ug gitangtang kini gikan sa resource pool sulod sa piho nga gidugayon sa panahon, nga gitawag ug sleep window.

Aron ipakita kung giunsa kini paglihok sa Kubernetes sa OpenShift nga plataporma, magsugod kita sa usa ka screenshot sa kasagarang nagtrabaho nga mga microservice gikan sa panig-ingnan sa repositoryo. Mga Demo sa Red Hat Developer. Dinhi kita adunay duha ka pod, v1 ug v2, ang matag usa nagdagan og usa ka sudlanan. Kung wala gigamit ang mga lagda sa Istio routing, ang Kubernetes nag-default sa parehas nga balanse nga round-robin routing:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan

Pag-andam alang sa usa ka crash

Sa dili pa mohimo sa Pool Ejection, kinahanglan ka maghimo ug Istio routing rule. Ingnon ta nga gusto namong ipang-apod-apod ang mga hangyo tali sa mga pod sa 50/50 nga ratio. Dugang pa, atong dugangan ang gidaghanon sa v2 nga mga sudlanan gikan sa usa ngadto sa duha, sama niini:

oc scale deployment recommendation-v2 --replicas=2 -n tutorial

Karon nagbutang kami usa ka lagda sa pagruta aron ang trapiko maapod-apod tali sa mga pod sa usa ka ratio nga 50/50.

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Mao kini ang hitsura sa resulta niini nga lagda:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Makapangita ka og sayup sa kamatuoran nga kini nga screen dili 50/50, apan 14: 9, apan sa paglabay sa panahon ang sitwasyon molambo.

Nagbuhat og glitch

Karon atong i-disable ang usa sa duha ka v2 nga sudlanan aron kita adunay usa ka himsog nga v1 nga sudlanan, usa ka himsog nga v2 nga sudlanan ug usa ka sayup nga v2 nga sudlanan:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan

Pag-ayo sa glitch

Busa, kita adunay usa ka sayup nga sudlanan, ug panahon na alang sa Pool Ejection. Gamit ang usa ka yano kaayo nga config, dili namon iapil kining napakyas nga sudlanan gikan sa bisan unsang mga laraw sa ruta sa 15 segundos sa paglaum nga kini mobalik sa usa ka himsog nga kahimtang (bisan i-restart o ibalik ang pasundayag). Mao kini ang hitsura niini nga config ug ang mga resulta sa trabaho niini:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Sama sa imong makita, ang napakyas nga v2 nga sudlanan wala na gigamit alang sa mga hangyo sa pagruta tungod kay kini gikuha gikan sa pool. Apan pagkahuman sa 15 segundos awtomatiko kini nga mobalik sa pool. Sa tinuud, gipakita ra namon kung giunsa ang paglihok sa Pool Ejection.

Magsugod kita sa pagtukod sa arkitektura

Ang Pool Ejection, inubanan sa mga kapabilidad sa pag-monitor ni Istio, nagtugot kanimo sa pagsugod sa pagtukod og usa ka balangkas alang sa awtomatik nga pag-ilis sa mga sayup nga mga sudlanan aron makunhuran, kung dili mawagtang, ang downtime ug mga kapakyasan.
 
Ang NASA adunay usa ka kusog nga motto - Ang Kapakyasan Dili Usa ka Opsyon, ang tagsulat niini giisip nga direktor sa paglupad Gene Kranz. Mahimo kini hubaron sa Russian nga "Ang kapakyasan dili usa ka kapilian," ug ang kahulugan dinhi mao nga ang tanan mahimo nga molihok kung adunay ka igo nga kabubut-on. Bisan pa, sa tinuud nga kinabuhi, ang mga kapakyasan dili lang mahitabo, kini dili kalikayan, bisan diin ug sa tanan. Ug unsaon pag-atubang kanila sa kaso sa mga microservice? Sa among opinyon, mas maayo nga magsalig dili sa determinasyon, apan sa mga kapabilidad sa mga sudlanan, Kubernetes, Red Hat OpenShiftug Istio.

Si Istio, sama sa among gisulat sa ibabaw, nagpatuman sa konsepto sa mga circuit breaker, nga napamatud-an nga maayo sa pisikal nga kalibutan. Ug sama sa usa ka electrical circuit breaker nga gipalong ang usa ka seksyon sa problema sa usa ka circuit, ang software ni Istio nga Circuit Breaker nagbukas sa koneksyon tali sa usa ka sapa sa mga hangyo ug usa ka sulud sa problema kung adunay usa ka butang nga sayup sa katapusan nga punto, pananglitan, kung ang server nahagsa o ​​nagsugod hinayhinay.

Dugang pa, sa ikaduha nga kaso adunay daghang mga problema lamang, tungod kay ang mga preno sa usa ka sudlanan dili lamang hinungdan sa usa ka kaskad sa mga paglangan sa mga serbisyo nga nag-access niini ug, ingon usa ka sangputanan, makunhuran ang pasundayag sa sistema sa kinatibuk-an, apan makamugna usab nga balik-balik. mga hangyo sa usa ka hinay na nga nagdagan nga serbisyo, nga nagpasamot lang sa sitwasyon .

Circuit Breaker sa teorya

Ang Circuit Breaker usa ka proxy nga nagkontrol sa dagan sa mga hangyo sa usa ka endpoint. Kung kini nga punto mohunong sa pagtrabaho o, depende sa gitakda nga mga setting, nagsugod sa paghinay, giguba sa proxy ang koneksyon sa sudlanan. Ang trapiko unya gi-redirect sa ubang mga sudlanan, tungod lang sa pagbalanse sa load. Ang koneksyon nagpabilin nga bukas alang sa usa ka gihatag nga bintana sa pagkatulog, ingon duha ka minuto, ug dayon giisip nga tunga nga bukas. Ang pagsulay sa pagpadala sa sunod nga hangyo nagtino sa dugang nga kahimtang sa koneksyon. Kung OK ra ang tanan sa serbisyo, ang koneksyon mobalik sa kahimtang sa pagtrabaho ug sirado na usab. Kung adunay usa ka butang nga sayup sa serbisyo, ang koneksyon wala’y koneksyon ug ang bintana sa pagkatulog gipaandar pag-usab. Ania kung unsa ang hitsura sa usa ka gipasimple nga diagram sa estado sa Circuit Breaker:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Mahinungdanon nga timan-an dinhi nga kining tanan mahitabo sa lebel sa, ingnon ta, arkitektura sa sistema. Mao nga sa usa ka punto kinahanglan nimo nga itudlo ang imong mga aplikasyon sa pagtrabaho kauban ang Circuit Breaker, sama sa paghatag usa ka default nga kantidad agig tubag o, kung mahimo, wala’y pagtagad sa paglungtad sa serbisyo. Usa ka bulkhead pattern ang gigamit alang niini, apan kini lapas pa sa kasangkaran niini nga artikulo.

Circuit Breaker sa praktis

Pananglitan, magpadagan kami og duha ka bersyon sa among rekomendasyon nga microservice sa OpenShift. Ang Bersyon 1 molihok nga maayo, apan sa v2 magtukod kami sa usa ka paglangan aron masundog ang mga paghinay sa server. Aron makita ang mga resulta, gamita ang himan paglikos:

siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Ang tanan daw nagtrabaho, apan sa unsa nga gasto? Sa una nga pagtan-aw, kami adunay 100% nga magamit, apan tan-awa pag-ayo - ang labing kadaghan nga gidugayon sa transaksyon hangtod sa 12 segundos. Kini klaro nga usa ka bottleneck ug kinahanglan nga palapdan.

Aron mahimo kini, among gamiton ang Istio aron mawagtang ang mga tawag sa pagpahinay sa mga sudlanan. Mao kini ang hitsura sa katugbang nga config gamit ang Circuit Breaker:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan
Ang katapusang linya nga adunay parameter nga httpMaxRequestsPerConnection nagsinyas nga ang koneksyon kinahanglan nga madiskonekta kung mosulay sa paghimo og lain - usa ka segundo - koneksyon dugang sa naa na. Tungod kay ang among sudlanan nag-simulate sa usa ka hinay nga serbisyo, ang ingon nga mga sitwasyon mahitabo matag karon ug unya, ug unya ang Istio magbalik sa usa ka 503 nga sayup, apan kini ang ipakita sa paglikos:

Istio Circuit Breaker: pag-disable sa sayup nga mga sudlanan

OK, naa tay Circuit Breaker, unsay sunod?

Mao nga, gipatuman namon ang awtomatikong pagsira nga wala’y paghikap sa source code sa mga serbisyo mismo. Gamit ang Circuit Breaker ug ang pamaagi sa Pool Ejection nga gihulagway sa ibabaw, mahimo natong tangtangon ang mga sudlanan sa preno gikan sa linaw sa kapanguhaan hangtod nga mobalik sila sa normal, ug susihon ang ilang kahimtang sa usa ka piho nga frequency - sa among pananglitan, kini duha ka minuto (parameter sa sleepWindow).

Timan-i nga ang abilidad sa usa ka aplikasyon sa pagtubag sa usa ka 503 nga sayup gitakda gihapon sa lebel sa source code. Adunay daghang mga estratehiya sa paggamit sa Circuit Breaker, depende sa sitwasyon.

Sa sunod nga post: Maghisgot kami bahin sa pagsubay ug pag-monitor nga na-built-in na o dali nga gidugang sa Istio, ingon man kung giunsa ang tinuyo nga pagpaila sa mga sayup sa sistema.

Source: www.habr.com

Idugang sa usa ka comment