Istio Circuit Breaker: betalkirina konteynerên xelet

Cejn bi dawî bûn û em bi posta xweya duyemîn di rêzenivîsa Xizmeta Mesh ya Istio de vedigerin.

Istio Circuit Breaker: betalkirina konteynerên xelet

Mijara îro Circuit Breaker e, ku ji bo endezyariya elektrîkê ya rûsî tê wergerandin ku tê wateya "vekêşana çerxê", bi zimanê hevpar - "derbirçêker". Tenê di Istio de ev makînek çerxek kurtkirî an zêde barkirî, lê konteynerên xelet qut nake.

Çawa ev divê bi awayekî îdeal bixebite

Dema ku mîkroxizmet ji hêla Kubernetes ve têne rêve kirin, mînakî di hundurê platforma OpenShift de, ew bixweber li gorî barkirinê jor û jêr dibin. Ji ber ku mîkroxizmet di nav potan de têne xebitandin, dikare li ser yek xala dawîn gelek mînakên mîkroxizmetek konteynirkirî hebin, û Kubernetes dê daxwazan rêve bike û hevsengiya di navbera wan de bar bike. Û - bi îdeal - ev hemî divê bêkêmasî bixebite.

Em ji bîr mekin ku mîkroxizmetên piçûk û domdar in. Ephemerality, ku li vir tê wateya hêsanbûna xuyang û windabûnê, pir caran kêm tê hesibandin. Jidayikbûn û mirina mînakek din a mîkroxizmetek di pod de tiştên pir hêvîdar in, OpenShift û Kubernetes vê yekê baş digirin, û her tişt pir baş dixebite - lê dîsa di teoriyê de.

Çawa ew bi rastî dixebite

Naha bifikire ku mînakek taybetî ya mîkroxizmetek, ango konteynir, bêkêmasî bûye: an bersiv nade (çewtiya 503), an jî, ya ne xweştir, ew bersiv dide, lê pir hêdî. Bi gotineke din, ew dişewite an bersivê nade daxwazan, lê bixweber ji hewzê nayê derxistin. Di vê rewşê de divê çi bê kirin? Ji nû ve biceribîne? Ma divê ez wê ji pilana rêvekirinê derxim? Û wateya "pir hêdî" çi ye - ew bi hejmaran çend e, û kî wan diyar dike? Dibe ku tenê wê bihêle û paşê dîsa biceribîne? Ger erê, çiqas paşê?

Pool Ejection li Istio çi ye

Û li vir Istio bi makîneyên xwe yên parastina Circuit Breaker, ku bi demkî konteynerên xelet ji hewza çavkaniyê rê û hevsengiya barkirinê derdixe, pêvajoya Derxistina Hewzê bi cîh tîne.

Bi karanîna stratejiyek vedîtina derveyî, Istio pêlên kevroşkê yên ku ji rêzê ne destnîşan dike û wan ji bo demek diyarkirî ji hewza çavkaniyê derdixe, ku jê re "pencereya xewê" tê gotin.

Ji bo ku nîşan bidin ka ev li Kubernetes-ê li ser platforma OpenShift çawa dixebite, werin em bi dîmenek mîkroxizmetên normal ên ku ji mînaka di depoyê de dixebitin dest pê bikin. Demos Pêşvebirê Red Hat. Li vir du pêlên me hene, v1 û v2, ku her yek konteynir dimeşîne. Dema ku qaîdeyên rêvekirina Istio nayên bikar anîn, Kubernetes rêça rêveçûna dor-robin bi hevsengî vedihewîne:

Istio Circuit Breaker: betalkirina konteynerên xelet

Amadekirina ji bo qezayê

Berî ku hûn Pool Ejection bikin, hûn hewce ne ku qaîdeyek rêveçûna Istio biafirînin. Ka em bibêjin ku em dixwazin daxwazan di navbera podan de bi rêjeya 50/50 belav bikin. Wekî din, em ê hejmara konteynerên v2 ji yek ji duyan zêde bikin, bi vî rengî:

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

Naha em rêgezek rêveçûnê saz dikin da ku seyrûsefer di navbera potan de bi rêjeya 50/50 were belav kirin.

Istio Circuit Breaker: betalkirina konteynerên xelet
Li vir encamek vê qaîdeyê çawa xuya dike:

Istio Circuit Breaker: betalkirina konteynerên xelet
Hûn dikarin xeletiyê bibînin ku ev ekran ne 50/50, lê 14:9 e, lê bi demê re rewş dê baştir bibe.

Çêkirina xeletiyekê

Naha em yek ji du konteynerên v2 neçalak bikin da ku me yek konteynir v1 saxlem, yek konteynir v2 saxlem û yek konteynir v2 xelet hebe:

Istio Circuit Breaker: betalkirina konteynerên xelet

Rastkirina kêşeyê

Ji ber vê yekê, konteynirek me ya xelet heye, û dem ji bo Pool Ejection e. Bi karanîna mîhengek pir hêsan, em ê vê konteynera têkçûyî 15 çirkeyan ji her pileyên rêvekirinê derxînin bi hêviya ku ew ê vegere rewşek saxlem (an ji nû ve bide destpêkirin an performansê sererast bike). Ya ku ev mîheng dixuye û encamên xebata wê ev e:

Istio Circuit Breaker: betalkirina konteynerên xelet
Istio Circuit Breaker: betalkirina konteynerên xelet
Wekî ku hûn dibînin, konteynera v2 ya têkçûyî êdî ji bo daxwazên rêvekirinê nayê bikar anîn ji ber ku ew ji hewzê hatî rakirin. Lê piştî 15 çirkeyan ew ê bixweber vegere hewzê. Bi rastî, me tenê destnîşan kir ka Pool Ejection çawa dixebite.

Werin em dest bi avakirina mîmarî bikin

Pool Ejection, digel kapasîteyên çavdêriyê yên Istio, dihêle hûn dest bi avakirina çarçoveyek ji bo veguheztina bixweberî konteynerên xeletî bikin da ku dem û xeletiyan kêm bikin, heke ne ji holê rakin.

NASA yek dirûşmek bi dengek bilind heye - Têkçû Ne Vebijarkek e, ku nivîskarê wê wekî derhênerê firînê tê hesibandin. Gene Kranz. Ew dikare bi rûsî wekî "Têkçû ne vebijarkek e" were wergerandin, û wateya li vir ev e ku heke têra we hebe her tişt dikare were xebitandin. Lêbelê, di jiyana rast de, têkçûn ne tenê diqewimin, ew neçar in, li her derê û di her tiştî de. Û meriv çawa di mijara mîkro-servisan de bi wan re mijûl dibe? Li gorî me, çêtir e ku meriv ne li ser îradeyê, lê li ser kapasîteyên konteyneran bispêre, Kubernetes, Red Hat OpenShiftû Istio.

Istio, wekî me li jor jî nivîsî, têgîna qutkeran, ku di cîhana laşî de xwe baş îsbat kiriye, pêk tîne. Mîna ku qutkerek elektrîkê beşa pirsgirêkê ya çerxekê qut dike, nermalava Istio Circuit Breaker pêwendiya di navbera herikîna daxwazan û konteynirek pirsgirêkê de vedike dema ku tiştek di xala dawiyê de xelet be, mînakî, dema ku server têk çû an dest pê kir. hêdî be.

Digel vê yekê, di rewşa duyemîn de tenê bêtir pirsgirêk hene, ji ber ku frenên yek konteynerê ne tenê dibe sedema derengmayîna karûbarên gihîştina wê û, di encamê de, performansa pergalê bi tevahî kêm dike, lê di heman demê de dubare dike. daxwaza karûbarek jixwe hêdî-hêdî dike, ku tenê rewşê xirab dike.

Circuit Breaker di teoriyê de

Circuit Breaker proxy e ku herikîna daxwazan ji bo xalek dawîn kontrol dike. Dema ku ev xal ji xebatê raweste an jî, li gorî mîhengên diyarkirî, dest bi hêdîbûnê dike, proxy pêwendiya bi konteynerê re qut dike. Dûv re seyrûsefer ber bi konteynerên din ve tê veguheztin, tenê ji ber hevsengiya barkirinê. Têkilî ji bo pencereyek xewê ya diyar vekirî dimîne, bêje du hûrdeman, û dûv re nîv vekirî tê hesibandin. Hewldanek ji bo şandina daxwaziya paşîn rewşa pêwendiyê bêtir diyar dike. Ger her tişt bi karûbarê re baş be, girêdan vedigere rewşa xebatê û dîsa girtî dibe. Ger dîsa jî tiştek di karûbarê de xelet be, girêdan tê qut kirin û pencereya xewê ji nû ve tê çalak kirin. Li vir diagramek rewşa sadekirî ya Circuit Breaker çawa xuya dike:

Istio Circuit Breaker: betalkirina konteynerên xelet
Girîng e ku li vir were zanîn ku ev hemî di asta mîmariya pergalê de diqewime. Ji ber vê yekê di demekê de hûn neçar in ku serîlêdanên xwe hîn bikin ku bi Circuit Breaker re bixebitin, wek mînak di bersivê de nirxek xwerû peyda bikin an, heke gengaz be, paşguhkirina hebûna karûbarê. Ji bo vê yekê qalibek behrê tê bikar anîn, lê ew li derveyî çarçoweya vê gotarê ye.

Circuit Breaker di pratîkê de

Mînakî, em ê du guhertoyên mîkroxizmeta xweya pêşniyarê li ser OpenShift bimeşînin. Guhertoya 1 dê baş bixebite, lê di v2 de em ê di derengiyê de ava bikin da ku hêdîbûnên li ser serverê simul bikin. Ji bo dîtina encaman, amûrê bikar bînin dorpêçkirin:

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

Istio Circuit Breaker: betalkirina konteynerên xelet
Her tişt xuya dike ku dixebite, lê bi çi bihayê? Di nihêrîna pêşîn de, 100% hebûna me heye, lê ji nêz ve lê binêre - dirêjahiya danûstendinê ya herî zêde bi qasî 12 saniyeyan e. Ev bi awayekî eşkere astengiyek e û divê were berfireh kirin.

Ji bo vê yekê, em ê Istio bikar bînin da ku bangên li konteynerên hêdî ji holê rakin. Bi karanîna Circuit Breaker konfigurasyona têkildar bi vî rengî xuya dike:

Istio Circuit Breaker: betalkirina konteynerên xelet
Rêza paşîn a bi parametreya httpMaxRequestsPerConnection nîşan dide ku dema ku hewl bidin ku ji bilî ya heyî pêwendiyek din - a duyemîn - çêbikin, pêwendiya pê re were qut kirin. Ji ber ku konteynera me karûbarek hêdî simul dike, rewşên weha dê bi awayekî periyodîk derkevin holê, û dûv re Istio dê xeletiyek 503 vegere, lê ya ku dorpêç dê nîşan bide ev e:

Istio Circuit Breaker: betalkirina konteynerên xelet

Baş e, me Circuit Breaker heye, paşê çi ye?

Ji ber vê yekê, me qutkirina otomatîkî bêyî ku tu carî dest bi koda çavkaniyê ya karûbaran bike pêk anî. Bi karanîna Circuit Breaker û Pêvajoya Derxistina Hewzê ku li jor hatî destnîşan kirin, em dikarin konteynerên frensê ji hewza çavkaniyê derxînin heya ku ew vegerin rewşa normal, û rewşa wan bi frekansek diyarkirî kontrol bikin - di mînaka me de, ev du hûrdeman e (parametreya pencereya xewê).

Bala xwe bidinê ku şiyana serîlêdanek ku bersivê bide xeletiyek 503 hîn jî di asta koda çavkaniyê de ye. Gelek stratejiyên ji bo karanîna Circuit Breaker hene, li gorî rewşê.

Di posta din de: Em ê li ser şopandin û şopandina ku ji berê ve hatî çêkirin an bi hêsanî li Istio hatî zêdekirin, û her weha meriv çawa bi mebest xeletiyan têxe pergalê biaxivin.

Source: www.habr.com

Add a comment