Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Hekk kif nimxu minn applikazzjoni monolitika għal arkitettura ta’ mikroservizzi, niffaċċjaw sfidi ġodda.

F'applikazzjoni monolitika, ġeneralment ikun pjuttost faċli li tiddetermina f'liema parti tas-sistema seħħ l-iżball. Ħafna probabbli, il-problema tinsab fil-kodiċi tal-monolith innifsu, jew fid-database. Imma meta nibdew infittxu problema f'arkitettura ta' mikroservizz, kollox m'għadux daqshekk ovvju. Irridu nsibu t-triq kollha li ħadet it-talba mill-bidu sat-tmiem u nagħżluha minn mijiet ta’ mikroservizzi. Barra minn hekk, ħafna minnhom għandhom ukoll il-faċilitajiet tal-ħażna tagħhom stess, li jistgħu wkoll jikkawżaw żbalji loġiċi, kif ukoll problemi bil-prestazzjoni u t-tolleranza tal-ħsarat.

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Ilni nfittex għodda li tgħin biex tlaħħaq ma’ problemi bħal dawn (ktibt dwar dan fuq Habré: 1, 2), iżda fl-aħħar għamilt is-soluzzjoni ta’ sors miftuħ tiegħi stess. F'dan l-artikolu nitkellem dwar il-benefiċċji tal-approċċ tal-malji tas-servizz u naqsam għodda ġdida għall-implimentazzjoni tiegħu.

It-traċċar distribwit huwa soluzzjoni komuni għall-problema tas-sejba ta 'żbalji fis-sistemi distribwiti. Imma x'jiġri jekk dan l-approċċ għall-ġbir ta 'informazzjoni dwar l-interazzjonijiet tan-netwerk għadu ma ġiex implimentat fis-sistema, jew, agħar minn hekk, f'parti mis-sistema diġà jaħdem sew, iżda parzjalment ma jaħdimx, peress li ma ġiex miżjud ma' servizzi qodma ? Biex tiddetermina l-kawża ewlenija eżatta ta 'problema, huwa meħtieġ li jkun hemm stampa sħiħa ta' dak li qed jiġri fis-sistema. Huwa speċjalment importanti li wieħed jifhem liema mikroservizzi huma involuti f'mogħdijiet ewlenin tan-negozju kritiċi.

Hawnhekk l-approċċ tal-malji tas-servizz jista 'jiġi għall-għajnuna tagħna, li se jittratta l-makkinarju kollu għall-ġbir tal-informazzjoni tan-netwerk f'livell aktar baxx mis-servizzi nfushom joperaw. Dan l-approċċ jippermettilna ninterċettaw it-traffiku kollu u nanalizzawh fuq il-fly. Barra minn hekk, l-applikazzjonijiet lanqas biss għandhom ikunu jafu xejn dwarha.

Approċċ tal-malji tas-servizz

L-idea ewlenija tal-approċċ tal-malji tas-servizz hija li żżid saff ieħor ta 'infrastruttura fuq in-netwerk, li jippermettilna nagħmlu kwalunkwe ħaġa b'interazzjoni bejn is-servizzi. Il-biċċa l-kbira tal-implimentazzjonijiet jaħdmu kif ġej: kontenitur sidecar addizzjonali bi prokura trasparenti huwa miżjud ma 'kull mikroservizz, li minnu jgħaddi t-traffiku kollu deħlin u ħerġin tas-servizz. U dan huwa l-post stess fejn nistgħu nagħmlu l-ibbilanċjar tal-klijenti, napplikaw politiki ta 'sigurtà, nimponu restrizzjonijiet fuq in-numru ta' talbiet u niġbru informazzjoni importanti dwar l-interazzjoni tas-servizzi fil-produzzjoni.

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Soluzzjonijiet

Diġà hemm diversi implimentazzjonijiet ta’ dan l-approċċ: Istio и linkerd2. Huma jipprovdu ħafna karatteristiċi barra mill-kaxxa. Iżda fl-istess ħin, ikun hemm overhead kbir fuq ir-riżorsi. Barra minn hekk, iktar ma jkun kbir il-cluster li fih topera sistema bħal din, aktar se jkunu meħtieġa riżorsi biex tinżamm l-infrastruttura l-ġdida. F'Avito, noperaw raggruppamenti kubernetes li fihom eluf ta 'istanzi ta' servizz (u n-numru tagħhom qed ikompli jikber malajr). Fl-implimentazzjoni attwali tiegħu, Istio jikkonsma ~ 300Mb ta 'RAM għal kull istanza ta' servizz. Minħabba n-numru kbir ta 'possibbiltajiet, ibbilanċjar trasparenti jaffettwa wkoll il-ħin ta' rispons ġenerali tas-servizzi (sa 10ms).

Bħala riżultat, ħares lejn eżattament liema kapaċitajiet kellna bżonn bħalissa, u ddeċidejna li r-raġuni ewlenija għaliex bdejna nimplimentaw tali soluzzjonijiet kienet il-kapaċità li niġbru informazzjoni ta 'traċċar mis-sistema kollha b'mod trasparenti. Ridna wkoll li jkollna kontroll fuq l-interazzjoni tas-servizzi u nagħmlu diversi manipulazzjonijiet mal-headers li jiġu trasferiti bejn is-servizzi.

Bħala riżultat, wasalna għad-deċiżjoni tagħna:  Netramesh.

Netramesh

Netramesh hija soluzzjoni ħafifa ta 'malji ta' servizz bil-kapaċità li tiskala infinitament, irrispettivament min-numru ta 'servizzi fis-sistema.

L-għanijiet ewlenin tas-soluzzjoni l-ġdida kienu overhead ta 'riżorsi baxxi u prestazzjoni għolja. Fost il-karatteristiċi ewlenin, immedjatament ridna li nkunu nistgħu nibagħtu b'mod trasparenti spans ta 'traċċar lis-sistema Jaeger tagħna.

Illum, il-biċċa l-kbira tas-soluzzjonijiet tas-sħab huma implimentati f'Golang. U, ovvjament, hemm raġunijiet għal dan. Il-kitba ta 'applikazzjonijiet tan-netwerk f'Golang li jaħdmu b'mod asinkroniku ma' I/O u skala fuq il-qlub kif meħtieġ huwa konvenjenti u pjuttost sempliċi. U, dak li huwa wkoll importanti ħafna, il-prestazzjoni hija biżżejjed biex issolvi din il-problema. Għalhekk għażilna wkoll lil Golang.

Produttività

Iffukajna l-isforzi tagħna fuq il-kisba tal-produttività massima. Għal soluzzjoni li hija skjerata ħdejn kull istanza tas-servizz, huwa meħtieġ konsum żgħir ta 'RAM u ħin tas-CPU. U, ovvjament, id-dewmien tar-rispons għandu jkun żgħir ukoll.

Ejja naraw x'riżultati ksibna.

RAM

Netramesh jikkonsma ~ 10Mb mingħajr traffiku u 50Mb massimu b'tagħbija sa 10000 RPS kull istanza.

Istio mibgħut prokura dejjem jikkonsma ~ 300Mb fil-clusters tagħna b'eluf ta 'każijiet. Dan ma jippermettix li jiġi skalat għall-cluster kollu.

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

B'Netramesh ksibna tnaqqis ta '~10x fil-konsum tal-memorja.

CPU

L-użu tas-CPU huwa relattivament ugwali taħt it-tagħbija. Jiddependi fuq in-numru ta 'talbiet għal kull unità ta' ħin lis-sidecar. Valuri fi 3000 talba kull sekonda fl-aqwa:

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Hemm punt ieħor importanti: Netramesh - soluzzjoni mingħajr pjan ta 'kontroll u mingħajr tagħbija ma tikkonsmax ħin tas-CPU. B'Istio, is-sidecars dejjem jaġġornaw l-endpoints tas-servizz. Bħala riżultat, nistgħu naraw din l-istampa mingħajr tagħbija:

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Aħna nużaw HTTP/1 għall-komunikazzjoni bejn is-servizzi. Iż-żieda fil-ħin ta 'rispons għal Istio meta l-proxy permezz ta' mibgħut kienet sa 5-10ms, li hija pjuttost ħafna għal servizzi li huma lesti jirrispondu f'millisekonda. B'Netramesh dan iż-żmien naqas għal 0.5-2ms.

Skalabbiltà

L-ammont żgħir ta’ riżorsi kkunsmati minn kull prokura jagħmilha possibbli li jitqiegħed ħdejn kull servizz. Netramesh inħoloq intenzjonalment mingħajr komponent tal-pjan ta 'kontroll biex sempliċement iżomm kull sidecar ħafif. Ħafna drabi f'soluzzjonijiet ta 'malji ta' servizz, il-pjan ta 'kontroll iqassam informazzjoni ta' skoperta ta 'servizz lil kull sidecar. Flimkien magħha tiġi informazzjoni dwar timeouts u settings tal-ibbilanċjar. Dan kollu jippermettilek tagħmel ħafna affarijiet utli, iżda, sfortunatament, bloats sidecars fid-daqs.

Skoperta tas-servizz

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Netramesh ma jżid l-ebda mekkaniżmu addizzjonali għall-iskoperta tas-servizz. It-traffiku kollu jiġi mgħoddi b'mod trasparenti permezz ta' netra sidecar.

Netramesh jappoġġja protokoll ta 'applikazzjoni HTTP/1. Biex tiddefinixxiha, tintuża lista konfigurabbli ta' portijiet. Tipikament, is-sistema għandha diversi portijiet li permezz tagħhom isseħħ il-komunikazzjoni HTTP. Pereżempju, nużaw 80, 8890, 8080 għall-interazzjoni bejn is-servizzi u t-talbiet esterni.F'dan il-każ, jistgħu jiġu stabbiliti bl-użu ta' varjabbli ambjentali NETRA_HTTP_PORTS.

Jekk tuża Kubernetes bħala orkestratur u l-mekkaniżmu tal-entità tas-Servizz tiegħu għal komunikazzjoni intra-cluster bejn is-servizzi, allura l-mekkaniżmu jibqa 'eżatt l-istess. L-ewwel, il-mikroservizz jikseb indirizz IP tas-servizz billi juża kube-dns u jiftaħ konnessjoni ġdida miegħu. Din il-konnessjoni hija stabbilita l-ewwel man-netra-sidecar lokali u l-pakketti TCP kollha inizjalment jaslu għand netra. Sussegwentement, netra-sidecar jistabbilixxi konnessjoni mad-destinazzjoni oriġinali. NAT fuq pod IP fuq in-node jibqa eżattament l-istess bħal mingħajr netra.

Traċċar imqassam u trażmissjoni tal-kuntest

Netramesh jipprovdi l-funzjonalità meħtieġa biex tibgħat it-traċċar spans dwar l-interazzjonijiet HTTP. Netra-sidecar janalizza l-protokoll HTTP, ikejjel id-dewmien tat-talba, u jiġbed l-informazzjoni meħtieġa mill-headers HTTP. Fl-aħħar mill-aħħar, inġibu t-traċċi kollha f'sistema Jaeger waħda. Għal konfigurazzjoni ta 'qamħa fin, tista' wkoll tuża l-varjabbli ambjentali pprovduti mil-librerija uffiċjali jaeger go librerija.

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Imma hemm problema. Sakemm is-servizzi jiġġeneraw u jibagħtu header speċjali uber, mhux se naraw medda ta' traċċar konnessi fis-sistema. U dan huwa dak li għandna bżonn biex insibu malajr il-kawża tal-problemi. Hawnhekk għal darb'oħra Netramesh għandu soluzzjoni. Il-prokuri jaqraw headers HTTP u, jekk ma jkunx fihom l-uber trace id, jiġġeneraw waħda. Netramesh jaħżen ukoll informazzjoni dwar talbiet deħlin u ħerġin f'sidecar u jqabbelhom billi tarrikkixxihom bl-intestaturi meħtieġa tat-talbiet ħerġin. Kull ma trid tagħmel fis-servizzi huwa li tibgħat header wieħed biss X-Request-Id, li jistgħu jiġu kkonfigurati bl-użu ta 'varjabbli ambjentali NETRA_HTTP_REQUEST_ID_HEADER_NAME. Biex tikkontrolla d-daqs tal-kuntest f'Netramesh, tista' tissettja l-varjabbli ambjentali li ġejjin: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (iż-żmien li għalih se jinħażen il-kuntest) u NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (frekwenza tat-tindif tal-kuntest).

Huwa wkoll possibbli li tgħaqqad mogħdijiet multipli fis-sistema tiegħek billi timmarkahom b'token ta' sessjoni speċjali. Netra jippermettilek tinstalla HTTP_HEADER_TAG_MAP biex iddawwar l-headers HTTP f'tikketti ta' medda ta' traċċar korrispondenti. Dan jista 'jkun utli speċjalment għall-ittestjar. Wara li tgħaddi mit-test funzjonali, tista 'tara liema parti tas-sistema ġiet affettwata billi tiffiltra biċ-ċavetta tas-sessjoni korrispondenti.

Determinazzjoni tas-Sors tat-Talba

Biex tiddetermina minn fejn ġiet it-talba, tista 'tuża l-funzjonalità li żżid awtomatikament header mas-sors. Bl-użu ta' varjabbli ambjentali NETRA_HTTP_X_SOURCE_HEADER_NAME Tista' tispeċifika isem ta' header li se jiġi installat awtomatikament. Bl-użu NETRA_HTTP_X_SOURCE_VALUE tista' tissettja l-valur li għalih l-header X-Source se tkun issettjata għat-talbiet kollha ħerġin.

Dan jippermetti li d-distribuzzjoni ta 'din l-header utli tkun distribwita b'mod uniformi fin-netwerk kollu. Imbagħad tista 'tużaha fis-servizzi u żżidha ma' zkuk u metriċi.

Rotot tat-traffiku u interni Netramesh

Netramesh jikkonsisti f'żewġ komponenti ewlenin. L-ewwel, netra-init, jistabbilixxi regoli tan-netwerk biex jinterċetta t-traffiku. Huwa juża iptables regoli mill-ġdid biex jinterċettaw it-traffiku kollu jew parti minnu fuq sidecar, li huwa t-tieni komponent ewlieni ta' Netramesh. Tista' tikkonfigura liema portijiet jeħtieġ li jiġu interċettati għal sessjonijiet TCP deħlin u ħerġin: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

L-għodda għandha wkoll karatteristika interessanti - rotta probabilistika. Jekk tuża Netramesh esklussivament għall-ġbir tat-tracing spans, allura f'ambjent ta 'produzzjoni tista' tiffranka r-riżorsi u tippermetti r-rotot probabilstiku bl-użu ta 'varjabbli NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (minn 0 sa 1). Il-valur default huwa 1 (it-traffiku kollu huwa interċettat).

Wara interċettazzjoni b'suċċess, netra sidecar jaċċetta l-konnessjoni l-ġdida u juża SO_ORIGINAL_DST għażla tas-sokit biex tikseb id-destinazzjoni oriġinali. Netra mbagħad tiftaħ konnessjoni ġdida għall-indirizz IP oriġinali u tistabbilixxi komunikazzjoni TCP f'żewġ direzzjonijiet bejn il-partijiet, billi tisma 't-traffiku kollu li jgħaddi minnu. Jekk il-port huwa definit bħala HTTP, Netra jipprova janalizzah u jintraċċah. Jekk l-analiżi HTTP ifalli, Netra jaqa' lura għal TCP u jipprokura l-bytes b'mod trasparenti.

Bini ta' graff tad-dipendenza

Wara li rċievi ammont kbir ta 'informazzjoni ta' traċċar f'Jaeger, irrid nikseb graff komplut ta 'interazzjonijiet fis-sistema. Imma jekk is-sistema tiegħek hija pjuttost mgħobbija u biljuni ta 'firxiet ta' traċċar jakkumulaw kuljum, l-aggregazzjoni tagħhom ma ssirx ħidma daqshekk faċli. Hemm mod uffiċjali biex tagħmel dan: xrar-dipendenzi. Madankollu, se tieħu sigħat biex tibni graff komplut u se jġiegħlek tniżżel is-sett tad-dejta kollu minn Jaeger għall-aħħar XNUMX siegħa.

Jekk qed tuża Elasticsearch biex taħżen medda ta 'traċċar, tista' tuża utilità Golang sempliċi, li se tibni l-istess graff fi ftit minuti billi tuża l-karatteristiċi u l-kapaċitajiet ta 'Elasticsearch.

Netramesh - soluzzjoni ħfief tal-malji tas-servizz

Kif tuża Netramesh

Netra jista 'jiżdied faċilment ma' kwalunkwe servizz li jmexxi kwalunkwe orkestratur. Tista 'tara eżempju hawn.

Bħalissa, Netra m'għandhiex il-kapaċità li timplimenta awtomatikament sidecars għas-servizzi, iżda hemm pjanijiet għall-implimentazzjoni.

Il-futur ta 'Netramesh

għan ewlieni Netramesh huwa li jinkisbu spejjeż minimi tar-riżorsi u prestazzjoni għolja, li jipprovdu kapaċitajiet bażiċi għall-osservabilità u l-kontroll tal-komunikazzjoni bejn is-servizzi.

Fil-futur, Netramesh se jappoġġja protokolli oħra ta 'saff ta' applikazzjoni minbarra HTTP. Ir-rotot L7 se jkun disponibbli fil-futur qarib.

Uża Netramesh jekk tiltaqa' ma' problemi simili u ikteb lilna b'mistoqsijiet u suġġerimenti.

Sors: www.habr.com

Żid kumment