BrÄ«vdienas ir beiguÅ”Äs, un mÄs esam atgriezuÅ”ies ar savu otro ierakstu Istio Service Mesh sÄrijÄ.
Å odienas tÄma ir Circuit Breaker, kas tulkojumÄ krievu elektrotehnikÄ nozÄ«mÄ "automÄtiskais slÄdzis", parastajÄ valodÄ - "automÄtiskais slÄdzis". Tikai Istio Ŕī maŔīna atvieno nevis Ä«ssavienojumu vai pÄrslogotu Ä·Ädi, bet gan bojÄtus konteinerus.
KÄ tam vajadzÄtu darboties ideÄli
Ja mikropakalpojumus pÄrvalda Kubernetes, piemÄram, OpenShift platformÄ, tie automÄtiski palielinÄs un samazinÄs atkarÄ«bÄ no slodzes. TÄ kÄ mikropakalpojumi darbojas podiÅos, vienÄ galapunktÄ var bÅ«t vairÄki konteinerizÄta mikropakalpojuma gadÄ«jumi, un Kubernetes marÅ”rutÄs pieprasÄ«jumus un slodzes lÄ«dzsvaru starp tiem. Un - ideÄlÄ gadÄ«jumÄ - tam visam vajadzÄtu darboties nevainojami.
MÄs atceramies, ka mikropakalpojumi ir mazi un Ä«slaicÄ«gi. ÄŖslaicÄ«gums, kas Å”eit nozÄ«mÄ parÄdÄ«Å”anÄs un pazuÅ”anas vieglumu, bieži tiek novÄrtÄts par zemu. VÄl viena mikropakalpojuma gadÄ«juma raÅ”anÄs un nÄve podÄ ir diezgan gaidÄ«tas lietas, OpenShift un Kubernetes tiek galÄ ar to labi, un viss darbojas lieliski, bet atkal teorÄtiski.
KÄ tas Ä«sti darbojas
Tagad iedomÄjieties, ka konkrÄts mikropakalpojuma gadÄ«jums, tas ir, konteiners, ir kļuvis nelietojams: vai nu tas nereaÄ£Ä (503. kļūda), vai, kas ir nepatÄ«kamÄk, reaÄ£Ä, bet pÄrÄk lÄni. Citiem vÄrdiem sakot, tas kļūst neveiksmÄ«gs vai nereaÄ£Ä uz pieprasÄ«jumiem, taÄu tas netiek automÄtiski noÅemts no kopas. Kas bÅ«tu jÄdara Å”ajÄ gadÄ«jumÄ? Vai mÄÄ£inÄt vÄlreiz? Vai man vajadzÄtu to noÅemt no marÅ”rutÄÅ”anas shÄmas? Un ko nozÄ«mÄ āpÄrÄk lÄnsā ā cik tas ir skaitļos, un kas tos nosaka? VarbÅ«t vienkÄrÅ”i atpÅ«tieties un vÄlÄk mÄÄ£iniet vÄlreiz? Ja jÄ, tad cik vÄlÄk?
Kas ir baseina izgrūŔana Istio
Un Å”eit palÄ«gÄ nÄk Istio ar savÄm Circuit Breaker aizsardzÄ«bas maŔīnÄm, kas uz laiku noÅem bojÄtos konteinerus no marÅ”rutÄÅ”anas un slodzes lÄ«dzsvaroÅ”anas resursu kopas, ievieÅ”ot Pool Ejection procedÅ«ru.
Izmantojot izÅÄmuma noteikÅ”anas stratÄÄ£iju, Istio nosaka lÄ«knes, kas ir Ärpus lÄ«nijas, un uz noteiktu laiku noÅem tos no resursu kopas, ko sauc par miega logu.
Lai parÄdÄ«tu, kÄ tas darbojas Kubernetes platformÄ OpenShift, sÄksim ar parasti strÄdÄjoÅ”u mikropakalpojumu ekrÄnuzÅÄmumu no piemÄra repozitorijÄ.
Gatavojas avÄrijai
Pirms baseina izstumÅ”anas ir jÄizveido Istio marÅ”rutÄÅ”anas kÄrtula. PieÅemsim, ka vÄlamies sadalÄ«t pieprasÄ«jumus starp aplikÄcijÄm proporcijÄ 50/50. TurklÄt mÄs palielinÄsim v2 konteineru skaitu no viena uz diviem, piemÄram:
oc scale deployment recommendation-v2 --replicas=2 -n tutorial
Tagad mÄs iestatÄm marÅ”rutÄÅ”anas kÄrtulu, lai satiksme tiktu sadalÄ«ta starp podiem proporcijÄ 50/50.
LÅ«k, kÄ izskatÄs Ŕī noteikuma rezultÄts:
Var atrast vainu tajÄ, ka Å”is ekrÄns ir nevis 50/50, bet 14:9, bet ar laiku situÄcija uzlabosies.
Kļūdas izveidoŔana
Tagad atspÄjosim vienu no diviem v2 konteineriem, lai mums bÅ«tu viens vesels v1 konteiners, viens veselÄ«gs v2 konteiners un viens bojÄts v2 konteiners:
TraucÄjuma novÄrÅ”ana
TÄtad mums ir bojÄts konteiners, un ir pienÄcis laiks baseina izmeÅ”anai. Izmantojot ļoti vienkÄrÅ”u konfigurÄciju, mÄs uz 15 sekundÄm izslÄgsim Å”o neveiksmÄ«go konteineru no marÅ”rutÄÅ”anas shÄmÄm, cerot, ka tas atgriezÄ«sies veselÄ«gÄ stÄvoklÄ« (restartÄs vai atjaunos veiktspÄju). LÅ«k, kÄ izskatÄs Ŕī konfigurÄcija un tÄs darba rezultÄti:
KÄ redzat, neveiksmÄ«gais v2 konteiners vairs netiek izmantots marÅ”rutÄÅ”anas pieprasÄ«jumiem, jo āātas ir noÅemts no pÅ«la. Bet pÄc 15 sekundÄm tas automÄtiski atgriezÄ«sies baseinÄ. PatiesÄ«bÄ mÄs tikko parÄdÄ«jÄm, kÄ darbojas baseina izgrÅ«Å”ana.
SÄksim bÅ«vÄt arhitektÅ«ru
Pool Ejection apvienojumÄ ar Istio pÄrraudzÄ«bas iespÄjÄm ļauj sÄkt veidot sistÄmu bojÄtu konteineru automÄtiskai nomaiÅai, lai samazinÄtu, ja ne likvidÄtu, dÄ«kstÄves un atteices.
ā
NASA ir viens skaļŔ moto - Failure Is Not An Option, kura autors tiek uzskatīts par lidojumu direktoru
Istio, kÄ mÄs rakstÄ«jÄm iepriekÅ”, Ä«steno Ä·Ädes pÄrtraucÄju koncepciju, kas ir labi pierÄdÄ«jusi sevi fiziskajÄ pasaulÄ. Un tÄpat kÄ elektriskais Ä·Ädes pÄrtraucÄjs izslÄdz Ä·Ädes problÄmu sadaļu, Istio programmatÅ«ra Circuit Breaker atver savienojumu starp pieprasÄ«jumu straumi un problÄmu konteineru, ja kaut kas nav kÄrtÄ«bÄ ar beigu punktu, piemÄram, kad serveris avarÄja vai sÄka lÄnÄk.
TurklÄt otrajÄ gadÄ«jumÄ ir tikai vairÄk problÄmu, jo viena konteinera bremzes ne tikai rada kavÄjumu kaskÄdi dienestiem, kas tam piekļūst, un rezultÄtÄ samazina sistÄmas darbÄ«bu kopumÄ, bet arÄ« rada atkÄrtotas pieprasÄ«jumus jau tÄ lÄni strÄdÄjoÅ”am pakalpojumam, kas situÄciju tikai pasliktina .
StrÄvas slÄdzis teorÄtiski
Circuit Breaker ir starpniekserveris, kas kontrolÄ pieprasÄ«jumu plÅ«smu uz galapunktu. Kad Å”is punkts pÄrstÄj darboties vai, atkarÄ«bÄ no norÄdÄ«tajiem iestatÄ«jumiem, sÄk palÄninÄties, starpniekserveris pÄrtrauc savienojumu ar konteineru. PÄc tam satiksme tiek novirzÄ«ta uz citiem konteineriem, vienkÄrÅ”i slodzes balansÄÅ”anas dÄļ. Savienojums paliek atvÄrts noteiktÄ miega logÄ, piemÄram, divas minÅ«tes, un pÄc tam tiek uzskatÄ«ts par pusatvÄrtu. MÄÄ£inÄjums nosÅ«tÄ«t nÄkamo pieprasÄ«jumu nosaka turpmÄko savienojuma stÄvokli. Ja ar pakalpojumu viss ir kÄrtÄ«bÄ, savienojums atgriežas darba stÄvoklÄ« un atkal tiek slÄgts. Ja pakalpojumÄ joprojÄm ir kaut kas nepareizs, savienojums tiek atvienots un miega logs tiek atkÄrtoti iespÄjots. LÅ«k, kÄ izskatÄs vienkÄrÅ”ota Ä·Ädes pÄrtraucÄja stÄvokļa diagramma:
Å eit ir svarÄ«gi atzÄ«mÄt, ka tas viss notiek, tÄ sakot, sistÄmas arhitektÅ«ras lÄ«menÄ«. TÄpÄc kÄdÄ brÄ«dÄ« jums bÅ«s jÄiemÄca lietojumprogrammÄm strÄdÄt ar Circuit Breaker, piemÄram, atbildot uz noklusÄjuma vÄrtÄ«bu vai, ja iespÄjams, ignorÄjot pakalpojuma esamÄ«bu. Å im nolÅ«kam tiek izmantots starpsienu modelis, taÄu tas ir Ärpus Ŕī raksta darbÄ«bas jomas.
Circuit Breaker praksÄ
PiemÄram, OpenShift izmantosim divas mÅ«su ieteikumu mikropakalpojuma versijas. 1. versija darbosies labi, bet versijÄ 2 mÄs ieviesÄ«sim aizkavi, lai simulÄtu servera palÄninÄjumu. Lai skatÄ«tu rezultÄtus, izmantojiet rÄ«ku
siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io
Å Ä·iet, ka viss darbojas, bet par kÄdu cenu? No pirmÄ acu uzmetiena mums ir 100% pieejamÄ«ba, taÄu paskatieties uzmanÄ«gÄk - maksimÄlais darÄ«juma ilgums ir pat 12 sekundes. Tas nepÄrprotami ir vÄjÅ” kakls, un tas ir jÄpaplaÅ”ina.
Lai to izdarÄ«tu, mÄs izmantosim Istio, lai novÄrstu zvanus uz lÄnajiem konteineriem. LÅ«k, kÄ izskatÄs atbilstoÅ”Ä konfigurÄcija, izmantojot Circuit Breaker:
PÄdÄjÄ rindiÅa ar parametru httpMaxRequestsPerConnection norÄda, ka savienojums ar ir jÄatvieno, mÄÄ£inot izveidot citu - otro - savienojumu papildus esoÅ”ajam. TÄ kÄ mÅ«su konteiners simulÄ lÄnu apkalpoÅ”anu, Å”Ädas situÄcijas periodiski radÄ«sies, un tad Istio atgriezÄ«s 503 kļūdu, taÄu tas ir tas, ko parÄdÄ«s aplenkums:
Labi, mums ir Circuit Breaker, kas tÄlÄk?
TÄtad, mÄs ieviesÄm automÄtisku izslÄgÅ”anu, vispÄr nepieskaroties paÅ”u pakalpojumu avota kodam. Izmantojot iepriekÅ” aprakstÄ«to Circuit Breaker un Pool Ejection procedÅ«ru, mÄs varam noÅemt bremžu konteinerus no resursu kopas, lÄ«dz tie atgriežas normÄlÄ stÄvoklÄ«, un pÄrbaudÄ«t to statusu noteiktÄ frekvencÄ - mÅ«su piemÄrÄ tas ir divas minÅ«tes (sleepWindow parametrs).
Å emiet vÄrÄ, ka lietojumprogrammas spÄja reaÄ£Ät uz kļūdu 503 joprojÄm ir iestatÄ«ta avota koda lÄ«menÄ«. AtkarÄ«bÄ no situÄcijas Circuit Breaker izmantoÅ”anai ir daudz stratÄÄ£iju.
NÄkamajÄ ierakstÄ: MÄs apskatÄ«sim izsekoÅ”anu un uzraudzÄ«bu, kas jau ir iebÅ«vÄta vai viegli pievienojama Istio, kÄ arÄ« to, kÄ apzinÄti ieviest kļūdas sistÄmÄ.
Avots: www.habr.com