Nānā. unuhi.: Mahele mua Ua hoʻolaʻa ʻia kēia moʻo no ka hoʻolauna ʻana i nā mana Istio a hōʻike iā lākou i ka hana. I kēia manawa, e kamaʻilio mākou e pili ana i nā ʻano paʻakikī o ka hoʻonohonoho ʻana a me ka hoʻohana ʻana i kēia mesh lawelawe, a ʻo ia hoʻi, e pili ana i ka hoʻokele maikaʻi ʻia a me ka hoʻokele ʻana i ka ʻoihana pūnaewele.
Hoʻomaopopo pū mākou iā ʻoe e hoʻohana ana ka ʻatikala i nā hoʻonohonoho (nā hōʻike no Kubernetes a me Istio) mai ka waihona. istio-mastery.
hooponopono kaapuni
Me Istio, ʻike ʻia nā mana hou i ka hui e hoʻolako:
Ka hoʻokele ʻana i ka noi ikaika: nā ʻōwili canary, hoʻāʻo A/B;
Kaulike hoʻouka: maʻalahi a kūlike, ma muli o nā hashes;
Hoʻihoʻi ma hope o ka hāʻule: manawa pau, ho'āʻo hou, hoʻopau kaapuni;
Hoʻokomo hewa: lohi, hāʻule nā noi, etc.
Ke hoʻomau nei ka ʻatikala, e hōʻike ʻia kēia mau mea hiki ke hoʻohana i ka noi i koho ʻia ma ke ʻano he laʻana a e hoʻokomo ʻia nā manaʻo hou ma ke ala. ʻO ia ka manaʻo mua DestinationRules(ʻo ia hoʻi. nā lula e pili ana i ka mea e loaʻa ana i nā kaʻa/noi - ma kahi o. transl.), me ke kōkua o kā mākou hoʻāʻo ʻana i ka hoʻāʻo A/B.
Hoʻāʻo A/B: DestinationRules ma ka hoʻomaʻamaʻa
Hoʻohana ʻia ka hoʻāʻo A/B i nā hihia i loaʻa i ʻelua mau mana o kahi noi (ʻo ka mea maʻamau he ʻokoʻa nā hiʻohiʻona) a ʻaʻole mākou 100% maopopo ka mea e hoʻomaikaʻi i ka ʻike mea hoʻohana. No laila, holo mākou i nā mana ʻelua i ka manawa like a hōʻiliʻili i nā metric.
No ka hoʻolālā ʻana i ka mana ʻelua o ka frontend, koi ʻia no ka hōʻike ʻana i ka hoʻāʻo A/B, e holo i kēia kauoha:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
ʻOkoʻa ka hōʻike hoʻolaha no ka mana ʻōmaʻomaʻo ma nā wahi ʻelua:
Hoʻokumu ʻia ke kiʻi ma kahi hōʻailona ʻokoʻa - istio-green,
He lepili ko Pods version: green.
No ka mea, loaʻa i nā hoʻolālā ʻelua kahi lepili app: sa-frontend, nā noi i hoʻouna ʻia e ka lawelawe virtual sa-external-services no ka lawelawe sa-frontend, e hoʻihoʻi ʻia i kona mau manawa āpau a e puʻunaue ʻia ka ukana ma o round-robin algorithm, e alakaʻi i kēia kūlana:
ʻAʻole i loaʻa nā faila i noi ʻia
ʻAʻole i loaʻa kēia mau faila no ka mea ua kapa ʻia lākou ma nā ʻano like ʻole o ka noi. E hōʻoia i kēia:
ʻO ia ka manaʻo index.html, e noi ana i hoʻokahi mana o nā faila static, hiki ke hoʻouna ʻia e ka mea hoʻohālikelike ukana i nā pods i loaʻa kahi ʻano ʻokoʻa, kahi, no nā kumu maopopo, ʻaʻole i loaʻa ia mau faila. No laila, i mea e hana ai ka noi, pono mākou e kau i kahi palena: "ʻO ka mana like o ka palapala noi i lawelawe i ka index.html pono e lawelawe i nā noi ma hope".
E hōʻea mākou i laila me ka hoʻokau kaulike ʻana i ka hash (Ka Hash Loadbalancing Kūlike)... I kēia hihia hoʻouna ʻia nā noi mai ka mea kūʻai aku i ka laʻana backend like, kahi waiwai i koho mua ʻia - no ka laʻana, he poʻomanaʻo HTTP. Hoʻohana ʻia me ka DestinationRules.
Kūlana Rules
Mahope iho Hana Kūikawā hoʻouna i kahi noi i ka lawelawe i makemake ʻia, me ka hoʻohana ʻana i DestinationRules hiki iā mākou ke wehewehe i nā kulekele e hoʻopili ʻia i nā kaʻa i koho ʻia no nā manawa o kēia lawelawe:
ʻO ka hoʻokele kaʻa me nā kumuwaiwai Istio
i hoʻopuka: Hōʻike ʻia ka hopena o nā kumuwaiwai Istio ma ka ʻoihana pūnaewele ma kahi ala maʻalahi e hoʻomaopopo. ʻO ka pololei, ʻo ka hoʻoholo i kahi manawa e hoʻouna ai i ka noi i hana ʻia e ka ʻelele ma ka Ingress Gateway i hoʻonohonoho ʻia i ka CRD.
Me nā Kūlana Kūlana, hiki iā mākou ke hoʻonohonoho i ka hoʻohālikelike ʻana i ka ukana e hoʻohana i nā hashes maʻamau a hōʻoia i ka pane ʻana o ka lawelawe like i ka mea hoʻohana like. Hiki iā ʻoe ke hoʻokō i kēia (destinationrule-sa-frontend.yaml):
i hoʻopuka: E hoʻohui i nā waiwai like ʻole i ke poʻo a hoʻāʻo pololei i nā hopena i ka polokalamu kele pūnaewele, hiki iā ʻoe ke hoʻohana keia hooloihi iā Chrome (ai ole me keia no Firefox - ma kahi o. unuhi.).
Ma keʻano laulā, ʻoi aku ka nui o ka DestinationRules i ka wahi o ka loaʻa kaulike - e nānā i nā kikoʻī i loko palapala kūhelu.
Ma mua o ke aʻo ʻana i ka VirtualService hou aku, e kāpae i ka "'ōmaʻomaʻo'ōmaʻomaʻo" o ka noi a me ke ʻano alakaʻi alakaʻi e pili ana i ka holo ʻana i kēia mau kauoha:
Pā Lōlani (“palekana”) a i ʻole ke aniani (“ke aniani ana”) hoʻohana ʻia i nā hihia kahi a mākou e makemake ai e hoʻāʻo i kahi hoʻololi i ka hana ʻana me ka ʻole o ka hoʻopili ʻana i nā mea hoʻohana hope: no ka hana ʻana i kēia, ke kope nei mākou i nā noi ("mirror") i kahi manawa ʻelua kahi i hana ʻia ai nā loli i makemake ʻia, a nānā i nā hopena. ʻO ka waiho wale ʻana, ʻo ia ka manawa e koho ai kāu hoa hana i ka pilikia koʻikoʻi a hana i kahi noi huki ma ke ʻano o kahi puʻupuʻu lepo nui ʻaʻole hiki i kekahi ke nānā maoli.
No ka hoʻāʻo ʻana i kēia hiʻohiʻona i ka hana, e hana mākou i ka lua o ka SA-Logic me nā pōpoki (buggy) ma ka holo ʻana i kēia kauoha:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
A i kēia manawa e holo kāua i ke kauoha e hōʻoia i nā manawa āpau me app=sa-logic Loaʻa iā lākou nā lepili me nā mana like:
hana sa-logic pahu pahu pahu me ka lepili app=sa-logic, no laila e māhele ʻia nā noi a pau i waena o nā manawa a pau:
... akā makemake mākou e hoʻouna ʻia nā noi i nā manawa v1 a hoʻohālikelike ʻia i nā manawa v2:
E hoʻokō mākou i kēia ma o VirtualService i hui pū me DestinationRule, kahi e hoʻoholo ai nā lula i nā subsets a me nā ala o ka VirtualService i kahi ʻāpana kikoʻī.
Ka wehewehe ʻana i nā ʻāpana ʻāpana i nā lula hoʻoholo
Mea hoʻokipa (host) wehewehe e pili ana kēia lula i nā hihia ke hele ke ala i ka lawelawe sa-logic;
Nā inoa (name) hoʻohana ʻia nā subsets i ka wā e hoʻokele ai i nā manawa hoʻonohonoho;
Lepili (label) ka wehewehe ʻana i nā hui waiwai kī e hoʻohālikelike ʻia e lilo i ʻāpana o ka subset.
E noi i ka hoʻonohonoho me kēia kauoha:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-destinationrule.yaml
destinationrule.networking.istio.io/sa-logic created
I kēia manawa ua wehewehe ʻia nā subsets, hiki iā mākou ke neʻe a hoʻonohonoho i ka VirtualService e hoʻopili i nā lula i nā noi i sa-logic i hiki ai iā lākou:
ʻAʻole pono ka wehewehe ʻana ma aneʻi, no laila e ʻike kākou i ka hana:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
E hoʻohui i ka ukana ma ke kāhea ʻana i kēia kauoha:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
E nānā i nā hopena ma Grafana, kahi āu e ʻike ai i ka mana me nā pōpoki (buggy) ka hopena i ka hāʻule ʻole no ~60% o nā noi, akā ʻaʻohe o kēia mau hemahema e hoʻopilikia i nā mea hoʻohana hope e like me ka pane ʻana iā lākou e kahi lawelawe holo.
Nā pane lanakila o nā mana like ʻole o ka lawelawe sa-logic
Maanei mākou i ʻike mua ai pehea e pili ai ʻo VirtualService i nā ʻelele o kā mākou lawelawe: i ka manawa sa-web-app noi i sa-logic, hele ia ma ka sidecar Envoy, ka mea - ma o VirtualService - ua hoʻonohonoho ʻia e ala i ka noi i ka v1 subset a hoʻohālikelike i ka noi i ka v2 subset o ka lawelawe. sa-logic.
ʻIke wau, manaʻo paha ʻoe he maʻalahi nā lawelawe Virtual. Ma ka ʻāpana aʻe, e hoʻonui mākou i kēlā me ka ʻōlelo ʻana he maikaʻi maoli nō lākou.
ʻO nā Canary Rollouts
ʻO Canary Deployment ke kaʻina o ka ʻōwili ʻana i kahi mana hou o kahi noi i kahi helu liʻiliʻi o nā mea hoʻohana. Hoʻohana ʻia ia e hōʻoia ʻaʻohe pilikia i ka hoʻokuʻu ʻana a ma hope wale nō, ke hilinaʻi nei i kona ʻano (hoʻokuʻu) maikaʻi, e hāʻawi iā ia i nā mea hoʻohana ʻē aʻe.оlehulehu lehulehu.
No ka hōʻike ʻana i nā ʻōwili canary, e hoʻomau mākou e hana me kahi ʻāpana buggy у sa-logic.
Mai hoʻopau i ka manawa ma nā mea liʻiliʻi a hoʻouna koke i ka 20% o nā mea hoʻohana i ka mana me nā pōpoki (e hōʻike kēia i kā mākou canary rollout), a ʻo ke koena 80% i ka lawelawe maʻamau. No ka hana ʻana i kēia, e hoʻohana i kēia VirtualService (sa-logic-subsets-canary-vs.yaml):
... a e ʻike koke mākou i kekahi mau noi e alakaʻi i nā hemahema:
$ 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
Hiki i nā VirtualServices ke hoʻololi i nā canary rollouts: Ma kēia hihia, ua hōʻemi mākou i ka hopena o nā pilikia i 20% o ka waihona mea hoʻohana. Kupaianaha! I kēia manawa, i kēlā me kēia hihia inā ʻaʻole maopopo mākou i kā mākou code (ma nā ʻōlelo ʻē aʻe - mau ...), hiki iā mākou ke hoʻohana i ka mirroring a me nā canary rollouts.
Hoʻopau manawa a hoʻāʻo hou
Akā ʻaʻole pau nā pōpoki i ke code. Ma ka papa inoa mai "8 Manaʻo kuhihewa e pili ana i ka Computing Distributed"ʻO ka mea mua ka manaʻo hewa ʻole" hilinaʻi ka pūnaewele. ʻO kaʻoiaʻiʻo ka pūnaewele ole hilinaʻi, a no kēia kumu e pono ai mākou i nā manawa (manawa pau) a ho'āʻo hou (hoʻāʻo hou).
No ka hōʻike ʻana e hoʻomau mākou i ka hoʻohana ʻana i ka mana pilikia like sa-logic (buggy), a e hoʻohālike mākou i ka hilinaʻi ʻole o ka pūnaewele me nā hemahema.
E loaʻa i kā mākou lawelawe me nā pōpoki he 1/3 manawa lōʻihi e pane ai, he 1/3 manawa e hoʻopau ai me kahi Hapa Kuloko, a he 1/3 manawa e hoʻihoʻi maikaʻi ai i ka ʻaoʻao.
No ka hoʻohaʻahaʻa i ka hopena o ia mau pilikia a hoʻomaikaʻi i ke ola no nā mea hoʻohana, hiki iā mākou ke:
hoʻohui i kahi manawa hoʻopau inā lōʻihi ka lawelawe ma mua o 8 kekona e pane ai,
Hoʻonohonoho ʻia ka manawa pau no ke noi i 8 kekona;
Hoʻāʻo hou ʻia nā noi i 3 mau manawa;
A manaʻo ʻia kēlā me kēia hoʻāʻo ʻaʻole i kūleʻa inā ʻoi aku ka manawa pane ma mua o 3 kekona.
He optimization kēia no ka mea ʻaʻole pono ka mea hoʻohana e kali ma mua o 8 kekona a e hana mākou i ʻekolu mau hoʻāʻo hou e loaʻa i kahi pane i ka hihia o nā hāʻule, e hoʻonui ana i ka manawa o ka pane kūleʻa.
A e nānā i nā kiʻi Grafana ua hoʻonui ʻia ka helu o nā pane kūleʻa ma luna.
ʻO ka hoʻomaikaʻi ʻana i nā helu kūleʻa pane ma hope o ka hoʻohui ʻana i nā manawa pau a me ka hoʻāʻo hou
Ma mua o ka neʻe ʻana i ka ʻāpana aʻe (a i ʻole, i ka ʻaoʻao aʻe o ka ʻatikala, no ka mea, ʻaʻole e loaʻa hou nā hoʻokolohua kūpono - approx. transl.), holoi sa-logic-buggy a me VirtualService ma ka holo ʻana i kēia mau kauoha:
Ke kamaʻilio nei mākou e pili ana i ʻelua mau hiʻohiʻona koʻikoʻi i ka microservice architecture e hiki ai iā ʻoe ke hoʻokō iā ʻoe iho (ho'ōla iā ia iho) lawelawe.
Ka Luna Alakaʻi("kaapuni kaapuni") hoʻohana ʻia no ka hoʻopau ʻana i nā noi e hele mai ana i kahi lawelawe i manaʻo ʻia he maikaʻi ʻole a hoʻihoʻi ʻia i ka wā e hoʻihoʻi ʻia nā noi o nā mea kūʻai aku i nā manawa olakino o kēlā lawelawe (e hoʻonui ai i ka pakeneka o nā pane kūleʻa). (E hoʻomaopopo: Hiki ke loaʻa kahi wehewehe kikoʻī o ke kumu, no ka laʻana, maanei.)
Poʻokela("ʻāpana") hoʻokaʻawale i nā hemahema o ka lawelawe mai ka hoʻopilikia ʻana i ka ʻōnaehana holoʻokoʻa. No ka laʻana, ua haki ʻo Service B a noi aku kahi lawelawe ʻē aʻe (ka mea kūʻai aku ʻo Service B) i ka Service B, e hoʻopau ai i kāna kolamu thread a hiki ʻole ke lawelawe i nā noi ʻē aʻe (ʻoiai inā ʻaʻole lākou mai Service B). (E hoʻomaopopo: Hiki ke loaʻa kahi wehewehe kikoʻī o ke kumu, no ka laʻana, maanei.)
E haʻalele wau i nā kikoʻī hoʻokō o kēia mau hiʻohiʻona no ka mea maʻalahi lākou e loaʻa i loko palapala kūhelu, a makemake nui au e hōʻike i ka hōʻoia a me ka ʻae ʻana, e kūkākūkā ʻia ma ka ʻaoʻao aʻe o ka ʻatikala.