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.
Ilni nfittex għodda li tgħin biex tlaħħaq ma’ problemi bħal dawn (ktibt dwar dan fuq Habré:
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.
Soluzzjonijiet
Diġà hemm diversi implimentazzjonijiet ta’ dan l-approċċ:
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
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.
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:
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:
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 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
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 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:
Jekk qed tuża Elasticsearch biex taħżen medda ta 'traċċar, tista' tuża
Kif tuża Netramesh
Netra jista 'jiżdied faċilment ma' kwalunkwe servizz li jmexxi kwalunkwe orkestratur. Tista 'tara eżempju
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
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