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
- 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.
- Qonda ngokucacile ukuthi yikuphi ukulandelana okubizwayo nokuthi kwenzekani lapho ukuhlinzwa kwenziwa.
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. - 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
- 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.
I-Opentrace, i-Jagger nendlela esiyisebenzise ngayo kumaphrojekthi ethu
Kunendinganiso evamile
Sisebenzisa
- 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
Ingxenye ehlukile ingabizwa ngokuthi ukuqaliswa kwe-opentrace jaeger yezilimi ezithile, lapho izikhala zithunyelwa khona ku-jaeger-ejenti.
Futhi ngengxenye yentwasahlobo, ungaxhuma
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
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
- I-Const ethumela futhi igcine yonke imikhondo.
- I-Probabilistic ehlunga ilandelela ngamathuba athile anikeziwe.
- 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
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.
- Hamba komunye wemikhondo futhi ubone ukuthi yini eyayinciphisa lapho.
Futhi, uma enye i-id yesicelo yaziwa, khona-ke ungathola ukulandelelwa kwale ID ngosesho lwethegi, uma le-id ifakwe phakathi kwebanga lokulandela umkhondo.
Imibhalo
- Opentracing amadokhumenti
opentracing.io/docs/overview/what-is-tracing - amadokhumenti e-jaeger
www.jaegertracing.io/docs/1.10 - Ukuxhumeka kwe-Jaeger java
github.com/jaegertracing/jaeger-client-java - intwasahlobo evulekile yokulandela umkhondo
github.com/jaegertracing/jaeger-client-java
github.com/opentracing-contrib/java-spring-cloud
Izihloko
habr.com/ru/company/carprice/blog/340946 I-Jaeger Opentracing kanye ne-Microservices kuphrojekthi yangempela ye-PHP ne-Golangwww.uber.com/distributed-tracing Ukulandelela Okusatshalaliswa Okuthuthukayo ku-Uber Engineeringopentracing.io/guides/java medium.com/jaegertracing/running-jaeger-agent-on-bare-metal-d1fc47d31fab Ukugijima i-Jaeger Agent ngensimbi engenalutho
Isiqophi
www.youtube.com/watch?v=qg0ENODP1Lo Sisebenzise kanjani u-Jaeger no-Prometheus Ukuletha Imibuzo Yabasebenzisi Esheshayo - UBryan Borehamwww.youtube.com/watch?v=WRntQsUajow Isingeniso: Jaeger - Yuri Shkuro, Uber & Pavol Loffay, Red Hatwww.youtube.com/watch?v=fsHb0qK37bc USerghei Iakovlev, "Indaba encane yokunqoba okukhulu: i-OpenTracing, i-AWS ne-Jaeger"
Source: www.habr.com