Nodyn. traws.: Rhan gyntaf Roedd y gyfres hon yn ymroddedig i gyflwyno galluoedd Istio a'u harddangos ar waith. Nawr byddwn yn siarad am agweddau mwy cymhleth ar ffurfweddiad a defnydd y rhwyll gwasanaeth hwn, ac yn benodol, am lwybrau manwl gywir a rheoli traffig rhwydwaith.
Rydym hefyd yn eich atgoffa bod yr erthygl yn defnyddio ffurfweddiadau (maniffestau ar gyfer Kubernetes ac Istio) o'r ystorfa istio-feistrolaeth.
rheoli traffig
Gydag Istio, mae galluoedd newydd yn ymddangos yn y clwstwr i ddarparu:
Cydbwyso llwyth: syml a chyson, yn seiliedig ar hashes;
Adferiad ar ôl cwympo: goramser, ail-geisio, torwyr cylched;
Mewnosod diffygion: oedi, ceisiadau a ollyngwyd, ac ati.
Wrth i'r erthygl barhau, bydd y galluoedd hyn yn cael eu darlunio gan ddefnyddio'r cymhwysiad a ddewiswyd fel enghraifft a bydd cysyniadau newydd yn cael eu cyflwyno ar hyd y ffordd. Y cysyniad cyntaf o'r fath fydd DestinationRules(h.y. rheolau ynghylch y sawl sy’n derbyn traffig/ceisiadau - tua. transl.), gyda chymorth yr ydym yn actifadu profion A/B.
Profi A/B: Rheolau Cyrchfan ar waith
Defnyddir profion A/B mewn achosion lle mae dwy fersiwn o raglen (fel arfer maent yn weledol wahanol) ac nid ydym 100% yn siŵr pa un fydd yn gwella profiad y defnyddiwr. Felly, rydym yn rhedeg y ddwy fersiwn ar yr un pryd ac yn casglu metrigau.
I ddefnyddio ail fersiwn y frontend, sy'n ofynnol ar gyfer dangos profion A / B, rhedwch y gorchymyn canlynol:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
Mae'r maniffest lleoli ar gyfer y fersiwn werdd yn wahanol mewn dau le:
Mae'r ddelwedd yn seiliedig ar dag gwahanol - istio-green,
Mae label ar godennau version: green.
Gan fod gan y ddau ddefnydd label app: sa-frontend, ceisiadau wedi'u cyfeirio gan wasanaeth rhithwir sa-external-services am wasanaeth sa-frontend, yn cael ei ailgyfeirio i'w holl achosion a bydd y llwyth yn cael ei ddosbarthu drwodd algorithm rownd-robin, a fydd yn arwain at y sefyllfa ganlynol:
Ni ddaethpwyd o hyd i'r ffeiliau y gofynnwyd amdanynt
Ni ddaethpwyd o hyd i'r ffeiliau hyn oherwydd eu bod wedi'u henwi'n wahanol mewn gwahanol fersiynau o'r cais. Gadewch i ni wneud yn siŵr o hyn:
Mae hyn yn golygu bod index.html, yn gofyn am un fersiwn o ffeiliau statig, gellir ei anfon gan y balancer llwyth i godennau sydd â fersiwn wahanol, lle, am resymau amlwg, nid yw ffeiliau o'r fath yn bodoli. Felly, er mwyn i’r cais weithio, mae angen i ni osod cyfyngiad: “dylai'r un fersiwn o'r cais a gyflwynwyd index.html gyflwyno ceisiadau dilynol'.
Byddwn yn cyrraedd yno gyda chydbwyso llwyth cyson yn seiliedig ar hash (Cydbwyso Llwyth Hash Cyson). Yn yr achos hwn mae ceisiadau gan yr un cleient yn cael eu hanfon i'r un enghraifft wrth gefn, y mae eiddo rhagddiffiniedig yn cael ei ddefnyddio ar ei gyfer - er enghraifft, pennawd HTTP. Wedi'i weithredu gan ddefnyddio Rheolau Cyrchfan.
Rheolau Cyrchfan
Ar ôl Gwasanaeth Rhithwir anfon cais at y gwasanaeth a ddymunir, gan ddefnyddio DestinationRules gallwn ddiffinio polisïau a fydd yn cael eu cymhwyso i draffig a fwriedir ar gyfer achosion o'r gwasanaeth hwn:
Rheoli traffig gydag adnoddau Istio
Nodyn: Cyflwynir yma effaith adnoddau Istio ar draffig rhwydwaith mewn ffordd hawdd ei deall. I fod yn fanwl gywir, y Llysgennad ym Mhorth Ingress sydd wedi'i ffurfweddu yn y CRD sy'n penderfynu i ba achos y dylid anfon y cais.
Gyda Rheolau Cyrchfan, gallwn ffurfweddu cydbwyso llwythi i ddefnyddio hashes cyson a sicrhau bod yr un enghraifft gwasanaeth yn ymateb i'r un defnyddiwr. Mae'r ffurfweddiad canlynol yn caniatáu ichi gyflawni hyn (cyrchfanrule-sa-frontend.yaml):
Nodyn: I ychwanegu gwerthoedd gwahanol yn y pennawd a phrofi'r canlyniadau yn uniongyrchol yn y porwr, gallwch chi ddefnyddio yr estyniad hwn i Chrome (Neu gyda hyn ar gyfer Firefox - tua. cyfieithu.).
Yn gyffredinol, mae gan DestinationRules fwy o alluoedd ym maes cydbwyso llwyth - gwiriwch am fanylion yn dogfennaeth swyddogol.
Cyn astudio VirtualService ymhellach, gadewch i ni ddileu “fersiwn werdd” y cais a'r rheol cyfeiriad traffig cyfatebol trwy redeg y gorchmynion canlynol:
Cysgodi (“gwarchod”) neu Drychio (“drych”) a ddefnyddir mewn achosion lle rydym am brofi newid mewn cynhyrchiad heb effeithio ar ddefnyddwyr terfynol: i wneud hyn, rydym yn dyblygu ceisiadau (“drych”) i ail achos lle mae’r newidiadau dymunol wedi’u gwneud, ac yn edrych ar y canlyniadau. Yn syml, dyma pan fydd eich cydweithiwr yn dewis y mater mwyaf hanfodol ac yn gwneud cais tynnu ar ffurf lwmp mor enfawr o faw fel na all neb ei adolygu mewn gwirionedd.
I brofi'r senario hwn ar waith, gadewch i ni greu ail enghraifft o SA-Logic gyda chwilod (buggy) trwy redeg y gorchymyn canlynol:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
Ac yn awr gadewch i ni redeg y gorchymyn i wneud yn siŵr bod pob achos gyda app=sa-logic Mae ganddyn nhw hefyd labeli gyda'r fersiynau cyfatebol:
Gwasanaeth sa-logic targedu codennau gyda label app=sa-logic, felly bydd pob cais yn cael ei ddosbarthu ymhlith pob achos:
... ond rydym am i geisiadau gael eu hanfon i achosion v1 a'u hadlewyrchu i achosion v2:
Byddwn yn cyflawni hyn trwy VirtualService ar y cyd â DestinationRule, lle bydd y rheolau yn pennu is-setiau a llwybrau'r Gwasanaeth Rhithwir i is-set benodol.
Nid oes angen esboniad yma, felly gadewch i ni ei weld ar waith:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
Gadewch i ni ychwanegu'r llwyth trwy ffonio'r gorchymyn canlynol:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Gadewch i ni edrych ar y canlyniadau yn Grafana, lle gallwch weld bod y fersiwn gyda chwilod (buggy) yn arwain at fethiant ar gyfer ~60% o geisiadau, ond nid yw'r un o'r methiannau hyn yn effeithio ar ddefnyddwyr terfynol gan fod gwasanaeth rhedeg yn ymateb iddynt.
Ymatebion llwyddiannus o wahanol fersiynau o'r gwasanaeth sa-logic
Yma gwelsom gyntaf sut mae Gwasanaeth Rhithwir yn cael ei gymhwyso i Genhadon ein gwasanaethau: pryd sa-web-app yn gwneud cais i sa-logic, mae'n mynd trwy'r Cennad car ochr, sydd - trwy VirtualService - wedi'i ffurfweddu i gyfeirio'r cais i is-set v1 ac adlewyrchu'r cais i is-set v2 y gwasanaeth sa-logic.
Gwn, efallai eich bod eisoes yn meddwl bod Gwasanaethau Rhithwir yn syml. Yn yr adran nesaf, byddwn yn ymhelaethu ar hynny drwy ddweud eu bod nhw hefyd yn wirioneddol wych.
Rholiadau Dedwydd
Canary Deployment yw'r broses o gyflwyno fersiwn newydd o raglen i nifer fach o ddefnyddwyr. Fe'i defnyddir i sicrhau nad oes unrhyw broblemau yn y datganiad a dim ond ar ôl hynny, eisoes yn hyderus yn ei ansawdd (rhyddhau), ei ddosbarthu i ddefnyddwyr eraill.оcynulleidfa fwy.
Er mwyn dangos bod caneri'n cael ei gyflwyno, byddwn yn parhau i weithio gydag is-set buggy у sa-logic.
Gadewch i ni beidio â gwastraffu amser ar drifles ac anfon 20% o ddefnyddwyr i'r fersiwn gyda chwilod ar unwaith (bydd hyn yn cynrychioli ein cyflwyniad caneri), a'r 80% sy'n weddill i'r gwasanaeth arferol. I wneud hyn, defnyddiwch y Gwasanaeth Rhithwir canlynol (sa-logic-is-setiau-caneri-vs.yaml):
... a byddwn yn gweld ar unwaith bod rhai ceisiadau yn arwain at fethiannau:
$ 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
Mae Gwasanaethau Rhithwir yn galluogi cyflwyno caneris: Yn yr achos hwn, rydym wedi lleihau effaith bosibl y problemau i 20% o'r sylfaen defnyddwyr. Gwych! Nawr, ym mhob achos pan nad ydym yn siŵr o'n cod (mewn geiriau eraill - bob amser ...), gallwn ddefnyddio adlewyrchu a chyflwyno caneri.
Seibiant ac ailgeisiadau
Ond nid yw bygiau bob amser yn y pen draw yn y cod. Yn y rhestr o "8 Camsyniadau am Gyfrifiadura Dosranedig“Yn y lle cyntaf yw’r gred gyfeiliornus bod “y rhwydwaith yn ddibynadwy.” Mewn gwirionedd y rhwydwaith dim dibynadwy, ac am y rheswm hwn mae angen seibiannau arnom (seibiannau) ac yn ail geisio (ailgeisio).
Ar gyfer arddangosiad byddwn yn parhau i ddefnyddio'r un fersiwn problem sa-logic (buggy), a byddwn yn efelychu annibynadwyedd y rhwydwaith gyda methiannau ar hap.
Gadewch i'n gwasanaeth gyda chwilod gael siawns 1/3 o gymryd gormod o amser i ymateb, siawns 1/3 o ddod i ben gyda Gwall Gweinydd Mewnol, a siawns 1/3 o ddychwelyd y dudalen yn llwyddiannus.
Er mwyn lliniaru effaith problemau o'r fath a gwneud bywyd yn well i ddefnyddwyr, gallwn:
ychwanegu terfyn amser os bydd y gwasanaeth yn cymryd mwy nag 8 eiliad i ymateb,
Mae'r terfyn amser ar gyfer y cais wedi'i osod i 8 eiliad;
Ceisiadau yn cael eu hailadrodd 3 gwaith;
Ac ystyrir bod pob ymgais yn aflwyddiannus os yw'r amser ymateb yn fwy na 3 eiliad.
Mae hwn yn optimeiddio oherwydd ni fydd yn rhaid i'r defnyddiwr aros mwy nag 8 eiliad a byddwn yn gwneud tri ymgais newydd i gael ymateb rhag ofn y bydd methiannau, gan gynyddu'r siawns o ymateb llwyddiannus.
Cymhwyswch y ffurfweddiad wedi'i ddiweddaru gyda'r gorchymyn canlynol:
A gwiriwch yn y graffiau Grafana fod nifer yr ymatebion llwyddiannus wedi cynyddu uchod:
Gwelliannau mewn ystadegau ymateb llwyddiannus ar ôl ychwanegu seibiannau ac ailgeisiadau
Cyn symud ymlaen i'r adran nesaf (neu yn hytrach, i ran nesaf yr erthygl, oherwydd yn hyn ni fydd mwy o arbrofion ymarferol - tua. transl.), dileu sa-logic-buggy a VirtualService trwy redeg y gorchmynion canlynol:
Rydym yn sôn am ddau batrwm pwysig mewn pensaernïaeth microwasanaeth sy'n eich galluogi i gyflawni hunan-adferiad (hunan-iachau) gwasanaethau.
Torrwr cylched("torrwr cylched") yn cael ei ddefnyddio i derfynu ceisiadau sy’n dod i enghraifft o wasanaeth sy’n cael ei ystyried yn afiach a’i adfer tra bod ceisiadau cleientiaid yn cael eu hailgyfeirio i achosion iach o’r gwasanaeth hwnnw (sy’n cynyddu canran yr ymatebion llwyddiannus). (Sylwer: Gellir dod o hyd i ddisgrifiad manylach o'r patrwm, er enghraifft, yma.)
Swmp pen("rhaniad") yn ynysu methiannau gwasanaeth rhag effeithio ar y system gyfan. Er enghraifft, mae Gwasanaeth B wedi torri ac mae gwasanaeth arall (cleient Gwasanaeth B) yn gwneud cais i Wasanaeth B, gan achosi iddo ddisbyddu ei gronfa edau a methu â gwasanaethu ceisiadau eraill (hyd yn oed os nad ydynt o Wasanaeth B). (Sylwer: Gellir dod o hyd i ddisgrifiad manylach o'r patrwm, er enghraifft, yma.)
Byddaf yn hepgor manylion gweithredu’r patrymau hyn oherwydd eu bod yn hawdd dod o hyd iddynt dogfennaeth swyddogol, ac rwyf hefyd wir eisiau dangos dilysu ac awdurdodi, a fydd yn cael ei drafod yn rhan nesaf yr erthygl.