Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol

Mae'r gwyliau drosodd ac rydym yn ôl gyda'n hail bost yn y gyfres Istio Service Mesh.

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol

Y pwnc heddiw yw Circuit Breaker, a gyfieithwyd i beirianneg drydanol Rwsiaidd yn golygu “torrwr cylched”, yn gyffredin - “torrwr cylched”. Dim ond yn Istio nid yw'r peiriant hwn yn datgysylltu cylched byr neu wedi'i orlwytho, ond cynwysyddion diffygiol.

Sut y dylai hyn weithio yn ddelfrydol

Pan fydd microservices yn cael eu rheoli gan Kubernetes, er enghraifft o fewn y platfform OpenShift, maent yn cynyddu ac i lawr yn awtomatig yn dibynnu ar y llwyth. Oherwydd bod microwasanaethau'n rhedeg mewn codennau, gall fod sawl achos o ficrowasanaeth mewn cynhwysydd ar un pwynt terfyn, a bydd Kubernetes yn cyfeirio ceisiadau ac yn llwytho cydbwysedd rhyngddynt. Ac - yn ddelfrydol - dylai hyn i gyd weithio'n berffaith.

Cofiwn fod microwasanaethau yn fach ac yn fyrhoedlog. Mae byrhoedledd, sydd yma yn golygu rhwyddineb ymddangos a diflannu, yn aml yn cael ei danamcangyfrif. Mae genedigaeth a marwolaeth enghraifft arall o ficrowasanaeth mewn pod yn bethau eithaf disgwyliedig, mae OpenShift a Kubernetes yn trin hyn yn dda, ac mae popeth yn gweithio'n wych - ond eto mewn theori.

Sut mae'n gweithio mewn gwirionedd

Nawr dychmygwch fod enghraifft benodol o ficrowasanaeth, hynny yw, cynhwysydd, wedi dod yn annefnyddiadwy: naill ai nid yw'n ymateb (gwall 503), neu, yr hyn sy'n fwy annymunol, mae'n ymateb, ond yn rhy araf. Mewn geiriau eraill, mae'n dod yn glitchy neu nid yw'n ymateb i geisiadau, ond nid yw'n cael ei dynnu'n awtomatig o'r pwll. Beth ddylid ei wneud yn yr achos hwn? I roi cynnig arall arni? A ddylwn ei dynnu o'r cynllun llwybro? A beth mae “rhy araf” yn ei olygu – faint ydyw mewn niferoedd, a phwy sy'n eu pennu? Efallai rhowch seibiant iddo a rhowch gynnig arall arni yn nes ymlaen? Os felly, faint yn ddiweddarach?

Beth yw Alldafliad Pool yn Istio

Ac yma mae Istio yn dod i'r adwy gyda'i beiriannau amddiffyn Circuit Breaker, sy'n tynnu cynwysyddion diffygiol dros dro o'r gronfa adnoddau llwybro a chydbwyso llwyth, gan weithredu'r weithdrefn Pool Ejection.

Gan ddefnyddio strategaeth canfod allglaf, mae Istio yn canfod codennau cromlin sydd allan o linell ac yn eu tynnu o'r gronfa adnoddau am gyfnod penodol o amser, a elwir yn ffenestr gwsg.

I ddangos sut mae hyn yn gweithio yn Kubernetes ar y llwyfan OpenShift, gadewch i ni ddechrau gyda sgrinlun o ficrowasanaethau sy'n gweithio fel arfer o'r enghraifft yn yr ystorfa Demos Datblygwr Red Hat. Yma mae gennym ddau god, v1 a v2, pob un yn rhedeg un cynhwysydd. Pan na ddefnyddir rheolau llwybro Istio, mae Kubernetes yn rhagosod llwybro rownd-robin cytbwys:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol

Paratoi ar gyfer damwain

Cyn gwneud Pool Ejection, mae angen i chi greu rheol llwybro Istio. Gadewch i ni ddweud ein bod am ddosbarthu ceisiadau rhwng codennau mewn cymhareb 50/50. Yn ogystal, byddwn yn cynyddu nifer y cynwysyddion v2 o un i ddau, fel hyn:

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

Nawr rydym yn gosod rheol llwybro fel bod traffig yn cael ei ddosbarthu rhwng codennau mewn cymhareb 50/50.

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Dyma sut olwg sydd ar ganlyniad y rheol hon:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Gallwch ddod o hyd i fai gyda'r ffaith nad yw'r sgrin hon yn 50/50, ond yn 14:9, ond dros amser bydd y sefyllfa'n gwella.

Gwneud glitch

Nawr, gadewch i ni analluogi un o'r ddau gynhwysydd v2 fel bod gennym un cynhwysydd v1 iach, un cynhwysydd v2 iach ac un cynhwysydd v2 diffygiol:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol

Trwsio'r glitch

Felly, mae gennym gynhwysydd diffygiol, ac mae'n amser i Pool Ejection. Gan ddefnyddio cyfluniad syml iawn, byddwn yn eithrio'r cynhwysydd hwn a fethwyd o unrhyw gynlluniau llwybro am 15 eiliad yn y gobaith y bydd yn dychwelyd i gyflwr iach (naill ai ailgychwyn neu adfer perfformiad). Dyma sut olwg sydd ar y cyfluniad hwn a chanlyniadau ei waith:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Fel y gallwch weld, nid yw'r cynhwysydd v2 a fethwyd bellach yn cael ei ddefnyddio ar gyfer ceisiadau llwybro oherwydd ei fod wedi'i dynnu o'r pwll. Ond ar ôl 15 eiliad bydd yn dychwelyd yn awtomatig i'r pwll. A dweud y gwir, fe wnaethon ni ddangos sut mae Pool Ejection yn gweithio.

Gadewch i ni ddechrau adeiladu pensaernïaeth

Mae Pool Ejection, ynghyd â galluoedd monitro Istio, yn caniatáu ichi ddechrau adeiladu fframwaith ar gyfer ailosod cynwysyddion diffygiol yn awtomatig i leihau, os nad dileu, amser segur a methiannau.

Mae gan NASA un arwyddair uchel - Nid yw Methiant yn Opsiwn, y mae ei awdur yn cael ei ystyried yn gyfarwyddwr hedfan Gene Kranz. Gellir ei gyfieithu i Rwsieg fel “Nid yw methiant yn opsiwn,” a'r ystyr yma yw y gellir gwneud i bopeth weithio os oes gennych chi ddigon o ewyllys. Fodd bynnag, mewn bywyd go iawn, nid yw methiannau yn digwydd yn unig, maent yn anochel, ym mhobman ac ym mhopeth. A sut i ddelio â nhw yn achos microwasanaethau? Yn ein barn ni, mae'n well dibynnu nid ar ewyllys, ond ar allu cynwysyddion, Kubernetes, Red Hat OpenShiftAc Istio.

Mae Istio, fel y gwnaethom ysgrifennu uchod, yn gweithredu'r cysyniad o dorwyr cylched, sydd wedi profi ei hun yn dda yn y byd ffisegol. Ac yn union fel y mae torrwr cylched trydanol yn diffodd rhan broblem o gylched, mae Circuit Breaker meddalwedd Istio yn agor y cysylltiad rhwng llif o geisiadau a chynhwysydd problem pan fydd rhywbeth o'i le ar y pwynt terfyn, er enghraifft, pan chwalodd y gweinydd neu pan ddechreuodd y gweinydd. arafwch.

Ar ben hynny, yn yr ail achos dim ond mwy o broblemau sydd, gan fod breciau un cynhwysydd nid yn unig yn achosi rhaeadru o oedi wrth i'r gwasanaethau gael mynediad ato ac, o ganlyniad, yn lleihau perfformiad y system gyfan, ond hefyd yn cynhyrchu dro ar ôl tro. ceisiadau i wasanaeth sydd eisoes yn rhedeg yn araf, sydd ond yn gwaethygu'r sefyllfa .

Torrwr Cylchdaith mewn theori

Mae Circuit Breaker yn ddirprwy sy'n rheoli llif ceisiadau i bwynt terfyn. Pan fydd y pwynt hwn yn stopio gweithio neu, yn dibynnu ar y gosodiadau a nodir, yn dechrau arafu, mae'r dirprwy yn torri'r cysylltiad â'r cynhwysydd. Yna caiff traffig ei ailgyfeirio i gynwysyddion eraill, yn syml oherwydd cydbwyso llwyth. Mae'r cysylltiad yn parhau i fod ar agor am ffenestr gysgu benodol, dyweder dau funud, ac yna'n cael ei ystyried yn hanner agored. Mae ymgais i anfon y cais nesaf yn pennu cyflwr pellach y cysylltiad. Os yw popeth yn iawn gyda'r gwasanaeth, mae'r cysylltiad yn dychwelyd i gyflwr gweithio ac eto'n dod ar gau. Os oes rhywbeth o'i le ar y gwasanaeth o hyd, caiff y cysylltiad ei ddatgysylltu a chaiff y ffenestr gysgu ei hail-alluogi. Dyma sut olwg sydd ar ddiagram cyflwr Circuit Breaker wedi'i symleiddio:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Mae'n bwysig nodi yma bod hyn i gyd yn digwydd ar lefel, fel petai, pensaernïaeth system. Felly ar ryw adeg bydd yn rhaid i chi ddysgu'ch ceisiadau i weithio gyda Circuit Breaker, megis darparu gwerth rhagosodedig mewn ymateb neu, os yn bosibl, anwybyddu bodolaeth y gwasanaeth. Defnyddir patrwm pen swmp ar gyfer hyn, ond mae y tu hwnt i gwmpas yr erthygl hon.

Torrwr Cylchdaith yn ymarferol

Er enghraifft, byddwn yn rhedeg dwy fersiwn o'n gwasanaeth micro argymhelliad ar OpenShift. Bydd fersiwn 1 yn gweithio'n iawn, ond yn v2 byddwn yn adeiladu ar oedi i efelychu arafu ar y gweinydd. I weld y canlyniadau, defnyddiwch yr offeryn gwarchae:

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

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Mae'n ymddangos bod popeth yn gweithio, ond ar ba gost? Ar yr olwg gyntaf, mae gennym 100% o argaeledd, ond cymerwch olwg agosach - hyd y trafodiad mwyaf yw cymaint â 12 eiliad. Mae hyn yn amlwg yn dagfa ac mae angen ei ehangu.

I wneud hyn, byddwn yn defnyddio Istio i ddileu galwadau i arafu cynwysyddion. Dyma sut olwg sydd ar y cyfluniad cyfatebol gan ddefnyddio Circuit Breaker:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol
Mae'r llinell olaf gyda'r paramedr httpMaxRequestsPerConnection yn arwydd y dylai'r cysylltiad gael ei ddatgysylltu wrth geisio creu cysylltiad arall - eiliad - yn ychwanegol at yr un presennol. Gan fod ein cynhwysydd yn efelychu gwasanaeth araf, bydd sefyllfaoedd o'r fath yn codi o bryd i'w gilydd, ac yna bydd Istio yn dychwelyd gwall 503, ond dyma beth fydd gwarchae yn ei ddangos:

Torrwr Cylchdaith Istio: analluogi cynwysyddion diffygiol

Iawn, mae gennym ni Circuit Breaker, beth sydd nesaf?

Felly, fe wnaethom weithredu cau awtomatig heb gyffwrdd â chod ffynhonnell y gwasanaethau eu hunain o gwbl. Gan ddefnyddio Circuit Breaker a'r weithdrefn Pool Ejection a ddisgrifir uchod, gallwn dynnu cynwysyddion brêc o'r pwll adnoddau nes eu bod yn dychwelyd i normal, a gwirio eu statws ar amlder penodedig - yn ein hesiampl, dyma ddau funud (paramedr cysguWindow).

Sylwch fod gallu cais i ymateb i wall 503 yn dal i gael ei osod ar lefel y cod ffynhonnell. Mae yna lawer o strategaethau ar gyfer defnyddio Circuit Breaker, yn dibynnu ar y sefyllfa.

Yn y post nesaf: Byddwn yn siarad am yr olrhain a monitro sydd eisoes wedi'u hymgorffori neu'n hawdd eu hychwanegu at Istio, yn ogystal â sut i gyflwyno gwallau i'r system yn fwriadol.

Ffynhonnell: hab.com

Ychwanegu sylw