Netramesh - njira yopepuka yolumikizira mauna

Pamene tikuchoka ku pulogalamu ya monolithic kupita ku zomangamanga za microservices, timakumana ndi zovuta zatsopano.

Mu pulogalamu ya monolithic, nthawi zambiri zimakhala zosavuta kudziwa kuti ndi gawo liti la dongosolo lomwe cholakwikacho chidachitika. Mwinamwake, vuto liri mu code ya monolith yokha, kapena mu database. Koma tikayamba kuyang'ana vuto mu kamangidwe ka microservice, zonse sizikhala zoonekeratu. Tiyenera kupeza njira yonse yomwe pempholi idatenga kuyambira koyambira mpaka kumapeto ndikusankha kuchokera ku mazana a ma microservices. Komanso, ambiri a iwo amakhalanso ndi malo awo osungira, omwe angayambitsenso zolakwika zomveka, komanso mavuto a ntchito ndi kulolerana zolakwika.

Netramesh - njira yopepuka yolumikizira mauna

Ndakhala ndikuyang'ana chida chomwe chingathandize kuthana ndi zovuta zotere kwa nthawi yayitali (ndinalemba izi pa HabrΓ©: 1, 2), koma pamapeto pake ndinapanga yankho langa lotseguka. M'nkhaniyi ndikulankhula za ubwino wa njira ya mesh ya utumiki ndikugawana chida chatsopano cha kukhazikitsidwa kwake.

Kufufuza kogawidwa ndi njira yodziwika bwino yothetsera vuto lopeza zolakwika mu machitidwe ogawidwa. Koma bwanji ngati njira iyi yosonkhanitsira chidziwitso chokhudzana ndi maukonde sichinakhazikitsidwebe m'dongosolo, kapena, choyipa, mbali ina ya dongosololi ikugwira ntchito bwino, koma mbali yake sichitero, chifukwa sichinawonjezeredwe ku mautumiki akale. ? Kuti mudziwe chomwe chimayambitsa vuto, m'pofunika kukhala ndi chithunzi chonse cha zomwe zikuchitika mu dongosolo. Ndikofunikira kwambiri kumvetsetsa kuti ndi ma microservice ati omwe akukhudzidwa ndi njira zofunika kwambiri zamabizinesi.

Apa njira ya mesh yautumiki ikhoza kutithandiza, yomwe ingagwirizane ndi makina onse osonkhanitsira zidziwitso zapaintaneti pamlingo wotsika kuposa momwe ntchito zomwe zimagwirira ntchito. Njirayi imatithandiza kuletsa magalimoto onse ndikuwasanthula pa ntchentche. Komanso, mapulogalamu sayenera ngakhale kudziwa kalikonse za izo.

Service mesh njira

Lingaliro lalikulu la njira yolumikizira ma mesh ndikuwonjezera gawo lina lazinthu pamanetiweki, zomwe zingatilole kuchita chilichonse ndi kulumikizana kwapaintaneti. Zochita zambiri zimagwira ntchito motere: chotengera chowonjezera cham'mbali chokhala ndi proxy yowonekera chimawonjezedwa ku microservice iliyonse, momwe magalimoto onse obwera ndi otuluka amadutsa. Ndipo apa ndi pomwe titha kulinganiza kasitomala, kugwiritsa ntchito mfundo zachitetezo, kuletsa kuchuluka kwa zopempha ndikusonkhanitsa zidziwitso zofunikira pakulumikizana kwa ntchito popanga.

Netramesh - njira yopepuka yolumikizira mauna

Malangizo

Pali kale zingapo zokhazikitsa njira iyi: Istio ΠΈ mgwirizano2. Amapereka zinthu zambiri kunja kwa bokosi. Koma panthawi imodzimodziyo, pamabwera chiwongoladzanja chachikulu pazachuma. Kuphatikiza apo, gulu lalikulu lomwe dongosolo loterolo limagwira ntchito, m'pamenenso pafunikanso zinthu zambiri kuti zisungidwe zatsopano. Ku Avito, timagwiritsa ntchito magulu a kubernetes omwe amakhala ndi masauzande a mautumiki (ndipo chiwerengero chawo chikukulirakulirabe). Pakukhazikitsa kwake pano, Istio imadya ~ 300Mb ya RAM pazochitika zilizonse. Chifukwa cha kuchuluka kwa kuthekera, kusanja mowonekera kumakhudzanso nthawi yonse yoyankha ntchito (mpaka 10ms).

Zotsatira zake, tidayang'ana zomwe tikufunikira pakali pano, ndipo tidaganiza kuti chifukwa chachikulu chomwe tidayamba kugwiritsa ntchito njira zotere ndikutha kusonkhanitsa zidziwitso kuchokera kudongosolo lonse mowonekera. Tinkafunanso kukhala ndi ulamuliro pa kuyanjana kwa mautumiki ndikuchita zosinthika zosiyanasiyana ndi mitu yomwe imasamutsidwa pakati pa mautumiki.

Zotsatira zake, tinafika pachigamulo chathu:β€Š Netramesh.

Netramesh

Netramesh ndi njira yopepuka yolumikizira mauna omwe amatha kukula mopanda malire, mosasamala kanthu za kuchuluka kwa mautumiki mudongosolo.

Zolinga zazikulu za yankho latsopanoli zinali zochepa zowonjezera zowonjezera komanso ntchito zapamwamba. Zina mwazinthu zazikuluzikulu, nthawi yomweyo tidafuna kuti titha kutumiza zowonera ku dongosolo lathu la Jaeger.

Masiku ano, mayankho ambiri amtambo akugwiritsidwa ntchito ku Golang. Ndipo, ndithudi, pali zifukwa za izi. Kulemba ntchito za netiweki ku Golang zomwe zimagwira ntchito molumikizana ndi I/O ndikukulitsa ma cores ngati pakufunika ndikosavuta komanso kosavuta. Ndipo, chomwe chilinso chofunikira kwambiri, ntchitoyo ndi yokwanira kuthetsa vutoli. Ndicho chifukwa chake tinasankhanso Golang.

Kukonzekera

Tayang'ana khama lathu pakupeza zokolola zambiri. Kuti mupeze yankho lomwe limayikidwa pafupi ndi gawo lililonse lautumiki, kumwa pang'ono kwa RAM ndi nthawi ya CPU kumafunika. Ndipo, ndithudi, kuchedwa kuyankha kuyeneranso kukhala kochepa.

Tiyeni tiwone zotsatira zomwe tapeza.

Ram

Netramesh imadya ~ 10Mb popanda kuchuluka kwa magalimoto ndi 50Mb yokwanira ndi katundu wofikira 10000 RPS pachitsanzo chilichonse.

Woyimira nthumwi wa Istio nthawi zonse amadya ~ 300Mb m'magulu athu ndi masauzande ambiri. Izi sizimalola kuti ziwonjezeke kumagulu onse.

Netramesh - njira yopepuka yolumikizira mauna

Netramesh - njira yopepuka yolumikizira mauna

Ndi Netramesh tapeza ~ 10x kuchepetsa kukumbukira kukumbukira.

CPU

Kugwiritsa ntchito kwa CPU kumakhala kofanana ndi katundu. Zimatengera kuchuluka kwa zopempha pagawo la nthawi kupita pagalimoto yam'mbali. Makhalidwe pa zopempha 3000 pa sekondi pachimake:

Netramesh - njira yopepuka yolumikizira mauna

Netramesh - njira yopepuka yolumikizira mauna

Palinso mfundo ina yofunika kwambiri: Netramesh - yankho lopanda ndege yolamulira ndipo popanda katundu silidya nthawi ya CPU. Ndi Istio, ma sidecars nthawi zonse amasintha mapeto a ntchito. Zotsatira zake, titha kuwona chithunzichi popanda katundu:

Netramesh - njira yopepuka yolumikizira mauna

Timagwiritsa ntchito HTTP/1 kulumikizana pakati pa mautumiki. Kuwonjezeka kwa nthawi yoyankha kwa Istio pamene kutumiza nthumwi kunali kwa 5-10ms, zomwe zimakhala zambiri pa mautumiki omwe ali okonzeka kuyankha mu millisecond. Ndi Netramesh nthawi ino yatsika mpaka 0.5-2ms.

Scalability

Kuchepa kwazinthu zomwe zimagwiritsidwa ntchito ndi proxy iliyonse zimapangitsa kuti zikhale zotheka kuziyika pafupi ndi ntchito iliyonse. Netramesh idapangidwa mwadala popanda chowongolera ndege kuti ingosunga galimoto iliyonse yam'mbali mopepuka. Nthawi zambiri mu ma mesh solutions, oyendetsa ndege amagawa zidziwitso zopezeka pagalimoto iliyonse yam'mbali. Pamodzi ndi izi pamabwera zambiri zokhudzana ndi nthawi yopuma komanso zosintha zofananira. Zonsezi zimakupatsani mwayi wochita zinthu zambiri zothandiza, koma, mwatsoka, zimaphulitsa ma sidecars kukula kwake.

Kupeza ntchito

Netramesh - njira yopepuka yolumikizira mauna

Netramesh sikuwonjezera njira zina zopezera ntchito. Magalimoto onse amayendetsedwa mowonekera kudzera pa netra sidecar.

Netramesh imathandizira HTTP/1 application protocol. Kufotokozera, mndandanda wosinthika wamadoko umagwiritsidwa ntchito. Nthawi zambiri, dongosololi lili ndi madoko angapo omwe kulumikizana kwa HTTP kumachitika. Mwachitsanzo, timagwiritsa ntchito 80, 8890, 8080 polumikizana pakati pa mautumiki ndi zopempha zakunja. Apa, zitha kukhazikitsidwa pogwiritsa ntchito kusintha kwa chilengedwe. NETRA_HTTP_PORTS.

Ngati mugwiritsa ntchito Kubernetes ngati woyimba ndi makina ake a Service entity kulumikizana pakati pamagulu pakati pa mautumiki, ndiye kuti makinawo amakhalabe chimodzimodzi. Choyamba, microservice imapeza adilesi ya IP pogwiritsa ntchito kube-dns ndikutsegula kulumikizana kwatsopano kwa iyo. Kulumikizana uku kumakhazikitsidwa koyamba ndi netra-sidecar ya komweko ndipo mapaketi onse a TCP amayamba kufika ku netra. Kenako, netra-sidecar imakhazikitsa kulumikizana ndi kopita koyambirira. NAT pa pod IP pa node imakhalabe chimodzimodzi monga popanda netra.

Kalondolondo wogawidwa ndi kutumiza nkhani

Netramesh imapereka magwiridwe antchito ofunikira kuti atumize mayendedwe okhudzana ndi HTTP. Netra-sidecar imapanga protocol ya HTTP, imayesa kuchedwa kwa pempho, ndikuchotsa zofunikira pamitu ya HTTP. Pamapeto pake, timapeza zotsatila zonse mu dongosolo limodzi la Jaeger. Kuti mukhazikitse bwino, mutha kugwiritsanso ntchito zosintha zachilengedwe zoperekedwa ndi laibulale yovomerezeka jaeger go library.

Netramesh - njira yopepuka yolumikizira mauna

Netramesh - njira yopepuka yolumikizira mauna

Koma pali vuto. Mpaka ntchito zitapanga ndikutumiza mutu wapadera wa uber, sitidzawona mipata yolumikizidwa mudongosolo. Ndipo izi ndi zomwe tikufunikira kuti tipeze mwamsanga zomwe zimayambitsa mavuto. Apanso Netramesh ali ndi yankho. Ma proxies amawerenga mitu ya HTTP ndipo, ngati ilibe uber trace id, pangani imodzi. Netramesh imasunganso zambiri za zopempha zomwe zikubwera komanso zotuluka m'galimoto yam'mbali ndikuzifananitsa powalemeretsa ndi mitu yofunikira yotuluka. Zomwe muyenera kuchita muzothandizira ndikutumiza mutu umodzi wokha X-Request-Id, yomwe ikhoza kukhazikitsidwa pogwiritsa ntchito kusintha kwa chilengedwe NETRA_HTTP_REQUEST_ID_HEADER_NAME. Kuti muwongolere kukula kwa nkhani mu Netramesh, mutha kuyika zosintha zotsatirazi: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (nthawi yomwe nkhaniyo idzasungidwe) ndi NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (kawirikawiri kuyeretsa nkhani).

Ndizothekanso kuphatikiza njira zingapo padongosolo lanu pozilemba ndi chizindikiro chapadera chagawo. Netra imakulolani kuti muyike HTTP_HEADER_TAG_MAP kuti musinthe mitu ya HTTP kukhala ma tag otsatizana otsatizana. Izi zitha kukhala zothandiza makamaka pakuyesa. Pambuyo poyesa mayeso ogwira ntchito, mutha kuwona kuti ndi gawo liti ladongosolo lomwe lakhudzidwa ndi kusefa ndi kiyi yofananira.

Kusankha Gwero la Pempho

Kuti mudziwe komwe pempho lachokera, mutha kugwiritsa ntchito ntchito yongowonjezera mutu ndi gwero. Kugwiritsa ntchito kusintha kwa chilengedwe NETRA_HTTP_X_SOURCE_HEADER_NAME Mutha kutchula dzina lamutu lomwe lizikhazikitsidwa zokha. Pogwiritsa ntchito NETRA_HTTP_X_SOURCE_VALUE mutha kuyika mtengo womwe mutu wa X-Source udzakhazikitsidwa pazopempha zonse zomwe zatuluka.

Izi zimalola kugawidwa kwa mutu wothandizawu kuti ugawidwe mofanana pa intaneti. Ndiye mutha kuzigwiritsa ntchito m'mautumiki ndikuwonjezera ku zipika ndi ma metric.

Mayendedwe a magalimoto ndi Netramesh internals

Netramesh imakhala ndi zigawo ziwiri zazikulu. Yoyamba, netra-init, imayika malamulo apakanema kuti aletse magalimoto. Iye amagwiritsa iptables amawongoleranso malamulo kuletsa zonse kapena gawo la magalimoto pamsewu, chomwe ndi gawo lachiwiri la Netramesh. Mutha kukonza madoko omwe akuyenera kulandidwa pamagawo obwera ndi otuluka a TCP: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Chidachi chilinso ndi chinthu chosangalatsa - njira yongokhalira. Ngati mumagwiritsa ntchito Netramesh kuti mutolere nthawi yayitali, ndiye kuti m'malo opangira mutha kusunga zinthu ndikupangitsa njira yotheka kugwiritsa ntchito zosinthika. NETRA_INBOUND_PROBABILITY ΠΈ NETRA_OUTBOUND_PROBABILITY (kuyambira 0 mpaka 1). Mtengo wokhazikika ndi 1 (magalimoto onse alandidwa).

Pambuyo pakuyenda bwino, netra sidecar imavomereza kulumikizana kwatsopano ndikugwiritsa ntchito SO_ORIGINAL_DST socket kuti mupeze komwe mukupita koyambirira. Kenako Netra imatsegula kulumikizana kwatsopano ku adilesi yoyambirira ya IP ndikukhazikitsa njira ziwiri zolumikizirana za TCP pakati pa maphwando, kumvetsera magalimoto onse akudutsa. Ngati doko limatanthauzidwa ngati HTTP, Netra amayesa kusanthula ndikutsata. Ngati HTTP parsing ikalephera, Netra imagweranso ku TCP ndikuwonetsa ma byte mowonekera.

Kupanga graph yodalira

Nditalandira zambiri zotsatizana ku Jaeger, ndikufuna kupeza chithunzi chonse cha machitidwe mu dongosolo. Koma ngati makina anu ali odzaza kwambiri ndipo mabiliyoni ambiri otsata amadziunjikira patsiku, kuwaphatikiza sikophweka. Pali njira yovomerezeka yochitira izi: spark-kudalira. Komabe, zidzatenga maola kuti mupange chithunzi chonse ndipo zidzakukakamizani kutsitsa deta yonse kuchokera kwa Jaeger kwa maola XNUMX apitawa.

Ngati mukugwiritsa ntchito Elasticsearch kusunga mipata yotsata, mutha kugwiritsa ntchito yosavuta Golang zofunikira, yomwe ipanga graph yomweyi mumphindi pogwiritsa ntchito mawonekedwe ndi kuthekera kwa Elasticsearch.

Netramesh - njira yopepuka yolumikizira mauna

Momwe mungagwiritsire ntchito Netramesh

Netra ikhoza kuwonjezeredwa mosavuta ku ntchito iliyonse yomwe ikuyendetsa oimba aliyense. Mutha kuwona chitsanzo apa.

Pakadali pano, Netra alibe kuthekera kokhazikitsa ma sidecars kuntchito, koma pali mapulani oti akhazikitse.

Tsogolo la Netramesh

cholinga chachikulu Netramesh ndikupeza ndalama zocheperako komanso magwiridwe antchito apamwamba, kupereka kuthekera kofunikira pakuwonetsetsa ndikuwongolera kulumikizana pakati pa mautumiki.

M'tsogolomu, Netramesh ithandizira ma protocol ena osanjikiza pambali pa HTTP. Njira ya L7 ipezeka posachedwa.

Gwiritsani ntchito Netramesh ngati mukukumana ndi zovuta zomwezi ndikulemberani mafunso ndi malingaliro.

Source: www.habr.com

Kuwonjezera ndemanga