Netramesh - ngwọta ntupu ọrụ dị fechaa

Ka anyị na-esi na ngwa monolithic na-aga na ụlọ ọrụ microservices, anyị na-eche ihe ịma aka ọhụrụ ihu.

N'ime ngwa monolithic, ọ na-adịkarị mfe ịchọpụta akụkụ nke sistemụ ahụ njehie mere. O yikarịrị, nsogbu ahụ dị na koodu nke monolith n'onwe ya, ma ọ bụ na nchekwa data. Mana mgbe anyị malitere ịchọ nsogbu n'ime ụlọ ọrụ microservice, ihe niile adịkwaghị n'ụzọ doro anya. Anyị kwesịrị ịchọta ụzọ niile nke arịrịọ ahụ mere site na mmalite ruo n'isi wee họrọ ya na narị microservices. Ọzọkwa, ọtụtụ n'ime ha nwekwara ụlọ ọrụ nchekwa nke ha, nke nwekwara ike ịkpata njehie ezi uche dị na ya, yana nsogbu na arụmọrụ na ntachi obi.

Netramesh - ngwọta ntupu ọrụ dị fechaa

Anọ m na-achọ ngwa ọrụ ogologo oge nke ga-enyere aka ịnagide nsogbu ndị dị otú ahụ (Edere m nke a na Habré: 1, 2), ma n'ikpeazụ m mere onwe m ihe ngwọta nke mepere emepe. N'isiokwu a, m na-ekwu banyere uru nke ụzọ ntanetị ọrụ ọrụ ma kesaa ngwá ọrụ ọhụrụ maka mmejuputa ya.

Nchọgharị nkesa bụ ihe ngwọta na-emekarị maka nsogbu nke ịchọta njehie na sistemụ kesara. Ma gịnị ma ọ bụrụ na usoro a na-anakọta ozi gbasara mmekọrịta netwọk adịghị emejuputa na usoro ahụ, ma ọ bụ, nke ka njọ, na akụkụ nke usoro ahụ ọ na-arụ ọrụ nke ọma, ma n'akụkụ ya adịghị, ebe ọ bụ na etinyeghị ya na ọrụ ochie. ? Iji chọpụta kpọmkwem ihe kpatara nsogbu ahụ, ọ dị mkpa inwe nkọwa zuru ezu nke ihe na-eme na usoro ahụ. Ọ dị mkpa karịsịa ịghọta nke microservices na-etinye aka na isi ụzọ azụmahịa dị mkpa.

N'ebe a, usoro ntanetị ọrụ nwere ike ịbịara anyị aka, nke ga-emeso igwe niile maka ịnakọta ozi netwọk n'ogo dị ala karịa ọrụ n'onwe ha na-arụ ọrụ. Ụzọ a na-enye anyị ohere igbochi okporo ụzọ niile ma nyochaa ya na ofufe. Ọzọkwa, ngwa enweghịdị ịma ihe ọ bụla gbasara ya.

Ụzọ ntupu ọrụ

Echiche bụ isi nke usoro ntanetị ọrụ bụ ịgbakwunye ihe mkpuchi akụrụngwa ọzọ na netwọkụ, nke ga-enye anyị ohere ịme ihe ọ bụla na mmekọrịta ọrụ. Ọtụtụ mmejuputa atumatu na-arụ ọrụ dị ka ndị a: a na-agbakwunye akpa sidecar ọzọ nwere proxy transperent na microservice ọ bụla, nke a na-agafe okporo ụzọ na-abata na nke na-apụ apụ. Ma nke a bụ ebe anyị nwere ike ime mmezi nke ndị ahịa, tinye atumatu nchekwa, weta ihe mgbochi na ọnụ ọgụgụ nke arịrịọ ma nakọta ozi dị mkpa na mmekọrịta nke ọrụ na mmepụta.

Netramesh - ngwọta ntupu ọrụ dị fechaa

Ngwọta

Enweelarị ọtụtụ mmejuputa iwu nke ụzọ a: Istio и njikọ2. Ha na-enye ọtụtụ atụmatụ site na igbe ahụ. Mana n'otu oge ahụ, a na-enweta nnukwu ego na akụrụngwa. Ọzọkwa, ka nnukwu ụyọkọ nke usoro dị otú ahụ na-arụ ọrụ, otú ahụ ka a ga-achọkwu ihe onwunwe iji nọgide na-arụ ọrụ ọhụrụ. Na Avito, anyị na-arụ ọrụ ụyọkọ kubernetes nwere ọtụtụ puku oge ọrụ (ọnụọgụ ha na-aga n'ihu na-eto ngwa ngwa). Na mmejuputa ya ugbu a, Istio na-eri ~ 300Mb nke RAM n'otu ọrụ. N'ihi ọnụ ọgụgụ dị ukwuu nke ohere, itule n'ụzọ doro anya na-emetụtakwa oge nzaghachi nke ọrụ niile (ruo 10ms).

N'ihi ya, anyị lere anya kpọmkwem ike anyị chọrọ ugbu a, wee kpebie na isi ihe mere anyị ji malite imejuputa ihe ngwọta ndị dị otú ahụ bụ ikike ịnakọta ozi nchọta site na usoro dum n'ụzọ doro anya. Anyị chọkwara inwe njikwa na mmekọrịta nke ọrụ ma na-eme mgbanwe dị iche iche na nkụnye eji isi mee na-ebufe n'etiti ọrụ.

N'ihi ya, anyị bịara na mkpebi anyị:  Netramesh.

Netramesh

Netramesh bụ ngwọta ntupu ọrụ dị fechaa nke nwere ike ịba ụba na-enweghị ngwụcha, n'agbanyeghị ọnụọgụ ọrụ dị na sistemụ ahụ.

Ebumnuche ndị bụ isi nke ngwọta ọhụrụ ahụ bụ obere ego n'elu ego na arụmọrụ dị elu. N'ime njirimara ndị bụ isi, anyị chọrọ ozugbo ka anyị nwee ike izipu ogologo oge n'ụzọ doro anya na sistemụ Jaeger anyị.

Taa, a na-emejuputa ihe ngwọta igwe ojii na Golang. Na, n'ezie, e nwere ihe kpatara nke a. Ide ngwa netwọkụ na Golang nke na-arụkọ ọrụ na I/O na nha nha n'ofe cores ka ọ dị mkpa na-adaba adaba ma dịkwa mfe. Na, ihe dịkwa oke mkpa, arụmọrụ zuru ezu iji dozie nsogbu a. Ọ bụ ya mere anyị ji họrọ Golang.

Ubu oke

Anyị etinyela mbọ anyị n'ịrụpụta nrụpụta kacha. Maka ngwọta nke etinyere n'akụkụ ihe atụ ọ bụla nke ọrụ ahụ, achọrọ obere oriri nke RAM na oge CPU. Na, n'ezie, nzaghachi nzaghachi kwesịrị ịdị ntakịrị.

Ka anyị hụ nsonaazụ anyị nwetara.

RAM

Netramesh na-eri ~ 10Mb na-enweghị okporo ụzọ yana 50Mb kacha na ibu ruru 10000 RPS kwa ọmụmaatụ.

Istio envoy proxy na-eri ~ 300Mb mgbe niile na ụyọkọ anyị na ọtụtụ puku ikpe. Nke a anaghị ekwe ka amụba ya na ụyọkọ dum.

Netramesh - ngwọta ntupu ọrụ dị fechaa

Netramesh - ngwọta ntupu ọrụ dị fechaa

Na Netramesh anyị nwetara mbelata ~ 10x na oriri ebe nchekwa.

CPU

Ojiji CPU hà nhata n'okpuru ibu. Ọ dabere na ọnụ ọgụgụ nke arịrịọ kwa nkeji oge na sidecar. Uru dị na arịrịọ 3000 kwa nkeji na ọnụ ọgụgụ kacha elu:

Netramesh - ngwọta ntupu ọrụ dị fechaa

Netramesh - ngwọta ntupu ọrụ dị fechaa

Enwere otu isi ihe dị mkpa: Netramesh - ngwọta na-enweghị ụgbọ elu njikwa na enweghị ibu anaghị eri oge CPU. Site na Istio, ụgbọ ala na-emelite ebe njedebe ọrụ mgbe niile. N'ihi ya, anyị nwere ike ịhụ foto a na-enweghị ibu:

Netramesh - ngwọta ntupu ọrụ dị fechaa

Anyị na-eji HTTP/1 maka nkwukọrịta n'etiti ọrụ. Mmụba nke oge nzaghachi maka Istio mgbe proxy site na onye ozi ruru 5-10ms, nke bụ ọtụtụ maka ọrụ ndị dị njikere ịzaghachi na millisecond. Na Netramesh oge a agbadala na 0.5-2ms.

Ohere

Obere ego nke proxy ọ bụla na-eri na-eme ka o kwe omume idowe ya n'akụkụ ọrụ ọ bụla. Netramesh kpachaara anya kee ya na-enweghị akụrụngwa ụgbọ elu na-achịkwa iji mee ka ụgbọ ala ọ bụla dị fechaa. Ọtụtụ mgbe na ngwọta ntupu ọrụ, ụgbọ elu njikwa na-ekesa ozi nchọpụta ọrụ n'akụkụ ụgbọ ala ọ bụla. Tinyere ya na-abịa ozi gbasara nkwụsị oge yana nhazi nhazi. Ihe a niile na-enye gị ohere ịme ọtụtụ ihe bara uru, ma, ọ dị mwute ikwu, ọ na-agbapụ sidecars na nha.

Nchọpụta ọrụ

Netramesh - ngwọta ntupu ọrụ dị fechaa

Netramesh anaghị agbakwunye usoro ọ bụla ọzọ maka nchọpụta ọrụ. A na-agbagharị okporo ụzọ niile n'ụzọ doro anya site na netra sidecar.

Netramesh na-akwado protocol ngwa HTTP/1. Iji kọwaa ya, a na-eji ndepụta ọdụ ụgbọ mmiri nwere ike ịhazi. Dịka, sistemụ nwere ọtụtụ ọdụ ụgbọ mmiri nke nkwukọrịta HTTP si eme. Dịka ọmụmaatụ, anyị na-eji 80, 8890, 8080 maka mmekọrịta n'etiti ọrụ na arịrịọ mpụga N'okwu a, enwere ike ịtọ ha site na iji mgbanwe gburugburu NETRA_HTTP_PORTS.

Ọ bụrụ na ị na-eji Kubernetes dị ka onye na-agụ egwú na usoro ọrụ ya maka nkwurịta okwu intra-ụyọkọ n'etiti ọrụ, mgbe ahụ usoro ahụ ka dị otu. Nke mbụ, microservice na-enweta adreesị IP ọrụ site na iji kube-dns wee mepee njikọ ọhụrụ na ya. Ebu ụzọ guzobe njikọ a site na netra-sidecar mpaghara yana ngwugwu TCP niile na-abata na netra. Na-esote, netra-sidecar na-ewepụta njikọ na ebe mbụ. NAT na pod IP na ọnụ na-anọgide kpọmkwem otu ihe ahụ na-enweghị netra.

Nchọgharị ekesa na mbugharị okirikiri

Netramesh na-enye ọrụ achọrọ iji zipu oge nchọta gbasara mmekọrịta HTTP. Netra-sidecar na-atụgharị ụkpụrụ HTTP, tụọ arịrịọ igbu oge, wee wepụta ozi dị mkpa na isi HTTP. N'ikpeazụ, anyị na-enweta akara niile na otu usoro Jaeger. Maka nhazi nke ọma, ị nwekwara ike iji mgbanwe gburugburu ebe obibi nke ụlọ akwụkwọ gọọmentị nyere jaeger go Library.

Netramesh - ngwọta ntupu ọrụ dị fechaa

Netramesh - ngwọta ntupu ọrụ dị fechaa

Ma enwere nsogbu. Ruo mgbe ọrụ na-ewepụta ma zipụ nkụnye eji isi mee uber pụrụ iche, anyị agaghị ahụ ogologo nchụso ejikọrọ na sistemụ. Na nke a bụ ihe anyị chọrọ ngwa ngwa ịchọta ihe kpatara nsogbu. Ebe a ọzọ Netramesh nwere ngwọta. Proxies na-agụ nkụnye eji isi mee HTTP ma, ọ bụrụ na ha enweghị uber trace id, mepụta otu. Netramesh na-echekwa ozi gbasara arịrịọ mbata na ọpụpụ n'ime ụgbọ ala dị n'akụkụ wee dakọtara ha site na ime ka ha nwee nkụnye eji isi mee ihe ndị dị mkpa na-apụ apụ. Naanị ihe ị ga-eme na ọrụ bụ izipu naanị otu nkụnye eji isi mee X-Request-Id, nke enwere ike ịhazi site na iji mgbanwe gburugburu ebe obibi NETRA_HTTP_REQUEST_ID_HEADER_NAME. Iji chịkwaa nha ọnọdụ dị na Netramesh, ị nwere ike ịtọ mgbanwe gburugburu ebe a: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (oge a ga-echekwa ihe gbara ya gburugburu) na NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (ugboro nke mkpocha gburugburu).

Ọ dịkwa ike ijikọ ọtụtụ ụzọ na sistemụ gị site na iji akara nnọkọ pụrụ iche akara ha. Netra na-enye gị ohere ịwụnye HTTP_HEADER_TAG_MAP ka ịgbanwee nkụnye eji isi mee HTTP ka ọ bụrụ mkpado oge nchụso kwekọrọ. Nke a nwere ike ịba uru karịsịa maka nnwale. Mgbe ịgafe ule arụ ọrụ, ị nwere ike ịhụ akụkụ nke sistemu ahụ emetụtara site na nzacha site na igodo nnọkọ kwekọrọ.

Na-ekpebi isi mmalite arịrịọ

Iji chọpụta ebe arịrịọ ahụ siri bịa, ịnwere ike iji ọrụ nke itinye isi okwu na-akpaghị aka na isi mmalite. Iji mgbanwe gburugburu ebe obibi NETRA_HTTP_X_SOURCE_HEADER_NAME Ị nwere ike ezipụta aha nkụnye eji isi mee nke a ga-etinye na akpaghị aka. Site n'iji NETRA_HTTP_X_SOURCE_VALUE ị nwere ike ịtọ uru nke a ga-edobe nkụnye eji isi mee X-Source maka arịrịọ ọpụpụ niile.

Nke a na-enye ohere ka ekesa nkesa nke nkụnye eji isi mee bara uru n'otu n'otu na netwọk niile. Mgbe ahụ ị nwere ike iji ya na ọrụ ma tinye ya na ndekọ na metrik.

Ntugharị okporo ụzọ na Netramesh internals

Netramesh nwere isi ihe abụọ. Nke mbụ, netra-init, na-edobe iwu netwọkụ iji gbochie okporo ụzọ. Ọ na-eji iptables redirect iwu igbochi ihe niile ma ọ bụ akụkụ nke okporo ụzọ na sidecar, nke bụ akụkụ nke abụọ nke Netramesh. Ị nwere ike hazie ọdụ ụgbọ mmiri ndị achọrọ ka egbochie maka nnọkọ TCP na-abata na nke na-apụ apụ: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Ngwá ọrụ ahụ nwekwara ihe na-adọrọ mmasị - ntụgharị nke probabilistic. Ọ bụrụ na ị na-eji Netramesh naanị maka ịnakọta ogologo oge, mgbe ahụ na mpaghara mmepụta ị nwere ike ịchekwa akụrụngwa ma mee ka usoro ihe omume ahụ nwee ike iji mgbanwe. NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (site na 0 ruo 1). Uru ndabara bụ 1 (a na-egbochi okporo ụzọ niile).

Mgbe nkwụsịtụ nke ọma gasịrị, netra sidecar na-anabata njikọ ọhụrụ ahụ wee jiri ya SO_ORIGINAL_DST nhọrọ oghere iji nweta ebe mbụ. Netra mepee njikọ ọhụrụ na adreesị IP mbụ wee guzobe nkwurịta okwu TCP abụọ n'etiti ndị ọzọ, na-ege ntị na okporo ụzọ niile na-agafe. Ọ bụrụ na akọwara ọdụ ụgbọ mmiri dị ka HTTP, Netra na-anwa inyocha ma chọpụta ya. Ọ bụrụ na ntule HTTP ada ada, Netra ga-adaghachi na TCP ma na-ezochite ndị bytes n'ụzọ doro anya.

Ịmepụta eserese dabere

Mgbe m nwetasịrị nnukwu ọnụọgụ ọchụchọ na Jaeger, achọrọ m ịnweta eserese zuru oke nke mmekọrịta na sistemụ. Mana ọ bụrụ na sistemu gị juru eju na ọtụtụ ijeri nchọta na-agbakọ kwa ụbọchị, ịchịkọta ha abụghị ọrụ dị mfe. Enwere ụzọ isi mee nke a: ọkụ-dabere. Agbanyeghị, ọ ga-ewe awa iji wuo eserese zuru oke, ọ ga-amanye gị ibudata ihe ndekọ data niile sitere na Jaeger maka awa 24 gara aga.

Ọ bụrụ na ị na-eji Elasticsearch na-echekwa oge nchọta, ị nwere ike iji ngwa Golang dị mfe, nke ga-ewu otu eserese na nkeji na-eji njirimara na ike nke Elasticsearch.

Netramesh - ngwọta ntupu ọrụ dị fechaa

Otu esi eji Netramesh

Enwere ike itinye Netra n'ụzọ dị mfe na ọrụ ọ bụla na-agba ndị egwu egwu ọ bụla. Ị nwere ike ịhụ ihe atụ ebe a.

N'oge a, Netra enweghị ikike imejuputa akụkụ akụkụ na ọrụ, mana enwere atụmatụ maka mmejuputa.

Ọdịnihu nke Netramesh

Ihe mgbaru ọsọ bụ isi Netramesh bụ iji nweta obere ego akụrụngwa yana ịrụ ọrụ dị elu, na-enye ikike ndị bụ isi maka nleba anya na njikwa nkwukọrịta n'etiti ọrụ.

N'ọdịnihu, Netramesh ga-akwado usoro oyi akwa ngwa ndị ọzọ na-abụghị HTTP. Ụzọ ụzọ L7 ga-adị n'ọdịnihu dị nso.

Jiri Netramesh ma ọ bụrụ na ị nweta nsogbu ndị yiri ya wee degara anyị ajụjụ na aro.

isi: www.habr.com

Tinye a comment