Remak. trad.: Pati nan premye Seri sa a te dedye a entwodwi kapasite Istio ak demontre yo nan aksyon. Koulye a, nou pral pale sou aspè ki pi konplèks nan konfigirasyon an ak itilizasyon may sèvis sa a, ak an patikilye, sou routage tise byen branche ak jesyon trafik rezo a.
Nou raple w tou ke atik la sèvi ak konfigirasyon (manifest pou Kubernetes ak Istio) nan repozitwa a. istio-mesi.
jesyon trafik
Avèk Istio, nouvo kapasite parèt nan gwoup la pou bay:
Routage demann dinamik: lansman Canary, tès A/B;
Balanse chaj: senp ak konsistan, ki baze sou hash;
Kòm atik la ap kontinye, kapasite sa yo pral ilistre lè l sèvi avèk aplikasyon an chwazi kòm yon egzanp ak nouvo konsèp yo pral prezante sou wout la. Premye konsèp sa yo pral DestinationRules(sa vle di règ sou moun k ap resevwa trafik/demann - apeprè tradiksyon), avèk èd nan ki nou aktive tès A / B.
Tès A/B: Règ Destinasyon an pratik
Tès A/B yo itilize nan ka kote gen de vèsyon nan yon aplikasyon (anjeneral yo vizyèlman diferan) epi nou pa 100% sèten ki youn pral amelyore eksperyans itilizatè a. Se poutèt sa, nou kouri tou de vèsyon an menm tan ak kolekte mezi.
Pou deplwaye dezyèm vèsyon an nan entèfas, ki nesesè pou demontre tès A/B, kouri lòd sa a:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
Manifest deplwaman pou "vèsyon an vèt" diferan nan de kote:
Imaj la baze sou yon tag diferan - istio-green,
Gous yo gen yon etikèt version: green.
Depi tou de deplwaman yo gen yon etikèt app: sa-frontend,demann yo voye pa sèvis vityèl sa-external-services pou sèvis sa-frontend, yo pral redireksyon sou tout ka li yo epi yo pral distribye chaj la nan round-robin algorithm, ki pral mennen nan sitiyasyon sa a:
Dosye yo mande yo pa jwenn
Fichye sa yo pa te jwenn paske yo rele yo yon fason diferan nan diferan vèsyon aplikasyon an. Ann asire w ke sa a:
Sa vle di sa index.html, mande yon vèsyon nan fichye estatik, yo ka voye balans chaj la nan gous ki gen yon vèsyon diferan, kote, pou rezon evidan, dosye sa yo pa egziste. Se poutèt sa, pou aplikasyon an fonksyone, nou bezwen mete yon restriksyon: "menm vèsyon aplikasyon an ki te sèvi index.html ta dwe sèvi demann ki vin apre yo'.
Nou pral rive la ak balanse chaj konsistan ki baze sou hash (Balans chaj konsistan Hash)... Nan ka sa demann ki soti nan menm kliyan an yo voye nan menm egzanp backend la, pou yo itilize yon pwopriyete predefini - pou egzanp, yon header HTTP. Aplike lè l sèvi avèk DestinationRules.
Règ Destinasyon
Apre VirtualService voye yon demann bay sèvis la vle, lè l sèvi avèk DestinationRules nou ka defini règleman ki pral aplike nan trafik ki destine pou egzanp sèvis sa a:
Jesyon trafik ak resous Istio
Note: Enpak resous Istio yo sou trafik rezo a prezante isit la nan yon fason ki fasil pou konprann. Pou yo ka presi, desizyon an sou ki egzanp yo voye demann lan se pa Envoy la pran nan Ingress Gateway konfigirasyon nan CRD la.
Avèk Règ Destinasyon, nou ka configured balans chaj pou itilize hash ki konsistan epi asire ke menm egzanp sèvis la reponn a menm itilizatè a. Konfigirasyon sa a pèmèt ou reyalize sa a (destinationrule-sa-frontend.yaml):
Note: Pou ajoute valè diferan nan header la epi teste rezilta yo dirèkteman nan navigatè a, ou ka itilize ekstansyon sa a nan Chrome (Oswa ak sa pou Firefox - approx. trad.).
An jeneral, DestinationRules gen plis kapasite nan zòn nan balans chaj - tcheke pou plis detay nan dokiman ofisyèl yo.
Anvan ou etidye VirtualService plis, ann retire "vèsyon an vèt" aplikasyon an ak règ korespondan direksyon trafik la nan kouri kòmandman sa yo:
Lonbraj ("pwoteksyon") oswa Mirroring ("mirroir") itilize nan ka kote nou vle teste yon chanjman nan pwodiksyon san yo pa afekte itilizatè fen yo: pou fè sa, nou kopi ("glas") demann nan yon dezyèm egzanp kote chanjman yo vle yo te fè, epi gade nan konsekans yo. Senpleman mete, sa a se lè kòlèg ou a chwazi pwoblèm ki pi kritik la epi li fè yon demann rale nan fòm lan nan tankou yon gwo moso pousyè tè ke pèsonn pa ka aktyèlman revize li.
Pou teste senaryo sa a an aksyon, ann kreye yon dezyèm egzanp SA-Logic ak pinèz (buggy) pa kouri lòd sa a:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
Epi, koulye a kite a kouri lòd la asire w ke tout ka ak app=sa-logic Yo gen tou etikèt ak vèsyon ki koresponn yo:
Lapòs sa-logic vize gous ak yon etikèt app=sa-logic, kidonk tout demann yo pral distribye nan tout ka:
... men nou vle yo voye demann nan v1 ka epi reflete nan v2 ka:
Nou pral reyalize sa a atravè VirtualService nan konbinezon ak DestinationRule, kote règ yo pral detèmine sous-ansanm ak wout nan VirtualService la nan yon sous-ensemble espesifik.
Pa gen okenn eksplikasyon ki nesesè isit la, kidonk ann jis wè li an aksyon:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
Ann ajoute chaj la lè w rele lòd sa a:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Ann gade rezilta yo nan Grafana, kote ou ka wè ke vèsyon an ak pinèz (buggy) rezilta nan echèk pou ~ 60% nan demann, men pa youn nan echèk sa yo afekte itilizatè final yo kòm yo reponn a pa yon sèvis k ap kouri.
Repons siksè nan diferan vèsyon nan sèvis la sa-lojik
Isit la nou te premye wè ki jan VirtualService aplike nan Anvwaye yo nan sèvis nou yo: ki lè sa-web-app fè yon demann pou sa-logic, li ale nan sidecar Envoy la, ki - atravè VirtualService - se configuré pou wout demann lan nan v1 sous-ensemble a epi reflete demann lan nan v2 sous-ensemble nan sèvis la. sa-logic.
Mwen konnen, ou ta ka deja panse ke Virtual Services se senp. Nan pwochen seksyon an, nou pral elaji sou sa lè nou di ke yo ap tou vrèman gwo.
Sou entènèt jwèt Canary Rollouts
Canary Deployment se pwosesis pou woule yon nouvo vèsyon aplikasyon pou yon ti kantite itilizatè. Yo itilize li pou asire w ke pa gen okenn pwoblèm nan lage a epi sèlman apre sa, deja gen konfyans nan bon jan kalite li yo (lage a), distribye li bay lòt itilizatè.оpi gwo odyans lan.
Pou demontre deplwaye Canary, nou pral kontinye travay ak yon sous-ensemble buggy у sa-logic.
Ann pa gaspiye tan nan vetiy epi imedyatman voye 20% itilizatè yo nan vèsyon an ak pinèz (sa a pral reprezante deplwaye Canary nou an), ak rès 80% nan sèvis nòmal la. Pou fè sa, sèvi ak VirtualService sa a (sa-logic-subsets-canary-vs.yaml):
... epi nou pral imedyatman wè ke kèk demann mennen nan echèk:
$ 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 pèmèt lansman Canary: Nan ka sa a, nou redwi enpak potansyèl pwoblèm yo a 20% nan baz itilizatè a. Bèl bagay! Koulye a, nan chak ka lè nou pa sèten nan kòd nou an (nan lòt mo - toujou ...), nou ka itilize mirwar ak deplwaye Canary.
Timeouts ak retay
Men, pinèz pa toujou fini nan kòd la. Nan lis ki soti nan "8 Move konsepsyon sou enfòmatik distribiye"An premye plas se kwayans inègza ke "rezo a se serye." An reyalite rezo a pa gen okenn serye, e pou rezon sa a nou bezwen timeouts (timeout) ak reesye (reesye).
Pou demonstrasyon nou pral kontinye sèvi ak vèsyon an menm pwoblèm sa-logic (buggy), epi nou pral simulation enfiyabilite rezo a ak echèk o aza.
Kite sèvis nou an ki gen pinèz gen 1/3 chans pou l pran twòp tan pou reponn, 1/3 chans pou l fini ak yon Erè Sèvè Entèn, ak 1/3 chans pou l retounen paj la avèk siksè.
Pou diminye enpak pwoblèm sa yo epi fè lavi pi bon pou itilizatè yo, nou kapab:
ajoute yon delè si sèvis la pran plis pase 8 segonn pou reponn,
Epi chak tantativ konsidere kòm san siksè si tan repons lan depase 3 segonn.
Sa a se yon optimize paske itilizatè a pa pral oblije rete tann plis pase 8 segonn epi nou pral fè twa nouvo tantativ jwenn yon repons nan ka ta gen echèk, ogmante chans pou yon repons siksè.
Epi tcheke nan graf Grafana yo ke kantite repons ki gen siksè te ogmante pi wo a:
Amelyorasyon nan estatistik repons siksè apre yo fin ajoute timeouts ak retay
Anvan w ale nan pwochen seksyon an (oswa pito, nan pwochen pati nan atik la, paske nan sa a pa pral gen plis eksperyans pratik - approx. trad.), efase sa-logic-buggy ak VirtualService pa kouri kòmandman sa yo:
Nou ap pale de de modèl enpòtan nan achitekti mikwosèvis ki pèmèt ou reyalize oto-rekiperasyon (gerizon pwòp tèt ou) sèvis yo.
Awondisman disjonkteur("disjoncteur sikwi") yo itilize pou mete fen nan demann ki vini nan yon egzanp yon sèvis ki konsidere kòm malsen epi retabli li pandan y ap redireksyon demann kliyan an nan ka an sante nan sèvis sa a (ki ogmante pousantaj repons ki gen siksè). (Remak: Ou ka jwenn yon deskripsyon pi detaye sou modèl la, pou egzanp, isit la.)
Boulèt("patisyon") izole echèk sèvis ki afekte tout sistèm nan. Pa egzanp, Sèvis B kase epi yon lòt sèvis (kliyan Sèvis B) fè yon demann nan Sèvis B, sa ki lakòz li fin itilize pisin fil li yo epi li pa kapab fè sèvis lòt demann (menm si yo pa soti nan Sèvis B). (Remak: Ou ka jwenn yon deskripsyon pi detaye sou modèl la, pou egzanp, isit la.)
Mwen pral omisyon detay aplikasyon modèl sa yo paske yo fasil pou jwenn yo dokiman ofisyèl yo, epi mwen vle tou reyèlman montre otantifikasyon ak otorizasyon, ki pral diskite nan pwochen pati nan atik la.