Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

Sisebenzisa i-microservice architecture kumaphrojekthi ethu. Uma kwenzeka kuba nezingqinamba ekusebenzeni, isikhathi esiningi sichithwa kubhekwa nokwehlukanisa izingodo. Lapho ufaka izikhathi zokusebenza ngakunye kufayela lokungena, kuvame ukuba nzima ukuqonda ukuthi yini eholele ekucelweni kwale misebenzi, ukulandelela ukulandelana kwezenzo noma ukushintshwa kwesikhathi komsebenzi othile ohlobene nokunye kumasevisi ahlukene.

Ukuze sinciphise umsebenzi wezandla, sinqume ukusebenzisa elinye lamathuluzi okulandelela. Mayelana nokuthi kungani ungasebenzisa ukulandelela nokuthi sikwenze kanjani, futhi kuzoxoxwa ngakho kulesi sihloko.

Yiziphi izinkinga ezingaxazululwa ngokulandela umkhondo

  1. Thola izithiyo ekusebenzeni ngaphakathi kwesevisi eyodwa nakuso sonke isihlahla sokwenza phakathi kwazo zonke izinsiza ezibamba iqhaza. Ngokwesibonelo:
    • Izingcingo eziningi ezimfushane ezilandelanayo phakathi kwamasevisi, isibonelo, ukuya ku-geocoding noma kusizindalwazi.
    • Ukulinda kwe-I/O okude, njengokudluliswa kwenethiwekhi noma ukufundwa kwediski.
    • Ukuhlaziya idatha ende.
    • Imisebenzi emide edinga i-cpu.
    • Izigaba zekhodi ezingadingeki ukuze uthole umphumela wokugcina futhi zingasuswa noma zibambezeleke.
  2. Qonda ngokucacile ukuthi yikuphi ukulandelana okubizwayo nokuthi kwenzekani lapho ukuhlinzwa kwenziwa.
    Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger
    Kuyabonakala ukuthi, ngokwesibonelo, isicelo safika kusevisi ye-WS -> isevisi ye-WS yengeza idatha ngesevisi ye-R -> yabe isithumela isicelo kusevisi ye-V -> isevisi ye-V ilayishe idatha eningi evela ku- Isevisi ye-R -> iye kusevisi ye-P -> isevisi ye-P yaphinde yaya kusevisi R -> isevisi V yaziba umphumela yaya kusevisi J -> bese ibuyisela impendulo kusevisi ye-WS, ngenkathi iqhubeka nokubala okunye ingemuva.
    Ngaphandle komkhondo onjalo noma imibhalo enemininingwane yayo yonke le nqubo, kunzima kakhulu ukuqonda ukuthi kwenzekani lapho ubheka ikhodi okokuqala, futhi ikhodi ihlakazekile ezinsizeni ezahlukene futhi ifihlwe ngemuva kwenqwaba yemigqomo nezindawo zokusebenzelana.
  3. Ukuqoqwa kolwazi mayelana nesihlahla sokubulala ukuze kuhlaziywe okwahlehliswa okulandelayo. Esigabeni ngasinye sokwenza, ungakwazi ukwengeza ulwazi kumkhondo otholakala kulesi sigaba bese uthola ukuthi iyiphi idatha yokufaka eholele esimweni esifanayo. Ngokwesibonelo:
    • I-ID Yomsebenzisi
    • Amalungelo
    • Uhlobo lwendlela ekhethiwe
    • Iphutha lokungena noma lokusayinda
  4. Ukuguqula ukulandelelwa kube isethi engaphansi yamamethrikhi kanye nokuhlaziywa okwengeziwe osekusesimweni samamethrikhi.

Imuphi umkhondo ongangena kuwo. I-span

Ekulandeleni kukhona umqondo we-span, lena i-analogue yelogi eyodwa, ku-console. I-spa ine:

  • Igama, ngokuvamile igama lendlela esetshenzisiwe
  • Igama lesevisi lapho i-span yakhiwe khona
  • Umnikazi we-ID eyingqayizivele
  • Olunye uhlobo lolwazi lwe-meta olusesimweni sokhiye/inani elingene kulo. Isibonelo, amapharamitha endlela noma indlela iphele ngephutha noma cha
  • Izikhathi zokuqala nezokugcina zalesi span
  • I-ID yesikhathi somzali

I-span ngayinye ithunyelwa kumqoqi we-span ukuze igcinwe kusizindalwazi ukuze ibuyekezwe kamuva uma nje isiqedile ukuqaliswa kwayo. Ngokuzayo, ungakha isihlahla sazo zonke izikhala ngokuxhuma nge-id yomzali. Lapho uhlaziya, ungathola, ngokwesibonelo, zonke izikhawu zesevisi ethile ezithathe isikhathi esingaphezu kwesikhathi esithile. Ngokuqhubekayo, ngokuya endaweni ethile, bheka isihlahla sonke ngaphezulu nangaphansi kwalesi span.

Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

I-Opentrace, i-Jagger nendlela esiyisebenzise ngayo kumaphrojekthi ethu

Kunendinganiso evamile i-opentrace, echaza ukuthi kanjani futhi yini okufanele iqoqwe, ngaphandle kokuboshelwa ngokulandela ukuqaliswa okuthile kunoma yiluphi ulimi. Isibonelo, ku-Java, wonke umsebenzi onomkhondo wenziwa nge-Opentrace API evamile, futhi ngaphansi kwayo, isibonelo, i-Jaeger noma ukuqaliswa okuzenzakalelayo okungenalutho okungenzi lutho kungafihlwa.
Sisebenzisa Hunter njengokuqaliswa kwe-Opentrace. Iqukethe izingxenye eziningana:

Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

  • I-Jaeger-ejenti i-ejenti yendawo evamise ukufakwa emshinini ngamunye futhi izinsiza zingena kuwo embobeni yokuzenzakalelayo yasendaweni. Uma i-ejenti ingekho, ukulandelelwa kwawo wonke amasevisi kulo mshini kuvamise ukukhutshazwa
  • I-Jaeger-collector - wonke ama-ejenti athumela imikhondo eqoqiwe kuyo, futhi ikubeka kusizindalwazi esikhethiwe
  • I-database iyi-cassandra abayithandayo, kodwa sisebenzisa i-elasticsearch, kukhona ukuqaliswa kwezinye izingobo zolwazi ezimbalwa kanye nokuqaliswa kwememori okungagcini lutho kudiski.
  • I-Jaeger-query iyisevisi eya kusizindalwazi bese ibuyisela imikhondo esele isiqoqiwe ukuze ihlaziywe
  • I-Jaeger-ui iyisixhumi esibonakalayo sewebhu sokusesha nokubuka imikhondo, iya ku-jaeger-query

Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

Ingxenye ehlukile ingabizwa ngokuthi ukuqaliswa kwe-opentrace jaeger yezilimi ezithile, lapho izikhala zithunyelwa khona ku-jaeger-ejenti.
Ixhuma i-Jagger ku-Java iza phansi ekusebenziseni i-interface ye-io.opentracing.Tracer, ngemva kwalokho yonke imikhondo kuyo izondizela kumenzeli wangempela.

Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

Futhi ngengxenye yentwasahlobo, ungaxhuma i-opentracing-spring-cloud-starter kanye nokuqaliswa okuvela kuJaeger i-opentracing-spring-jaeger-cloud-starter okuzolungiselela ngokuzenzakalelayo ukulandelelwa kwayo yonke into edlula kulezi zingxenye, isibonelo http izicelo kubalawuli, izicelo ku-database nge-jdbc, njll.

Ilandelela ukungena ku-Java

Endaweni ethile ezingeni eliphezulu, i-Span yokuqala kufanele idalwe, lokhu kungenziwa ngokuzenzakalelayo, isibonelo, ngesilawuli sasentwasahlobo lapho isicelo sitholwa, noma ngesandla uma singekho. Bese idluliswa nge-Scope engezansi. Uma noma iyiphi kulezi zindlela ezingezansi ifuna ukwengeza i-Span, kuthatha i-activeSpan yamanje ukusuka ku-Scope, idale i-Span entsha futhi ithi umzali wayo uwumphumela osebenzayo, futhi yenza i-Span entsha isebenze. Uma ushayela izinsiza zangaphandle, isikhathi esisebenzayo samanje sidluliselwa kubo, futhi lawo masevisi adala izikhala ezintsha ngokubhekisela kulesi sikhathi.
Wonke umsebenzi uhamba ngesibonelo se-Tracer, ungawuthola ngomshini we-DI, noma i-GlobalTracer.get () njengokuguquguquka komhlaba wonke uma indlela ye-DI ingasebenzi. Ngokuzenzakalelayo, uma i-tracer ingakaqaliswa, i-NoopTracer izobuya engenzi lutho.
Ngaphezu kwalokho, ububanzi bamanje butholakala kumkhondo ngokusebenzisa i-ScopeManager, kwakhiwa isikophu esisha sisuka kwesamanje esinesibopho se-span entsha, bese kuvala i-Scope edaliwe, evala isikhathi esidaliwe bese ibuyisela Ububanzi bangaphambilini isimo esisebenzayo. I-Scope iboshelwe ochungechungeni, ngakho-ke uma uhlela uhlelo olunemicu eminingi, akumele ukhohlwe ukudlulisa isikhathi esisebenzayo kolunye uchungechunge, ukuze kuqhutshekwe kusebenze Ububanzi bolunye uchungechunge ngokubhekisela kulesi span.

io.opentracing.Tracer tracer = ...; // GlobalTracer.get()

void DoSmth () {
   try (Scope scope = tracer.buildSpan("DoSmth").startActive(true)) {
      ...
   }
}
void DoOther () {
    Span span = tracer.buildSpan("someWork").start();
    try (Scope scope = tracer.scopeManager().activate(span, false)) {
        // Do things.
    } catch(Exception ex) {
        Tags.ERROR.set(span, true);
        span.log(Map.of(Fields.EVENT, "error", Fields.ERROR_OBJECT, ex, Fields.MESSAGE, ex.getMessage()));
    } finally {
        span.finish();
    }
}

void DoAsync () {
    try (Scope scope = tracer.buildSpan("ServiceHandlerSpan").startActive(false)) {
        ...
        final Span span = scope.span();
        doAsyncWork(() -> {
            // STEP 2 ABOVE: reactivate the Span in the callback, passing true to
            // startActive() if/when the Span must be finished.
            try (Scope scope = tracer.scopeManager().activate(span, false)) {
                ...
            }
        });
    }
}

Ohlelweni olunemicu eminingi, kukhona futhi i-TracedExecutorService kanye nezisonga ezifanayo ezidlulisela ngokuzenzakalelayo ubude bamanje kuchungechunge lapho imisebenzi engavumelanisiwe yethulwa:

private ExecutorService executor = new TracedExecutorService(
    Executors.newFixedThreadPool(10), GlobalTracer.get()
);

Ngezicelo zangaphandle ze-http kukhona Ukulandelela i-HttpClient

HttpClient httpClient = new TracingHttpClientBuilder().build();

Izinkinga esabhekana nazo

  • Ubhontshisi kanye ne-DI akusebenzi ngaso sonke isikhathi uma i-tracer ingasetshenziswa kusevisi noma ingxenye Intambo ezenzakalelayo I-Tracer ingase ingasebenzi futhi kuzodingeka usebenzise i-GlobalTracer.get().
  • Izichasiselo azisebenzi uma kungeyona ingxenye noma isevisi, noma uma indlela ibizwa ngendlela engumakhelwane yekilasi elifanayo. Kufanele uqaphele ukuze uhlole ukuthi yini esebenzayo futhi usebenzise ukwenza ukulandelela okwenziwa ngesandla uma i-@Traced ingasebenzi. Ungakwazi futhi ukunamathisela i-compiler eyengeziwe yezichasiselo ze-java, khona-ke kufanele zisebenze yonke indawo.
  • Ebhuthini elidala lentwasahlobo nentwasahlobo, i-opentraing spring cloud cloud autoconfiguration ayisebenzi ngenxa yeziphazamisi ku-DI, ngakho-ke uma ufuna ukulandelelwa kwezingxenye zasentwasahlobo kusebenze ngokuzenzakalelayo, ungakwenza ngokufanisa github.com/opentracing-contrib/java-spring-jaeger/blob/master/opentracing-spring-jaeger-starter/src/main/java/io/opentracing/contrib/java/spring/jaeger/starter/JaegerAutoConfiguration.java
  • Zama ngezinsiza akusebenzi ku-groovy, kufanele usebenzise zama ekugcineni.
  • Isevisi ngayinye kufanele ibe ne-spring.application.name yayo okuzofakwa ngaphansi kwayo ukulandelelwa. Lisho ukuthini igama elihlukile lokudayiswa nokuhlolwa, ukuze lingaphazamisi ndawonye.
  • Uma usebenzisa i-GlobalTracer ne-tomcat, khona-ke zonke izinsizakalo ezisebenza kule tomcat zine-GlobalTracer eyodwa, ngakho-ke zonke zizoba negama lesevisi elifanayo.
  • Uma wengeza amathrekhi endleleni, udinga ukuqiniseka ukuthi ayibizwa izikhathi eziningi ku-loop. Kuyadingeka ukwengeza umkhondo owodwa kuzo zonke izingcingo, okuqinisekisa isikhathi esiphelele somsebenzi. Uma kungenjalo, kuzodalwa umthwalo oweqile.
  • Lapho sebese-jaeger-ui, kwenziwa izicelo ezinkulu kakhulu zemikhondo eminingi, futhi njengoba bengalindanga impendulo, baphinda bakwenza. Ngenxa yalokho, i-jaeger-query yaqala ukudla inkumbulo eningi futhi yehlisa ijubane lokunwebeka. Isizwe ngokuqalisa kabusha i-jaeger-query

Amasampula, ukugcinwa kanye nokulandela imikhondo yokubuka

Kunezinhlobo ezintathu amasampula okulandelela:

  1. I-Const ethumela futhi igcine yonke imikhondo.
  2. I-Probabilistic ehlunga ilandelela ngamathuba athile anikeziwe.
  3. I-ratelimiting ekhawulela inani lamathrekhi ngomzuzwana. Ungakwazi ukumisa lezi zilungiselelo kuklayenti, kungaba ku-ejenti ye-jaeger noma kumqoqi. Manje sisebenzisa i-const 1 kusitaki se-valuator, njengoba zingekho izicelo eziningi kakhulu, kodwa zithatha isikhathi eside. Ngokuzayo, uma lokhu kuzofaka umthwalo owedlulele ohlelweni, ungawukhawulela.

Uma usebenzisa i-cassandra, ngokuzenzakalelayo igcina iminonjana izinsuku ezimbili kuphela. Sisebenzisa umabhebhana futhi iminonjana igcinwa isikhathi sonke futhi ayisuswa. Kudalwa inkomba ehlukile yosuku ngalunye, isibonelo i-jaeger-service-2019-03-04. Ngokuzayo, udinga ukulungisa ukuhlanzwa okuzenzakalelayo kweminonjana yakudala.

Ukuze ubuke imikhondo udinga:

  • Khetha isevisi ofuna ukuhlunga ngayo ukulandelelwa, isibonelo, i-tomcat7-default yesevisi esebenza ku-tomcat futhi engakwazi ukuba negama layo.
  • Bese ukhetha ukusebenza, isikhawu sesikhathi kanye nesikhathi esincane sokusebenza, isibonelo kusuka kumasekhondi ayi-10, ukuthatha ukubulawa okude kuphela.
    Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger
  • Hamba komunye wemikhondo futhi ubone ukuthi yini eyayinciphisa lapho.
    Ukulandelela Isevisi, i-OpenTracing kanye ne-Jaeger

Futhi, uma enye i-id yesicelo yaziwa, khona-ke ungathola ukulandelelwa kwale ID ngosesho lwethegi, uma le-id ifakwe phakathi kwebanga lokulandela umkhondo.

Imibhalo

Izihloko

Isiqophi

Source: www.habr.com

Engeza amazwana