Netramesh - gaan nga serbisyo sa mesh nga solusyon

Samtang mibalhin kami gikan sa usa ka monolitikong aplikasyon ngadto sa arkitektura sa microservices, nag-atubang kami og bag-ong mga hagit.

Sa usa ka monolithic nga aplikasyon, kasagaran sayon ​​​​ra ang pagtino kung asa nga bahin sa sistema ang sayup nga nahitabo. Lagmit, ang problema anaa sa code sa monolith mismo, o sa database. Apan sa diha nga kita magsugod sa pagpangita sa usa ka problema sa usa ka microservice arkitektura, ang tanan dili na kaayo dayag. Kinahanglan namon pangitaon ang tibuuk nga agianan nga gikuha sa hangyo gikan sa pagsugod hangtod sa katapusan ug pilia kini gikan sa gatusan nga mga microservice. Dugang pa, daghan kanila usab adunay ilang kaugalingon nga mga pasilidad sa pagtipig, nga mahimo usab nga hinungdan sa lohikal nga mga sayup, ingon man mga problema sa pasundayag ug pagtugot sa sayup.

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Dugay na kong nangita alang sa usa ka himan nga makatabang sa pagsagubang sa ingon nga mga problema (Gisulat ko kini sa HabrΓ©: 1, 2), apan sa katapusan naghimo ko sa akong kaugalingon nga open source nga solusyon. Niini nga artikulo naghisgot ako bahin sa mga benepisyo sa pamaagi sa serbisyo sa mesh ug gipaambit ang usa ka bag-ong himan alang sa pagpatuman niini.

Ang giapod-apod nga pagsubay usa ka sagad nga solusyon sa problema sa pagpangita sa mga sayup sa gipang-apod-apod nga mga sistema. Apan unsa man kung kini nga pamaagi sa pagkolekta sa kasayuran bahin sa mga interaksyon sa network wala pa gipatuman sa sistema, o, labi pa, sa bahin sa sistema kini nagtrabaho na sa husto, apan sa usa ka bahin wala, tungod kay wala pa kini idugang sa mga daan nga serbisyo. ? Aron mahibal-an ang eksakto nga hinungdan sa usa ka problema, kinahanglan nga adunay usa ka kompleto nga litrato kung unsa ang nahitabo sa sistema. Ilabi na nga hinungdanon nga masabtan kung unsang mga microservice ang nahilambigit sa hinungdanon nga mga agianan nga kritikal sa negosyo.

Dinhi ang serbisyo sa mesh nga pamaagi mahimong makatabang kanato, nga mag-atubang sa tanan nga makinarya sa pagkolekta sa impormasyon sa network sa lebel nga mas ubos kaysa sa mga serbisyo mismo nga naglihok. Kini nga pamaagi nagtugot kanamo sa pag-intercept sa tanan nga trapiko ug pag-analisar niini sa langaw. Dugang pa, ang mga aplikasyon dili kinahanglan nga mahibal-an ang bisan unsa bahin niini.

Serbisyo mesh nga pamaagi

Ang panguna nga ideya sa pamaagi sa serbisyo sa mesh mao ang pagdugang usa pa nga layer sa imprastraktura sa network, nga magtugot kanamo sa pagbuhat sa bisan unsang butang nga adunay inter-service nga interaksyon. Kadaghanan sa mga pagpatuman nagtrabaho sama sa mosunod: usa ka dugang nga sidecar nga sudlanan nga adunay usa ka transparent nga proxy gidugang sa matag microservice, diin ang tanan nga umaabot ug paggawas nga trapiko sa serbisyo gipasa. Ug kini ang lugar diin mahimo naton ang pagbalanse sa kliyente, pag-apply sa mga palisiya sa seguridad, pagpahamtang sa mga pagdili sa gidaghanon sa mga hangyo ug pagkolekta hinungdanon nga kasayuran sa interaksyon sa mga serbisyo sa produksiyon.

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Mga solusyon

Adunay ubay-ubay na nga mga pagpatuman niini nga pamaagi: Istio ΠΈ linkerd2. Naghatag sila daghang mga bahin sa gawas sa kahon. Apan sa samang higayon, adunay moabut nga dako nga overhead sa mga kapanguhaan. Dugang pa, kon mas dako ang cluster diin ang maong sistema naglihok, mas daghang kahinguhaan ang gikinahanglan aron mamentinar ang bag-ong imprastraktura. Sa Avito, nag-operate kami og mga kubernetes clusters nga adunay sulod nga liboan ka mga instance sa serbisyo (ug ang ilang gidaghanon nagpadayon nga paspas nga mitubo). Sa kasamtangan nga pagpatuman niini, ang Istio naggamit sa ~ 300Mb sa RAM matag serbisyo nga pananglitan. Tungod sa kadaghan sa mga posibilidad, ang transparent nga pagbalanse makaapekto usab sa kinatibuk-ang oras sa pagtubag sa mga serbisyo (hangtod sa 10ms).

Ingon usa ka sangputanan, gitan-aw namon kung unsa nga mga kapabilidad ang among gikinahanglan karon, ug nakahukom nga ang panguna nga hinungdan ngano nga gisugdan namon ang pagpatuman sa ingon nga mga solusyon mao ang katakus sa pagkolekta sa kasayuran sa pagsubay gikan sa tibuuk nga sistema nga transparent. Gusto usab namon nga adunay kontrol sa interaksyon sa mga serbisyo ug maghimo lainlaing mga manipulasyon sa mga ulohan nga gibalhin sa taliwala sa mga serbisyo.

Ingon usa ka sangputanan, nakaabut kami sa among desisyon:β€Š Netramesh.

Netramesh

Netramesh usa ka gaan nga serbisyo nga solusyon sa mesh nga adunay katakus sa pagsukod sa walay katapusan, bisan unsa pa ang gidaghanon sa mga serbisyo sa sistema.

Ang nag-unang tumong sa bag-ong solusyon mao ang ubos nga resource overhead ug taas nga performance. Lakip sa mga nag-unang bahin, gusto dayon namon nga ma-transparent nga ipadala ang mga tracing span sa among Jaeger system.

Karon, kadaghanan sa mga solusyon sa panganod gipatuman sa Golang. Ug, siyempre, adunay mga hinungdan niini. Ang pagsulat sa mga aplikasyon sa network sa Golang nga nagtrabaho nga asynchronous sa I/O ug sukdanan sa mga cores kon gikinahanglan kay sayon ​​ug medyo simple. Ug, unsa usab ang hinungdanon kaayo, ang pasundayag igo na aron masulbad kini nga problema. Mao nga gipili usab namo ang Golang.

Pag-uswag

Gipunting namon ang among mga paningkamot sa pagkab-ot sa labing taas nga produktibidad. Alang sa usa ka solusyon nga gipakatap sunod sa matag higayon sa serbisyo, gikinahanglan ang gamay nga pagkonsumo sa RAM ug oras sa CPU. Ug, siyempre, ang paglangan sa pagtubag kinahanglan usab nga gamay.

Atong tan-awon kung unsang mga resulta ang atong nakuha.

RAM

Ang Netramesh mokonsumo og ~10Mb nga walay trapiko ug 50Mb maximum nga adunay load nga hangtod sa 10000 RPS matag higayon.

Ang Istio envoy proxy kanunay nga nagkonsumo ~ 300Mb sa among mga cluster nga adunay libu-libo nga mga higayon. Kini wala magtugot nga kini ma-scale sa tibuok cluster.

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Uban sa Netramesh nakakuha kami usa ka ~ 10x nga pagkunhod sa konsumo sa memorya.

CPU

Ang paggamit sa CPU medyo managsama ubos sa pagkarga. Nagdepende kini sa gidaghanon sa mga hangyo matag yunit sa oras sa sidecar. Mga kantidad sa 3000 nga hangyo matag segundo sa peak:

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Adunay usa ka labi ka hinungdanon nga punto: Netramesh - usa ka solusyon nga wala’y kontrol nga eroplano ug wala’y karga wala mag-usik sa oras sa CPU. Uban sa Istio, ang mga sidecar kanunay nga nag-update sa mga endpoint sa serbisyo. Ingon nga resulta, atong makita kini nga hulagway nga walay load:

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Gigamit namo ang HTTP/1 para sa komunikasyon tali sa mga serbisyo. Ang pagtaas sa oras sa pagtubag alang sa Istio kung ang pag-proxy pinaagi sa envoy hangtod sa 5-10ms, nga labi ka daghan alang sa mga serbisyo nga andam nga motubag sa usa ka millisecond. Uban sa Netramesh kini nga panahon mikunhod ngadto sa 0.5-2ms.

Scalability

Ang gamay nga kantidad sa mga kapanguhaan nga gigamit sa matag proxy nagpaposible nga ibutang kini sunod sa matag serbisyo. Ang Netramesh gituyo nga gimugna nga walay control plane component aron lang magpabilin ang matag sidecar nga gaan. Kasagaran sa mga solusyon sa mesh sa serbisyo, ang control plane nag-apod-apod sa kasayuran sa pagdiskobre sa serbisyo sa matag sidecar. Uban niini moabut ang kasayuran bahin sa mga timeout ug mga setting sa pagbalanse. Ang tanan nga kini nagtugot kaninyo sa pagbuhat sa usa ka daghan sa mga mapuslanon nga mga butang, apan, sa kasubo, kini bloats sidecars sa gidak-on.

Pagdiskobre sa serbisyo

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Ang Netramesh wala magdugang bisan unsang dugang nga mga mekanismo alang sa pagdiskobre sa serbisyo. Ang tanan nga trapiko gi-proxy nga transparent pinaagi sa netra sidecar.

Gisuportahan sa Netramesh ang protocol sa aplikasyon sa HTTP/1. Aron mahibal-an kini, gigamit ang usa ka ma-configure nga lista sa mga pantalan. Kasagaran, ang sistema adunay daghang mga pantalan diin mahitabo ang komunikasyon sa HTTP. Pananglitan, gigamit namon ang 80, 8890, 8080 alang sa interaksyon tali sa mga serbisyo ug mga hangyo sa gawas. Sa kini nga kaso, mahimo silang itakda gamit ang usa ka variable sa palibot NETRA_HTTP_PORTS.

Kung gigamit nimo ang Kubernetes isip usa ka orkestra ug ang mekanismo sa entidad sa Serbisyo alang sa intra-cluster nga komunikasyon tali sa mga serbisyo, nan ang mekanismo nagpabilin nga parehas. Una, ang microservice makakuha og serbisyo IP address gamit ang kube-dns ug magbukas og bag-ong koneksyon niini. Kini nga koneksyon una nga natukod sa lokal nga netra-sidecar ug ang tanan nga mga pakete sa TCP sa sinugdan moabut sa netra. Sunod, ang netra-sidecar nagtukod usa ka koneksyon sa orihinal nga destinasyon. Ang NAT sa pod IP sa node nagpabilin nga parehas nga wala netra.

Giapod-apod nga pagsubay ug pagpasa sa konteksto

Naghatag ang Netramesh sa pagpaandar nga gikinahanglan aron ipadala ang pagsubay sa mga span bahin sa mga interaksyon sa HTTP. Gi-parse sa Netra-sidecar ang HTTP protocol, gisukod ang mga paglangan sa hangyo, ug gikuha ang gikinahanglan nga impormasyon gikan sa mga header sa HTTP. Sa katapusan, makuha namon ang tanan nga mga pagsubay sa usa ka sistema sa Jaeger. Para sa maayo nga pag-configure, mahimo usab nimo gamiton ang mga variable sa palibot nga gihatag sa opisyal nga librarya jaeger adto sa library.

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Pero naay problema. Hangtud nga ang mga serbisyo makamugna ug magpadala usa ka espesyal nga uber header, dili namon makita ang konektado nga pagsubay sa mga span sa sistema. Ug kini ang kinahanglan naton aron dali nga makit-an ang hinungdan sa mga problema. Dinhi na usab ang Netramesh adunay solusyon. Ang mga proxy nagbasa sa mga header sa HTTP ug, kung wala kini sulud sa uber trace id, paghimo usa. Gitipigan usab sa Netramesh ang kasayuran bahin sa mga umaabot ug nanggawas nga mga hangyo sa usa ka sidecar ug gipares kini pinaagi sa pagpauswag niini sa mga kinahanglan nga nanggawas nga mga ulohan sa hangyo. Ang kinahanglan nimong buhaton sa mga serbisyo mao ang pagpadala usa ra ka header X-Request-Id, nga ma-configure gamit ang environment variable NETRA_HTTP_REQUEST_ID_HEADER_NAME. Aron makontrol ang gidak-on sa konteksto sa Netramesh, mahimo nimong itakda ang mosunod nga mga variable sa palibot: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (ang panahon diin ang konteksto itago) ug NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (kasubsob sa paglimpyo sa konteksto).

Posible usab nga makombinar ang daghang mga agianan sa imong sistema pinaagi sa pagmarka niini sa usa ka espesyal nga timaan sa sesyon. Gitugotan ka sa Netra nga i-install HTTP_HEADER_TAG_MAP aron mahimo ang mga header sa HTTP nga katugbang nga mga tag sa span sa pagsubay. Kini mahimong labi ka mapuslanon alang sa pagsulay. Human makapasar sa functional nga pagsulay, imong makita kung asa nga bahin sa sistema ang naapektuhan sa pagsala pinaagi sa katugbang nga yawe sa sesyon.

Pagtino sa Gigikanan sa Gihangyo

Aron mahibal-an kung diin gikan ang hangyo, mahimo nimong gamiton ang pagpaandar sa awtomatikong pagdugang usa ka header nga adunay gigikanan. Paggamit ug environment variable NETRA_HTTP_X_SOURCE_HEADER_NAME Mahimo nimong itakda ang usa ka ngalan sa header nga awtomatiko nga ma-install. Pinaagi sa paggamit NETRA_HTTP_X_SOURCE_VALUE mahimo nimong itakda ang bili diin ang X-Source header itakda para sa tanang nanggawas nga mga hangyo.

Gitugotan niini ang pag-apod-apod niining mapuslanon nga header nga maapod-apod nga parehas sa tibuuk nga network. Dayon mahimo nimo kini gamiton sa mga serbisyo ug idugang kini sa mga log ug metrics.

Pag-ruta sa trapiko ug mga internal nga Netramesh

Ang Netramesh naglangkob sa duha ka panguna nga sangkap. Ang una, netra-init, nagtakda sa mga lagda sa network aron makapugong sa trapiko. Iyang gigamit Mga lagda sa pag-redirect sa iptables aron mabalda ang tanan o bahin sa trapiko sa sidecar, nga mao ang ikaduha nga panguna nga sangkap sa Netramesh. Mahimo nimong i-configure kung unsang mga pantalan ang kinahanglan nga ma-intercept para sa umaabot ug paggawas nga mga sesyon sa TCP: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Ang himan usab adunay usa ka makapaikag nga bahin - probabilistic routing. Kung gigamit nimo ang Netramesh nga eksklusibo alang sa pagkolekta sa mga span sa pagsubay, unya sa usa ka palibot sa produksiyon mahimo nimong matipig ang mga kahinguhaan ug mahimo ang probabilistic routing gamit ang mga variable. NETRA_INBOUND_PROBABILITY ΠΈ NETRA_OUTBOUND_PROBABILITY (gikan sa 0 hangtod 1). Ang default nga kantidad mao ang 1 (ang tanan nga trapiko gipugngan).

Human sa malampuson nga interception, ang netra sidecar modawat sa bag-ong koneksyon ug gamit SO_ORIGINAL_DST kapilian sa socket aron makuha ang orihinal nga destinasyon. Nagbukas dayon ang Netra og bag-ong koneksyon sa orihinal nga IP address ug nagtukod og duha ka paagi nga komunikasyon sa TCP tali sa mga partido, pagpaminaw sa tanang trapiko nga moagi. Kung ang pantalan gihubit nga HTTP, ang Netra mosulay sa pag-parse ug pagsubay niini. Kung mapakyas ang pag-parse sa HTTP, ang Netra mobalik sa TCP ug klaro nga gi-proxy ang mga byte.

Pagtukod og dependency graph

Human makadawat og daghang impormasyon sa pagsubay sa Jaeger, gusto nako nga makakuha og kompletong graph sa mga interaksyon sa sistema. Apan kung ang imong sistema puno kaayo ug bilyon-bilyon nga pagsubay sa mga span ang natipon kada adlaw, ang pag-aggregate niini dili sayon ​​​​nga buluhaton. Adunay usa ka opisyal nga paagi sa pagbuhat niini: spark-dependencies. Bisan pa, magkinahanglan kini og mga oras aron makahimo usa ka kompleto nga graph ug mapugos ka nga i-download ang tibuuk nga dataset gikan sa Jaeger sa miaging XNUMX ka oras.

Kung gigamit nimo ang Elasticsearch aron magtipig sa mga gilay-on sa pagsubay, mahimo nimo gamiton usa ka yano nga Golang utility, nga maghimo sa parehas nga graph sa mga minuto gamit ang mga bahin ug kapabilidad sa Elasticsearch.

Netramesh - gaan nga serbisyo sa mesh nga solusyon

Giunsa paggamit ang Netramesh

Ang Netra dali nga madugang sa bisan unsang serbisyo nga nagpadagan sa bisan unsang orkestra. Makita nimo ang usa ka pananglitan dinhi.

Sa pagkakaron, wala'y katakus ang Netra nga awtomatiko nga ipatuman ang mga sidecar sa mga serbisyo, apan adunay mga plano alang sa pagpatuman.

Ang kaugmaon sa Netramesh

nag-unang tumong Netramesh mao ang pagkab-ot sa dyutay nga mga gasto sa kapanguhaan ug taas nga performance, paghatag og mga batakang kapabilidad alang sa obserbasyon ug pagkontrol sa inter-service nga komunikasyon.

Sa umaabot, suportahan sa Netramesh ang ubang mga protocol sa layer sa aplikasyon gawas sa HTTP. Ang L7 routing mahimong magamit sa umaabot nga umaabot.

Gamita ang Netramesh kung makasugat ka og susamang mga problema ug pagsulat kanamo uban ang mga pangutana ug sugyot.

Source: www.habr.com

Idugang sa usa ka comment