Emuva kuma-microservices nge-Istio. Ingxenye 1

Emuva kuma-microservices nge-Istio. Ingxenye 1

Qaphela. transl.: Amameshi esevisi abe yisixazululo esifanelekile kungqalasizinda yesimanje yezinhlelo zokusebenza ezilandela ukwakhiwa kwe-microservice. Nakuba i-Istio ingase ibe sezindebeni zonjiniyela abaningi be-DevOps, iwumkhiqizo omusha othe, nakuba uphelele ngokwamakhono ewunikezayo, ungase udinge isikhathi esibalulekile ukuze ujwayelane nawo. Unjiniyela waseJalimane u-Rinor Maloku, obhekele ukwenza ikhompuyutha yamafu kumakhasimende amakhulu enkampanini yezokuxhumana i-Orange Networks, ubhale uchungechunge oluhle lwezinto ezikuvumela ukuthi ungene ngokushesha nangokujulile ku-Istio. Uqala indaba yakhe ngalokho i-Istio engayenza ngokujwayelekile nokuthi ungayibona kanjani ngokushesha ngamehlo akho.

Istio - Iphrojekthi yomthombo ovulekile eyakhiwe ngokubambisana namaqembu avela ku-Google, IBM kanye neLyft. Ixazulula izingqinamba ezivela ezinhlelweni ezisuselwa ku-microservices, njenge:

  • Ukuphathwa Kwethrafikhi: ukuphela kwesikhathi, ukuzama futhi, ukulinganisa komthwalo;
  • Ukuphepha: ukuqinisekiswa komsebenzisi wokugcina nokugunyazwa;
  • Ukuqaphela: ukulandelela, ukuqapha, ukugawulwa kwemithi.

Konke lokhu kungaxazululwa ezingeni lesicelo, kodwa ngemva kwalokho izinsiza zakho ngeke zisaba β€œncane”. Yonke imizamo eyengeziwe yokuxazulula lezi zinkinga iwukumosha izinsiza zenkampani ezingase zisetshenziselwe inani lebhizinisi ngokuqondile. Ake sibheke isibonelo:

Umphathi Wephrojekthi: Kuthatha isikhathi esingakanani ukwengeza isici sempendulo?
Unjiniyela: Ama-sprints amabili.

MP: Yini?.. I-CRUD nje!
R: Ukwenza i-CRUD yingxenye elula, kodwa sisadinga ukuqinisekisa nokugunyaza abasebenzisi namasevisi. Njengoba inethiwekhi ingathembeki, uzodinga ukusebenzisa izicelo eziphindaphindiwe, kanye iphethini ye-circuit breaker kumakhasimende. Futhi, ukuze uqiniseke ukuthi lonke uhlelo aluphahlazeka, uzodinga izikhathi zokuvala kanye ama-bulkheads (ukuthola imininingwane eyengeziwe mayelana namaphethini omabili ashiwo, bheka kamuva esihlokweni - cishe. transl.), futhi ukuze kutholwe izinkinga, ukuqapha, ukulandelela, […]

MP: Oh, manje-ke ake sifake lesi sici kusevisi yoMkhiqizo.

Ngicabanga ukuthi umbono ucacile: inani lezinyathelo nomzamo odingekayo wokwengeza isevisi eyodwa likhulu kakhulu. Kulesi sihloko, sizobheka ukuthi i-Istio isusa kanjani yonke inkimbinkimbi eshiwo ngenhla (okungahlosiwe ukuba ibe nengqondo yebhizinisi) kusuka kumasevisi.

Emuva kuma-microservices nge-Istio. Ingxenye 1

Ukubhala: Lesi sihloko sithatha ukuthi unolwazi olusebenzayo lwe-Kubernetes. Uma kungenjalo, ngincoma ukufunda isingeniso sami ku-Kubernetes futhi kuphela ngemva kwalokho uqhubeke ufunda le nto.

Umbono we-Istio

Ezweni elingenayo i-Istio, insizakalo eyodwa yenza izicelo eziqondile komunye, futhi uma kwenzeka ukwehluleka, insizakalo kufanele iziphathe ngokwayo: yenza umzamo omusha, unikeze isikhathi sokuvala, uvule i-breaker circuit, njll.

Emuva kuma-microservices nge-Istio. Ingxenye 1
Ithrafikhi yenethiwekhi e-Kubernetes

I-Istio inikeza isisombululo esikhethekile, esihlukaniswe ngokuphelele nezinsizakalo nokusebenza ngokuphazamisa ukuxhumana kwenethiwekhi. Futhi ngaleyo ndlela isebenza:

  • ukubekezelelana kwamaphutha: Ngokusekelwe kukhodi yesimo empendulweni, iyaqonda ukuthi isicelo sehlulekile yini bese isenza kabusha.
  • Ukukhishwa kwe-Canary: iqondisa kabusha kuphela amaphesenti angashintshi ezicelo enguqulweni entsha yesevisi.
  • Ukuqapha namamethrikhi: Kuthathe isikhathi esingakanani ukuthi inkonzo iphendule?
  • Ukulandela nokubonakala: Yengeza izihloko ezikhethekile esicelweni ngasinye futhi ilandelela kuzo zonke iqoqo.
  • Ukuphepha: Ibuyisa ithokheni ye-JWT, iqinisekisa futhi igunyaze abasebenzisi.

Lawa ngamathuba ambalwa (okumbalwa nje!) okukuthakasela. Manje ake singene emininingwaneni yobuchwepheshe!

I-Istio Architecture

I-Istio ibamba yonke ithrafikhi yenethiwekhi futhi isebenzise isethi yemithetho kuyo, ifaka ummeleli ohlakaniphile osesimweni sesiqukathi se-sidecar kuphodi ngayinye. Amaphrokzi avula wonke amandla enza a Indiza Yedatha, futhi zingalungiswa ngokuguquguqukayo kusetshenziswa Indiza Yokulawula.

Indiza Yedatha

Ama-proxies afakwe kuma-pods avumela i-Istio ukuthi ihlangabezane kalula nezimfuneko esizidingayo. Isibonelo, ake sihlole imisebenzi ye-circuit breaker.

Emuva kuma-microservices nge-Istio. Ingxenye 1
Ukuthi ukuzama futhi nokuphulwa kwesekethe kuqaliswa kanjani kokuthi Envoy

Ukufingqa:

  1. isithunywa (sikhuluma ngommeleli otholakala esitsheni senqola eseceleni, esatshalaliswa njenge umkhiqizo ohlukene - cishe. transl.) ithumela isicelo esimweni sokuqala sesevisi B bese yehluleka.
  2. I-envoy Sidecar iyazama futhi (zama futhi). (1)
  3. Isicelo siyehluleka futhi sibuyiselwa kummeleli osibizile.
  4. Lokhu kuvula i-Circuit Breaker futhi kubize isevisi elandelayo ngezicelo ezilandelayo. (2)

Lokhu kusho ukuthi awudingi ukusebenzisa omunye umtapo wezincwadi Zama futhi, akudingekile ukuba uzenzele owakho ukusebenzisa i-Circuit Breaking and Service Discovery ngolimi lokuhlela X, Y noma Z. Konke lokhu nokunye okuningi kuyatholakala ngaphandle kwebhokisi. ku-Istio futhi ayidingi cha izinguquko kukhodi.

Kuhle! Manje ungase ufune ukuhamba nohambo nge-Istio, kodwa usenokungabaza, imibuzo evulekile. Uma lokhu kuyisixazululo sendawo yonke yazo zonke izikhathi zokuphila, khona-ke unokusola okungokwemvelo: ngemuva kwakho konke, zonke izixazululo ezinjalo empeleni ziphenduka zingafaneleki kunoma yiliphi icala.

Futhi ekugcineni uyabuza: "Ingabe kuyenzeka ngokwezifiso?"

Manje usulungele uhambo lwasolwandle, ake sijwayelane ne-Control Plane.

Indiza Yokulawula

Iqukethe izingxenye ezintathu: Pilot, I-mixer ΠΈ citadel, ezisebenza ndawonye ukuze zilungiselele Izithunywa umzila wethrafikhi, zisebenzise izinqubomgomo, futhi ziqoqe idatha ye-telemetry. Ngokohlelo konke kubukeka kanje:

Emuva kuma-microservices nge-Istio. Ingxenye 1
Ukusebenzisana Kwendiza Yokulawula Nendiza Yedatha

Izithunywa (okungukuthi indiza yedatha) zicushwa kusetshenziswa Kubernetes CRD (Izincazelo Zensiza Yangokwezifiso) echazwe yi-Istio futhi ihloselwe le njongo ngokuqondile. Lokhu kusho ukuthini kuwe ukuthi zibonakala zingenye insiza ku-Kubernetes ene-syntax ejwayelekile. Uma usudaliwe, le nsiza izothathwa yindiza yokulawula futhi isetshenziswe ku-Evoys.

Ubudlelwano bezinsizakalo ne-Istio

Sichaze ubudlelwano be-Istio nezinsizakalo, kodwa hhayi okuphambene: izinsiza zihlobene kanjani ne-Istio?

Uma sikhuluma iqiniso, izinsizakalo ziyaqaphela ukuba khona kwe-Istio njengoba izinhlanzi zingamanzi lapho zizibuza, "Ayini amanzi noma kunjalo?"

Emuva kuma-microservices nge-Istio. Ingxenye 1
Umfanekiso UVictoria Dimitrakopoulos: - Uwathanda kanjani amanzi? - Ayini amanzi?

Ngakho-ke, ungathatha iqoqo elisebenzayo futhi ngemva kokufaka izingxenye ze-Istio, izinsizakalo ezikuyo zizoqhubeka nokusebenza, futhi ngemva kokukhipha lezi zingxenye, konke kuzolunga futhi. Kuyacaca ukuthi kulokhu uzolahlekelwa amandla anikezwe i-Istio.

Ithiyori eyanele - asisebenzise lolu lwazi!

Istio in practice

I-Istio idinga iqoqo le-Kubernetes okungenani elinama-vCPU angu-4 no-8 GB we-RAM etholakalayo. Ukuze umise ngokushesha iqoqo futhi ulandele imiyalelo evela esihlokweni, ngincoma ukusebenzisa i-Google Cloud Platform, enikeza abasebenzisi abasha. mahhala $300.

Ngemva kokudala iqoqo nokumisa ukufinyelela ku-Kubernetes ngokusebenzisa insiza ye-console, ungafaka i-Istio ngokusebenzisa imenenja yephakheji ye-Helm.

Ukufakwa kwe-Helm

Faka iklayenti le-Helm kukhompyutha yakho, njengoba kuchazwe ku imibhalo esemthethweni. Sizosebenzisa lokhu ukwenza izifanekiso zokufaka i-Istio esigabeni esilandelayo.

Ifaka i-Istio

Landa izinsiza ze-Istio kusuka ukukhishwa kwakamuva (isixhumanisi sombhali wangempela senguqulo 1.0.5 siguqulelwe kweyamanje, okungukuthi 1.0.6 - cishe. transl.), khipha okuqukethwe kuhla lwemibhalo olulodwa, engizolubiza kusukela manje [istio-resources].

Ukuze uhlonze kalula izinsiza ze-Istio, dala indawo yamagama kuqoqo le-K8s istio-system:

$ kubectl create namespace istio-system

Qedela ukufakwa ngokuya kuhla lwemibhalo [istio-resources] bese usebenzisa umyalo:

$ 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

Lo myalo uzokhipha izingxenye ezibalulekile ze-Istio efayeleni istio.yaml. Silungise isifanekiso esijwayelekile ukuze sivumelane nathi, sicacisa amapharamitha alandelayo:

  • global.mtls.enabled efakwe ku false (okungukuthi ukuqinisekiswa kwe-mTLS kukhutshaziwe - cishe.)ukwenza lula inqubo yethu yokuqomisana;
  • tracing.enabled kuhlanganisa isicelo sokulandelela kusetshenziswa i-Jaeger;
  • kiali.enabled ifaka i-Kiali kuqoqo ukuze ubone ngeso lengqondo izinsizakalo kanye nokuhamba kwezimoto;
  • grafana.enabled ifaka i-Grafana ukuze ibone ngeso lengqondo amamethrikhi aqoqiwe.

Masisebenzise izinsiza ezikhiqiziwe ngomyalo:

$ kubectl apply -f istio.yaml

Ukufakwa kwe-Istio kuqoqo kuqediwe! Linda kuze kube yilapho wonke ama-pods asendaweni yamagama istio-system uzokwazi Running noma Completedngokusebenzisa umyalo ongezansi:

$ kubectl get pods -n istio-system

Manje sesilungele ukuqhubeka esigabeni esilandelayo, lapho sizokwenza khona uhlelo lusebenze.

Isakhiwo sohlelo lokusebenza lwe-Sentiment Analysis

Ake sisebenzise isibonelo sohlelo lokusebenza lwe-Sentiment Analysis microservice olusetshenziswe kulokhu osekushiwo Indatshana yesingeniso ku-Kubernetes. Kuyinkimbinkimbi ngokwanele ukukhombisa amakhono e-Istio ekusebenzeni.

Isicelo siqukethe ama-microservices amane:

  1. service SA-Frontend, esebenzela indawo engaphambili yohlelo lokusebenza lwe-Reactjs;
  2. service SA-WebApp, ehlinzeka ngemibuzo Yokuhlaziya Imizwa;
  3. service SA-Logic, ezenzela yona ukuhlaziywa kwemizwelo;
  4. service SA-Impendulo, ethola impendulo evela kubasebenzisi mayelana nokunemba kokuhlaziya.

Emuva kuma-microservices nge-Istio. Ingxenye 1

Kulo mdwebo, ngaphezu kwezinsizakalo, siphinde sibone i-Ingress Controller, okuthi ku-Kubernetes ihambise izicelo ezingenayo ezinsizeni ezifanele. I-Istio isebenzisa umqondo ofanayo ngaphakathi kwe-Ingress Gateway yayo, eminye imininingwane yayo ezolandela.

Ukusebenzisa uhlelo lokusebenza ngommeleli ovela ku-Istio

Ukuze uthole eminye imisebenzi eshiwo esihlokweni, fanisa inqolobane yakho istio-mastery. Iqukethe uhlelo lokusebenza futhi iveza i-Kubernetes ne-Istio.

Ifaka ama-sidecars

Ukufakwa kungenziwa ngokuzenzakalelayo noma ngesandla. Ukuze ufake ngokuzenzakalelayo iziqukathi ze-sidecar, uzodinga ukusetha ilebula endaweni yamagama istio-injection=enabled, okwenziwa ngomyalo olandelayo:

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

Manje i-pod ngayinye ezosetshenziswa endaweni yamagama ezenzakalelayo (default) izothola isitsha sayo senqola eseceleni. Ukuze uqinisekise lokhu, ake sikhiphe uhlelo lokusebenza lokuhlola ngokuya kumkhombandlela wezimpande wendawo yokugcina [istio-mastery] bese usebenzisa umyalo olandelayo:

$ 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

Ngemva kokukhipha izinsizakalo, ake sihlole ukuthi ama-pods aneziqukathi ezimbili (enesevisi ngokwayo kanye nenqola yayo eseceleni) ngokusebenzisa umyalo. kubectl get pods nokuqinisekisa ukuthi ngaphansi kwekholomu READY inani elicacisiwe 2/2, okubonisa ukuthi zombili iziqukathi ziyasebenza:

$ 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

Ngokubukeka kubukeka kanjena:

Emuva kuma-microservices nge-Istio. Ingxenye 1
Ummeleli wenxusa kwelinye lamaphodi

Manje njengoba uhlelo seluyasebenza futhi, sizodinga ukuvumela ithrafikhi engenayo ukuthi ingene ohlelweni.

I-Ingress Gateway

Umkhuba ongcono kakhulu wokufeza lokhu (vumela ithrafikhi ku-cluster) udlula I-Ingress Gateway ku-Istio, etholakala "emaphethelweni" eqoqo futhi ikuvumela ukuthi unike amandla izici ze-Istio ezifana nomzila, ukulinganisa ukulayisha, ukuphepha nokuqapha kwethrafikhi engenayo.

Ingxenye ye-Ingress Gateway kanye nesevisi eyidlulisela ngaphandle kwafakwa kuqoqo ngesikhathi sokufakwa kwe-Istio. Ukuze uthole ikheli le-IP langaphandle lesevisi, sebenzisa:

$ 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

Sizoqhubeka nokufinyelela kuhlelo lokusebenza sisebenzisa le-IP (ngizoyibiza ngele-IP YAPHANDLE), ngakho-ke ukuze kube lula sizobhala inani libe yinto eguquguqukayo:

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

Uma uzama ukufinyelela le-IP ngesiphequluli manje, uzothola Iphutha Lesevisi Engatholakali, ngoba ngokuzenzakalelayo i-Istio ivimba yonke ithrafikhi engenayo, Isango alikachazwa.

Insiza yesango

I-Gateway iyi-CRD (Incazelo Yensiza Yangokwezifiso) ku-Kubernetes, echazwa ngemva kokufaka i-Istio kuqoqo futhi inika amandla amandla okucacisa izimbobo, iphrothokholi kanye nabasingathi esifuna ukuvumela ithrafikhi yabo engenayo.

Esimweni sethu, sifuna ukuvumela ithrafikhi ye-HTTP ku-port 80 kubo bonke ababungazi. Umsebenzi wenziwa ngencazelo elandelayo (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:
- "*"

Lokhu kulungiselelwa akudingi incazelo ngaphandle kwesikhethi istio: ingressgateway. Ngalesi sikhethi singacacisa ukuthi iyiphi i-Ingress Gateway esingafaka kuyo ukucushwa. Esimweni sethu, lesi yisilawuli se-Ingress Gateway, esifakwe ngokuzenzakalelayo ku-Istio.

Ukucushwa kusetshenziswa ngokubiza umyalo olandelayo:

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

Isango manje livumela ukufinyelela ku-port 80, kodwa alinalwazi lokuthi izicelo zomzila zizoyiswa kuphi. Ukuze lokhu uzodinga Izinsizakalo ze-Virtual.

Insiza ye-VirtualService

I-VirtualService itshela i-Ingress Gateway indlela yokuhambisa izicelo ezivunyelwe ngaphakathi kweqoqo.

Izicelo zesicelo sethu eziza nge-http-gateway kufanele zithunyelwe ku-sa-frontend, i-sa-web-app kanye nezinsizakalo ze-sa-feedback:

Emuva kuma-microservices nge-Istio. Ingxenye 1
Imizila edinga ukulungiswa nge-VirtualServices

Ake sibheke izicelo okufanele zithunyelwe kwa-SA-Frontend:

  • Ukufana okuqondile endleleni / kufanele ithunyelwe kwa-SA-Frontend ukuze uthole index.html;
  • Izindlela ezinesiqalo /static/* kufanele ithunyelwe ku-SA-Frontend ukuze ithole amafayela amile asetshenziswa ngaphambili, njenge-CSS ne-JavaScript;
  • Izindlela ezihambisana nokusho okuvamile '^.*.(ico|png|jpg)$', kumele ithunyelwe kwa-SA-Frontend, ngoba Lezi yizithombe ezivezwe ekhasini.

Ukuqaliswa kufinyelelwa ngokucushwa okulandelayo (sa-virtualservice-yangaphandle.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

Amaphuzu abalulekile:

  1. Le sevisi ye-Virtual ibhekisela ezicelweni ezizayo http-isango;
  2. Π’ destination isevisi okuthunyelwa kuyo izicelo iyanqunywa.

Ukubhala: Ukucushwa okungenhla kugcinwa kufayela sa-virtualservice-external.yaml, equkethe nezilungiselelo zomzila ku-SA-WebApp kanye ne-SA-Feedback, kodwa ifushanisiwe lapha esihlokweni ukuze ibe mfushane.

Masisebenzise i-VirtualService ngokushayela:

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

Ukubhala: Uma sisebenzisa izinsiza ze-Istio, Iseva ye-Kubernetes API idala umcimbi owamukelwe i-Istio Control Plane, futhi ngemva kwalokho ukulungiselelwa okusha kusetshenziswa kuma-proxies Ezithunywa ze-pod ngayinye. Futhi isilawuli se-Ingress Gateway sibonakala singesinye isithunywa esimisiwe ku-Control Plane. Konke lokhu kubukeka kanje emdwebeni:

Emuva kuma-microservices nge-Istio. Ingxenye 1
Ukucushwa kwe-Istio-IngressGateway komzila wesicelo

Uhlelo lokusebenza lwe-Sentiment Analysis manje seluyatholakala http://{EXTERNAL-IP}/. Ungakhathazeki uma uthola isimo sokuthi Awutholakali: Kwesinye isikhathi kuthatha isikhashana ukuthi ukucushwa kusebenze futhi izinqolobane zezithunywa zevangeli zibuyekeze.

Ngaphambi kokuthi uqhubeke, dlala nohlelo lokusebenza kancane ukuze ukhiqize ithrafikhi. (ukuba khona kwayo kuyadingeka ukuze kucace ezenzweni ezilandelayo - approx. transl.).

I-Kiali: ukubonwa

Ukuze ufike kusixhumi esibonakalayo sokuphatha se-Kiali, sebenzisa umyalo olandelayo:

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

... futhi uvule http://localhost:20001/, ngena ngemvume njengo-admin/admin. Lapha uzothola izici eziningi eziwusizo, isibonelo, ukuhlola ukucushwa kwezingxenye ze-Istio, ukubona ngeso lengqondo izinsiza usebenzisa ulwazi oluqoqwe ekubambeni izicelo zenethiwekhi, thola izimpendulo zemibuzo ethi β€œUbani othintana nobani?”, β€œIyiphi inguqulo yesevisi ebhekene nayo. ukwehluleka?” njalo njalo. Ngokuvamile, hlola amakhono e-Kiali ngaphambi kokudlulela ekuboneni amamethrikhi nge-Grafana.

Emuva kuma-microservices nge-Istio. Ingxenye 1

I-Grafana: ukubonwa kwamamethrikhi

Amamethrikhi aqoqwe ku-Istio aya ku-Prometheus futhi aboniswa nge-Grafana. Ukuze ufike kusixhumi esibonakalayo sokuphatha se-Grafana, sebenzisa umyalo ongezansi bese uvula 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

Ngokuchofoza imenyu Ikhaya phezulu kwesokunxele bese ukhetha Ideshibhodi Yesevisi ye-Istio ekhoneni eliphezulu kwesokunxele, qala ngesevisi sa-web-appukuze ubheke amamethrikhi aqoqiwe:

Emuva kuma-microservices nge-Istio. Ingxenye 1

Okusilindile lapha wukusebenza okungenalutho nokuyisicefe ngokuphelele - abaphathi abasoze bakuvumela lokhu. Masidale umthwalo omncane ngomyalo olandelayo:

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

Manje sesinamagrafu amahle kakhulu, futhi ngaphezu kwawo, amathuluzi amangalisayo we-Prometheus okuqapha kanye ne-Grafana yokubona ngeso lengqondo amamethrikhi azosivumela ukuthi sifunde ngokusebenza, impilo, ukuthuthukiswa / ukuwohloka kwezinsizakalo ngokuhamba kwesikhathi.

Okokugcina, ake sibheke ukulandelela izicelo kumasevisi.

UJaeger: ukulandelela

Sizodinga ukulandelelwa ngoba uma sinezinsiza eziningi, kuba nzima kakhulu ukuthola imbangela yokwehluleka. Ake sibheke icala elilula esithombeni esingezansi:

Emuva kuma-microservices nge-Istio. Ingxenye 1
Isibonelo esijwayelekile sesicelo esihlulekile ngokungahleliwe

Isicelo siyeza, siwela - siyini isizathu? Isevisi yokuqala? Noma owesibili? Kukhona okuhlukile kukho kokubili - ake sibheke izingodo zayo ngayinye. Kukangaki uzithole wenza lokhu? Umsebenzi wethu ufana nabaseshi be-software kunonjiniyela...

Lena inkinga evamile kuma-microservices futhi ixazululwa ngamasistimu okulandelela asabalalisiwe, lapho izinsizakalo zidlulisela isihloko esiyingqayizivele komunye nomunye, ngemva kwalokho lolu lwazi ludluliselwa ohlelweni lokulandelela, lapho luqhathaniswa nedatha yesicelo. Nawu umfanekiso:

Emuva kuma-microservices nge-Istio. Ingxenye 1
I-TraceId isetshenziselwa ukukhomba isicelo

I-Istio isebenzisa i-Jaeger Tracer, esebenzisa uhlaka lwe-OpenTracing API oluzimele. Ungafinyelela ku-interface yomsebenzisi we-Jaeger ngomyalo olandelayo:

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

Manje hamba ku http://localhost:16686/ bese ukhetha isevisi sa-web-app. Uma isevisi ingaboniswa kumenyu yokudonsela phansi, bonisa/khiqiza umsebenzi ekhasini futhi ubuyekeze isixhumi esibonakalayo. Ngemva kwalokho, chofoza inkinobho Thola Imikhondo, ezobonisa ukulandelelwa kwakamuva - khetha noma yikuphi - imininingwane enemininingwane kuwo wonke amathrekhi azovela:

Emuva kuma-microservices nge-Istio. Ingxenye 1

Lo mkhondo ubonisa:

  1. Isicelo siyangena i-istio-ingressgateway (lokhu ukusebenzisana kokuqala neyodwa yamasevisi, bese i-Trace ID ikhiqizwa ukuze kufakwe isicelo), ngemva kwalokho isango lithumela isicelo kusevisi. sa-web-app.
  2. Isenkonzweni sa-web-app isicelo sithathwa yinqola eseceleni ye-Evoy, "ingane" idalwe ngesikhathi (yingakho siyibona emithonjeni) futhi iqondiswe kabusha esitsheni. sa-web-app. (span - iyunithi enengqondo yomsebenzi e-Jaeger, enegama, isikhathi sokuqala sokusebenza kanye nobude bayo. Ama-spans angafakwa futhi a-odwe. Igrafu ye-acyclic eqondisiwe ye-spans yakha umkhondo. - cishe. transl.)
  3. Lapha isicelo sicutshungulwa ngendlela sentimentAnalysis. Le mikhondo isivele yenziwe uhlelo lokusebenza, i.e. babedinga izinguquko zekhodi.
  4. Kusukela kulo mzuzu kuqhubeke, isicelo se-POST siyaqalwa sa-logic. I-Trace ID kufanele idluliselwe kusuka sa-web-app.
  5. ...

Ukubhala: Esinyathelweni sesi-4, uhlelo lokusebenza kufanele lubone izihloko ezikhiqizwe i-Istio futhi lizidlulisele ezicelweni ezilandelayo njengoba kuboniswe esithombeni esingezansi:

Emuva kuma-microservices nge-Istio. Ingxenye 1
(A) I-Istio inesibopho sokudlulisa izihloko; (B) Izinsizakalo zinesibopho sezihloko

I-Istio yenza umsebenzi omningi ngoba... yakha izihloko zezicelo ezingenayo, idala izikhala ezintsha ekunakekelweni okuseceleni ngakunye futhi izidlulisele phambili. Nokho, ngaphandle kokusebenzisa izihloko zangaphakathi kwamasevisi, indlela egcwele yokulandela umkhondo izolahleka.

Izihloko ezilandelayo kufanele zicatshangelwe:

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

Lona akuwona umsebenzi onzima, kodwa ukwenza lula ukuqaliswa kwawo sekukhona kakade imitapo yolwazi eminingi - isibonelo, kusevisi ye-sa-web-app, iklayenti le-RestTemplate lidlulisela phambili lezi zihloko uma uvele wengeza imitapo yolwazi ye-Jaeger ne-OpenTracing imilutha yakhe.

Qaphela ukuthi uhlelo lokusebenza lwe-Sentiment Analysis lubonisa ukusetshenziswa ku-Flask, Spring, kanye ne-ASP.NET Core.

Manje njengoba sekucacile ukuthi yini esiyitholayo ebhokisini (noma cishe ngaphandle kwebhokisi), ake sibheke umzila olungiswe kahle, ukuphathwa kwethrafikhi yenethiwekhi, ukuphepha, njll.!

Qaphela. transl.: Funda ngalokhu engxenyeni elandelayo yezinto zokwakha ku-Istio evela ku-Rinor Maloku, okuhunyushiwe kwakho kuzolandela kubhulogi yethu maduze nje. QAPHELA (March 14): Ingxenye yesibili isivele ishicilelwe.

I-PS evela kumhumushi

Funda futhi kubhulogi yethu:

Source: www.habr.com

Engeza amazwana