Rudi kwa huduma ndogo na Istio. Sehemu 1

Rudi kwa huduma ndogo na Istio. Sehemu 1

Kumbuka. tafsiri.: Matundu ya huduma kwa hakika yamekuwa suluhisho linalofaa katika miundombinu ya kisasa kwa programu zinazofuata usanifu wa huduma ndogo. Ingawa Istio inaweza kuwa kwenye midomo ya wahandisi wengi wa DevOps, ni bidhaa mpya kabisa ambayo, ingawa ni ya kina kulingana na uwezo inayotoa, inaweza kuhitaji muda mwingi ili kuifahamu. Mhandisi wa Ujerumani Rinor Maloku, ambaye anahusika na kompyuta ya wingu kwa wateja wakubwa katika kampuni ya mawasiliano ya Orange Networks, ameandika mfululizo wa ajabu wa nyenzo zinazokuwezesha kupiga mbizi kwa haraka na kwa undani katika Istio. Anaanza hadithi yake na kile Istio inaweza kufanya kwa ujumla na jinsi unavyoweza kuiona haraka kwa macho yako mwenyewe.

Istio - Mradi wa Open Source uliotengenezwa kwa ushirikiano na timu kutoka Google, IBM na Lyft. Inasuluhisha ugumu unaotokea katika matumizi ya msingi wa huduma ndogo, kama vile:

  • Usimamizi wa Trafiki: kuisha, kujaribu tena, kusawazisha mzigo;
  • usalama: uthibitishaji na idhini ya mtumiaji wa mwisho;
  • Kuzingatiwa: ufuatiliaji, ufuatiliaji, ukataji miti.

Yote haya yanaweza kutatuliwa kwa kiwango cha maombi, lakini baada ya hapo huduma zako hazitakuwa tena "micro". Juhudi zote za ziada za kutatua matatizo haya ni upotevu wa rasilimali za kampuni ambazo zinaweza kutumika moja kwa moja kwa thamani ya biashara. Hebu tuangalie mfano:

Meneja wa Mradi: Inachukua muda gani kuongeza kipengele cha maoni?
Msanidi programu: Sprints mbili.

Mbunge: Nini?.. Ni CRUD tu!
R: Kufanya CRUD ni sehemu rahisi, lakini bado tunahitaji kuthibitisha na kuidhinisha watumiaji na huduma. Kwa kuwa mtandao hauaminiki, utahitaji kutekeleza maombi ya mara kwa mara, pamoja na muundo wa mzunguko wa mzunguko katika wateja. Pia, ili kuhakikisha kuwa mfumo mzima hauanguka, utahitaji muda na vichwa vingi (kwa maelezo zaidi kuhusu mifumo yote miwili iliyotajwa, tazama baadaye katika makala - takriban transl.), na ili kugundua matatizo, ufuatiliaji, ufuatiliaji, […]

Mbunge: Lo, basi hebu tuweke kipengele hiki kwenye huduma ya Bidhaa.

Nadhani wazo ni wazi: kiasi cha hatua na jitihada zinazohitajika ili kuongeza huduma moja ni kubwa sana. Katika makala hii, tutaangalia jinsi Istio inaondoa ugumu wote uliotajwa hapo juu (ambao haukusudiwa kuwa mantiki ya biashara) kutoka kwa huduma.

Rudi kwa huduma ndogo na Istio. Sehemu 1

Kumbuka: Makala haya yanachukulia kuwa una ujuzi wa kufanya kazi wa Kubernetes. Vinginevyo, napendekeza kusoma utangulizi wangu kwa Kubernetes na tu baada ya hayo kuendelea kusoma nyenzo hii.

Wazo la Istio

Katika ulimwengu usio na Istio, huduma moja hufanya maombi ya moja kwa moja kwa mwingine, na katika tukio la kushindwa, huduma lazima ishughulikie yenyewe: kufanya jaribio jipya, kutoa muda, kufungua mzunguko wa mzunguko, nk.

Rudi kwa huduma ndogo na Istio. Sehemu 1
Trafiki ya mtandao huko Kubernetes

Istio inatoa suluhisho maalum, iliyotengwa kabisa na huduma na kufanya kazi kwa kuingilia mawasiliano ya mtandao. Na kwa hivyo inatekelezwa:

  • uvumilivu wa makosa: Kulingana na msimbo wa hali katika jibu, inaelewa kama ombi halikufaulu na kulitekeleza tena.
  • Utoaji wa Canary: inaelekeza kwingine asilimia maalum tu ya maombi kwa toleo jipya la huduma.
  • Ufuatiliaji na vipimo: Ilichukua muda gani kwa huduma kujibu?
  • Kufuatilia na Kuzingatiwa: Huongeza vichwa maalum kwa kila ombi na kuvifuatilia kwenye nguzo.
  • usalama: Hurejesha tokeni ya JWT, huthibitisha na kuwaidhinisha watumiaji.

Hizi ni baadhi tu ya uwezekano (kwa kweli ni chache tu!) za kukutia moyo. Sasa hebu tuzame kwenye maelezo ya kiufundi!

Usanifu wa Istio

Istio hukatiza trafiki yote ya mtandao na kutumia seti ya sheria kwake, ikiingiza proksi mahiri katika umbo la kontena la kando kwenye kila ganda. Wakala ambao huwasha uwezo wote huunda a Ndege ya Data, na zinaweza kusanidiwa kwa nguvu kwa kutumia Udhibiti wa Ndege.

Ndege ya Data

Proksi zilizoingizwa kwenye maganda huruhusu Istio kukidhi mahitaji tunayohitaji kwa urahisi. Kwa mfano, hebu tuangalie kazi za kujaribu tena na za kivunja mzunguko.

Rudi kwa huduma ndogo na Istio. Sehemu 1
Jinsi majaribio na uvunjaji wa mzunguko hutekelezwa katika Mjumbe

Kwa muhtasari:

  1. mjumbe (tunazungumza juu ya proksi iliyo kwenye kontena ya kando, ambayo inasambazwa kama bidhaa tofauti - takriban. tafsiri.) hutuma ombi kwa tukio la kwanza la huduma B na inashindwa.
  2. Mjumbe Sidecar anajaribu tena (jaribu tena). (1)
  3. Ombi halijafaulu na kurudishwa kwa seva mbadala iliyoliita.
  4. Hii inafungua Kivunja Mzunguko na kuita huduma inayofuata kwa maombi yanayofuata. (2)

Hii inamaanisha kuwa sio lazima utumie maktaba nyingine ya Jaribu tena, sio lazima ufanye utekelezaji wako mwenyewe wa Uvunjaji wa Mzunguko na Ugunduzi wa Huduma katika lugha ya programu X, Y au Z. Haya yote na mengi zaidi yanapatikana nje ya boksi. katika Istio na hauhitaji hakuna mabadiliko katika kanuni.

Kubwa! Sasa unaweza kutaka kwenda safari na Istio, lakini bado una mashaka, maswali wazi. Ikiwa hii ni suluhisho la ulimwengu kwa matukio yote ya maisha, basi una mashaka ya asili: baada ya yote, ufumbuzi wote huo kwa kweli hugeuka kuwa haifai kwa kesi yoyote.

Na mwishowe unauliza: "Je! inaweza kubinafsishwa?"

Sasa uko tayari kwa safari ya baharini, hebu tufahamiane na Ndege ya Kudhibiti.

Udhibiti wa Ndege

Inajumuisha vipengele vitatu: Pilot, mixer ΠΈ Ngome, ambayo hufanya kazi pamoja kusanidi Wajumbe kuelekeza trafiki, kutekeleza sera na kukusanya data ya telemetry. Kwa utaratibu yote yanaonekana kama hii:

Rudi kwa huduma ndogo na Istio. Sehemu 1
Mwingiliano wa Ndege ya Kudhibiti na Ndege ya Data

Wajumbe (yaani data ndege) wamesanidiwa kwa kutumia Kubernetes CRD (Ufafanuzi wa Rasilimali Maalum) unaofafanuliwa na Istio na unakusudiwa mahususi kwa madhumuni haya. Hii inamaanisha kwako ni kwamba zinaonekana kuwa rasilimali nyingine tu katika Kubernetes yenye syntax inayofahamika. Mara baada ya kuundwa, rasilimali hii itachukuliwa na ndege ya udhibiti na kutumika kwa Wajumbe.

Uhusiano wa huduma kwa Istio

Tumeelezea uhusiano wa Istio na huduma, lakini sio kinyume: huduma zinahusiana vipi na Istio?

Kusema kweli, huduma zinafahamu uwepo wa Istio kama samaki walivyo wa maji wanapojiuliza, "Maji ni nini?"

Rudi kwa huduma ndogo na Istio. Sehemu 1
Kielelezo Victoria Dimitrakopoulos: - Unapendaje maji? - Maji ni nini?

Kwa hivyo, unaweza kuchukua kikundi cha kazi na baada ya kusambaza vipengele vya Istio, huduma ziko ndani yake zitaendelea kufanya kazi, na baada ya kuondoa vipengele hivi, kila kitu kitakuwa sawa tena. Ni wazi kwamba katika kesi hii utapoteza uwezo uliotolewa na Istio.

Nadharia ya kutosha - hebu tuweke ujuzi huu katika vitendo!

Istio katika mazoezi

Istio inahitaji kundi la Kubernetes lenye angalau vCPU 4 na GB 8 za RAM zinazopatikana. Ili kusanidi kikundi haraka na kufuata maagizo kutoka kwa kifungu, ninapendekeza kutumia Google Cloud Platform, ambayo inatoa watumiaji wapya. bure $300.

Baada ya kuunda kikundi na kusanidi ufikiaji wa Kubernetes kupitia matumizi ya kiweko, unaweza kusakinisha Istio kupitia kidhibiti cha kifurushi cha Helm.

Ufungaji wa helm

Sakinisha mteja wa Helm kwenye kompyuta yako, kama ilivyoelezewa katika nyaraka rasmi. Tutatumia hii kutengeneza violezo vya kusakinisha Istio katika sehemu inayofuata.

Inasakinisha Istio

Pakua rasilimali za Istio kutoka toleo jipya zaidi (kiungo cha mwandishi asili kwa toleo la 1.0.5 kimebadilishwa hadi cha sasa, yaani 1.0.6 - takriban transl.), toa yaliyomo kwenye saraka moja, ambayo nitapiga simu sasa [istio-resources].

Ili kutambua rasilimali za Istio kwa urahisi, tengeneza nafasi ya majina katika nguzo ya K8s istio-system:

$ kubectl create namespace istio-system

Kamilisha usakinishaji kwa kwenda kwenye saraka [istio-resources] na kuendesha amri:

$ helm template install/kubernetes/helm/istio 
  --set global.mtls.enabled=false 
  --set tracing.enabled=true 
  --set kiali.enabled=true 
  --set grafana.enabled=true 
  --namespace istio-system > istio.yaml

Amri hii itatoa vipengele muhimu vya Istio kwenye faili istio.yaml. Tulirekebisha kiolezo cha kawaida ili kutufaa, tukibainisha vigezo vifuatavyo:

  • global.mtls.enabled imewekwa ndani false (yaani uthibitishaji wa mTLS umezimwa - takriban.)kurahisisha mchakato wetu wa kuchumbiana;
  • tracing.enabled inajumuisha ufuatiliaji wa ombi kwa kutumia Jaeger;
  • kiali.enabled inasakinisha Kiali kwenye kikundi ili kuibua huduma na trafiki;
  • grafana.enabled inasakinisha Grafana ili kuibua vipimo vilivyokusanywa.

Wacha tutumie rasilimali zinazozalishwa na amri:

$ kubectl apply -f istio.yaml

Ufungaji wa Istio kwenye nguzo umekamilika! Subiri hadi ganda zote ziwe kwenye nafasi ya majina istio-system wataweza Running au Completedkwa kuendesha amri hapa chini:

$ kubectl get pods -n istio-system

Sasa tuko tayari kuendelea katika sehemu inayofuata, ambapo tutaweza kupata programu na kufanya kazi.

Usanifu wa maombi ya Uchambuzi wa Sentiment

Wacha tutumie mfano wa utumizi wa huduma ndogo ya Uchambuzi wa Sentiment iliyotumiwa katika iliyotajwa tayari Nakala ya utangulizi kwa Kubernetes. Ni changamano vya kutosha kuonyesha uwezo wa Istio kwa vitendo.

Maombi yana huduma ndogo nne:

  1. Huduma SA-Mbele, ambayo hutumikia sehemu ya mbele ya programu ya Reactjs;
  2. Huduma SA-WebApp, ambayo hutumikia maswali ya Uchambuzi wa Hisia;
  3. Huduma SA-Mantiki, ambayo hufanya yenyewe uchambuzi wa hisia;
  4. Huduma SA-Maoni, ambayo hupokea maoni kutoka kwa watumiaji kuhusu usahihi wa uchambuzi.

Rudi kwa huduma ndogo na Istio. Sehemu 1

Katika mchoro huu, pamoja na huduma, tunaona pia Kidhibiti cha Ingress, ambacho katika Kubernetes huelekeza maombi yanayoingia kwa huduma zinazofaa. Istio hutumia dhana kama hiyo ndani ya Njia yake ya Kuingia, maelezo zaidi ambayo yatafuata.

Kuendesha programu kwa kutumia proksi kutoka Istio

Kwa shughuli zaidi zilizotajwa katika kifungu, fanya hazina yako istio-umahiri. Ina programu na maonyesho ya Kubernetes na Istio.

Kuingiza sidecars

Uingizaji unaweza kufanywa moja kwa moja au kwa mkono. Ili kuingiza vyombo vya kando kiotomatiki, utahitaji kuweka lebo kwenye nafasi ya majina istio-injection=enabled, ambayo inafanywa kwa amri ifuatayo:

$ kubectl label namespace default istio-injection=enabled
namespace/default labeled

Sasa kila ganda ambalo litatumwa katika nafasi ya jina chaguo-msingi (default) itapokea kontena lake la kando. Ili kuthibitisha hili, hebu tupeleke maombi ya majaribio kwa kwenda kwenye saraka ya mizizi ya hazina [istio-mastery] na kuendesha amri ifuatayo:

$ 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

Baada ya kupeleka huduma, wacha tuangalie ikiwa maganda yana vyombo viwili (na huduma yenyewe na gari lake la kando) kwa kuendesha amri. kubectl get pods na kuhakikisha kuwa chini ya safu READY thamani iliyobainishwa 2/2, ikiashiria kuwa vyombo vyote viwili vinaendelea:

$ 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

Kwa kuibua inaonekana kama hii:

Rudi kwa huduma ndogo na Istio. Sehemu 1
Wakala wa mjumbe katika moja ya maganda

Kwa kuwa sasa programu imeanzishwa, tutahitaji kuruhusu trafiki inayoingia kuja kwenye programu.

Ingress Gateway

Mbinu bora ya kufanikisha hili (kuruhusu trafiki kwenye nguzo) ni kupitia Ingress Gateway katika Istio, ambayo iko kwenye β€œkingo” cha nguzo na hukuruhusu kuwezesha vipengele vya Istio kama vile uelekezaji, kusawazisha mizigo, usalama na ufuatiliaji wa trafiki inayoingia.

Sehemu ya Ingress Gateway na huduma inayoipeleka nje zilisakinishwa kwenye nguzo wakati wa usakinishaji wa Istio. Ili kujua anwani ya IP ya nje ya huduma, endesha:

$ 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

Tutaendelea kupata programu tumizi kwa kutumia IP hii (nitairejelea kama EXTERNAL-IP), kwa hivyo kwa urahisi tutaandika thamani hiyo kuwa tofauti:

$ EXTERNAL_IP=$(kubectl get svc -n istio-system 
  -l app=istio-ingressgateway 
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

Ukijaribu kufikia IP hii kupitia kivinjari sasa, utapokea hitilafu ya Huduma Haipatikani, kwa sababu kwa chaguo-msingi Istio huzuia trafiki yote inayoingia, Gateway bado haijafafanuliwa.

Rasilimali ya lango

Gateway ni CRD (Ufafanuzi wa Rasilimali Maalum) katika Kubernetes, iliyofafanuliwa baada ya kusakinisha Istio kwenye kundi na kuwezesha uwezo wa kubainisha milango, itifaki na wapangishi ambao tunataka kuruhusu trafiki inayoingia.

Kwa upande wetu, tunataka kuruhusu trafiki ya HTTP kwenye bandari 80 kwa wapangishi wote. Kazi hiyo inatekelezwa na ufafanuzi ufuatao (http-gateway.yaml):

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: http-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
- "*"

Usanidi huu hauhitaji maelezo isipokuwa kwa kiteuzi istio: ingressgateway. Kwa kichaguzi hiki tunaweza kubainisha ni Njia gani ya Ingress ya kutumia usanidi. Kwa upande wetu, hii ni mtawala wa Ingress Gateway, ambayo iliwekwa kwa default katika Istio.

Usanidi unatumika kwa kupiga amri ifuatayo:

$ kubectl apply -f resource-manifests/istio/http-gateway.yaml gateway.networking.istio.io/http-gateway created

Lango sasa linaruhusu ufikiaji wa bandari 80, lakini hajui ni wapi pa kuelekeza maombi. Kwa hili utahitaji Huduma za Virtual.

Rasilimali ya Huduma ya Virtual

VirtualService inaambia Ingress Gateway jinsi ya kuelekeza maombi ambayo yanaruhusiwa ndani ya nguzo.

Maombi kwa maombi yetu yanayokuja kupitia http-gateway lazima yatumwe kwa sa-frontend, sa-web-app na huduma za sa-feedback:

Rudi kwa huduma ndogo na Istio. Sehemu 1
Njia ambazo zinahitaji kusanidiwa na VirtualServices

Wacha tuangalie maombi ambayo yanapaswa kutumwa kwa SA-Frontend:

  • Mechi kamili njiani / inapaswa kutumwa kwa SA-Frontend ili kupata index.html;
  • Njia zilizowekwa awali /static/* lazima itumwe kwa SA-Frontend ili kupokea faili tuli zinazotumika katika sehemu ya mbele, kama vile CSS na JavaScript;
  • Njia zinazolingana na usemi wa kawaida '^.*.(ico|png|jpg)$', lazima ipelekwe kwa SA-Frontend, kwa sababu Hizi ni picha zinazoonyeshwa kwenye ukurasa.

Utekelezaji unapatikana kwa usanidi ufuatao (sa-virtualservice-external.yaml):

kind: VirtualService
metadata:
  name: sa-external-services
spec:
  hosts:
  - "*"
  gateways:
  - http-gateway                      # 1
  http:
  - match:
    - uri:
        exact: /
    - uri:
        exact: /callback
    - uri:
        prefix: /static
    - uri:
        regex: '^.*.(ico|png|jpg)$'
    route:
    - destination:
        host: sa-frontend             # 2
        port:
number: 80

Pointi muhimu:

  1. Huduma hii ya Virtual inarejelea maombi yanayokuja http-lango;
  2. Π’ destination Huduma ambayo maombi hutumwa imedhamiriwa.

Kumbuka: Usanidi ulio hapo juu umehifadhiwa kwenye faili sa-virtualservice-external.yaml, ambayo pia ina mipangilio ya kuelekeza katika SA-WebApp na SA-Feedback, lakini imefupishwa hapa katika makala kwa ufupi.

Wacha tutumie Huduma ya Virtual kwa kupiga simu:

$ kubectl apply -f resource-manifests/istio/sa-virtualservice-external.yaml
virtualservice.networking.istio.io/sa-external-services created

Kumbuka: Tunapotumia rasilimali za Istio, Seva ya Kubernetes API huunda tukio ambalo linapokelewa na Ndege ya Kudhibiti ya Istio, na baada ya hapo usanidi mpya unatumika kwa kila proksi za Wajumbe wa pod. Na kidhibiti cha Ingress Gateway kinaonekana kuwa Mjumbe mwingine aliyesanidiwa katika Ndege ya Kudhibiti. Yote hii inaonekana kama hii kwenye mchoro:

Rudi kwa huduma ndogo na Istio. Sehemu 1
Usanidi wa Istio-IngressGateway kwa uelekezaji wa ombi

Programu ya Uchambuzi wa Sentiment sasa inapatikana kwenye http://{EXTERNAL-IP}/. Usijali ikiwa utapata hali ya kutopatikana: Wakati mwingine inachukua muda mrefu zaidi kwa usanidi kuanza kutumika na kache za Mjumbe kusasisha.

Kabla ya kuendelea, cheza na programu kidogo ili kuzalisha trafiki. (uwepo wake ni muhimu kwa uwazi katika vitendo vinavyofuata - takriban. transl.).

Kiali: kuzingatiwa

Ili kufikia kiolesura cha kiutawala cha Kiali, endesha amri ifuatayo:

$ kubectl port-forward 
    $(kubectl get pod -n istio-system -l app=kiali 
    -o jsonpath='{.items[0].metadata.name}') 
    -n istio-system 20001

... na kufungua http://localhost:20001/, ingia kama admin/admin. Hapa utapata vipengele vingi muhimu, kwa mfano, kuangalia usanidi wa vipengele vya Istio, taswira ya huduma kwa kutumia habari iliyokusanywa kutoka kwa maombi ya mtandao, kupata majibu ya maswali "Nani anawasiliana na nani?", "Ni toleo gani la huduma linakabiliwa. kushindwa?” Nakadhalika. Kwa ujumla, chunguza uwezo wa Kiali kabla ya kuendelea na taswira ya vipimo na Grafana.

Rudi kwa huduma ndogo na Istio. Sehemu 1

Grafana: taswira ya vipimo

Vipimo vinavyokusanywa katika Istio huenda kwenye Prometheus na kuonyeshwa kwa Grafana. Ili kufikia kiolesura cha kiutawala cha Grafana, endesha amri iliyo hapa chini kisha ufungue 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

Kubofya kwenye menyu Nyumbani juu kushoto na kuchagua Dashibodi ya Huduma ya Istio kwenye kona ya juu kushoto, anza na huduma sa-mtandao-programukuangalia vipimo vilivyokusanywa:

Rudi kwa huduma ndogo na Istio. Sehemu 1

Kinachotungoja hapa ni utendaji tupu na wa kuchosha kabisa - usimamizi hautawahi kuidhinisha hili. Wacha tuunda mzigo mdogo na amri ifuatayo:

$ while true; do 
    curl -i http://$EXTERNAL_IP/sentiment 
    -H "Content-type: application/json" 
    -d '{"sentence": "I love yogobella"}'; 
    sleep .8; done

Sasa tunayo grafu nzuri zaidi, na kwa kuongezea, zana nzuri za Prometheus za ufuatiliaji na Grafana za kuibua metriki ambazo zitaturuhusu kujifunza juu ya utendaji, afya, maboresho / uharibifu wa huduma kwa wakati.

Hatimaye, hebu tuangalie kufuatilia maombi katika huduma.

Jaeger: kufuatilia

Tutahitaji ufuatiliaji kwa sababu huduma nyingi tunazo, ndivyo inavyokuwa vigumu kupata sababu ya kushindwa. Wacha tuangalie kesi rahisi kutoka kwa picha hapa chini:

Rudi kwa huduma ndogo na Istio. Sehemu 1
Mfano wa kawaida wa ombi lisilofaulu bila mpangilio

Ombi linakuja, linaanguka - sababu ni nini? Huduma ya kwanza? Au ya pili? Kuna tofauti katika zote mbili - wacha tuangalie magogo ya kila moja. Je, umejipata ukifanya hivi mara ngapi? Kazi yetu ni kama wapelelezi wa programu kuliko wasanidi...

Hili ni shida ya kawaida katika huduma ndogo na hutatuliwa na mifumo iliyosambazwa ya ufuatiliaji, ambayo huduma hupitisha kichwa cha kipekee kwa kila mmoja, baada ya hapo habari hii inatumwa kwa mfumo wa ufuatiliaji, ambapo inalinganishwa na data ya ombi. Hapa kuna kielelezo:

Rudi kwa huduma ndogo na Istio. Sehemu 1
TraceId inatumika kutambua ombi

Istio hutumia Jaeger Tracer, ambayo hutekeleza mfumo wa OpenTracing API unaojitegemea. Unaweza kufikia kiolesura cha mtumiaji wa Jaeger kwa amri ifuatayo:

$ kubectl port-forward -n istio-system 
    $(kubectl get pod -n istio-system -l app=jaeger 
    -o jsonpath='{.items[0].metadata.name}') 16686

Sasa nenda kwa http://localhost:16686/ na uchague huduma sa-mtandao-programu. Ikiwa huduma haijaonyeshwa kwenye menyu kunjuzi, onyesha/toa shughuli kwenye ukurasa na usasishe kiolesura. Baada ya hayo, bonyeza kitufe Tafuta Athari, ambayo itaonyesha athari za hivi karibuni - chagua - habari ya kina juu ya athari zote itaonekana:

Rudi kwa huduma ndogo na Istio. Sehemu 1

Ufuatiliaji huu unaonyesha:

  1. Ombi linaingia istio-ingressgateway (huu ni mwingiliano wa kwanza na moja ya huduma, na Kitambulisho cha Kufuatilia kinatolewa kwa ombi), baada ya hapo lango hutuma ombi kwa huduma. sa-mtandao-programu.
  2. Kwenye huduma sa-mtandao-programu ombi linachukuliwa na gari la kando la Mjumbe, "mtoto" huundwa kwa muda (ndio sababu tunaiona kwenye athari) na kuelekezwa kwenye chombo. sa-mtandao-programu. (Span - kitengo cha mantiki cha kazi huko Jaeger, ambacho kina jina, wakati wa kuanza kwa operesheni na muda wake. Spans zinaweza kuwekwa na kuamuru. Grafu ya acyclic iliyoelekezwa ya spans huunda ufuatiliaji. - takriban. tafsiri.)
  3. Hapa ombi linashughulikiwa na mbinu Uchambuzi wa hisia. Ufuatiliaji huu tayari umetolewa na programu, i.e. walihitaji mabadiliko ya kanuni.
  4. Kuanzia wakati huu na kuendelea, ombi la POST linaanzishwa sa-mantiki. Kitambulisho cha ufuatiliaji lazima kisambazwe kutoka sa-mtandao-programu.
  5. ...

Kumbuka: Katika hatua ya 4, programu inapaswa kuona vichwa vilivyotolewa na Istio na kuvipitisha kwa maombi yanayofuata kama inavyoonyeshwa kwenye picha hapa chini:

Rudi kwa huduma ndogo na Istio. Sehemu 1
(A) Istio ina jukumu la kusambaza vichwa; (B) Huduma zinawajibika kwa vichwa

Istio hufanya kazi nyingi kwa sababu... hutengeneza vichwa vya maombi yanayoingia, huunda nafasi mpya katika kila upande na kuzipeleka mbele. Hata hivyo, bila kufanya kazi na vichwa ndani ya huduma, njia kamili ya kufuatilia ombi itapotea.

Vichwa vifuatavyo vinapaswa kuzingatiwa:

x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context

Hii sio kazi ngumu, lakini kurahisisha utekelezaji wake tayari kuna maktaba nyingi - kwa mfano, katika huduma ya sa-web-app, mteja wa RestTemplate hupeleka vichwa hivi ikiwa utaongeza maktaba za Jaeger na OpenTracing kwenye uraibu wake.

Kumbuka kuwa programu ya Uchambuzi wa Sentiment inaonyesha utekelezaji katika Flask, Spring, na ASP.NET Core.

Sasa kwa kuwa ni wazi kile tunachopata kutoka kwenye boksi (au karibu nje ya boksi), hebu tuangalie uelekezaji uliopangwa vizuri, usimamizi wa trafiki wa mtandao, usalama, n.k.!

Kumbuka. tafsiri.: Soma kuhusu hili katika sehemu inayofuata ya nyenzo kwenye Istio kutoka kwa Rinor Maloku, ambayo tafsiri zake zitafuata kwenye blogu yetu hivi karibuni. UPDATE (Machi 14): Sehemu ya pili tayari imechapishwa.

PS kutoka kwa mtafsiri

Soma pia kwenye blogi yetu:

Chanzo: mapenzi.com

Kuongeza maoni