Atgriezties uz mikropakalpojumiem ar Istio. 1. daļa
PiezÄ«me. tulk.: Pakalpojumu tÄ«kli noteikti ir kļuvuÅ”i par atbilstoÅ”u risinÄjumu mÅ«sdienu infrastruktÅ«rÄ lietojumprogrammÄm, kas seko mikropakalpojumu arhitektÅ«rai. Lai gan Istio var runÄt par daudziem DevOps inženieriem, tas ir diezgan jauns produkts, kas, lai gan tas ir visaptveroÅ”s tÄ sniegto iespÄju ziÅÄ, var prasÄ«t ievÄrojamu laiku, lai iepazÄ«tos ar to. VÄcu inženieris Rinors Maloku, kurÅ” telekomunikÄciju uzÅÄmumÄ Orange Networks ir atbildÄ«gs par mÄkoÅdatoÅ”anu lielajiem klientiem, ir uzrakstÄ«jis brÄ«niŔķīgu materiÄlu sÄriju, kas ļauj Ätri un dziļi ienirt Istio. ViÅÅ” sÄk savu stÄstu ar to, ko Istio vispÄr spÄj un kÄ to var Ätri redzÄt savÄm acÄ«m.
Istio ā AtvÄrtÄ pirmkoda projekts, kas izstrÄdÄts sadarbÄ«bÄ ar Google, IBM un Lyft komandÄm. Tas atrisina sarežģījumus, kas rodas uz mikropakalpojumiem balstÄ«tÄs lietojumprogrammÄs, piemÄram:
Satiksmes vadÄ«ba: taimauts, atkÄrtojumi, slodzes lÄ«dzsvaroÅ”ana;
DroŔība: galalietotÄja autentifikÄcija un autorizÄcija;
To visu var atrisinÄt lietojumprogrammas lÄ«menÄ«, bet pÄc tam jÅ«su pakalpojumi vairs nebÅ«s "mikro". Visas papildu pÅ«les, lai atrisinÄtu Ŕīs problÄmas, ir uzÅÄmuma resursu izŔķÄrdÄÅ”ana, ko varÄtu tieÅ”i izmantot biznesa vÄrtÄ«bai. ApskatÄ«sim piemÄru:
Projekta vadÄ«tÄjs: Cik ilgs laiks nepiecieÅ”ams, lai pievienotu atsauksmju funkciju?
IzstrÄdÄtÄjs: divi sprinti.
MP: Ko?.. Tas ir vienkÄrÅ”i CRUD!
R: CRUD veikÅ”ana ir vienkÄrÅ”Äka daļa, taÄu mums joprojÄm ir jÄautentificÄ un jÄautorizÄ lietotÄji un pakalpojumi. TÄ kÄ tÄ«kls ir neuzticams, jums bÅ«s jÄievieÅ” atkÄrtoti pieprasÄ«jumi, kÄ arÄ« Ä·Ädes pÄrtraucÄja modelis klientos. TÄpat, lai pÄrliecinÄtos, ka visa sistÄma neavÄrÄ, jums bÅ«s nepiecieÅ”ami noildzes un starpsienas(sÄ«kÄku informÄciju par abiem minÄtajiem modeļiem skatÄ«t vÄlÄk rakstÄ - apm. tulk.)un, lai atklÄtu problÄmas, uzraudzÄ«bu, izsekoÅ”anu, [ā¦]
MP: Ak, tad vienkÄrÅ”i ievietosim Å”o funkciju produkta pakalpojumÄ.
DomÄju, ka ideja ir skaidra: viena pakalpojuma pievienoÅ”anai nepiecieÅ”amais soļu un pūļu apjoms ir milzÄ«gs. Å ajÄ rakstÄ mÄs apskatÄ«sim, kÄ Istio no pakalpojumiem novÄrÅ” visu iepriekÅ” minÄto sarežģītÄ«bu (kas nav paredzÄta kÄ biznesa loÄ£ika).
PiezÄ«me: Å ajÄ rakstÄ tiek pieÅemts, ka jums ir darba zinÄÅ”anas par Kubernetes. CitÄdi iesaku lasÄ«t mans ievads Kubernetes un tikai pÄc tam turpiniet lasÄ«t Å”o materiÄlu.
Istio ideja
PasaulÄ, kurÄ nav Istio, viens pakalpojums veic tieÅ”us pieprasÄ«jumus citam, un kļūmes gadÄ«jumÄ pakalpojumam tas ir jÄrisina paÅ”am: jÄveic jauns mÄÄ£inÄjums, jÄnodroÅ”ina taimauts, jÄatver Ä·Ädes pÄrtraucÄjs utt.
TÄ«kla trafika Kubernetes
Istio piedÄvÄ specializÄtu risinÄjumu, kas ir pilnÄ«bÄ atdalÄ«ts no pakalpojumiem un darbojas, traucÄjot tÄ«kla saziÅu. Un tÄdÄjÄdi tas Ä«steno:
kļūdu tolerance: pamatojoties uz statusa kodu atbildÄ, tas saprot, vai pieprasÄ«jums neizdevÄs, un izpilda to atkÄrtoti.
KanÄrijputniÅi: novirza tikai noteiktu procentuÄlo daļu pieprasÄ«jumu uz jauno pakalpojuma versiju.
UzraudzÄ«ba un metrika: Cik ilgs laiks pagÄja, lÄ«dz pakalpojums atbildÄja?
IzsekoÅ”ana un novÄrojamÄ«ba: katram pieprasÄ«jumam pievieno Ä«paÅ”as galvenes un izseko tÄm visÄ klasterÄ«.
DroŔība: izgÅ«st JWT marÄ·ieri, autentificÄ un autorizÄ lietotÄjus.
Å Ä«s ir tikai dažas no iespÄjÄm (tieÅ”Äm tikai dažas!), lai jÅ«s ieintriÄ£Ätu. Tagad iedziļinÄsimies tehniskajÄs detaļÄs!
Istio arhitektūra
Istio pÄrtver visu tÄ«kla trafiku un piemÄro tam noteikumu kopumu, ievietojot viedo starpniekserveri blakusvÄÄ£a konteinera formÄ katrÄ podÄ. Starpniekserveri, kas aktivizÄ visas iespÄjas, veido a Datu plakne, un tos var dinamiski konfigurÄt, izmantojot VadÄ«bas plakne.
Datu plakne
PÄkstÄ«m ievietotie starpniekserveri ļauj Istio viegli izpildÄ«t mums nepiecieÅ”amÄs prasÄ«bas. PiemÄram, pÄrbaudÄ«sim atkÄrtotÄ mÄÄ£inÄjuma un Ä·Ädes pÄrtraucÄja funkcijas.
KÄ programmÄ Envoy tiek Ä«stenoti atkÄrtojumi un Ä·Ädes pÄrtraukumi
RezumÄjot:
sÅ«tnis (mÄs runÄjam par starpniekserveri, kas atrodas blakusvÄÄ£a konteinerÄ, kas tiek izplatÄ«ts kÄ atseviŔķs produkts ā apm. tulk.) nosÅ«ta pieprasÄ«jumu pakalpojuma B pirmajai instancei un neizdodas.
Pieprasījums neizdodas un tiek atgriezts starpniekserverim, kas to izsauca.
Tas atver Circuit Breaker un izsauc nÄkamo pakalpojumu, lai saÅemtu turpmÄkus pieprasÄ«jumus. (2)
Tas nozÄ«mÄ, ka jums nav jÄizmanto cita Retry bibliotÄka, jums nav paÅ”am jÄÄ«steno Circuit Breaking un Service Discovery programmÄÅ”anas valodÄ X, Y vai Z. Tas viss un daudz kas cits ir pieejams jau no iepakojuma. Istio un neprasa nÄ izmaiÅas kodÄ.
Lieliski! Tagad jÅ«s varÄtu vÄlÄties doties ceļojumÄ ar Istio, bet jums joprojÄm ir dažas Å”aubas, atklÄti jautÄjumi. Ja tas ir universÄls risinÄjums visiem dzÄ«ves gadÄ«jumiem, tad jums ir dabiskas aizdomas: galu galÄ visi Å”Ädi risinÄjumi patiesÄ«bÄ izrÄdÄs nepiemÄroti jebkuram gadÄ«jumam.
Un visbeidzot jÅ«s jautÄjat: "Vai tas ir pielÄgojams?"
Tagad esi gatavs jūras braucienam, iepazīsimies ar Vadības lidmaŔīnu.
Vadības plakne
Tas sastÄv no trim sastÄvdaļÄm: pilots, Mikseris Šø Citadele, kas strÄdÄ kopÄ, lai konfigurÄtu sÅ«tÅus, lai marÅ”rutÄtu satiksmi, ieviestu politikas un apkopotu telemetrijas datus. Shematiski tas viss izskatÄs Å”Ädi:
Vadības plaknes mijiedarbība ar datu plakni
SÅ«tÅi (t.i., datu plakne) tiek konfigurÄti, izmantojot Kubernetes CRD (PielÄgotas resursu definÄ«cijas), ko definÄjis Istio un kas Ä«paÅ”i paredzÄts Å”im nolÅ«kam. Tas jums nozÄ«mÄ to, ka tie Ŕķiet tikai vÄl viens Kubernetes resurss ar pazÄ«stamu sintaksi. Kad resurss ir izveidots, to paÅems vadÄ«bas plakne un izmantos sÅ«tÅiem.
Pakalpojumu saistība ar Istio
MÄs esam aprakstÄ«juÅ”i Istio attiecÄ«bas ar pakalpojumiem, bet ne otrÄdi: kÄ pakalpojumi ir saistÄ«ti ar Istio?
GodÄ«gi sakot, dienesti apzinÄs Istio klÄtbÅ«tni tikpat labi kÄ zivis, kad viÅi sev jautÄ: "Kas vispÄr ir Å«dens?"
TÄdÄjÄdi jÅ«s varat paÅemt strÄdÄjoÅ”u klasteru un pÄc Istio komponentu izvietoÅ”anas tajÄ esoÅ”ie servisi turpinÄs strÄdÄt, un pÄc Å”o komponentu noÅemÅ”anas viss atkal bÅ«s kÄrtÄ«bÄ. Ir skaidrs, ka Å”ajÄ gadÄ«jumÄ jÅ«s zaudÄsiet Istio sniegtÄs iespÄjas.
Pietiek teorijas ā pielietosim Ŕīs zinÄÅ”anas praksÄ!
Istio praksÄ
Istio ir nepiecieÅ”ams Kubernetes klasteris ar vismaz 4 vCPU un 8 GB RAM. Lai Ätri iestatÄ«tu kopu un izpildÄ«tu rakstÄ sniegtos norÄdÄ«jumus, iesaku izmantot Google Cloud Platform, kas piedÄvÄ jauniem lietotÄjiem bezmaksas 300 USD.
PÄc klastera izveides un piekļuves Kubernetes konfigurÄÅ”anas, izmantojot konsoles utilÄ«tu, varat instalÄt Istio, izmantojot Helm pakotÅu pÄrvaldnieku.
StÅ«res uzstÄdÄ«Å”ana
InstalÄjiet Helm klientu savÄ datorÄ, kÄ aprakstÄ«ts sadaÄ¼Ä oficiÄlÄ dokumentÄcija. MÄs to izmantosim, lai nÄkamajÄ sadaÄ¼Ä Ä£enerÄtu veidnes Istio instalÄÅ”anai.
Istio instalÄÅ”ana
LejupielÄdÄjiet Istio resursus no jaunÄkais izlaidums(sÄkotnÄjÄ autora saite uz versiju 1.0.5 ir nomainÄ«ta uz paÅ”reizÄjo, t.i., 1.0.6 - apm. tulk.), izvelciet saturu vienÄ direktorijÄ, kuru turpmÄk saukÅ”u [istio-resources].
Lai viegli identificÄtu Istio resursus, izveidojiet nosaukumvietu K8s klasterÄ« istio-system:
$ kubectl create namespace istio-system
Pabeidziet instalÄÅ”anu, dodoties uz direktoriju [istio-resources] un izpildiet komandu:
Å Ä« komanda failÄ izvadÄ«s galvenos Istio komponentus istio.yaml. MÄs modificÄjÄm standarta veidni, lai tÄ atbilstu sev, norÄdot Å”Ädus parametrus:
tracing.enabled ietver pieprasījumu izsekoŔanu, izmantojot Jaeger;
kiali.enabled instalÄ Kiali klasterÄ«, lai vizualizÄtu pakalpojumus un trafiku;
grafana.enabled instalÄ Grafana, lai vizualizÄtu savÄktos rÄdÄ«tÄjus.
Izmantosim Ä£enerÄtos resursus ar komandu:
$ kubectl apply -f istio.yaml
Istio instalÄÅ”ana klasterÄ« ir pabeigta! Pagaidiet, lÄ«dz visi podi ir nosaukumvietÄ istio-system varÄs Running vai Completedizpildot tÄlÄk norÄdÄ«to komandu:
$ kubectl get pods -n istio-system
Tagad mÄs esam gatavi turpinÄt darbu nÄkamajÄ sadaļÄ, kur mÄs aktivizÄsim lietojumprogrammu.
Izmantosim jau minÄtajÄ lietotÄs Sentiment Analysis mikropakalpojumu lietojumprogrammas piemÄru Ievadraksts Kubernetes. Tas ir pietiekami sarežģīts, lai praksÄ parÄdÄ«tu Istio iespÄjas.
Lietojumprogramma sastÄv no Äetriem mikropakalpojumiem:
ApkalpoŔana SA-Frontend, kas apkalpo Reactjs lietojumprogrammas priekŔgalu;
ApkalpoÅ”ana SA-WebApp, kas apkalpo noskaÅojuma analÄ«zes vaicÄjumus;
ApkalpoÅ”ana SA-Atsauksmes, kas saÅem atsauksmes no lietotÄjiem par analÄ«zes precizitÄti.
Å ajÄ diagrammÄ papildus pakalpojumiem mÄs redzam arÄ« ieejas kontrolieri, kas Kubernetes marÅ”rutÄ ienÄkoÅ”os pieprasÄ«jumus uz attiecÄ«gajiem pakalpojumiem. Istio savÄ Ingress Gateway izmanto lÄ«dzÄ«gu koncepciju, par kuru sÄ«kÄka informÄcija sekos.
Lietojumprogrammas palaiŔana ar starpniekserveri no Istio
Lai veiktu turpmÄkas rakstÄ minÄtÄs darbÄ«bas, klonÄjiet savu repozitoriju istio-meistarÄ«ba. Tas satur Kubernetes un Istio lietojumprogrammu un manifestus.
BlakusvÄÄ£u ievietoÅ”ana
IevietoÅ”anu var veikt automÄtiski vai ar rokÄm. Lai automÄtiski ievietotu blakusvÄÄ£a konteinerus, nosaukumvietai bÅ«s jÄiestata etiÄ·ete istio-injection=enabled, kas tiek darÄ«ts ar Å”Ädu komandu:
Tagad katrs pods, kas tiks izvietots noklusÄjuma nosaukumvietÄ (default) saÅems savu blakusvÄÄ£a konteineru. Lai to pÄrbaudÄ«tu, izvietosim testa lietojumprogrammu, dodoties uz repozitorija saknes direktoriju [istio-mastery] un palaižot Å”Ädu komandu:
$ kubectl apply -f resource-manifests/kube
persistentvolumeclaim/sqlite-pvc created
deployment.extensions/sa-feedback created
service/sa-feedback created
deployment.extensions/sa-frontend created
service/sa-frontend created
deployment.extensions/sa-logic created
service/sa-logic created
deployment.extensions/sa-web-app created
service/sa-web-app created
PÄc pakalpojumu izvietoÅ”anas pÄrbaudÄ«sim, vai podiem ir divi konteineri (ar paÅ”u pakalpojumu un tÄ blakusvÄÄ£i), izpildot komandu kubectl get pods un pÄrliecinoties, ka zem kolonnas READY norÄdÄ«tÄ vÄrtÄ«ba 2/2, kas simbolizÄ, ka darbojas abi konteineri:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sa-feedback-55f5dc4d9c-c9wfv 2/2 Running 0 12m
sa-frontend-558f8986-hhkj9 2/2 Running 0 12m
sa-logic-568498cb4d-2sjwj 2/2 Running 0 12m
sa-logic-568498cb4d-p4f8c 2/2 Running 0 12m
sa-web-app-599cf47c7c-s7cvd 2/2 Running 0 12m
VizuÄli tas izskatÄs Å”Ädi:
SÅ«tÅa starpniekserveris vienÄ no podiem
Tagad, kad lietojumprogramma ir izveidota un darbojas, mums bÅ«s jÄļauj ienÄkoÅ”ajai trafikai ienÄkt lietojumprogrammÄ.
Ieejas vÄrteja
LabÄkÄ prakse, lai to panÄktu (atļaut trafiku klasterÄ«), ir cauri Ieejas vÄrteja Istio, kas atrodas klastera āmalÄā un ļauj iespÄjot Istio funkcijas, piemÄram, marÅ”rutÄÅ”anu, slodzes lÄ«dzsvaroÅ”anu, droŔību un ienÄkoÅ”Äs trafika uzraudzÄ«bu.
Istio instalÄÅ”anas laikÄ klasterÄ« tika instalÄts Ingress Gateway komponents un pakalpojums, kas to pÄrsÅ«ta ÄrÄji. Lai uzzinÄtu pakalpojuma ÄrÄjo IP adresi, palaidiet:
$ kubectl get svc -n istio-system -l istio=ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP
istio-ingressgateway LoadBalancer 10.0.132.127 13.93.30.120
MÄs turpinÄsim piekļūt lietojumprogrammai, izmantojot Å”o IP (es to saukÅ”u kÄ EXTERNAL-IP), tÄpÄc ÄrtÄ«bas labad mÄs ierakstÄ«sim vÄrtÄ«bu mainÄ«gajÄ:
$ EXTERNAL_IP=$(kubectl get svc -n istio-system
-l app=istio-ingressgateway
-o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Ja mÄÄ£inÄsit piekļūt Å”im IP, izmantojot pÄrlÅ«kprogrammu, jÅ«s saÅemsit kļūdu Pakalpojums nav pieejams, jo pÄc noklusÄjuma Istio bloÄ·Ä visu ienÄkoÅ”o trafiku, VÄrteja vÄl nav definÄta.
VÄrtejas resurss
VÄrteja ir Kubernetes CRD (pielÄgota resursu definÄ«cija), kas definÄta pÄc Istio instalÄÅ”anas klasterÄ« un dod iespÄju norÄdÄ«t portus, protokolu un saimniekdatorus, kuriem mÄs vÄlamies atļaut ienÄkoÅ”o trafiku.
MÅ«su gadÄ«jumÄ mÄs vÄlamies atļaut HTTP trafiku 80. portÄ visiem saimniekiem. Uzdevums tiek Ä«stenots ar Å”Ädu definÄ«ciju (http-gateway.yaml):
Å ai konfigurÄcijai nav nepiecieÅ”ams paskaidrojums, izÅemot selektoru istio: ingressgateway. Ar Å”o atlasÄ«tÄju mÄs varam norÄdÄ«t, kurai ieejas vÄrtejai lietot konfigurÄciju. MÅ«su gadÄ«jumÄ tas ir Ingress Gateway kontrolleris, kas Istio tika instalÄts pÄc noklusÄjuma.
KonfigurÄcija tiek piemÄrota, izsaucot Å”Ädu komandu:
$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created
Tagad vÄrteja ļauj piekļūt 80. portam, taÄu tam nav ne jausmas, kur novirzÄ«t pieprasÄ«jumus. Å im nolÅ«kam jums bÅ«s nepiecieÅ”ams VirtuÄlie pakalpojumi.
VirtuÄlÄ pakalpojuma resurss
VirtuÄlais pakalpojums norÄda ieejas vÄrtejai, kÄ marÅ”rutÄt pieprasÄ«jumus, kas ir atļauti klasterÄ«.
PieprasÄ«jumi mÅ«su lietojumprogrammai, kas tiek saÅemti, izmantojot http-gateway, ir jÄnosÅ«ta sa-frontend, sa-web-app un sa-feedback pakalpojumiem:
MarÅ”ruti, kas jÄkonfigurÄ, izmantojot VirtualServices
ApskatÄ«sim pieprasÄ«jumus, kas jÄnosÅ«ta SA-Frontend:
PrecÄ«za sakritÄ«ba pa ceļam / jÄnosÅ«ta uz SA-Frontend, lai iegÅ«tu index.html;
Prefiksi ceļi /static/* jÄnosÅ«ta uz SA-Frontend, lai saÅemtu priekÅ”galÄ izmantotos statiskos failus, piemÄram, CSS un JavaScript;
Ceļi, kas atbilst regulÄrai izteiksmei '^.*.(ico|png|jpg)$', jÄnosÅ«ta uz SA-Frontend, jo Å ie ir lapÄ redzamie attÄli.
Å is virtuÄlais pakalpojums attiecas uz pieprasÄ«jumiem, kas tiek saÅemti http-vÄrteja;
Š destination Tiek noteikts pakalpojums, kuram tiek nosÅ«tÄ«ti pieprasÄ«jumi.
PiezÄ«me: iepriekÅ” minÄtÄ konfigurÄcija tiek saglabÄta failÄ sa-virtualservice-external.yaml, kas satur arÄ« iestatÄ«jumus marÅ”rutÄÅ”anai programmÄs SA-WebApp un SA-Feedback, taÄu Ä«suma labad tas Å”eit ir saÄ«sinÄts.
Pieteiksim VirtualService, zvanot:
$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created
PiezÄ«me: Kad mÄs patÄrÄjam Istio resursus, Kubernetes API serveris izveido notikumu, ko saÅem Istio vadÄ«bas plakne, un pÄc tam jaunÄ konfigurÄcija tiek lietota katra poda Envoy starpniekserveriem. Un Ingress Gateway kontrolleris, Ŕķiet, ir vÄl viens sÅ«tnis, kas konfigurÄts vadÄ«bas plaknÄ. DiagrammÄ tas viss izskatÄs Å”Ädi:
Sentimenta analÄ«zes lietojumprogramma tagad ir pieejama vietnÄ http://{EXTERNAL-IP}/. Neuztraucieties, ja saÅemat statusu Nav atrasts: Dažreiz paiet nedaudz ilgÄks laiks, lÄ«dz konfigurÄcija stÄjas spÄkÄ un sÅ«tÅa keÅ”atmiÅas tiek atjauninÄtas.
Pirms turpinÄt, nedaudz spÄlÄjiet ar lietotni, lai radÄ«tu trafiku. (tÄ klÄtbÅ«tne ir nepiecieÅ”ama skaidrÄ«bas labad turpmÄkajÄs darbÄ«bÄs - apm. tulk.).
Kiali: novÄrojamÄ«ba
Lai nokļūtu Kiali administratÄ«vajÄ saskarnÄ, palaidiet Å”Ädu komandu:
$ kubectl port-forward
$(kubectl get pod -n istio-system -l app=kiali
-o jsonpath='{.items[0].metadata.name}')
-n istio-system 20001
... un atvÄrts http://localhost:20001/, piesakoties kÄ admin/admin. Å eit jÅ«s atradÄ«siet daudzas noderÄ«gas funkcijas, piemÄram, lai pÄrbaudÄ«tu Istio komponentu konfigurÄciju, vizualizÄtu pakalpojumus, izmantojot informÄciju, kas savÄkta, pÄrtverot tÄ«kla pieprasÄ«jumus, saÅemtu atbildes uz jautÄjumiem āKas ar ko sazinÄs?ā, āKura pakalpojuma versija ir pieejama. neveiksmes?ā un tÄ tÄlÄk. VispÄrÄ«gi izpÄtiet Kiali iespÄjas, pirms pÄriet pie metrikas vizualizÄcijas ar Grafana.
Grafana: metrikas vizualizÄcija
Istio apkopotÄ metrika tiek iekļauta Prometheus un tiek vizualizÄta ar Grafana. Lai piekļūtu Grafana administratÄ«vajam interfeisam, palaidiet tÄlÄk norÄdÄ«to komandu un pÄc tam atveriet http://localhost:3000/:
$ kubectl -n istio-system port-forward
$(kubectl -n istio-system get pod -l app=grafana
-o jsonpath={.items[0].metadata.name}) 3000
NoklikŔķinot uz izvÄlnes SÄkumlapa augÅ”ÄjÄ kreisajÄ stÅ«rÄ« un atlasot Istio pakalpojumu informÄcijas panelis augÅ”ÄjÄ kreisajÄ stÅ«rÄ« sÄciet ar apkalpoÅ”anu sa-web-applai apskatÄ«tu apkopotos rÄdÄ«tÄjus:
Å eit mÅ«s sagaida tukÅ”a un pilnÄ«gi garlaicÄ«ga izrÄde - vadÄ«ba to nekad neapstiprinÄs. Izveidosim nelielu slodzi ar Å”Ädu komandu:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Tagad mums ir daudz jaukÄki grafiki un papildus tiem brÄ«niŔķīgi Prometheus rÄ«ki uzraudzÄ«bai un Grafana metrikas vizualizÄcijai, kas ļaus mums uzzinÄt par veiktspÄju, veselÄ«bu, pakalpojumu uzlabojumiem / pasliktinÄÅ”anos laika gaitÄ.
Visbeidzot, apskatīsim pakalpojumu izsekoŔanas pieprasījumus.
JÄgers: izsekoÅ”ana
Mums bÅ«s nepiecieÅ”ama izsekoÅ”ana, jo jo vairÄk pakalpojumu mums ir, jo grÅ«tÄk ir atrast neveiksmes cÄloni. ApskatÄ«sim vienkÄrÅ”u gadÄ«jumu no tÄlÄk redzamÄ attÄla:
PieprasÄ«jums nÄk, krÄ«t - kÄds ir iemesls? Pirmais serviss? Vai arÄ« otrais? Abos ir izÅÄmumi ā apskatÄ«sim katra žurnÄlu. Cik bieži esat pieÄ·Äris sevi to darÄm? MÅ«su darbs vairÄk lÄ«dzinÄs programmatÅ«ras detektÄ«viem, nevis izstrÄdÄtÄjiem...
TÄ ir izplatÄ«ta problÄma mikropakalpojumos, un to risina izkliedÄtÄs izsekoÅ”anas sistÄmas, kurÄs pakalpojumi viens otram nodod unikÄlu galveni, pÄc kura Ŕī informÄcija tiek pÄrsÅ«tÄ«ta uz izsekoÅ”anas sistÄmu, kur tÄ tiek salÄ«dzinÄta ar pieprasÄ«juma datiem. Å eit ir ilustrÄcija:
TraceId tiek izmantots, lai identificÄtu pieprasÄ«jumu
Istio izmanto Jaeger Tracer, kas ievieÅ” no pÄrdevÄja neatkarÄ«gu OpenTracing API ietvaru. Jaeger lietotÄja interfeisam varat piekļūt ar Å”Ädu komandu:
$ kubectl port-forward -n istio-system
$(kubectl get pod -n istio-system -l app=jaeger
-o jsonpath='{.items[0].metadata.name}') 16686
Tagad dodieties uz http://localhost:16686/ un izvÄlieties pakalpojumu sa-web-app. Ja pakalpojums netiek rÄdÄ«ts nolaižamajÄ izvÄlnÄ, parÄdiet/Ä£enerÄjiet lapÄ darbÄ«bu un atjauniniet saskarni. PÄc tam noklikŔķiniet uz pogas Atrodiet pÄdas, kurÄ bÅ«s redzamas jaunÄkÄs pÄdas - atlasiet jebkuru - parÄdÄ«sies detalizÄta informÄcija par visÄm pÄdÄm:
Å Ä« pÄda parÄda:
PieprasÄ«jums ienÄk istio-ingressgateway (Ŕī ir pirmÄ mijiedarbÄ«ba ar vienu no pakalpojumiem, un pieprasÄ«jumam tiek Ä£enerÄts izsekoÅ”anas ID), pÄc kura vÄrteja nosÅ«ta pieprasÄ«jumu pakalpojumam sa-web-app.
ServisÄ sa-web-app pieprasÄ«jumu paÅem sÅ«tÅa blakusvÄÄ£is, laidumÄ tiek izveidots ābÄrnsā (tÄpÄc mÄs to redzam pÄdÄs) un novirzÄ«ts uz konteineru sa-web-app. (SprÄ«dis - loÄ£iskÄ darba vienÄ«ba JÄgerÄ, kurai ir nosaukums, operÄcijas sÄkuma laiks un ilgums. Laidumus var ligzdot un sakÄrtot. VirzÄ«ts aciklisks laidumu grafiks veido pÄdu. ā apm. tulk.)
Å eit pieprasÄ«jums tiek apstrÄdÄts pÄc metodes sentimenta analÄ«ze. Å Ä«s pÄdas jau ir Ä£enerÄtas lietojumprogrammÄ, t.i. viÅiem bija nepiecieÅ”amas koda izmaiÅas.
No Ŕī brīža tiek uzsÄkts POST pieprasÄ«jums sa-loÄ£ika. IzsekoÅ”anas ID ir jÄpÄrsÅ«ta no sa-web-app.
...
PiezÄ«me: 4. darbÄ«bÄ lietojumprogrammai ir jÄredz Istio Ä£enerÄtÄs galvenes un jÄnosÅ«ta tÄs nÄkamajiem pieprasÄ«jumiem, kÄ parÄdÄ«ts tÄlÄk esoÅ”ajÄ attÄlÄ:
(A) Istio ir atbildÄ«gs par galveÅu pÄrsÅ«tÄ«Å”anu; (B) Pakalpojumi ir atbildÄ«gi par galvenÄm
Istio veic lielÄko daļu darba, jo... Ä£enerÄ ienÄkoÅ”o pieprasÄ«jumu galvenes, katrÄ blakusaprÅ«pÄ izveido jaunus posmus un pÄrsÅ«ta tos. TomÄr, nestrÄdÄjot ar galvenÄm pakalpojumos, tiks zaudÄts viss pieprasÄ«juma izsekoÅ”anas ceļŔ.
Tas nav sarežģīts uzdevums, taÄu, lai vienkÄrÅ”otu tÄ ievieÅ”anu, tas jau ir daudzas bibliotÄkas - piemÄram, sa-web-app pakalpojumÄ RestTemplate klients pÄrsÅ«ta Ŕīs galvenes, ja jÅ«s vienkÄrÅ”i pievienojat Jaeger un OpenTracing bibliotÄkas viÅa atkarÄ«bas.
Å emiet vÄrÄ, ka sentimentu analÄ«zes lietojumprogramma demonstrÄ ievieÅ”anu Flask, Spring un ASP.NET Core.
Tagad, kad ir skaidrs, ko mÄs iegÅ«stam no kastes (vai gandrÄ«z no kastes), apskatÄ«sim precÄ«zi noregulÄtu marÅ”rutÄÅ”anu, tÄ«kla trafika pÄrvaldÄ«bu, droŔību utt.!
PiezÄ«me. tulk.: Lasiet par to nÄkamajÄ Rinor Maloku materiÄlu par Istio daļÄ, kuru tulkojumi tuvÄkajÄ laikÄ tiks publicÄti mÅ«su emuÄrÄ. UPDATE (14. marts): OtrÄ daļa jau ir publicÄts.