Notu. transl.: Unua parto Tiu serio estis dediĉita al enkonduko de Istio-kapabloj kaj pruvado de ili en ago. Nun ni parolos pri pli kompleksaj aspektoj de la agordo kaj uzo de ĉi tiu servo-maŝo, kaj precipe pri fajne agordita enrutado kaj reta trafiko-administrado.
Ni ankaŭ memorigas vin, ke la artikolo uzas agordojn (manifestojn por Kubernetes kaj Istio) el la deponejo. istio-majstrado.
trafikadministrado
Kun Istio, novaj kapabloj aperas en la areto por provizi:
Ŝarĝbalancado: simpla kaj konsekvenca, surbaze de haŝoj;
Resaniĝo post faloj: temporompoj, reprovoj, ŝaltiloj;
Enmetado de misfunkciadoj: prokrastoj, forigitaj petoj, ktp.
Dum la artikolo daŭras, ĉi tiuj kapabloj estos ilustritaj uzante la elektitan aplikaĵon kiel ekzemplon kaj novaj konceptoj estos enkondukitaj survoje. La unua tia koncepto estos DestinationRules(t.e. reguloj pri la ricevanto de trafiko/petoj - ĉ. traduko), per kies helpo ni aktivigas A/B-testadon.
A/B-testado: Destination Rules en praktiko
A/B-testado estas uzata en kazoj kie ekzistas du versioj de aplikaĵo (kutime ili estas vide malsamaj) kaj ni ne estas 100% certaj, kiu plibonigos la uzantan sperton. Tial ni kuras ambaŭ versiojn samtempe kaj kolektas metrikojn.
Por disfaldi la duan version de la fasado, necesa por pruvi A/B-testadon, rulu la sekvan komandon:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
La deploja manifesto por la verda versio malsamas en du lokoj:
La bildo baziĝas sur malsama etikedo - istio-green,
Podoj havas etikedon version: green.
Ĉar ambaŭ deplojoj havas etikedon app: sa-frontend,petoj direktitaj de virtuala servo sa-external-services por servo sa-frontend, estos redirektita al ĉiuj ĝiaj okazoj kaj la ŝarĝo estos distribuita tra cirkla-subskribolista algoritmo, kiu kondukos al la sekva situacio:
La petitaj dosieroj ne estis trovitaj
Ĉi tiuj dosieroj ne estis trovitaj ĉar ili estas nomitaj malsame en malsamaj versioj de la aplikaĵo. Ni certigu ĉi tion:
Ĝi signifas tion index.html, petante unu version de senmovaj dosieroj, povas esti sendita de la ŝarĝbalancilo al podoj kiuj havas malsaman version, kie, pro evidentaj kialoj, tiaj dosieroj ne ekzistas. Tial, por ke la aplikaĵo funkciu, ni devas agordi limigon: "la sama versio de la aplikaĵo kiu servis index.html devus servi postajn petojn".
Ni atingos tien kun konsekvenca hash-bazita ŝarĝbalancado (Konsekvenca Hash Loadbalancing)... Tiuokaze petoj de la sama kliento estas senditaj al la sama backend-instanco, por kiu estas uzata antaŭdifinita posedaĵo - ekzemple HTTP-kapo. Efektivigite uzante DestinationRules.
Destinaciaj Reguloj
post la Virtuala Servo sendis peton al la dezirata servo, uzante DestinationRules ni povas difini politikojn, kiuj estos aplikitaj al trafiko destinita por ekzemploj de ĉi tiu servo:
Trafikadministrado kun Istio-resursoj
Примечание: La efiko de Istio-resursoj sur rettrafiko estas prezentita ĉi tie en maniero facile komprenebla. Por esti precizaj, la decido pri kiu instanco sendi la peton estas farita de la Sendito en la Enirejo agordita en la CRD.
Kun Celaj Reguloj, ni povas agordi ŝarĝan ekvilibron por uzi konsekvencajn haŝojn kaj certigi, ke la sama servo-instanco respondas al la sama uzanto. La sekva agordo permesas vin atingi tion (destinationrule-sa-frontend.yaml):
Примечание: Por aldoni malsamajn valorojn en la kaplinio kaj testi la rezultojn rekte en la retumilo, vi povas uzi ĉi tiu etendo al Chrome (aŭ kun ĉi tio por Firefox - ĉ. traduk.).
Ĝenerale, DestinationRules havas pli da kapabloj en la areo de ŝarĝo-ekvilibro - kontrolu detalojn oficiala dokumentaro.
Antaŭ ol studi VirtualService plu, ni forigu la "verdan version" de la aplikaĵo kaj la respondan regulon de trafiko direktante la jenajn komandojn:
Ombro ("ŝirmado") aŭ Spegulado ("spegulado") uzata en kazoj kie ni volas testi ŝanĝon en produktado sen tuŝi finajn uzantojn: por fari tion, ni duobligas ("spegulon") petojn al dua okazo kie la dezirataj ŝanĝoj estis faritaj, kaj rigardas la sekvojn. Simple dirite, ĉi tie estas kiam via kolego elektas la plej kritikan aferon kaj faras tiran peton en la formo de tia grandega malpuraĵo, ke neniu povas efektive revizii ĝin.
Por testi ĉi tiun scenaron en ago, ni kreu duan kazon de SA-Logic kun cimoj (buggy) per la sekva komando:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
Kaj nun ni rulu la komandon por certigi, ke ĉiuj okazoj kun app=sa-logic Ili ankaŭ havas etikedojn kun la ekvivalentaj versioj:
servo sa-logic celas podojn kun etikedo app=sa-logic, do ĉiuj petoj estos distribuitaj inter ĉiuj okazoj:
... sed ni volas, ke petoj estu senditaj al v1-instancoj kaj spegulitaj al v2-instancoj:
Ni atingos tion per VirtualService en kombinaĵo kun DestinationRule, kie la reguloj determinos la subarojn kaj itinerojn de la VirtualService al specifa subaro.
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
Ni aldonu la ŝarĝon vokante la sekvan komandon:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Ni rigardu la rezultojn en Grafana, kie vi povas vidi, ke la versio kun cimoj (buggy) rezultigas fiaskon por ~60% de petoj, sed neniu el tiuj fiaskoj influas finajn uzantojn ĉar ili estas responditaj de funkcianta servo.
Sukcesaj respondoj de malsamaj versioj de la sa-logika servo
Ĉi tie ni unue vidis kiel VirtualService estas aplikata al la Senditoj de niaj servoj: kiam sa-web-app faras peton al sa-logic, ĝi pasas tra la kromĉaro Envoy, kiu - per VirtualService - estas agordita por direkti la peton al la v1-subaro kaj speguli la peton al la v2-subaro de la servo. sa-logic.
Mi scias, vi eble jam pensas, ke Virtualaj Servoj estas simpla. En la sekva sekcio, ni pligrandigos tion dirante, ke ili ankaŭ estas vere bonegaj.
Kanariaj Disvolviĝoj
Canary Deployment estas la procezo de lanĉo de nova versio de aplikaĵo al malgranda nombro da uzantoj. Ĝi estas uzata por certigi, ke ne estas problemoj en la eldono kaj nur post tio, jam fidante pri ĝia (eldonaĵo) kvalito, disvastigu ĝin al aliaj uzantoj.оpli granda publiko.
Por montri kanariajn landojn, ni daŭre laboros kun subaro buggy у sa-logic.
Ni ne perdu tempon pri bagateloj kaj tuj sendu 20% de uzantoj al la versio kun cimoj (ĉi tio reprezentos nian kanarian lanĉon), kaj la ceterajn 80% al la normala servo. Por fari tion, uzu la sekvan VirtualService (sa-logikaj-subaroj-kanario-vs.yaml):
... kaj ni tuj vidos, ke iuj petoj kondukas al malsukcesoj:
$ 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 ebligas kanariajn landojn: En ĉi tiu kazo, ni malvastigis la eblan efikon de la problemoj al 20% de la uzantbazo. Mirinda! Nun, en ĉiu kazo, kiam ni ne certas pri nia kodo (alivorte - ĉiam...), ni povas uzi spegulon kaj kanariajn landojn.
Tempotempoj kaj reprovoj
Sed cimoj ne ĉiam finiĝas en la kodo. En la listo de "8 Miskompreniĝoj pri Distribuita Komputado"Unue estas la erara kredo, ke "la reto estas fidinda." En realeco la reto ne fidindaj, kaj pro tio ni bezonas tempotempojn (tempotempoj) kaj reprovoj (reprovas).
Por pruvo ni daŭre uzos la saman problemo-version sa-logic (buggy), kaj ni simulos la nefidindecon de la reto kun hazardaj fiaskoj.
Lasu nian servon kun cimoj havi 1/3 ŝancon daŭri tro longe por respondi, 1/3 ŝanco finiĝi kun Interna Servila Eraro, kaj 1/3 ŝanco por sukcese resendi la paĝon.
Por mildigi la efikon de tiaj problemoj kaj plibonigi la vivon por uzantoj, ni povas:
aldonu tempon se la servo daŭras pli ol 8 sekundojn por respondi,
La tempodaŭro por la peto estas agordita al 8 sekundoj;
Petoj estas reprovitaj 3 fojojn;
Kaj ĉiu provo estas konsiderata malsukcesa se la responda tempo superas 3 sekundojn.
Ĉi tio estas optimumigo ĉar la uzanto ne devos atendi pli ol 8 sekundojn kaj ni faros tri novajn provojn por ricevi respondon en kazo de malsukcesoj, pliigante la ŝancon de sukcesa respondo.
Apliku la ĝisdatigitan agordon per la sekva komando:
Kaj kontrolu en la Grafana-grafikoj, ke la nombro da sukcesaj respondoj pliiĝis supre:
Pliboniĝoj en sukcesa respondstatistiko post aldonado de tempodaŭroj kaj reprovoj
Antaŭ ol transiri al la sekva sekcio (aŭ pli ĝuste, al la sekva parto de la artikolo, ĉar en tio ne estos plu praktikaj eksperimentoj - ĉ. trad.), forigi sa-logic-buggy kaj VirtualService rulante la sekvajn komandojn:
Ni parolas pri du gravaj ŝablonoj en mikroserva arkitekturo, kiuj permesas vin atingi mem-reakiron (mem-resanigo) servoj.
Cirkvitrompilo("cirkvitrompilo") uzata por ĉesigi petojn venantajn al kazo de servo kiu estas konsiderita nesana kaj restarigi ĝin dum klientpetoj estas redirektitaj al sanaj kazoj de tiu servo (kiu pliigas la procenton de sukcesaj respondoj). (Noto: Pli detala priskribo de la ŝablono troveblas, ekzemple, tie.)
Fakmuro("sekcio") izolas servofiaskojn de influado de la tuta sistemo. Ekzemple, Servo B estas rompita kaj alia servo (la kliento de Service B) faras peton al Servo B, igante ĝin elĉerpi sian fadenan naĝejon kaj esti nekapabla servi aliajn petojn (eĉ se ili ne estas de Servo B). (Noto: Pli detala priskribo de la ŝablono troveblas, ekzemple, tie.)
Mi preterlasos la realigajn detalojn de ĉi tiuj ŝablonoj ĉar ili estas facile troveblaj oficiala dokumentaro, kaj mi ankaŭ ege volas montri aŭtentikigon kaj rajtigon, pri kiuj estos diskutitaj en la sekva parto de la artikolo.