{"id":32777,"date":"2019-10-31T21:48:52","date_gmt":"2019-10-31T18:48:52","guid":{"rendered":"https:\/\/prohoster.info\/blog\/netramesh-legkovesnoe-service-mesh-reshenie\/"},"modified":"2019-10-31T21:48:52","modified_gmt":"2019-10-31T18:48:52","slug":"netramesh-legkovesnoe-service-mesh-reshenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","title":{"rendered":"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00cen procesul de tranzi\u021bie de la o aplica\u021bie monolitic\u0103 la o arhitectur\u0103 de microservicii, ne confrunt\u0103m cu probleme noi.<\/p>\n<p><\/p>\n<p>\u00centr-o aplica\u021bie monolitic\u0103, de obicei, este suficient s\u0103 identifici \u00een ce parte a sistemului a ap\u0103rut o eroare. Cel mai probabil, problema rezid\u0103 \u00een codul monolitului sau \u00een baza de date. Dar c\u00e2nd \u00eencepem s\u0103 c\u0103ut\u0103m problemele \u00eentr-o arhitectur\u0103 de microservicii, lucrurile nu mai sunt at\u00e2t de evidente. Trebuie s\u0103 g\u0103sim \u00eentreaga cale parcurs\u0103 de cerere, de la \u00eenceput p\u00e2n\u0103 la sf\u00e2r\u0219it, \u0219i s\u0103 o extragem din sute de microservicii. Mai mult, multe dintre acestea au propriile lor stoc\u0103ri, unde pot ap\u0103rea at\u00e2t erori logice, c\u00e2t \u0219i probleme de performan\u021b\u0103 \u0219i disponibilitate.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/f583f3d8d4a2239411628aa8f4d06041.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Am c\u0103utat mult timp un instrument care s\u0103 m\u0103 ajute s\u0103 fac fa\u021b\u0103 acestor probleme (am scris despre asta pe Habr: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/419319\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/433650\/\">2<\/a><\/noindex>), dar \u00een cele din urm\u0103 am creat propria solu\u021bie open source. \u00cen acest articol, discut despre avantajele abord\u0103rii service mesh \u0219i \u00eemp\u0103rt\u0103\u0219esc un nou instrument pentru implementarea acesteia. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Tracing-ul distribuit este o solu\u021bie comun\u0103 pentru problema identific\u0103rii erorilor \u00een sistemele distribuite. Dar ce se \u00eent\u00e2mpl\u0103 dac\u0103 \u00een sistem nu este implementat\u0103 o astfel de abordare pentru colectarea informa\u021biilor despre interac\u021biunile de re\u021bea, sau, mai r\u0103u, \u00een partea sistemului aceasta func\u021bioneaz\u0103 corect, iar \u00een alta nu, deoarece nu a fost ad\u0103ugat\u0103 \u00een serviciile mai vechi? Pentru a determina cauza r\u0103d\u0103cin\u0103 exact\u0103 a problemei, este necesar s\u0103 avem o imagine de ansamblu complet\u0103 a ceea ce se \u00eent\u00e2mpl\u0103 \u00een sistem. Este esen\u021bial s\u0103 \u00een\u021belegem care microservicii sunt implicate \u00een c\u0103ile critice pentru afacere.<\/p>\n<p><\/p>\n<p>Aici poate interveni abordarea service mesh, care se ocup\u0103 de \u00eentreaga ma\u0219in\u0103rie de colectare a informa\u021biilor de re\u021bea la un nivel inferior dec\u00e2t cel \u00een care func\u021bioneaz\u0103 serviciile \u00een sine. Aceast\u0103 abordare ne permite s\u0103 intercept\u0103m tot traficul \u0219i s\u0103-l analiz\u0103m \u00een timp real. \u0218i aplica\u021biile nu trebuie s\u0103 \u0219tie nimic despre acest lucru.<\/p>\n<p><\/p>\n<h1 id=\"service-mesh-podhod\">Abordarea service mesh<\/h1>\n<p><\/p>\n<p>Ideea principal\u0103 a abord\u0103rii service mesh este ad\u0103ugarea unui alt strat infrastructural deasupra re\u021belei, care ne va permite s\u0103 gestion\u0103m orice interac\u021biune dintre servicii. Cele mai multe implement\u0103ri func\u021bioneaz\u0103 astfel: fiec\u0103rui microserviciu \u00eei este ad\u0103ugat un container sidecar suplimentar cu un proxy transparent, prin care trece tot traficul de intrare \u0219i ie\u0219ire al serviciului. Acesta este locul \u00een care putem efectua echilibrarea clientului, aplica politici de securitate, stabili limite pentru num\u0103rul de solicit\u0103ri \u0219i colecta informa\u021bii importante despre interac\u021biunile serviciilor \u00een produc\u021bie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/b1f8636e3b99a3814138b6443b3e0799.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"resheniya\">Solu\u021bii<\/h1>\n<p><\/p>\n<p>Exist\u0103 deja c\u00e2teva implement\u0103ri ale acestei abord\u0103ri: <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/\">Istio<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/linkerd.io\/2\/overview\/\">linkerd2<\/a><\/noindex>. Acestea ofer\u0103 numeroase posibilit\u0103\u021bi din cutie. Dar, \u00een acela\u0219i timp, vine \u0219i cu un overhead mare pe resurse. Mai mult, cu c\u00e2t clusterul \u00een care func\u021bioneaz\u0103 un astfel de sistem este mai mare, cu at\u00e2t sunt necesare mai multe resurse pentru a sus\u021bine noua infrastructur\u0103. La Avito, folosim clustere Kubernetes \u00een care se afl\u0103 mii de instan\u021be de servicii (iar num\u0103rul acestora continu\u0103 s\u0103 creasc\u0103 rapid). \u00cen implementarea actual\u0103, Istio consum\u0103 ~300Mb de memorie RAM pentru fiecare instan\u021b\u0103 de serviciu. Din cauza num\u0103rului mare de func\u021bionalit\u0103\u021bi, echilibrarea transparent\u0103 influen\u021beaz\u0103, de asemenea, timpul total de r\u0103spuns al serviciilor (p\u00e2n\u0103 la 10ms).<\/p>\n<p><\/p>\n<p>\u00cen cele din urm\u0103, ne-am uitat la ce anume ne este necesar \u00een prezent \u0219i am decis c\u0103 motivul principal pentru care am \u00eenceput s\u0103 implement\u0103m astfel de solu\u021bii a fost capacitatea de a colecta informa\u021bii de tracing din \u00eentreaga sistem\u0103 \u00eentr-un mod transparent. De asemenea, ne-am dorit s\u0103 avem control asupra interac\u021biunii serviciilor \u0219i s\u0103 efectuam diverse manipul\u0103ri cu antetele care sunt transmise \u00eentre servicii. <\/p>\n<p><\/p>\n<p>\u00cen cele din urm\u0103, am ajuns la solu\u021bia noastr\u0103: <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"netramesh\">Netramesh<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex> \u2014 este o solu\u021bie service mesh u\u0219oar\u0103, cu capacitate de scalare infinit\u0103, indiferent de num\u0103rul de servicii din sistem.<\/p>\n<p><\/p>\n<p>Obiectivele principale ale noii solu\u021bii erau overhead-ul mic pe resurse \u0219i performan\u021ba ridicat\u0103. Dintre func\u021bionalit\u0103\u021bile de baz\u0103, am dorit imediat capacitatea de a trimite transparent span-uri de tracing \u00een sistemul nostru Jaeger.<\/p>\n<p><\/p>\n<p>Ast\u0103zi, majoritatea solu\u021biilor cloud sunt implementate \u00een Golang. \u0218i, desigur, exist\u0103 motive \u00eentemeiate pentru aceasta. Este convenabil \u0219i destul de simplu s\u0103 scrii aplica\u021bii de re\u021bea \u00een Golang care func\u021bioneaz\u0103 asincron cu introducerea \u0219i ie\u0219irea \u0219i se scaleaz\u0103 \u00een func\u021bie de necesit\u0103\u021bi pe nuclee. De asemenea, este foarte important c\u0103 performan\u021ba ob\u021binut\u0103 este suficient\u0103 pentru a rezolva aceast\u0103 sarcin\u0103. De aceea, am ales \u0219i noi Golang.<\/p>\n<p><\/p>\n<h1 id=\"proizvoditelnost\">Performan\u021b\u0103<\/h1>\n<p><\/p>\n<p>Ne-am concentrat eforturile pe atingerea unei performan\u021be maxime. Pentru solu\u021bia care este desf\u0103\u0219urat\u0103 l\u00e2ng\u0103 fiecare instan\u021b\u0103 de serviciu, este necesar un consum redus de memorie RAM \u0219i timp de procesor. \u0218i, desigur, \u00eent\u00e2rzierea la r\u0103spuns trebuie s\u0103 fie de asemenea mic\u0103.<\/p>\n<p><\/p>\n<p>S\u0103 vedem ce rezultate am ob\u021binut. <\/p>\n<p><\/p>\n<h2 id=\"ram\">RAM<\/h2>\n<p><\/p>\n<p>Netramesh consum\u0103 ~10Mb f\u0103r\u0103 trafic \u0219i 50Mb la maxim cu o sarcin\u0103 de p\u00e2n\u0103 la 10000 RPS pe o instan\u021b\u0103.<\/p>\n<p><\/p>\n<p>Istio envoy proxy consum\u0103 \u00eentotdeauna ~300Mb \u00een clusterele noastre cu mii de instan\u021be. Acest lucru nu permite scalarea lui pe \u00eentregul cluster.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/665b46c30183d502900027b7b3fcf2aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/d862122a15eb92402e35cb68c448f7c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cu Netramesh, am ob\u021binut o reducere a consumului de memorie de ~10 ori.<\/p>\n<p><\/p>\n<h2 id=\"cpu\">CPU<\/h2>\n<p><\/p>\n<p>Utilizarea CPU este relativ constant\u0103 sub sarcin\u0103. Aceasta depinde de num\u0103rul de cereri pe unitate de timp c\u0103tre sidecar. Valorile \u00een v\u00e2rful de 3000 de cereri pe secund\u0103 sunt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/6dbae38c42706dc3fbb833fdaf058b48.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/5a2eff682a457b620cbf71b520d90ca4.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Exist\u0103 un alt aspect important: Netramesh este o solu\u021bie f\u0103r\u0103 control plane \u0219i, f\u0103r\u0103 sarcin\u0103, nu consum\u0103 timp de procesor. Cu Istio, sidecar-urile actualizeaz\u0103 \u00eentotdeauna endpoint-urile serviciilor. Ca urmare, putem vedea urm\u0103toarea imagine f\u0103r\u0103 sarcin\u0103:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/6e0212c6d34f8fdabf7b2f50a4f8137a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Folosim HTTP\/1 pentru interac\u021biunea \u00eentre servicii. Timpul de r\u0103spuns crescut al Istio la proxying prin envoy a fost de p\u00e2n\u0103 la 5-10ms, ceea ce este destul de mult pentru serviciile care sunt preg\u0103tite s\u0103 r\u0103spund\u0103 \u00een milisecunde. Cu Netramesh, acest timp a sc\u0103zut la 0.5-2ms.<\/p>\n<p><\/p>\n<h1 id=\"masshtabiruemost\">Scalabilitate<\/h1>\n<p><\/p>\n<p>O cantitate mic\u0103 de resurse consumate de fiecare proxy permite amplasarea acestuia l\u00e2ng\u0103 fiecare serviciu. Netramesh a fost creat inten\u021bionat f\u0103r\u0103 un component de control plane pentru a p\u0103stra u\u0219urin\u021ba fiec\u0103rui sidecar. Adesea, \u00een solu\u021biile service mesh, control plane-ul distribuie informa\u021biile de service discovery \u00een fiecare sidecar. Odat\u0103 cu aceasta vin \u0219i informa\u021biile despre timeout-uri, set\u0103rile de balansare. Toate acestea permit realizarea multor lucruri utile, dar, din p\u0103cate, m\u0103resc dimensiunea sidecar-urilor. <\/p>\n<p><\/p>\n<h1 id=\"service-discovery\">Service discovery<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/26bc86ed2ebf15a8d51388982e23e16d.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Netramesh nu adaug\u0103 niciun mecanism suplimentar pentru service discovery. Tot traficul este proxy-izat \u00een mod transparent prin netra sidecar. <\/p>\n<p><\/p>\n<p>Netramesh suport\u0103 protocolul aplica\u021bie HTTP\/1. Pentru definirea sa, se folose\u0219te o list\u0103 de porturi configurabil\u0103. De obicei, \u00een sistem exist\u0103 mai multe porturi prin care se realizeaz\u0103 interac\u021biunea prin HTTP. De exemplu, pentru interac\u021biunea serviciilor \u0219i solicit\u0103rilor externe, folosim 80, 8890, 8080. \u00cen acest caz, acestea pot fi definite prin intermediul unei variabile de mediu. <code>NETRA_HTTP_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>Dac\u0103 utiliza\u021bi Kubernetes ca orchestrator \u0219i mecanismul s\u0103u de entitate Service pentru interac\u021biunea intra-cluster \u00eentre servicii, mecanismul r\u0103m\u00e2ne exact acela\u0219i. Mai \u00eent\u00e2i, microserviciul prime\u0219te adresa IP a serviciului prin kube-dns \u0219i deschide o nou\u0103 conexiune c\u0103tre acesta. Aceast\u0103 conexiune este stabilit\u0103 mai \u00eent\u00e2i cu netra-sidecar local \u0219i toate pachetele TCP ajung ini\u021bial \u00een netra. Ulterior, netra-sidecar stabile\u0219te conexiunea cu punctul ini\u021bial de destinare. NAT pe IP-ul podului de pe nod r\u0103m\u00e2ne exact la fel ca \u0219i f\u0103r\u0103 netra.<\/p>\n<p><\/p>\n<h1 id=\"raspredelennyy-tracing-i-prokidyvanie-konteksta\">Tracing distribuit \u0219i propagarea contextului<\/h1>\n<p><\/p>\n<p>Netramesh ofer\u0103 func\u021bionalitatea necesar\u0103 pentru a trimite span-uri de tracing despre interac\u021biunea HTTP. Netra-sidecar parseaz\u0103 protocolul HTTP, m\u0103soar\u0103 \u00eent\u00e2rzierile cererilor, extrage informa\u021biile necesare din header-ele HTTP. \u00cen cele din urm\u0103, ob\u021binem toate trace-urile \u00eentr-un sistem Jaeger unic. Pentru o configurare fin\u0103, se pot folosi de asemenea variabile de mediu, oferite de biblioteca oficial\u0103. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/jaeger-client-go#environment-variables\">jaeger go library<\/a><\/noindex>. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/22a2d3be2cef1e495702ad75e062676f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/20ff67f0c7f3590dce3d41db2a10267e.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Dar exist\u0103 o problem\u0103. P\u00e2n\u0103 c\u00e2nd serviciile nu vor genera \u0219i nu vor propaga un header special uber, nu vom vedea span-urile de tracing conectate \u00een sistem. \u0218i aceasta este ceea ce avem nevoie pentru a g\u0103si rapid cauza problemelor. Aici Netramesh are din nou o solu\u021bie. Proxile citesc header-ele HTTP \u0219i, dac\u0103 nu con\u021bin uber trace id, \u00eel genereaz\u0103. Netramesh de asemenea stocheaz\u0103 informa\u021bii despre solicit\u0103rile de intrare \u0219i de ie\u0219ire \u00een sidecar \u0219i le asociaz\u0103 prin \u00eembog\u0103\u021birea solicit\u0103rilor de ie\u0219ire cu header-ele necesare. Tot ce trebuie s\u0103 fac\u0103 serviciile este s\u0103 propaga un singur header. <code>X-Request-Id<\/code>, care poate fi configurat printr-o variabil\u0103 de mediu. <code>NETRA_HTTP_REQUEST_ID_HEADER_NAME<\/code>. Pentru gestionarea dimensiunii contextului \u00een Netramesh, se pot stabili urm\u0103toarele variabile de mediu: <code>NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS<\/code> (timpul \u00een care contextul va fi p\u0103strat) \u0219i <code>NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL<\/code> (frecven\u021ba cur\u0103\u021b\u0103rii contextului).<\/p>\n<p><\/p>\n<p>De asemenea, este posibil s\u0103 combina\u021bi mai multe c\u0103i \u00een sistemul dumneavoastr\u0103 prin etichetarea acestora cu un marcator de sesiune special. Netra permite stabilirea <code>HTTP_HEADER_TAG_MAP<\/code> pentru a transforma anteturile HTTP \u00een etichete corespunz\u0103toare de tracere. Aceasta poate fi deosebit de util\u0103 pentru testare. Dup\u0103 ce a\u021bi finalizat un test func\u021bional, pute\u021bi observa ce parte a sistemului a fost afectat\u0103, filtr\u00e2nd dup\u0103 cheia de sesiune corespunz\u0103toare.<\/p>\n<p><\/p>\n<h1 id=\"opredelenie-istochnika-zaprosa\">Determinarea sursei cererii<\/h1>\n<p><\/p>\n<p>Pentru a stabili de unde provine cererea, pute\u021bi utiliza func\u021bionalitatea de ad\u0103ugare automat\u0103 a antetului sursei. Folosind variabila de mediu <code>NETRA_HTTP_X_SOURCE_HEADER_NAME<\/code> pute\u021bi specifica numele antetului care va fi setat automat. Prin <code>NETRA_HTTP_X_SOURCE_VALUE<\/code> pute\u021bi specifica valoarea care va fi setat\u0103 pentru antetul X-Source \u00een toate cererile ie\u0219ite. <\/p>\n<p><\/p>\n<p>Aceasta permite distribuirea uniform\u0103 a acestui antet util pe \u00eentreaga re\u021bea. Acesta poate fi utilizat ulterior \u00een servicii \u0219i ad\u0103ugat \u00een jurnalele de activitate, metrici.<\/p>\n<p><\/p>\n<h1 id=\"routing-trafika-i-vnutrennosti-netramesh\">Rutarea traficului \u0219i detaliile Netramesh<\/h1>\n<p><\/p>\n<p>Netramesh este format din dou\u0103 componente principale. Prima, netra-init, stabile\u0219te reguli de re\u021bea pentru interceptarea traficului. Aceasta folose\u0219te <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Lookyan\/netramesh\/blob\/master\/iptables-rules.sh\">reguli iptables redirect<\/a><\/noindex> pentru a intercepta tot traficul sau o parte a acestuia c\u0103tre sidecar, care este a doua component\u0103 principal\u0103 a Netramesh. Pute\u021bi configura ce porturi anume trebuie interceptate pe sesiunile TCP de intrare \u0219i ie\u0219ire: <code>INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS<\/code>.<\/p>\n<p><\/p>\n<p>De asemenea, instrumentul dispune de o caracteristic\u0103 interesant\u0103 - rutare probabilistic\u0103. Dac\u0103 utiliza\u021bi Netramesh exclusiv pentru colectarea de etichete de tracere, atunci \u00een medii de produc\u021bie pute\u021bi economisi resurse \u0219i activa rutarea probabilistic\u0103 folosind variabilele <code>NETRA_INBOUND_PROBABILITY<\/code> \u0219i <code>NETRA_OUTBOUND_PROBABILITY<\/code> (de la 0 la 1). Valoarea implicit\u0103 este 1 (se intercepta tot traficul).<\/p>\n<p><\/p>\n<p>Dup\u0103 interceptarea cu succes, sidecar-ul netra accept\u0103 o nou\u0103 conexiune \u0219i folose\u0219te <code>SO_ORIGINAL_DST<\/code> op\u021biunea socket-ului pentru a ob\u021bine punctul de destina\u021bie ini\u021bial. Apoi, Netra deschide o nou\u0103 conexiune c\u0103tre adresa IP ini\u021bial\u0103 \u0219i stabile\u0219te o comunica\u021bie TCP bidirec\u021bional\u0103 \u00eentre p\u0103r\u021bi, ascult\u00e2nd tot traficul trecut. Dac\u0103 portul este definit ca HTTP, Netra \u00eencearc\u0103 s\u0103-l parcurg\u0103 \u0219i s\u0103-l urm\u0103reasc\u0103. Dac\u0103 parcurgerea HTTP e\u0219ueaz\u0103, Netra revine la TCP \u0219i proxy-eaz\u0103 transparent bytes.<\/p>\n<p><\/p>\n<h1 id=\"postroenie-grafa-zavisimostey\">Construirea unui grafic de dependen\u021be<\/h1>\n<p><\/p>\n<p>Dup\u0103 ob\u021binerea unei cantit\u0103\u021bi mari de informa\u021bii de tracing \u00een Jaeger, dorim s\u0103 ob\u021binem un grafic complet al interac\u021biunilor din sistem. Dar dac\u0103 sistemul dvs. este suficient de \u00eenc\u0103rcat \u0219i se acumuleaz\u0103 miliarde de tracing span-uri pe zi, aggregarea lor devine o sarcin\u0103 mai complicat\u0103. Exist\u0103 o metod\u0103 oficial\u0103 pentru aceasta: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jaegertracing\/spark-dependencies\">spark-dependencies<\/a><\/noindex>. Cu toate acestea, va dura c\u00e2teva ore s\u0103 construim graficele complete \u0219i va necesita desc\u0103rcarea \u00eentregului dataset din Jaeger pentru ultimele 24 de ore. <\/p>\n<p><\/p>\n<p>Dac\u0103 folosi\u021bi Elasticsearch pentru stocarea tracing span-urilor, pute\u021bi utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Lookyan\/jaeger-dependencies\">o unealt\u0103 simpl\u0103 scris\u0103 \u00een Golang<\/a><\/noindex>, care va construi un grafic similar \u00een c\u00e2teva minute, folosind caracteristicile \u0219i capabilit\u0103\u021bile Elasticsearch.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Netramesh \u2013 o solu\u021bie service mesh u\u0219oar\u0103\" src=\"\/wp-content\/uploads\/2019\/04\/26eb13e066ed8482010fde103d3832fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h1 id=\"kak-ispolzovat-netramesh\">Cum s\u0103 folosi\u021bi Netramesh<\/h1>\n<p><\/p>\n<p>Netra poate fi pur \u0219i simplu ad\u0103ugat la orice serviciu care func\u021bioneaz\u0103 sub un orchestrator. Pute\u021bi viziona un exemplu <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2HVRv7D\">aici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u00cen prezent, Netra nu ofer\u0103 posibilitatea de a implementa automat sidecar-uri pentru servicii, dar exist\u0103 planuri pentru realizarea acestui lucru. <\/p>\n<p><\/p>\n<h1 id=\"buduschee-netramesh\">Viitorul Netramesh<\/h1>\n<p><\/p>\n<p>Scopul principal <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/netra_ru\">Netramesh<\/a><\/noindex> este de a ob\u021bine costuri minime de resurse \u0219i o performan\u021b\u0103 ridicat\u0103, oferind func\u021bionalit\u0103\u021bi esen\u021biale pentru observabilitate \u0219i controlul interac\u021biunilor \u00eentre servicii. <\/p>\n<p><\/p>\n<p>\u00cen viitor, Netramesh va suporta alte protocoale la nivel de aplica\u021bie pe l\u00e2ng\u0103 HTTP. \u00cen cur\u00e2nd va fi disponibil\u0103 posibilitatea de rutare L7.<\/p>\n<p><\/p>\n<p>Utiliza\u021bi Netramesh dac\u0103 v\u0103 confrunta\u021bi cu probleme similare \u0219i contacta\u021bi-ne cu \u00eentreb\u0103ri \u0219i sugestii.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/449974\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430, \u043b\u0438\u0431\u043e \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u0432\u0441\u0451 \u0443\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0435\u0441\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24554,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32777","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Netramesh \u2013 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u043e\u0435 service mesh \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:52+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Netramesh \u2013 solu\u021bia u\u0219oar\u0103 de service mesh | ProHoster","description":"\u00cen procesul de tranzi\u021bie de la o aplica\u021bie monolitic\u0103 la o arhitectur\u0103 microservicii, \u00eent\u00e2mpin\u0103m probleme noi. \u00centr-o aplica\u021bie monolitic\u0103, este de obicei suficient s\u0103 definim \u00een ce parte a sistemului s-a \u00eent\u00e2mplat.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Netramesh \u2013 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u043e\u0435 service mesh \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster","og:description":"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438. \u0412 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/netramesh-legkovesnoe-service-mesh-reshenie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:52+00:00","article:modified_time":"2019-10-31T18:48:52+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32777","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:29:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:20:44","updated":"2026-01-21 12:29:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/32777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=32777"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/32777\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/24554"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=32777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=32777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=32777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}