Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka

Ụkpụrụ ejighị n'aka Heisenberg na-ekwu na ị nweghị ike ịlele ọnọdụ ihe na ọsọ ya n'otu oge. Ọ bụrụ na ihe na-akpụ akpụ, mgbe ahụ ọ nweghị ebe. Ma ọ bụrụ na enwere ebe, ọ pụtara na ọ nweghị ọsọ.

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka

Banyere microservices na Red Hat OpenShift ikpo okwu (na Kubernetes na-agba ọsọ), ekele maka sọftụwia mepere emepe kwesịrị ekwesị, ha nwere ike ịkọ akụkọ ma arụmọrụ ha na ahụike ha n'otu oge. Nke a, n'ezie, anaghị agbagha Heisenberg ochie, mana ọ na-ewepụ ejighị n'aka mgbe ị na-arụ ọrụ na ngwa igwe ojii. Istio na-eme ka ọ dị mfe soro na nyochaa ngwa ndị a ka ijide ihe niile.

Ịkọwapụta okwu

N'okpuru ịchụ nta (Tracing) anyị na-aghọta ndekọ nke ọrụ sistemụ. Nke a na-ada ụda n'ozuzu, mana n'eziokwu, otu n'ime iwu ndị bụ isi ebe a bụ ịkwanye data nchọta n'ime ebe nchekwa kwesịrị ekwesị na-enweghị nchegbu maka ịhazi ya. Na ọrụ niile nke ịchọ na nyocha data dị n'aka onye ahịa. Istio na-eji usoro nchụso Jaeger, nke na-emejuputa ụdị data OpenTracing.

Na okporo ụzọ (Akụkọ, na okwu ahụ bụ "traces" ka a na-eji ebe a n'echiche nke "traces", dịka ọmụmaatụ, na nyocha ballistic) anyị ga-akpọ data nke na-akọwa kpam kpam akụkụ nke arịrịọ ma ọ bụ otu ọrụ, dịka ha na-ekwu, "site na ruo." Dịka ọmụmaatụ, ihe niile na-eme site na mgbe onye ọrụ pịrị bọtịnụ na ibe weebụ ruo mgbe eweghachiri data ahụ, gụnyere microservices niile metụtara. Anyị nwere ike ịsị na otu akara na-akọwa kpamkpam (ma ọ bụ ụdị) njem njem nke arịrịọ. Na interface Jaeger, a na-ekewapụta akara n'ime ihe ndị dị n'akụkụ oge axis, dị ka otu a ga-esi ree agbụ n'ime njikọ nke ọ bụla. Naanị kama njikọ, ụzọ ahụ nwere ihe a na-akpọ spans.

-adịru bụ etiti oge site na mmalite nke otu ọrụ ruo n'ọgwụgwụ ya. N'ịga n'ihu na ntụnyere ahụ, anyị nwere ike ịsị na ogologo nke ọ bụla na-anọchi anya njikọ dị iche na yinye. Ogologo oge nwere ike (ma ọ bụ enweghị ike) inwe otu ma ọ bụ karịa ogologo oge ụmụaka. N'ihi nke a, ogologo oge kachasị elu (mgbọrọgwụ mgbọrọgwụ) ga-enwe ogologo oge ngụkọta ahụ dịka nchọta ọ nwere.

Nlekota oru - Nke a bụ, n'ezie, nleba anya nke sistemu gị - n'anya gị, site na UI ma ọ bụ ngwaọrụ akpaaka. Nleba anya dabere na data nchọta. Na Istio, a na-emejuputa nleba anya site na iji Prometheus ma nwee UI kwesịrị ekwesị. Prometheus na-akwado nleba anya akpaaka site na iji Alerts na Alert Managers.

Anyị na-ahapụ akara

Maka ịchụ nta ka o kwe omume, ngwa a ga-emepụtarịrị nchịkọta nke ogologo oge. Mgbe ahụ, ọ dị mkpa ka ebuga ha na Jaeger, nke mere na ọ na-emepụta ihe ngosi anya nke akara ahụ. Tinyere ihe ndị ọzọ, oge ndị a na-egosi aha ọrụ ahụ, yana mmalite ya na njedebe oge. A na-arụzu nnyefe nke span site na ibuga ndị isi arịrịọ HTTP kpọmkwem Jaeger sitere na arịrịọ mbata gaa na arịrịọ ọpụpụ. Dabere na asụsụ mmemme eji, nke a nwere ike ịchọ obere mgbanwe na koodu isi mmalite. N'okpuru bụ koodu nlele na Java (na-eji usoro mmiri mmiri) nke na-agbakwụnye nkụnye eji isi mee B3 (ụdị Zipkin) na arịrịọ gị na klas nhazi oge opupu ihe ubi:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
A na-eji ntọala nkụnye eji isi mee ihe:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Ọ bụrụ na ị na-eji Java, ị nwere ike ịhapụ koodu naanị ma tinye naanị ahịrị ole na ole na faịlụ Maven POM wee tọọ mgbanwe gburugburu ebe obibi. Nke a bụ ahịrị ndị ịchọrọ ịgbakwunye na faịlụ POM.XML gị iji mejuputa Jaeger Tracer Resolver:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Na mgbanwe gburugburu ebe obibi kwekọrọ na edobere na Dockerfile:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Nke ahụ bụ ya, ugbu a ahaziri ihe niile yana microservices anyị ga-amalite imepụta data trace.

Ka anyị lee anya n'ozuzu okwu

Istio gụnyere ogwe njikwa dị mfe dabere na Grafana. Ozugbo ahaziri ihe niile ma na-agba ọsọ na ikpo okwu Red Hat OpenShift PaaS (n'ihe atụ anyị, Red Hat OpenShift na Kubernetes na-etinye na minishift), a na-eji iwu na-esonụ malite panel a:

open "$(minishift openshift service grafana -u)/d/1/istio-dashboard?refresh=5⩝Id=1"

Ogwe Grafana na-enye gị ohere inyocha arụmọrụ sistemụ ngwa ngwa. E gosipụtara iberibe panel a na foto dị n'okpuru:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
N'ebe a, ị ga-ahụ na microservice ndị ahịa na-akpọ mmasị v1 microservice, nke na-akpọkwa nkwanye v1 na v2 microservices. Ogwe Grafana nwere ngọngọ Dashboard Row maka metrik dị elu, dị ka ọnụọgụ arịrịọ (Mpịakọta arịrịọ zuru ụwa ọnụ), ọnụego ịga nke ọma, njehie 4xx. Na mgbakwunye, enwere nlele Mesh nkesa nke nwere eserese maka ọrụ ọ bụla yana ngọngọ Ọrụ Ahịrị maka ịlele ozi zuru ezu gbasara akpa ọ bụla maka ọrụ ọ bụla.

Ugbu a, ka anyị gwuo ala karị

Site na nchọta ahaziri nke ọma, Istio, dị ka ha na-ekwu, ozugbo site na igbe ahụ na-enye gị ohere inyocha miri emi na nyocha nke arụmọrụ sistemụ. Na Jaeger's UI, ị nwere ike ịlele akara wee hụ ogologo na omimi ha na-aga, yana anya na-akọwapụta ihe mgbochi arụmọrụ. Mgbe ị na-eji Red Hat OpenShift n'elu ikpo okwu minishift, jiri iwu a malite Jaeger UI:

minishift openshift service jaeger-query --in-browser

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Kedu ihe ị nwere ike ikwu gbasara ịchụ n'ihuenyo a:

  • A na-ekewa ya na 7 spans.
  • Ngụkọta oge ogbugbu bụ 6.99 ms.
  • Microservice nkwanye, bụ nke ikpeazụ na yinye, na-emefu 0.69 ms.

Eserese nke ụdị a na-enye gị ohere ịghọta ngwa ngwa ọnọdụ mgbe, n'ihi otu ọrụ na-adịghị arụ ọrụ, arụmọrụ nke usoro dum na-ata ahụhụ.

Ugbu a, ka anyị gbakọọ ọrụ ahụ wee malite ihe atụ abụọ nke nkwanye:v2 microservice na iwu oc scale —replicas=2 deployment/akwaro-v2. Nke a bụ pods anyị ga-enwe mgbe nke a gasịrị:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Ọ bụrụ na anyị laghachi azụ na Jaeger ugbu a wee gbasaa ogologo oge maka ọrụ nkwanye, anyị nwere ike ịhụ nke a na-ebugharị arịrịọ ndị ahụ. N'ihi ya, anyị nwere ike mfe localize brek na larịị nke kpọmkwem pod. N'okwu a, ịkwesịrị ileba anya na node_id ubi:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka

Ebe na otú ihe niile si aga

Ugbu a, anyị na-aga na Prometheus interface na a na-atụ anya na anyị na-ahụ n'ebe ahụ arịrịọ n'etiti nke abụọ na nke mbụ nsụgharị nke nkwanye ọrụ na-ekewa na a ruru nke 2: 1, nnọọ dị ka ọnụ ọgụgụ nke na-arụ ọrụ pods. Ọzọkwa, eserese a ga-agbanwe n'ike n'ike ka pods na-agbago elu na ala, nke ga-aba uru karịsịa maka Canary Deployment (anyị ga-elebakwu anya na atụmatụ ntinye a n'oge ọzọ).

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka

Ọ na-amalite naanị

N'ezie, taa, anyị nwere, dị ka ha na-ekwu, naanị scratched n'elu akụ nke bara uru ozi banyere Jaeger, Grafana na Prometheus. N'ozuzu, nke a bụ ebumnuche anyị - igosi gị n'ụzọ ziri ezi ma mepee atụmanya maka Istio.

Ma cheta, emelarị ihe a niile n'ime Istio. Mgbe ị na-eji ụfọdụ asụsụ mmemme (dịka ọmụmaatụ, Java) na frameworks (dịka ọmụmaatụ, Spring Boot), enwere ike itinye ihe a niile na-emetụghị koodu ngwa n'onwe ya aka ma ọlị. Ee, a ga-agbanwerịrị koodu ahụ ma ọ bụrụ na ị na-eji asụsụ ndị ọzọ, nke pụtara Nodejs ma ọ bụ C #. Ma ebe ọ bụ na traceability (gụọ: "ịchọgharị") bụ otu n'ime ihe ndị a chọrọ maka ịmepụta usoro igwe ojii a pụrụ ịdabere na ya, ị ga-edezi koodu ahụ, ma ị nwere Istio ma ọ bụ na ị nweghị. Ya mere, gịnị ma ị tinye mgbalị gị iji mee ihe nke ọma?

Opekempe, iji zaa ajụjụ ndị a "olee?" na "ole ngwa ngwa?" na 100% n'aka.

Injinia ọgba aghara na Istio: otu a ka e zubere ya

Ikike imebi ihe na-enyere aka igbochi ha imebi.

Nnwale ngwanrọ abụghị naanị ihe siri ike, mana ọ dịkwa mkpa. N'otu oge ahụ, ịnwale maka izi ezi (dịka ọmụmaatụ, ma ọrụ ọ na-eweghachi nsonaazụ ziri ezi) bụ otu ihe, mana ịnwale na netwọk a na-apụghị ịdabere na ya bụ ọrụ dị iche iche (ọ na-echekarị na netwọk ahụ na-arụ ọrụ mgbe niile n'enweghị ọdịda, na nke a. bụ nke mbụ n'ime echiche na-ezighị ezi asatọ gbasara mgbakọ na-ekesa). Otu n'ime ihe isi ike na-edozi nsogbu a bụ ka esi egosipụta ọdịda na sistemụ ma ọ bụ webata ha na-ama ụma, na-eme ihe a na-akpọ injection mmejọ. Enwere ike ime nke a site n'ịgbanwe koodu isi mmalite nke ngwa n'onwe ya. Mana mgbe ahụ ị gaghị anwale koodu izizi gị, mana ụdị ya nke na-egosipụta ọdịda. N'ihi nke a, ị nwere ike ịdaba na nnabata na-egbu egbu nke ịgba ọgwụ mgbochi na izute Heisenbugs - ọdịda na-apụ n'anya mgbe ị na-agbalị ịchọpụta ha.

Ugbu a, anyị ga-egosi gị otu Istio si enyere gị aka imeri mgbagwoju anya ndị a n'otu oge.

Kedu ihe na-eme mgbe ihe niile dị mma?

Tụlee ihe atụ a: anyị nwere pọọsụ abụọ maka microservice nkwado anyị, nke anyị weere na nkuzi Istio. Otu pọd ka akpọrọ v1 ma nke ọzọ ka akpọrọ v2. Dị ka ị pụrụ ịhụ, ihe niile na-arụ ọrụ nke ọma ruo ugbu a:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
(Site n'ụzọ, nọmba dị n'aka nri bụ naanị akara oku maka pọd ọ bụla)

Ma nke ahụ abụghị ihe anyị chọrọ, nri? Ọfọn, ka anyị gbalịa imebi ihe niile na-emetụghị koodu isi mmalite ma ọlị.

Anyị na-ahazi nkwụsị na ọrụ nke microservice

Ниже приведен yaml-файл для правила маршрутизации Istio, которое в половине случаев будет выдавать сбой (ошибку ihe nkesa 503):

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Biko mara na anyị kwuru hoo haa na ekwesịrị iweghachite njehie 503 na ọkara ikpe.

Ma nke a bụ ihe nseta ihuenyo nke iwu curl na-agba ọsọ na akaghị aka ga-adị ka mgbe anyị gbalitechara iwu a ka ịmee ọdịda. Dị ka ị pụrụ ịhụ, ọkara nke arịrịọ na-alaghachi njehie 503, n'agbanyeghị nke pod-v1 ma ọ bụ v2 - ha na-aga:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Iji weghachi ọrụ nkịtị, o zuru ezu ihichapụ iwu a, n'ọnọdụ anyị na ndụmọdụ istioctl delete routerule recommendation-503 -n nkuzi nkuzi. Ebe a, nkuzi bụ aha Red Hat OpenShift project nke na-eme nkuzi Istio anyị.

Na-ewebata igbu oge artificial

Njehie 503 adịgboroja na-enyere aka nwalee nkwụsi ike nke sistemu na ọdịda, mana ike ịkọ na ijikwa igbu oge kwesịrị ịmasị gị karịa. Na igbu oge na ndụ n'ezie na-emekarị karịa ọdịda. Microservice dị nwayọ bụ nsi na-emetụta sistemu niile. Iji Istio, ị nwere ike nwalee koodu metụtara igbu oge na-agbanweghị ya n'ụzọ ọ bụla. Nke mbụ, anyị ga-egosi otu esi eme nke a n'ihe banyere igbu oge netwọkụ ejiri aka ebute.

Biko mara na ka anwalechara otu a, ị nwere ike ịchọ (ma ọ bụ chọọ) ịmegharị koodu gị. Ozi ọma ebe a bụ na na nke a, ị ga-adị njikere kama imeghachi omume. Nke a bụ otu a ga-esi hazie okirikiri mmepe: codeing-testing-feedback-coding- testing...

Nke a bụ otú iwu si dị ... Ọ bụ ezie na ị maara ihe? Istio dị mfe ma faịlụ yaml a doro anya na ihe niile dị na ihe atụ a na-ekwu maka onwe ya, lee anya:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Ọkara oge anyị ga-enweta igbu oge 7 sekọnd. Ma nke a abụghị otu ihe ahụ dị ka a ga-asị na anyị tinye iwu ụra n'ime koodu isi mmalite, ebe Istio na-egbu oge arịrịọ ahụ site na sekọnd 7. Ebe Istio na-akwado ịchụ nta Jaeger, a na-ahụta igbu oge a na Jaeger UI, dị ka egosiri na nseta ihuenyo dị n'okpuru. Lezienụ anya na arịrịọ ogologo dị na akuku aka nri elu nke eserese - oge ya bụ 7.02 sekọnd:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Edemede a na-enye gị ohere ịnwale koodu gị n'okpuru ọnọdụ nkwụsị netwọkụ. Ma o doro anya na site n'iwepụ iwu a, anyị ga-ewepụ oge igbu oge. Anyị na-ekwughachi, ma ọzọ anyị mere ihe a niile na-emetụghị koodu isi n'ụzọ ọ bụla.

Akwụghachila azụ ma adala mbà

Akụkụ ọzọ bara uru nke Istio maka injinia ọgba aghara bụ oku ugboro ugboro na ọrụ ahụ ọnụọgụ oge akọwapụtara. Isi ihe ebe a bụ ịnọgide na-agbalị mgbe arịrịọ mbụ kwụsịrị na njehie 503 - ma eleghị anya oge N-iri na otu anyị ga-enwe ihu ọma. Ma eleghị anya, ọrụ ahụ gbadara nwa oge maka otu ihe ma ọ bụ ọzọ. Ee, a ga-egwupụta ihe kpatara ya ma kpochapụ ya. Ma nke ahụ ga-abịa mgbe e mesịrị, ma ugbu a, ka anyị gbalịa hụ na usoro ahụ na-aga n'ihu na-arụ ọrụ.

Yabụ, anyị chọrọ ka ọrụ ahụ tụba njehie 503 site n'oge ruo n'oge, mgbe ahụ Istio ga-anwa ịkpọtụrụ ya ọzọ. Na ebe a, anyị chọrọ n'ụzọ doro anya ụzọ iji mepụta njehie 503 na-enweghị imetụ koodu ahụ n'onwe ya aka ...

Kwụsị, chere! Anyị mere ya.

Faịlụ a ga-eme ya ka ọrụ nkwanye-v2 wepụta njehie 503 ọkara oge:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
N'ụzọ doro anya, ụfọdụ arịrịọ ga-ada:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Ugbu a, ka anyị jiri ọrụ Istio Retry:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Iwu ntụgharị a na-emegharị ugboro atọ na nkeji abụọ nke abụọ wee belata (ma wepụ ya na radar) njehie 503:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Iji chịkọta: anyị mere ya ka Istio, nke mbụ, wepụta njehie 503 maka ọkara nke arịrịọ. Na nke abụọ, otu Istio na-eme mgbalị atọ iji kpọtụrụ ọrụ ahụ mgbe njehie 503 mere, ihe niile na-arụ ọrụ nke ọma. Ya mere, site n'iji njirimara Retry, anyị emezuwo nkwa anyị nke ịghara ịda mbà na ịghara ịda mbà.

Ma ee, anyị mere ya ọzọ na-emetụghị koodu ahụ ma ọlị. Naanị ihe anyị chọrọ bụ iwu ụzọ ụzọ Istio abụọ:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka

Otu esi ahapụ onye ọrụ ma ọ bụ asaa anaghị atụ anya otu

Ugbu a, ka anyị tụgharịa ọnọdụ ahụ n'ime ma tụlee otu ihe atụ ebe naanị ihe ị ga-eme abụghị ịlaghachi azụ ma ọ bụ hapụ maka oge a kapịrị ọnụ. Ma mgbe ahụ, naanị ị ga-akwụsị ịnwa ịhazi arịrịọ ahụ, ka ị ghara ịmanye onye ọ bụla ka ọ chere maka otu ọrụ nwayọ. N'ikwu ya n'ụzọ ọzọ, anyị agaghị agbachitere ọnọdụ furu efu, mana anyị ga-alaghachi na ahịrị edobere ka anyị ghara ikwe ka onye ọrụ saịtị ahụ daa ma ghara ịmanye ya ka ọ daa mbà n'amaghị ama.

Na Istio, ị nwere ike ịtọ oge ngwụcha ajụjụ. Ọ bụrụ na ọrụ ahụ gafere oge a, a na-eweghachite njehie 504 (Oge oge ọnụ ụzọ ámá) - ọzọ, a na-eme ihe niile site na nhazi Istio. Ma anyị ga-agbakwunye iwu ụra na koodu isi ọrụ (ma mgbe ahụ, n'ezie, rụọ ọrụ nrụpụta na redeploy) iji mee ka ọrụ ahụ dị ngwa ngwa. Ewoo, ọ gaghị arụ ọrụ ọzọ.

Yabụ, anyị tinyere ụra nke abụọ nke abụọ n'ime koodu ọrụ v2 nke nkwanye, wughachi onyonyo kwekọrọ wee bugharịa akpa ahụ, ma ugbu a, anyị ga-agbakwunye oge oge site na iji usoro ntụgharị Istio a:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Na nseta ihuenyo dị n'elu ị nwere ike ịhụ na anyị kwụsịrị ịnwa ịkpọtụrụ ọrụ ndụmọdụ ma ọ bụrụ na anyị enwetaghị nzaghachi n'ime otu sekọnd, ya bụ, tupu njehie 504 emee mgbe itinye iwu ntụgharị a (ma tinye ụra nke abụọ na koodu nkwado :v2), anyị nwetara nke a:

Ịchọgharị na nlekota oru na Istio: Microservices na ụkpụrụ ejighị n'aka
Anyị na-emegharị ọzọ, mana enwere ike ịtọ oge nkwụsị na-emetụghị koodu isi mmalite n'ụzọ ọ bụla. Na ego agbakwunyere ebe a bụ na ị nwere ike gbanwee koodu gị ugbu a ka ịzaghachi oge agwụla, wee nwalee mgbanwe ndị a ngwa ngwa site na iji Istio.

Ma ugbu a, ihe niile bụ ọnụ

Ịnye obere ọgba aghara na Istio bụ ụzọ dị mma iji nwalee koodu gị na ntụkwasị obi nke usoro gị n'ozuzu ya. Ndabere ọdịda, nnukwu isi na usoro mgbawa sekit, usoro maka imepụta ọdịda arụrụ arụ na igbu oge, yana ịnwale oku na oge ga-aba uru nke ukwuu mgbe ị na-eke sistemu igwe ojii na-anabata mmejọ. Ejikọtara ya na Kubernetes na Red Hat OpenShift, ngwaọrụ ndị a ga-enyere gị aka iji obi ike chee ọdịnihu ihu.

isi: www.habr.com

Zụta nnabata ntụkwasị obi maka saịtị nwere nchekwa DDoS, sava VPS VDS 🔥 Zụta ebe nrụọrụ weebụ a pụrụ ịtụkwasị obi na nchekwa DDoS, sava VPS VDS | ProHoster