Netramesh - lightweight iṣẹ apapo ojutu

Bi a ṣe nlọ lati ohun elo monolithic kan si faaji microservice, a koju awọn italaya tuntun.

Ninu ohun elo monolithic, o rọrun pupọ nigbagbogbo lati pinnu iru apakan ti eto aṣiṣe naa waye ninu. O ṣeese julọ, iṣoro naa wa ninu koodu ti monolith funrararẹ, tabi ni ibi ipamọ data. Ṣugbọn nigba ti a bẹrẹ wiwa iṣoro kan ni faaji microservice, ohun gbogbo ko han gbangba mọ. A nilo lati wa gbogbo ọna ti ibeere naa gba lati ibẹrẹ lati pari ati yan lati awọn ọgọọgọrun awọn iṣẹ microservices. Pẹlupẹlu, ọpọlọpọ ninu wọn tun ni awọn ohun elo ipamọ ti ara wọn, eyiti o tun le fa awọn aṣiṣe ọgbọn, ati awọn iṣoro pẹlu iṣẹ ati ifarada aṣiṣe.

Netramesh - lightweight iṣẹ apapo ojutu

Mo ti n wa ohun elo fun igba pipẹ ti yoo ṣe iranlọwọ lati koju iru awọn iṣoro bẹ (Mo kowe nipa eyi lori Habré: 1, 2), sugbon ni ipari Mo ti ṣe ara mi ìmọ orisun ojutu. Ninu nkan yii Mo sọrọ nipa awọn anfani ti ọna mesh iṣẹ ati pin ọpa tuntun fun imuse rẹ.

Itọpa pinpin jẹ ojutu ti o wọpọ si iṣoro wiwa awọn aṣiṣe ni awọn eto pinpin. Ṣugbọn kini ti ọna yii lati gba alaye nipa awọn ibaraẹnisọrọ nẹtiwọọki ko ti ni imuse ninu eto naa, tabi, buru, ni apakan ti eto naa o ti ṣiṣẹ daradara, ṣugbọn ni apakan ko ṣe, nitori ko ti ṣafikun si awọn iṣẹ atijọ. ? Lati pinnu idi pataki ti iṣoro kan, o jẹ dandan lati ni aworan pipe ti ohun ti n ṣẹlẹ ninu eto naa. O ṣe pataki ni pataki lati ni oye iru awọn iṣẹ microservices ti o ni ipa ninu awọn ọna iṣowo pataki-pataki.

Nibi ọna ọna mesh iṣẹ le wa si iranlọwọ wa, eyiti yoo ṣe pẹlu gbogbo awọn ẹrọ fun gbigba alaye nẹtiwọọki ni ipele ti o kere ju awọn iṣẹ tikararẹ ṣiṣẹ. Ọna yii gba wa laaye lati ṣe idiwọ gbogbo awọn ijabọ ati ṣe itupalẹ rẹ lori fifo. Pẹlupẹlu, awọn ohun elo ko paapaa ni lati mọ ohunkohun nipa rẹ.

Ọna iṣẹ apapo

Ero akọkọ ti ọna mesh iṣẹ ni lati ṣafikun ipele amayederun miiran lori nẹtiwọọki, eyiti yoo gba wa laaye lati ṣe ohunkohun pẹlu ibaraenisọrọ laarin iṣẹ. Pupọ awọn imuse ṣiṣẹ bi atẹle: apo eiyan ẹgbẹ afikun pẹlu aṣoju sihin ni a ṣafikun si microservice kọọkan, nipasẹ eyiti gbogbo ijabọ ti nwọle ati ti njade ti iṣẹ naa ti kọja. Ati pe eyi ni aaye pupọ nibiti a le ṣe iwọntunwọnsi alabara, lo awọn eto imulo aabo, fa awọn ihamọ lori nọmba awọn ibeere ati gba alaye pataki lori ibaraenisepo ti awọn iṣẹ ni iṣelọpọ.

Netramesh - lightweight iṣẹ apapo ojutu

Awọn ojutu

Awọn imuse pupọ ti wa tẹlẹ ti ọna yii: Istio и linkerd2. Wọn pese ọpọlọpọ awọn ẹya lati inu apoti. Ṣugbọn ni akoko kanna, owo-ori nla wa lori awọn orisun. Pẹlupẹlu, titobi titobi ninu eyiti iru eto kan nṣiṣẹ, diẹ sii awọn ohun elo yoo nilo lati ṣetọju awọn amayederun titun. Ni Avito, a ṣiṣẹ awọn iṣupọ kubernetes ti o ni ẹgbẹẹgbẹrun awọn iṣẹlẹ iṣẹ (ati pe nọmba wọn tẹsiwaju lati dagba ni iyara). Ninu imuse lọwọlọwọ, Istio n gba ~ 300Mb ti Ramu fun apẹẹrẹ iṣẹ. Nitori nọmba nla ti awọn aye ti o ṣeeṣe, iwọntunwọnsi sihin tun kan akoko idahun gbogbogbo ti awọn iṣẹ (to 10ms).

Bi abajade, a wo deede awọn agbara ti a nilo ni bayi, ati pinnu pe idi akọkọ ti a fi bẹrẹ imuse iru awọn solusan ni agbara lati gba alaye wiwa kakiri lati gbogbo eto ni gbangba. A tun fẹ lati ni iṣakoso lori ibaraenisepo ti awọn iṣẹ ati ṣe ọpọlọpọ awọn ifọwọyi pẹlu awọn akọle ti o ti gbe laarin awọn iṣẹ.

Bi abajade, a wa si ipinnu wa:  Netramesh.

Netramesh

Netramesh jẹ ojutu apapo iṣẹ iwuwo fẹẹrẹ pẹlu agbara lati ṣe iwọn ailopin, laibikita nọmba awọn iṣẹ ninu eto naa.

Awọn ibi-afẹde akọkọ ti ojutu tuntun jẹ awọn orisun orisun kekere ati iṣẹ ṣiṣe giga. Lara awọn ẹya akọkọ, a fẹ lẹsẹkẹsẹ lati ni anfani lati firanṣẹ awọn akoko wiwa kakiri si eto Jaeger wa.

Loni, ọpọlọpọ awọn solusan awọsanma ti wa ni imuse ni Golang. Ati pe, dajudaju, awọn idi wa fun eyi. Kikọ awọn ohun elo nẹtiwọọki ni Golang ti n ṣiṣẹ asynchronously pẹlu I/O ati iwọn kọja awọn ohun kohun bi o ṣe nilo jẹ irọrun ati irọrun pupọ. Ati pe, kini o tun ṣe pataki pupọ, iṣẹ ṣiṣe to lati yanju iṣoro yii. Ti o ni idi ti a tun yan Golang.

Ise sise

A ti dojukọ awọn akitiyan wa lori iyọrisi iṣelọpọ ti o pọju. Fun ojutu kan ti a fi ranṣẹ lẹgbẹẹ apẹẹrẹ kọọkan ti iṣẹ naa, agbara kekere ti Ramu ati akoko Sipiyu nilo. Ati pe, dajudaju, idaduro idahun yẹ ki o tun jẹ kekere.

Jẹ ki a wo awọn abajade ti a ni.

Ramu

Netramesh n gba ~ 10Mb laisi ijabọ ati 50Mb o pọju pẹlu ẹru ti o to 10000 RPS fun apẹẹrẹ.

Aṣoju aṣoju Istio nigbagbogbo n gba ~ 300Mb ninu awọn iṣupọ wa pẹlu ẹgbẹẹgbẹrun awọn iṣẹlẹ. Eyi ko gba laaye lati ni iwọn si gbogbo iṣupọ.

Netramesh - lightweight iṣẹ apapo ojutu

Netramesh - lightweight iṣẹ apapo ojutu

Pẹlu Netramesh a ni idinku ~ 10x ni agbara iranti.

Sipiyu

Sipiyu lilo jẹ jo dogba labẹ fifuye. O da lori nọmba awọn ibeere fun ẹyọkan akoko si ọkọ ẹgbẹ. Awọn iye ni awọn ibeere 3000 fun iṣẹju kan ni tente oke:

Netramesh - lightweight iṣẹ apapo ojutu

Netramesh - lightweight iṣẹ apapo ojutu

Ojuami pataki diẹ sii wa: Netramesh - ojutu laisi ọkọ ofurufu iṣakoso ati laisi fifuye ko jẹ akoko Sipiyu. Pẹlu Istio, awọn ọkọ ayọkẹlẹ ẹgbẹ nigbagbogbo ṣe imudojuiwọn awọn aaye ipari iṣẹ. Bi abajade, a le wo aworan yii laisi fifuye:

Netramesh - lightweight iṣẹ apapo ojutu

A lo HTTP/1 fun ibaraẹnisọrọ laarin awọn iṣẹ. Ilọsoke ni akoko idahun fun Istio nigbati aṣoju nipasẹ aṣoju jẹ to 5-10ms, eyiti o jẹ pupọ pupọ fun awọn iṣẹ ti o ṣetan lati dahun ni millisecond kan. Pẹlu Netramesh akoko yii ti dinku si 0.5-2ms.

Scalability

Iwọn kekere ti awọn orisun ti o jẹ nipasẹ aṣoju kọọkan jẹ ki o ṣee ṣe lati gbe e lẹgbẹẹ iṣẹ kọọkan. Netramesh jẹ imomose ti a ṣẹda laisi paati ọkọ ofurufu iṣakoso lati jẹ ki iwuwo ẹgbe kọọkan jẹ ki o rọrun. Nigbagbogbo ninu awọn solusan apapo iṣẹ, ọkọ ofurufu iṣakoso n pin alaye wiwa iṣẹ si ọkọ ayọkẹlẹ ẹgbẹ kọọkan. Pẹlú alaye rẹ wa nipa awọn akoko ipari ati awọn eto iwọntunwọnsi. Gbogbo eyi n gba ọ laaye lati ṣe ọpọlọpọ awọn ohun ti o wulo, ṣugbọn, laanu, o fa awọn ẹgbẹ ẹgbẹ ni iwọn.

Awari iṣẹ

Netramesh - lightweight iṣẹ apapo ojutu

Netramesh ko ṣafikun awọn ọna ṣiṣe afikun eyikeyi fun wiwa iṣẹ. Gbogbo ijabọ ti wa ni isunmọ ni gbangba nipasẹ netra sidecar.

Netramesh ṣe atilẹyin ilana elo HTTP/1. Lati ṣalaye rẹ, atokọ atunto ti awọn ebute oko oju omi ti lo. Ni deede, eto naa ni awọn ebute oko oju omi pupọ nipasẹ eyiti ibaraẹnisọrọ HTTP waye. Fun apẹẹrẹ, a lo 80, 8890, 8080 fun ibaraenisepo laarin awọn iṣẹ ati awọn ibeere ita. Ni idi eyi, wọn le ṣeto nipa lilo oniyipada ayika. NETRA_HTTP_PORTS.

Ti o ba lo Kubernetes gẹgẹbi akọrin ati ẹrọ iṣẹ iṣẹ rẹ fun ibaraẹnisọrọ inu-iṣupọ laarin awọn iṣẹ, lẹhinna ẹrọ naa wa deede kanna. Ni akọkọ, microservice gba adirẹsi IP iṣẹ kan nipa lilo kube-dns ati ṣi asopọ tuntun si rẹ. Asopọmọra yii jẹ idasilẹ akọkọ pẹlu netra-sidecar agbegbe ati gbogbo awọn apo-iwe TCP ni ibẹrẹ de netra. Nigbamii ti, netra-sidecar ṣe agbekalẹ asopọ kan pẹlu opin irin ajo akọkọ. NAT lori adarọ-ese IP lori ipade naa wa ni deede kanna bi laisi netra.

Pinpin wiwa ati firanšẹ siwaju ayika

Netramesh n pese iṣẹ ṣiṣe ti o nilo lati firanṣẹ awọn akoko wiwa kakiri nipa awọn ibaraenisọrọ HTTP. Netra-sidecar ṣe itupalẹ ilana HTTP, ṣe iwọn awọn idaduro ibeere, ati jade alaye pataki lati awọn akọle HTTP. Ni ipari, a gba gbogbo awọn itọpa ninu eto Jaeger kan. Fun iṣeto ni didara, o tun le lo awọn oniyipada ayika ti a pese nipasẹ ile-ikawe osise jaeger lọ ìkàwé.

Netramesh - lightweight iṣẹ apapo ojutu

Netramesh - lightweight iṣẹ apapo ojutu

Ṣugbọn iṣoro kan wa. Titi awọn iṣẹ yoo ṣe ipilẹṣẹ ati firanṣẹ akọsori uber pataki kan, a kii yoo rii awọn ipari wiwa ti o sopọ ninu eto naa. Ati pe eyi ni ohun ti a nilo lati wa idi ti awọn iṣoro ni kiakia. Nibi lẹẹkansi Netramesh ni ojutu kan. Awọn aṣoju ka awọn akọle HTTP ati, ti wọn ko ba ni id itọka uber ninu, ṣe ipilẹṣẹ ọkan. Netramesh tun tọju alaye nipa awọn ibeere ti nwọle ati ti njade ninu ọkọ ayọkẹlẹ ẹgbẹ kan ati pe o baamu wọn nipa imudara wọn pẹlu awọn akọle ibeere ti njade pataki. Gbogbo ohun ti o nilo lati ṣe ninu awọn iṣẹ ni lati fi akọsori kan ranṣẹ X-Request-Id, eyi ti o le wa ni tunto nipa lilo ohun ayika oniyipada NETRA_HTTP_REQUEST_ID_HEADER_NAME. Lati ṣakoso iwọn ọrọ-ọrọ ni Netramesh, o le ṣeto awọn oniyipada ayika wọnyi: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (akoko fun eyi ti o tọ yoo wa ni ipamọ) ati NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (igbohunsafẹfẹ ti o tọ afọmọ).

O tun ṣee ṣe lati darapo awọn ọna pupọ lori eto rẹ nipa siṣamisi wọn pẹlu ami igba pataki kan. Netra faye gba o lati fi sori ẹrọ HTTP_HEADER_TAG_MAP lati yi awọn akọle HTTP pada si awọn ami wiwa wiwa ti o baamu. Eyi le wulo paapaa fun idanwo. Lẹhin ti o kọja idanwo iṣẹ-ṣiṣe, o le rii apakan ti eto naa ni ipa nipasẹ sisẹ nipasẹ bọtini igba ti o baamu.

Ṣiṣe ipinnu Orisun Ibere

Lati pinnu ibiti ibeere naa ti wa, o le lo iṣẹ ṣiṣe ti fifi akọle kun laifọwọyi pẹlu orisun. Lilo ohun ayika oniyipada NETRA_HTTP_X_SOURCE_HEADER_NAME O le pato orukọ akọsori ti yoo fi sori ẹrọ laifọwọyi. Nipa lilo NETRA_HTTP_X_SOURCE_VALUE o le ṣeto iye si eyiti akọsori X-Orisun yoo ṣeto fun gbogbo awọn ibeere ti njade.

Eyi ngbanilaaye pinpin akọsori iwulo yii lati pin kaakiri ni iṣọkan jakejado nẹtiwọọki naa. Lẹhinna o le lo ninu awọn iṣẹ ati ṣafikun si awọn akọọlẹ ati awọn metiriki.

Gbigbe ijabọ ati awọn inu inu Netramesh

Netramesh ni awọn paati akọkọ meji. Ni akọkọ, netra-init, ṣeto awọn ofin nẹtiwọọki lati ṣe idiwọ ijabọ. O nlo iptables àtúnjúwe awọn ofin lati da gbogbo tabi apakan ti awọn ijabọ lori sidecar, eyi ti o jẹ keji akọkọ paati Netramesh. O le tunto iru awọn ebute oko oju omi ti o nilo lati ni idilọwọ fun awọn akoko TCP ti nwọle ati ti njade: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Ọpa naa tun ni ẹya ti o nifẹ si - afisona iṣeeṣe. Ti o ba lo Netramesh ni iyasọtọ fun gbigba awọn akoko wiwa kakiri, lẹhinna ni agbegbe iṣelọpọ o le ṣafipamọ awọn orisun ati mu ipa-ọna iṣeeṣe ṣiṣẹ nipa lilo awọn oniyipada NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (lati 0 si 1). Awọn aiyipada iye ni 1 (gbogbo ijabọ ti wa ni intercepted).

Lẹhin ikọlu aṣeyọri, netra sidecar gba asopọ tuntun ati lilo SO_ORIGINAL_DST iho aṣayan lati gba awọn atilẹba nlo. Netra lẹhinna ṣii asopọ tuntun si adiresi IP atilẹba ati ṣeto ibaraẹnisọrọ TCP ọna meji laarin awọn ẹgbẹ, gbigbọ gbogbo awọn ijabọ ti n kọja. Ti o ba jẹ asọye ibudo bi HTTP, Netra gbiyanju lati ṣe itupalẹ ati tọpa rẹ. Ti HTTP parsing kuna, Netra ṣubu pada si TCP ati ki o transparent proxies awọn baiti.

Ilé kan gbára awonya

Lẹhin gbigba iye nla ti alaye wiwa kakiri ni Jaeger, Mo fẹ lati gba aworan kikun ti awọn ibaraenisepo ninu eto naa. Ṣugbọn ti eto rẹ ba jẹ ẹru pupọ ati pe awọn ọkẹ àìmọye ti awọn aaye wiwa kakiri ṣajọpọ fun ọjọ kan, iṣakojọpọ wọn kii ṣe iru iṣẹ ti o rọrun. Ọna osise wa lati ṣe eyi: sipaki-dependencies. Sibẹsibẹ, yoo gba awọn wakati lati kọ aworan pipe ati pe yoo fi ipa mu ọ lati ṣe igbasilẹ gbogbo dataset lati Jaeger fun awọn wakati XNUMX sẹhin.

Ti o ba nlo Elasticsearch lati tọju awọn akoko wiwa kakiri, o le lo ohun elo Golang ti o rọrun, eyi ti yoo kọ iwọn kanna ni awọn iṣẹju ni lilo awọn ẹya ati awọn agbara ti Elasticsearch.

Netramesh - lightweight iṣẹ apapo ojutu

Bii o ṣe le lo Netramesh

Netra le ni irọrun ṣafikun si iṣẹ eyikeyi ti n ṣiṣẹ akọrin eyikeyi. O le wo apẹẹrẹ kan nibi.

Ni akoko yii, Netra ko ni agbara lati ṣe adaṣe awọn ọkọ ayọkẹlẹ si awọn iṣẹ, ṣugbọn awọn ero wa fun imuse.

Ojo iwaju ti Netramesh

akọkọ ìlépa Netramesh ni lati ṣaṣeyọri awọn idiyele orisun kekere ati iṣẹ ṣiṣe giga, pese awọn agbara ipilẹ fun akiyesi ati iṣakoso ti ibaraẹnisọrọ laarin iṣẹ.

Ni ọjọ iwaju, Netramesh yoo ṣe atilẹyin awọn ilana Layer ohun elo miiran yatọ si HTTP. Itọnisọna L7 yoo wa ni ọjọ iwaju nitosi.

Lo Netramesh ti o ba pade awọn iṣoro ti o jọra ki o kọ si wa pẹlu awọn ibeere ati awọn imọran.

orisun: www.habr.com

Fi ọrọìwòye kun