Nota. transl.: L-ewwel parti Din is-serje kienet iddedikata biex tintroduċi l-kapaċitajiet ta’ Istio u turihom fl-azzjoni. Issa se nitkellmu dwar aspetti aktar kumplessi tal-konfigurazzjoni u l-użu ta 'din il-malja tas-servizz, u b'mod partikolari, dwar ir-rotot irfinat u l-ġestjoni tat-traffiku tan-netwerk.
Infakkruk ukoll li l-artiklu juża konfigurazzjonijiet (manifesti għal Kubernetes u Istio) mir-repożitorju istio-ħakma.
Ġestjoni tat-Traffiku
B'Istio, jidhru kapaċitajiet ġodda fil-cluster biex jipprovdu:
Ibbilanċjar tat-tagħbija: sempliċi u konsistenti, ibbażata fuq hashes;
Irkupru wara waqgħat: timeouts, tentattivi mill-ġdid, circuit breakers;
Iddaħħal difetti: dewmien, talbiet waqgħu, eċċ.
Hekk kif l-artiklu jkompli, dawn il-kapaċitajiet se jiġu illustrati bl-użu tal-applikazzjoni magħżula bħala eżempju u kunċetti ġodda se jiġu introdotti tul it-triq. L-ewwel kunċett bħal dan se jkun DestinationRules(jiġifieri regoli dwar ir-riċevitur tat-traffiku/talbiet - madwar trad.), li bl-għajnuna tagħha nattivaw l-ittestjar A/B.
Testjar A/B: DestinationRules fil-prattika
L-ittestjar A/B jintuża f'każijiet fejn hemm żewġ verżjonijiet ta 'applikazzjoni (ġeneralment huma viżwalment differenti) u m'aħniex 100% ċerti liema waħda se ttejjeb l-esperjenza tal-utent. Għalhekk, inħaddmu ż-żewġ verżjonijiet simultanjament u niġbru metriċi.
Biex tuża t-tieni verżjoni tal-frontend, meħtieġa biex turi l-ittestjar A/B, mexxi l-kmand li ġej:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
Il-manifest tal-iskjerament għall-verżjoni ħadra jvarja f'żewġ postijiet:
L-immaġni hija bbażata fuq tikketta differenti - istio-green,
Il-miżwed għandhom tikketta version: green.
Peress li ż-żewġ skjeramenti għandhom tikketta app: sa-frontend,talbiet mibgħuta minn servizz virtwali sa-external-services għas-servizz sa-frontend, se tiġi ridiretta lejn l-istanzi kollha tagħha u t-tagħbija titqassam permezz algoritmu round-robin, li se jwassal għas-sitwazzjoni li ġejja:
Il-fajls mitluba ma nstabux
Dawn il-fajls ma nstabux minħabba li huma msemmija b'mod differenti f'verżjonijiet differenti tal-applikazzjoni. Ejja niżguraw minn dan:
Dan ifisser li index.html, li titlob verżjoni waħda ta 'fajls statiċi, tista' tintbagħat mill-load balancer lil imżiewed li għandhom verżjoni differenti, fejn, għal raġunijiet ovvji, tali fajls ma jeżistux. Għalhekk, sabiex l-applikazzjoni taħdem, irridu nistabbilixxu restrizzjoni: "l-istess verżjoni tal-applikazzjoni li nnotifikat index.html għandha sservi talbiet sussegwenti".
Se naslu hemm b'ibbilanċjar konsistenti tat-tagħbija ibbażat fuq il-hash (Ibbilanċjar Konsistenti tat-Tagħbija tal-Hash)... F'dan il-każ talbiet mill-istess klijent jintbagħtu lill-istess istanza backend, li għalih tintuża proprjetà predefinita - pereżempju, header HTTP. Implimentat bl-użu ta 'DestinationRules.
Regoli tad-Destinazzjoni
Wara Servizz Virtwali bagħtet talba lis-servizz mixtieq, billi tuża DestinationRules nistgħu niddefinixxu politiki li se jiġu applikati għat-traffiku ddestinat għal każijiet ta’ dan is-servizz:
Ġestjoni tat-traffiku bir-riżorsi Istio
Innota: L-impatt tar-riżorsi Istio fuq it-traffiku tan-netwerk huwa ppreżentat hawn b'mod li huwa faċli biex jinftiehem. Biex tkun preċiża, id-deċiżjoni dwar liema istanza tintbagħat it-talba hija meħuda mill-Mibgħut fil-Ingress Gateway konfigurat fis-CRD.
Bir-Regoli tad-Destinazzjoni, nistgħu nikkonfiguraw l-ibbilanċjar tat-tagħbija biex nużaw hashes konsistenti u niżguraw li l-istess istanza tas-servizz tirrispondi għall-istess utent. Il-konfigurazzjoni li ġejja tippermettilek tikseb dan (destinationrule-sa-frontend.yaml):
Innota: Biex iżżid valuri differenti fl-intestatura u tittestja r-riżultati direttament fil-browser, tista 'tuża din l-estensjoni għal Chrome (Jew ma’ dan għal Firefox - madwar. trad.).
B'mod ġenerali, DestinationRules għandha aktar kapaċitajiet fil-qasam tal-ibbilanċjar tat-tagħbija - iċċekkja għad-dettalji dokumentazzjoni uffiċjali.
Qabel ma nistudjaw aktar VirtualService, ejja nħassru l-"verżjoni ħadra" tal-applikazzjoni u r-regola tad-direzzjoni tat-traffiku korrispondenti billi tħaddem il-kmandi li ġejjin:
Dellijiet (“ilqugħ”) jew Mirroring (“mirroring”) użat f'każijiet fejn irridu nittestjaw bidla fil-produzzjoni mingħajr ma naffettwaw l-utenti finali: biex nagħmlu dan, nidduplikaw it-talbiet ("mera") għat-tieni istanza fejn saru l-bidliet mixtieqa, u nħarsu lejn il-konsegwenzi. Fi kliem sempliċi, dan huwa meta l-kollega tiegħek jagħżel l-aktar kwistjoni kritika u jagħmel talba ta 'ġibda fil-forma ta' daqs kbir ta 'ħmieġ li ħadd ma jista' fil-fatt jirrevediha.
Biex tittestja dan ix-xenarju fl-azzjoni, ejja noħolqu t-tieni istanza ta 'SA-Logic bi bugs (buggy) billi tħaddem il-kmand li ġej:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
U issa ejja tmexxi l-kmand biex niżguraw li l-istanzi kollha ma app=sa-logic Għandhom ukoll tikketti bil-verżjonijiet korrispondenti:
Servizz sa-logic jimmira l-imżiewed b'tikketta app=sa-logic, għalhekk it-talbiet kollha jitqassmu fost l-istanzi kollha:
... imma rridu li t-talbiet jintbagħtu lil istanzi v1 u jiġu riflessi f'istanzi v2:
Aħna se niksbu dan permezz VirtualService flimkien ma 'DestinationRule, fejn ir-regoli se jiddeterminaw is-sottogruppi u r-rotot tal-VirtualService għal subsett speċifiku.
Definizzjoni ta' Subsets fir-Regoli tad-Destinazzjoni
Ospitanti (host) jiddefinixxi li din ir-regola tapplika biss għal każijiet meta r-rotta tmur lejn is-servizz sa-logic;
Titoli (name) is-sottosettijiet jintużaw meta jiġu r-rotta għal istanzi ta' subsett;
Tikketta (label) jiddefinixxi l-pari ewlenin-valur li l-istanzi jridu jaqblu biex isiru parti mis-subsett.
Applika l-konfigurazzjoni bil-kmand li ġej:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created
Issa li s-sottogruppi huma definiti, nistgħu nimxu 'l quddiem u kkonfiguraw is-Servizz Virtwali biex japplikaw regoli għal talbiet għal sa-logic sabiex dawn:
L-ebda spjegazzjoni meħtieġa hawn, allura ejja narawha fl-azzjoni:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
Ejja nżidu t-tagħbija billi nsejħu l-kmand li ġej:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Ejja nħarsu lejn ir-riżultati fi Grafana, fejn tista' tara li l-verżjoni bil-bugs (buggy) jirriżulta f'falliment għal ~60% tat-talbiet, iżda l-ebda wieħed minn dawn il-fallimenti ma jaffettwa lill-utenti finali peress li huma mwieġba minn servizz li qed jaħdem.
Risposti b'suċċess ta 'verżjonijiet differenti tas-servizz sa-logic
Hawnhekk l-ewwel rajna kif VirtualService jiġi applikat għall-Mibgħuta tas-servizzi tagħna: meta sa-web-app jagħmel talba lil sa-logic, jgħaddi mis-sidecar Envoy, li - permezz VirtualService - huwa kkonfigurat biex iwassal it-talba lejn is-subsett v1 u jirrifletti t-talba għas-subsett v2 tas-servizz sa-logic.
Naf, forsi diġà taħseb li s-Servizzi Virtwali huma sempliċi. Fit-taqsima li jmiss, aħna ser nespandu fuq dan billi ngħidu li huma wkoll tassew kbar.
It-tnedija tal-Kanarji
Canary Deployment huwa l-proċess tat-tnedija ta' verżjoni ġdida ta' applikazzjoni għal numru żgħir ta' utenti. Jintuża biex jiġi żgurat li ma jkun hemm l-ebda problemi fir-rilaxx u biss wara dan, li diġà jkun kunfidenti fil-kwalità (tal-rilaxx) tiegħu, iqassamha lil utenti oħra.оudjenza akbar.
Biex nuru t-tnedija tal-Canary, aħna se nkomplu naħdmu b'subsett buggy у sa-logic.
Ejja ma naħlux ħin fuq trifles u immedjatament tibgħat 20% tal-utenti għall-verżjoni bi bugs (dan se jirrappreżenta t-tnedija tal-kanarji tagħna), u l-80% li jifdal għas-servizz normali. Biex tagħmel dan, uża s-Servizz Virtwali li ġej (sa-logic-subsets-canary-vs.yaml):
... u immedjatament naraw li xi talbiet iwasslu għal fallimenti:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
VirtualServices jippermettu t-tnedija tal-kanarji: F'dan il-każ, naqqset l-impatt potenzjali tal-kwistjonijiet għal 20% tal-bażi tal-utenti. Sabiħ! Issa, f'kull każ meta ma nkunux ċerti mill-kodiċi tagħna (fi kliem ieħor - dejjem...), nistgħu nużaw ir-riflessi u t-tnedija tal-kanarji.
Timeouts u tentattivi mill-ġdid
Iżda bugs mhux dejjem jispiċċaw fil-kodiċi. Fil-lista minn "8 Kunċetti żbaljati dwar Kompjuter imqassam"Fl-ewwel post hemm it-twemmin żbaljat li "in-netwerk huwa affidabbli." Fir-realtà n-netwerk ebda affidabbli, u għal din ir-raġuni għandna bżonn timeouts (timeouts) u jerġa' jipprova (jipprova mill-ġdid).
Għal dimostrazzjoni aħna se nkomplu nużaw l-istess verżjoni problema sa-logic (buggy), u se nissimulaw in-nuqqas ta 'affidabbiltà tan-netwerk b'fallimenti każwali.
Ħalli s-servizz tagħna bil-bugs ikollu 1/3 ċans li jieħu wisq żmien biex jirrispondi, 1/3 ċans li jispiċċa bi Żball Intern tas-Server, u 1/3 ċans li jirritornaw il-paġna b'suċċess.
Biex intaffu l-impatt ta’ problemi bħal dawn u nagħmlu l-ħajja aħjar għall-utenti, nistgħu:
żid timeout jekk is-servizz jieħu aktar minn 8 sekondi biex jirrispondi,
Il-timeout għat-talba huwa ssettjat għal 8 sekondi;
It-talbiet jerġgħu jiġu ppruvati 3 darbiet;
U kull tentattiv jitqies li ma jirnexxix jekk il-ħin tar-rispons jaqbeż it-3 sekondi.
Din hija ottimizzazzjoni minħabba li l-utent mhux se jkollu jistenna aktar minn 8 sekondi u se nagħmlu tliet tentattivi ġodda biex niksbu rispons f'każ ta 'fallimenti, u jżidu ċ-ċans ta' rispons ta 'suċċess.
Applika l-konfigurazzjoni aġġornata bil-kmand li ġej:
U iċċekkja fil-graffs ta' Grafana li n-numru ta' tweġibiet ta' suċċess żdied hawn fuq:
Titjib fl-istatistika tar-rispons b'suċċess wara li żżid timeouts u tentattivi mill-ġdid
Qabel ma tgħaddi għat-taqsima li jmiss (jew aħjar, għall-parti li jmiss tal-artiklu, għax f'dan mhux se jkun hemm aktar esperimenti prattiċi - approx. transl.), ħassar sa-logic-buggy u VirtualService billi tħaddem il-kmandi li ġejjin:
Qed nitkellmu dwar żewġ mudelli importanti fl-arkitettura tal-mikroservizz li jippermettulek tikseb l-awto-irkupru (awto-fejqan) servizzi.
Circuit Interruttur("circuit breaker") użat biex jintemm talbiet li jaslu f'istanza ta' servizz li huwa meqjus mhux tajjeb għas-saħħa u terġa' tiġi restawrata filwaqt li t-talbiet tal-klijenti jiġu ridiretti lejn każijiet b'saħħithom ta' dak is-servizz (li jżid il-perċentwal ta' tweġibiet b'suċċess). (Nota: Tista' ssib deskrizzjoni aktar dettaljata tal-mudell, pereżempju, hawn.)
Paratija("partizzjoni") iżola fallimenti fis-servizz milli jaffettwaw is-sistema kollha. Pereżempju, is-Servizz B jinkiser u servizz ieħor (il-klijent tas-Servizz B) jagħmel talba lis-Servizz B, li jġiegħlu jeżawrixxi l-grupp tal-ħajt tiegħu u ma jkunx jista’ jservi talbiet oħra (anki jekk ma jkunux mis-Servizz B). (Nota: Tista' ssib deskrizzjoni aktar dettaljata tal-mudell, pereżempju, hawn.)
Se nħalli barra d-dettalji tal-implimentazzjoni ta 'dawn ix-xejriet minħabba li huma faċli biex jinstabu fihom dokumentazzjoni uffiċjali, u nixtieq ukoll verament nuri l-awtentikazzjoni u l-awtorizzazzjoni, li se jiġu diskussi fil-parti li jmiss tal-artikolu.