Netramesh - ʻoluʻolu mesh lawelawe māmā

Ke neʻe nei mākou mai kahi noi monolithic i kahi hoʻolālā microservices, ke kū nei mākou i nā pilikia hou.

Ma kahi noi monolithic, maʻalahi ka maʻalahi e hoʻoholo i kahi ʻāpana o ka ʻōnaehana i loaʻa ai ka hewa. ʻO ka hapa nui, aia ka pilikia ma ke code o ka monolith ponoʻī, a i ʻole ka waihona. Akā i ka wā e hoʻomaka ai mākou e ʻimi i kahi pilikia i kahi hoʻolālā microservice, ʻaʻole maopopo loa nā mea āpau. Pono mākou e ʻimi i ke ala holoʻokoʻa i lawe ʻia e ka noi mai ka hoʻomaka a i ka pau ʻana a koho iā ia mai nā haneli microservices. Eia kekahi, ʻo ka hapa nui o lākou i loaʻa i kā lākou mau keʻena mālama ponoʻī, hiki ke kumu i nā hewa kūpono, a me nā pilikia me ka hana a me ka hoʻomanawanui hewa.

Netramesh - ʻoluʻolu mesh lawelawe māmā

Ua lōʻihi koʻu ʻimi ʻana i kahi mea hana e kōkua i ka hoʻoponopono ʻana i kēlā mau pilikia (Ua kākau wau e pili ana i kēia ma Habré: 1, 2), akā i ka hopena ua hana au i kaʻu kumu hoʻonā kumu. Ma kēia ʻatikala e kamaʻilio wau e pili ana i nā pono o ka lawelawe mesh mesh a kaʻana like i kahi mea hana hou no kāna hoʻokō.

ʻO ka ʻimi ʻana i hāʻawi ʻia he hopena maʻamau i ka pilikia o ka ʻimi ʻana i nā hewa i nā ʻōnaehana puʻunaue. Akā pehea inā ʻaʻole i hoʻokō ʻia kēia ala e hōʻiliʻili ai i ka ʻike e pili ana i nā pilina pūnaewele i loko o ka ʻōnaehana, a i ʻole, ʻoi aku ka maikaʻi, ma kahi ʻāpana o ka ʻōnaehana ua hana maikaʻi ia, akā ma ka hapa ʻaʻole ia, no ka mea ʻaʻole i hoʻohui ʻia i nā lawelawe kahiko. ? No ka hoʻoholoʻana i ke kumu kūpono o kahi pilikia, pono e loaʻa kahi kiʻi piha o nā mea e hana nei i loko o ka pūnaewele. He mea koʻikoʻi ka hoʻomaopopo ʻana i nā microservices e pili ana i nā ala koʻikoʻi ʻoihana.

Maanei hiki ke hele mai ke ala lawelawe mesh e kōkua iā mākou, e hana me nā mīkini āpau no ka hōʻiliʻili ʻana i ka ʻike pūnaewele ma kahi pae haʻahaʻa ma mua o nā lawelawe ponoʻī. ʻO kēia ala e hiki ai iā mākou ke keakea i nā kaʻa a pau a nānā iā ia ma ka lele. Eia kekahi, ʻaʻole pono nā noi e ʻike i kekahi mea e pili ana iā ia.

Hoʻopili mesh lawelawe

ʻO ka manaʻo nui o ka lawelawe mesh mesh e hoʻohui i kahi papa hana ʻē aʻe ma luna o ka pūnaewele, e ʻae iā mākou e hana i kekahi mea me ka pilina inter-service. ʻO ka hapa nui o nā hoʻokō e like me kēia: ua hoʻohui ʻia kahi pahu sidecar hou me kahi proxy transparent i kēlā me kēia microservice, kahi i hala ai nā kaʻa komo a me nā puka waho o ka lawelawe. A ʻo kēia kahi kahi e hiki ai iā mākou ke hana i ke kaupaona ʻana o ka mea kūʻai aku, hoʻopili i nā kulekele palekana, kau i nā palena i ka helu o nā noi a hōʻiliʻili i ka ʻike koʻikoʻi e pili ana i ka pilina o nā lawelawe i ka hana.

Netramesh - ʻoluʻolu mesh lawelawe māmā

Pāʻoihana

Aia kekahi mau hoʻokō o kēia ala: Istio и linkerd2. Hāʻawi lākou i nā hiʻohiʻona he nui i waho o ka pahu. Akā i ka manawa like, hiki mai ka nui o nā kumu waiwai. Eia kekahi, ʻoi aku ka nui o ka puʻupuʻu kahi e hana ai ia ʻōnaehana, ʻoi aku ka nui o nā kumuwaiwai e koi ʻia e mālama i ka ʻōnaehana hou. Ma Avito, hoʻohana mākou i nā pūʻulu kubernetes i loaʻa nā kaukani o nā manawa lawelawe (a ke hoʻomau nei kā lākou helu e ulu wikiwiki). I kāna hoʻokō ʻana i kēia manawa, hoʻopau ʻo Istio ~ 300Mb o RAM no kēlā me kēia lawelawe lawelawe. Ma muli o ka nui o nā mea hiki, pili pū ka pale kaulike i ka manawa pane holoʻokoʻa o nā lawelawe (a hiki i 10ms).

ʻO ka hopena, ua nānā pono mākou i nā mana e pono ai mākou i kēia manawa, a ua hoʻoholo mākou ʻo ke kumu nui i hoʻomaka ai mākou e hoʻokō i ia mau hoʻonā ʻana ʻo ia ka hiki ke hōʻiliʻili i ka ʻike mai ka ʻōnaehana holoʻokoʻa. Ua makemake pū mākou e loaʻa ka mana ma luna o ka launa pū ʻana o nā lawelawe a hana i nā manipulations like ʻole me nā poʻomanaʻo i hoʻoili ʻia ma waena o nā lawelawe.

ʻO ka hopena, ua hoʻoholo mākou:  Netramesh.

Netramesh

Netramesh ʻO ia ka hoʻonā mesh lawelawe māmā me ka hiki ke hoʻonui i ka palena ʻole, me ka nānā ʻole i ka nui o nā lawelawe i ka ʻōnaehana.

ʻO nā pahuhopu nui o ka hoʻonā hou he haʻahaʻa haʻahaʻa ma luna o ke poʻo a me ka hana kiʻekiʻe. Ma waena o nā hiʻohiʻona koʻikoʻi, makemake koke mākou e hiki ke hoʻouna maopopo i nā tracing spans i kā mākou ʻōnaehana Jaeger.

I kēia lā, hoʻokō ʻia ka hapa nui o nā hoʻonā kapua ma Golang. A, ʻoiaʻiʻo, aia nā kumu no kēia. ʻO ke kākau ʻana i nā noi pūnaewele ma Golang e hana like ʻole me I/O a me ka unahi ma waena o nā cores e like me ka mea e pono ai he maʻalahi a maʻalahi hoʻi. A, ʻo ka mea nui loa, lawa ka hana e hoʻoponopono i kēia pilikia. ʻO ia ke kumu i koho ai mākou iā Golang.

'Ohanahana

Ua kālele mākou i kā mākou mau hana i ka loaʻa ʻana o ka huahana kiʻekiʻe. No kahi hoʻonā i kau ʻia ma hope o kēlā me kēia manawa o ka lawelawe, pono kahi hoʻohana liʻiliʻi o ka RAM a me ka manawa CPU. A, ʻoiaʻiʻo, he liʻiliʻi hoʻi ka lohi o ka pane.

E ʻike kākou i nā hopena i loaʻa iā mākou.

hipa kāne

Hoʻopau ʻo Netramesh ~ 10Mb me ka ʻole o ke kaʻa a me ka 50Mb kiʻekiʻe me ka ukana a hiki i 10000 RPS i kēlā me kēia manawa.

Hoʻopau mau ʻo Istio envoy proxy i ka ~ 300Mb i kā mākou mau pūʻulu me nā kaukani mau manawa. ʻAʻole ʻae kēia e hoʻonui ʻia i ka hui holoʻokoʻa.

Netramesh - ʻoluʻolu mesh lawelawe māmā

Netramesh - ʻoluʻolu mesh lawelawe māmā

Me Netramesh ua loaʻa iā mākou kahi hōʻemi ~ 10x i ka hoʻohana hoʻomanaʻo.

CPU

Ua like ka hoʻohana ʻana o CPU ma lalo o ka ukana. Aia ia i ka helu o nā noi i kēlā me kēia ʻāpana o ka manawa i ka sidecar. Nā waiwai ma 3000 noi i kēlā me kēia kekona ma ka piko:

Netramesh - ʻoluʻolu mesh lawelawe māmā

Netramesh - ʻoluʻolu mesh lawelawe māmā

Aia kekahi mea koʻikoʻi: ʻo Netramesh - kahi hopena me ka ʻole o ka mokulele mana a me ka ʻole o ka ukana ʻaʻole ia e pau i ka manawa CPU. Me Istio, hoʻonui mau nā kaʻa ʻaoʻao i nā wahi hope o ka lawelawe. ʻO ka hopena, hiki iā mākou ke ʻike i kēia kiʻi me ka ʻole o ka ukana:

Netramesh - ʻoluʻolu mesh lawelawe māmā

Hoʻohana mākou i ka HTTP/1 no ke kamaʻilio ʻana ma waena o nā lawelawe. ʻO ka piʻi ʻana o ka manawa pane no Istio i ka wā e koho ai ma o ka ʻelele a hiki i ka 5-10ms, he nui loa ia no nā lawelawe i mākaukau e pane i kahi millisecond. Me Netramesh ua emi kēia manawa i 0.5-2ms.

Scalability

ʻO ka liʻiliʻi o nā kumuwaiwai i hoʻopau ʻia e kēlā me kēia proxy e hiki ai ke waiho iā ia ma kahi kokoke i kēlā me kēia lawelawe. Ua manaʻo ʻia ʻo Netramesh me ka ʻole o kahi ʻāpana mokulele e mālama pono i kēlā me kēia kaʻa ʻaoʻao māmā. ʻO ka manawa pinepine i nā hāʻina mesh lawelawe, hāʻawi ka mokulele hoʻokele i ka ʻike ʻike lawelawe i kēlā me kēia kaʻa. Me ia e hele mai ana ka ʻike e pili ana i nā manawa manawa a me nā hoʻonohonoho kaulike. ʻO kēia mau mea a pau e hiki ai iā ʻoe ke hana i nā mea pono he nui, akā naʻe, ʻoi aku ka nui o nā sidecars.

ʻIke lawelawe

Netramesh - ʻoluʻolu mesh lawelawe māmā

ʻAʻole hoʻohui ʻo Netramesh i nā hana ʻē aʻe no ka ʻike lawelawe. Hoʻopili ʻia nā kaʻa a pau ma o ka netra sidecar.

Kākoʻo ʻo Netramesh i ka protocol noi HTTP/1. No ka wehewehe ʻana, hoʻohana ʻia kahi papa inoa o nā awa. ʻO ka maʻamau, loaʻa i ka ʻōnaehana kekahi mau awa e hele ai ke kamaʻilio HTTP. No ka laʻana, hoʻohana mākou i ka 80, 8890, 8080 no ka launa pū ʻana ma waena o nā lawelawe a me nā noi waho. NETRA_HTTP_PORTS.

Inā ʻoe e hoʻohana iā Kubernetes ma ke ʻano he mea hoʻokani pila a me kāna ʻoihana hui lawelawe no ke kamaʻilio intra-cluster ma waena o nā lawelawe, a laila e mau ke ʻano like. ʻO ka mea mua, loaʻa i ka microservice kahi leka uila IP lawelawe me ka kube-dns a wehe i kahi pilina hou iā ia. Hoʻokumu mua ʻia kēia pilina me ka netra-sidecar kūloko a hiki mua nā ʻeke TCP āpau i netra. A laila, hoʻokumu ka netra-sidecar i kahi pilina me ka wahi mua. ʻO NAT ma ka pod IP ma ka node e noho like me ka netra ʻole.

Māhele ʻia ka huli ʻana a me ka hoʻouna ʻana i ka pōʻaiapili

Hāʻawi ʻo Netramesh i ka hana e pono ai e hoʻouna i nā tracing spans e pili ana i nā pilina HTTP. Hoʻopili ʻo Netra-sidecar i ka protocol HTTP, ana i nā noi lohi, a unuhi i ka ʻike pono mai nā poʻomanaʻo HTTP. ʻO ka hope loa, loaʻa iā mākou nā ala āpau i kahi ʻōnaehana Jaeger hoʻokahi. No ka hoʻonohonoho maikaʻi ʻana, hiki iā ʻoe ke hoʻohana i nā ʻano hoʻololi kaiapuni i hāʻawi ʻia e ka waihona kūhelu jaeger hele hale waihona puke.

Netramesh - ʻoluʻolu mesh lawelawe māmā

Netramesh - ʻoluʻolu mesh lawelawe māmā

Akā aia kekahi pilikia. A hiki i nā lawelawe ke hoʻopuka a hoʻouna i kahi poʻomanaʻo uber kūikawā, ʻaʻole mākou e ʻike i nā kikoʻī pili i ka ʻōnaehana. A ʻo kēia ka mea e pono ai mākou e ʻimi koke i ke kumu o nā pilikia. Eia hou ua loaʻa iā Netramesh kahi hopena. Heluhelu nā Proxies i nā poʻomanaʻo HTTP a, inā ʻaʻole i loaʻa ka uber trace id, e hana i hoʻokahi. Mālama pū ʻo Netramesh i ka ʻike e pili ana i nā noi komo a i waho i kahi kaʻa ʻaoʻao a hoʻohālikelike iā lākou ma ka hoʻonui ʻana iā lākou me nā poʻomanaʻo noi puka e pono ai. ʻO nā mea a pau āu e hana ai ma nā lawelawe, ʻo ka hoʻouna ʻana i hoʻokahi poʻo X-Request-Id, hiki ke hoʻonohonoho ʻia me ka hoʻohana ʻana i kahi loli kaiapuni NETRA_HTTP_REQUEST_ID_HEADER_NAME. No ka mālama ʻana i ka nui o ka pōʻaiapili ma Netramesh, hiki iā ʻoe ke hoʻonohonoho i nā ʻano hoʻololi kaiapuni: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (ka manawa e mālama ʻia ai ka pōʻaiapili) a NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (frequency of context cleanup).

Hiki nō hoʻi ke hoʻohui i nā ala he nui ma kāu ʻōnaehana ma ke kaha ʻana iā lākou me kahi hōʻailona kau kūikawā. ʻAe ʻo Netra iā ʻoe e hoʻokomo HTTP_HEADER_TAG_MAP e hoʻohuli i nā poʻomanaʻo HTTP i mau hōʻailona kikoʻī kikoʻī. Hiki ke hoʻohana pono kēia no ka hoʻāʻo ʻana. Ma hope o ka hala ʻana i ka hoʻāʻo hana, hiki iā ʻoe ke ʻike i kahi ʻāpana o ka ʻōnaehana i hoʻopilikia ʻia e ka kānana ʻana e ke kī kau manawa kūpono.

E hoʻoholo ana i ke kumu noi

No ka hoʻoholo i kahi i hele mai ai ka noi, hiki iā ʻoe ke hoʻohana i ka hana o ka hoʻohui ʻana i kahi poʻo me ke kumu. Ke hoʻohana nei i kahi ʻano hoʻololi kaiapuni NETRA_HTTP_X_SOURCE_HEADER_NAME Hiki iā ʻoe ke kuhikuhi i kahi inoa poʻo e hoʻokomo ʻakomi ʻia. Ma ka hoʻohana ʻana NETRA_HTTP_X_SOURCE_VALUE hiki iā ʻoe ke hoʻonohonoho i ka waiwai e hoʻonoho ʻia ai ke poʻo X-Source no nā noi puka a pau.

ʻAe kēia i ka māhele ʻana o kēia poʻomanaʻo pono e puʻunaue like ʻia ma ka pūnaewele. A laila hiki iā ʻoe ke hoʻohana iā ia i nā lawelawe a hoʻohui i nā lāʻau a me nā metric.

ʻO ke ala kaʻa kaʻa a me ka Netramesh i loko

Aia ʻo Netramesh i ʻelua mau mea nui. ʻO ka mua, netra-init, hoʻonohonoho i nā lula o ka pūnaewele e hoʻopaʻa i nā kaʻa. Hoʻohana ʻo ia iptables redirect rules e hoʻopaʻa i nā mea āpau a i ʻole ʻāpana o ke kaʻa ma ka sidecar, ʻo ia ka lua o ka mea nui o Netramesh. Hiki iā ʻoe ke hoʻonohonoho i nā awa e pono ke hoʻopaʻa ʻia no nā kau TCP e komo a puka i waho: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

He hiʻohiʻona hoihoi ko ka mea hana - ke alahele probabilistic. Inā ʻoe e hoʻohana wale iā Netramesh no ka hōʻiliʻili ʻana i nā spans tracing, a laila i loko o kahi ʻenehana hana hiki iā ʻoe ke mālama i nā kumuwaiwai a hiki i ka hoʻokele probabilistic me ka hoʻohana ʻana i nā loli. NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (mai 0 a 1). ʻO 1 ka waiwai paʻamau (ua keakea ʻia nā kaʻa a pau).

Ma hope o ka interception kūleʻa, ʻae ka sidecar netra i ka pilina hou a me ka hoʻohana SO_ORIGINAL_DST koho socket e kiʻi i ka huakaʻi kumu. A laila wehe ʻo Netra i kahi pilina hou i ka helu IP kumu a hoʻokumu i ke kamaʻilio TCP ʻelua ma waena o nā ʻaoʻao, e hoʻolohe ana i nā kaʻa a pau e hele ana. Inā wehewehe ʻia ke awa ʻo HTTP, hoʻāʻo ʻo Netra e hoʻopaʻa a ʻimi iā ia. Inā hāʻule ka hoʻolaha ʻana o HTTP, e hāʻule hou ʻo Netra i TCP a hoʻolaha pono i nā bytes.

Ke kūkulu ʻana i ka pakuhi hilinaʻi

Ma hope o ka loaʻa ʻana o ka ʻike he nui o ka huli ʻana ma Jaeger, makemake wau e kiʻi i kahi pakuhi piha o nā pilina ma ka ʻōnaehana. Akā inā ʻoi aku ka nui o kāu ʻōnaehana a hōʻiliʻili ʻia nā piliona o ka tracing spans i kēlā me kēia lā, ʻaʻole ia he hana maʻalahi ka hoʻohui ʻana iā lākou. Aia kahi ala kūhelu e hana ai i kēia: pili ʻana i ka lapalapa ahi. Eia naʻe, he mau hola ke kūkulu ʻana i ka pakuhi piha a e koi iā ʻoe e hoʻoiho i ka ʻikepili holoʻokoʻa mai Jaeger no nā hola XNUMX i hala.

Inā ʻoe e hoʻohana ana i ka Elasticsearch e mālama i ka tracing spans, hiki iā ʻoe ke hoʻohana he mea pono Golang maʻalahi, e kūkulu i ka pakuhi like i loko o nā minuke me ka hoʻohana ʻana i nā hiʻohiʻona a me nā mana o Elasticsearch.

Netramesh - ʻoluʻolu mesh lawelawe māmā

Pehea e hoʻohana ai iā Netramesh

Hiki ke hoʻohui maʻalahi iā Netra i kekahi lawelawe e holo ana i kekahi orkestra. Hiki iā ʻoe ke ʻike i kahi laʻana maanei.

I kēia manawa, ʻaʻole hiki iā Netra ke hoʻokō maʻalahi i nā sidecars i nā lawelawe, akā aia nā hoʻolālā no ka hoʻokō.

ʻO ka wā e hiki mai ana o Netramesh

pahuhopu nui Netramesh ʻo ia ka hoʻokō ʻana i nā kumukūʻai haʻahaʻa liʻiliʻi a me ka hana kiʻekiʻe, e hāʻawi ana i nā hiki kumu no ka nānā ʻana a me ka mālama ʻana i ke kamaʻilio ma waena o nā lawelawe.

I ka wā e hiki mai ana, e kākoʻo ʻo Netramesh i nā protocol layer ʻē aʻe ma waho o HTTP. E loaʻa ana ke ala ala L7 i ka wā e hiki mai ana.

E hoʻohana iā Netramesh inā ʻike ʻoe i nā pilikia like a kākau iā mākou me nā nīnau a me nā manaʻo.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka