Hoʻohana mākou i ka hoʻolālā microservice i kā mākou papahana. Ke hiki mai nā bottlenecks hana, nui ka manawa i hoʻopau ʻia i ka nānā ʻana a me ka hoʻopaʻa ʻana i nā lāʻau. Ke hoʻopaʻa inoa i nā manawa o nā hana pākahi i kahi faila log, he mea paʻakikī ke hoʻomaopopo i ka mea i alakaʻi ai i ke kāhea ʻana o kēia mau hana, e nānā i ke ʻano o nā hana a i ʻole ka hoʻololi manawa o kekahi hana e pili ana i kekahi i nā lawelawe like ʻole.
No ka ho'ēmiʻana i ka hana lima, ua hoʻoholo mākou e hoʻohana i kekahi o nā mea hana huli. E pili ana pehea a me ke kumu e hiki ai iā ʻoe ke hoʻohana i ka tracing a pehea mākou i hana ai, a e kūkākūkā ʻia ma kēia ʻatikala.
He aha nā pilikia e hiki ke hoʻoponopono ʻia me ka huli ʻana
E ʻimi i nā bottlenecks hana i loko o ka lawelawe hoʻokahi a i ka lāʻau hoʻokō holoʻokoʻa ma waena o nā lawelawe komo āpau. ʻo kahi laʻana:
Nui nā kelepona pōkole ma waena o nā lawelawe, no ka laʻana, i geocoding a i kahi waihona.
Kakali I/O lōʻihi, e like me ka hoʻololi ʻana i ka pūnaewele a i ʻole ka heluhelu disk.
Hoʻopau ʻikepili lōʻihi.
ʻO nā hana lōʻihi e pono ai ka cpu.
ʻAʻole pono nā ʻāpana code no ka loaʻa ʻana o ka hopena hope loa a hiki ke hoʻoneʻe ʻia a hoʻopaneʻe paha.
Hoʻomaopopo maopopo i ke kaʻina o ka mea i kapa ʻia a me ka mea e hana ʻia ke hana ʻia ka hana.
Hiki ke ʻike ʻia, no ka laʻana, ua hele mai ka noi i ka lawelawe WS -> ua hoʻohui ka lawelawe WS i ka ʻikepili ma o ka lawelawe R -> a laila hoʻouna aku i kahi noi i ka lawelawe V -> ua hoʻouka ka lawelawe V i ka nui o nā ʻikepili mai ka lawelawe R -> hele i ka lawelawe P -> ua hele hou ka lawelawe P i ka lawelawe R -> ʻaʻole i mālama ka lawelawe V i ka hopena a hele i ka lawelawe J -> a laila hoʻihoʻi i ka pane i ka lawelawe WS, kahi mea ʻē aʻe i ka helu ʻana.
Me ka loaʻa ʻole o ia ʻano a i ʻole nā palapala kikoʻī no ke kaʻina holoʻokoʻa, paʻakikī loa ka hoʻomaopopo ʻana i ka mea e hana nei ke nānā ʻoe i ke code no ka manawa mua, a ua hoʻopuehu ʻia ke code ma nā lawelawe like ʻole a hūnā ʻia ma hope o kahi hui o nā bins a me nā interface.
ʻOhi ʻike e pili ana i ka lāʻau hoʻokō no ka nānā ʻana i hoʻopaneʻe ʻia. I kēlā me kēia pae o ka hoʻokō ʻana, hiki iā ʻoe ke hoʻohui i ka ʻike i ka trace i loaʻa i kēia pae a laila e noʻonoʻo i ke ʻano o ka ʻikepili hoʻokomo i alakaʻi i kahi ʻano like. ʻo kahi laʻana:
ID mea hoʻohana
Nā kuleana
ʻAno o ke ala i koho ʻia
Kuhi a i ʻole hoʻokō hewa
Ka hoʻololi ʻana i nā meheu i ʻāpana o nā ana a me ka nānā hou ʻana ma ke ʻano o nā ana.
He aha ka trace hiki ke hoʻopaʻa inoa. Span
Ma ka huli ʻana aia ka manaʻo o kahi span, ʻo ia kahi analogue o hoʻokahi log, i ka console. Aia ka spa:
Ka inoa, ka inoa maʻamau o ke ʻano hana i hana ʻia
Ka inoa o ka lawelawe i hana ʻia ai ka span
ID kū hoʻokahi ponoʻī
ʻO kekahi ʻano ʻike meta ma ke ʻano o kahi kī/waiwai i hoʻopaʻa ʻia i loko. No ka laʻana, ua pau nā ʻano hana a i ʻole ke ʻano me ka hewa a i ʻole
Nā manawa hoʻomaka a hoʻopau no kēia manawa
ID o nā mākua
Hoʻouna ʻia kēlā me kēia span i ka mea hōʻiliʻili span e mālama ʻia i loko o ka waihona no ka nānā hou ʻana i ka wā i pau ai kāna hoʻokō. I ka wā e hiki mai ana, hiki iā ʻoe ke kūkulu i kahi kumulāʻau o nā ʻāpana āpau ma ka hoʻopili ʻana me ka id makua. I ka nānā ʻana, hiki iā ʻoe ke loaʻa, no ka laʻana, nā spans āpau i kekahi lawelawe i ʻoi aku ma mua o kekahi manawa. Eia kekahi, ma ka hele ʻana i kahi kiko kikoʻī, e ʻike i ka lāʻau holoʻokoʻa ma luna a ma lalo o kēia kiko.
Opentrace, Jagger a pehea mākou i hoʻokō ai no kā mākou papahana
Aia kahi maʻamau maʻamau opentrace, e wehewehe ana i ke ʻano a me ka mea e ʻohi ʻia ai, me ka ʻole o ka hoʻopaʻa ʻia ʻana ma ka huli ʻana i kahi hoʻokō kikoʻī ma kekahi ʻōlelo. No ka laʻana, ma Java, hana ʻia nā hana āpau me nā traces ma o ka Opentrace API maʻamau, a ma lalo o ia, no ka laʻana, ʻo Jaeger a i ʻole kahi hoʻokō paʻa ʻole ʻaʻole hiki ke hūnā ʻia.
Ke hoʻohana nei mākou ʻO Jaeger ma ke ʻano he hoʻokō o Opentrace. Aia i loko o kekahi mau ʻāpana:
ʻO Jaeger-agent kahi luna kūloko i hoʻokomo pinepine ʻia ma kēlā me kēia mīkini a hoʻopaʻa ʻia nā lawelawe i loko o ia ma ke awa paʻamau kūloko. Inā ʻaʻohe ʻelele, a laila hoʻopau ʻia nā ʻāpana o nā lawelawe āpau ma kēia mīkini
ʻO Jaeger-collector - hoʻouna nā luna āpau i nā ʻāpana i hōʻiliʻili ʻia iā ia, a waiho iā lākou i loko o ka waihona i koho ʻia.
ʻO ka waihona ʻo kā lākou cassandra makemake, akā hoʻohana mākou i ka elasticsearch, aia nā hoʻokō no kekahi mau ʻikepili ʻē aʻe a me kahi hoʻokō hoʻomanaʻo e mālama ʻole i kekahi mea i ka disk.
ʻO Jaeger-query kahi lawelawe e hele ai i ka waihona a hoʻihoʻi i nā meheu i hōʻiliʻili ʻia no ka nānā ʻana
ʻO Jaeger-ui kahi pūnaewele pūnaewele no ka ʻimi ʻana a me ka nānā ʻana i nā meheu, hele ia i ka jaeger-query
Hiki ke kapa ʻia kahi ʻāpana ʻokoʻa i ka hoʻokō ʻana o opentrace jaeger no nā ʻōlelo kikoʻī, kahi e hoʻouna ʻia ai nā span i jaeger-agent. Hoʻohui iā Jagger ma Java iho mai i ka hoʻokō ʻana i ka interface io.opentracing.Tracer, a ma hope o ia mea e lele ai nā meheu a pau i ka ʻelele maoli.
No ka ʻāpana puna, hiki iā ʻoe ke hoʻohui opentracing-spring-cloud-starter a me ka hoʻokō mai Jaeger opentracing-spring-jaeger-cloud-starter ka mea e hoʻonohonoho maʻalahi i ka huli ʻana no nā mea āpau e hele i kēia mau ʻāpana, no ka laʻana, noi http i nā mea hoʻoponopono, noi i ka waihona ma o jdbc, etc.
ʻO ka hoʻopaʻa inoa ʻana ma Java
Ma kahi o ka pae kiʻekiʻe, pono e hana ʻia ka Span mua, hiki ke hana maʻalahi, no ka laʻana, e ka mea hoʻoponopono puna ke loaʻa kahi noi, a i ʻole ma ka lima inā ʻaʻohe. A laila lawe ʻia ma o ka Scope ma lalo nei. Inā makemake kekahi o nā ʻano ma lalo nei e hoʻohui i kahi Span, lawe ia i ka activeSpan o kēia manawa mai ka Scope, hana i kahi Span hou a ʻōlelo ʻo kona makua ka hopena activeSpan, a hoʻoikaika i ka Span hou. Ke kelepona ʻana i nā lawelawe o waho, hāʻawi ʻia ka manawa hana o kēia manawa iā lākou, a ua hana kēlā mau lawelawe i nā kikoʻī hou e pili ana i kēia manawa.
Ke hele nei nā hana a pau ma ka laʻana Tracer, hiki iā ʻoe ke loaʻa ma o ka mīkini DI, a i ʻole GlobalTracer.get () ma ke ʻano he hoʻololi honua inā ʻaʻole hana ka mīkini DI. Ma ka maʻamau, inā ʻaʻole i hoʻomaka ʻia ka tracer, e hoʻi mai ʻo NoopTracer ʻaʻohe mea.
Eia kekahi, ua loaʻa ka laulā o kēia manawa mai ka tracer ma o ScopeManager, ua hana ʻia kahi kikoʻī hou mai ka mea i kēia manawa me ka hoʻopaʻa ʻana o ka span hou, a laila pani ʻia ka Scope i hana ʻia, e pani ana i ka span i hana ʻia a hoʻihoʻi i ka Scope mua i ke kūlana hana. Hoʻopaʻa ʻia ka Scope i kahi kaula, no laila, i ka wā e hoʻolālā ʻia ai ka multi-threaded programming, mai poina ʻoe e hoʻololi i ke kiko hana i kahi lola ʻē aʻe, no ka hoʻāla hou ʻana i ka Scope o kahi loina ʻē aʻe me ka kuhikuhi ʻana i kēia span.
No ka papahana multi-threaded, aia pū kekahi TracedExecutorService a me nā mea hoʻopili like e hoʻouna koke i ka manawa o kēia manawa i ke kaula ke hoʻomaka ʻia nā hana asynchronous:
private ExecutorService executor = new TracedExecutorService(
Executors.newFixedThreadPool(10), GlobalTracer.get()
);
HttpClient httpClient = new TracingHttpClientBuilder().build();
Nā pilikia i loaʻa iā mākou
ʻAʻole hana mau ʻo Beans a me DI inā ʻaʻole hoʻohana ʻia ka tracer i kahi lawelawe a i ʻole ʻāpana, a laila Uea auto ʻAʻole hana ʻo Tracer a pono ʻoe e hoʻohana iā GlobalTracer.get().
ʻAʻole hana nā annotations inā ʻaʻole ia he ʻāpana a lawelawe paha, a i ʻole ke kāhea ʻia ke ʻano mai kahi ala pili o ka papa like. Pono ʻoe e makaʻala i ka hana a hoʻohana i ka hana trace manual inā ʻaʻole hana ʻo @Traced. Hiki iā ʻoe ke hoʻopili i kahi compiler hou no nā annotations java, a laila pono lākou e hana ma nā wahi āpau.
E ho'āʻo me nā kumuwaiwai ʻaʻole e hana ma groovy, pono ʻoe e hoʻohana i ka hoʻāʻo hope.
Pono e loaʻa i kēlā me kēia lawelawe kāna punawai.application.name ma lalo o kahi e hoʻopaʻa ʻia ai nā meheu. He aha ka inoa kaʻawale no ke kūʻai aku a me ka hoʻāʻo, i ʻole e hoʻopilikia pū me lākou.
Inā hoʻohana ʻoe i GlobalTracer a me tomcat, a laila loaʻa i nā lawelawe āpau e holo ana i kēia tomcat hoʻokahi GlobalTracer, no laila e loaʻa iā lākou ka inoa lawelawe like.
I ka hoʻohui ʻana i nā ala i kahi ʻano, pono ʻoe e hōʻoia ʻaʻole i kāhea ʻia i nā manawa he nui i kahi loop. Pono e hoʻohui i hoʻokahi trace maʻamau no nā kelepona a pau, e hōʻoiaʻiʻo ana i ka nui o ka manawa hana. A i ʻole, e hana ʻia kahi haʻahaʻa keu.
I ka manawa ma jaeger-ui, ua noi nui ʻia no ka nui o nā meheu, a ʻoiai ʻaʻole lākou i kali i ka pane, ua hana hou lākou. ʻO ka hopena, ua hoʻomaka ka jaeger-query e ʻai i ka nui o ka hoʻomanaʻo a hoʻolohi i ka elastic. Kōkua ʻia e ka hoʻomaka hou ʻana i ka jaeger-query
Ka laʻana, ka mālama ʻana a me ka nānā ʻana i nā meheu
Probabilistic nāna e kānana i nā meheu me kekahi mea hiki.
Ratelimiting ka mea e kaupalena ana i ka heluna o na meheu no kekona. Hiki iā ʻoe ke hoʻonohonoho i kēia mau hoʻonohonoho ma ka mea kūʻai aku, ma ka jaeger-agent a i ʻole ka mea ʻohi. I kēia manawa, hoʻohana mākou i ka const 1 i ka waihona waiwai, no ka mea ʻaʻole nui nā noi, akā lōʻihi ka manawa. I ka wā e hiki mai ana, inā e hoʻokau nui kēia i ka ʻōnaehana, hiki iā ʻoe ke kaupalena iā ia.
Inā ʻoe e hoʻohana i ka cassandra, a laila ma ka maʻamau e mālama i nā traces no nā lā ʻelua. Ke hoʻohana nei mākou ʻasticlaau a mālama ʻia nā meheu no nā manawa a pau a ʻaʻole holoi ʻia. Hoʻokumu ʻia kahi helu ʻokoʻa no kēlā me kēia lā, no ka laʻana jaeger-service-2019-03-04. I ka wā e hiki mai ana, pono ʻoe e hoʻonohonoho i ka hoʻomaʻemaʻe maʻemaʻe o nā traces kahiko.
No ka ʻike ʻana i nā traces pono ʻoe:
E koho i ka lawelawe āu e makemake ai e kānana i nā meheu, no ka laʻana, tomcat7-default no kahi lawelawe e holo nei i ka tomcat a ʻaʻole hiki ke loaʻa kona inoa ponoʻī.
A laila koho i ka hana, ka manawa manawa a me ka liʻiliʻi o ka manawa hana, no ka laʻana mai 10 kekona, e lawe i nā hana lōʻihi wale nō.
E hele i kekahi o nā meheu a ʻike i ka mea e lohi ana ma laila.
Eia kekahi, inā ʻike ʻia kekahi id noi, a laila hiki iā ʻoe ke loaʻa i kahi trace e kēia id ma o ka huli ʻana i ka tag, inā i hoʻopaʻa ʻia kēia id i ka trace span.