PÄrejot no monolÄ«tas lietojumprogrammas uz mikropakalpojumu arhitektÅ«ru, mÄs saskaramies ar jauniem izaicinÄjumiem.
MonolÄ«tÄ lietojumprogrammÄ parasti ir diezgan viegli noteikt, kurÄ sistÄmas daÄ¼Ä radusies kļūda. VisticamÄk, problÄma ir paÅ”Ä monolÄ«ta kodÄ vai datu bÄzÄ. Bet, kad mÄs sÄkam meklÄt problÄmu mikropakalpojumu arhitektÅ«rÄ, viss vairs nav tik acÄ«mredzams. Mums ir jÄatrod viss ceļŔ, kas tika veikts pieprasÄ«jumam no sÄkuma lÄ«dz beigÄm, un jÄatlasa tas no simtiem mikropakalpojumu. TurklÄt daudziem no tiem ir arÄ« savas krÄtuves, kas var izraisÄ«t arÄ« loÄ£iskas kļūdas, kÄ arÄ« problÄmas ar veiktspÄju un kļūdu toleranci.
Es jau ilgu laiku meklÄju rÄ«ku, kas palÄ«dzÄtu tikt galÄ ar Å”ÄdÄm problÄmÄm (par to rakstÄ«ju HabrĆ©:
IzkliedÄtÄ izsekoÅ”ana ir izplatÄ«ts risinÄjums kļūdu atraÅ”anas problÄmai sadalÄ«tajÄs sistÄmÄs. Bet ko darÄ«t, ja Ŕī pieeja informÄcijas vÄkÅ”anai par tÄ«kla mijiedarbÄ«bu sistÄmÄ vÄl nav ieviesta vai, vÄl ļaunÄk, daÄ¼Ä sistÄmas tÄ jau darbojas pareizi, bet daļÄji ne, jo tÄ nav pievienota veciem pakalpojumiem. ? Lai noteiktu precÄ«zu problÄmas cÄloni, ir nepiecieÅ”ams pilnÄ«gs priekÅ”stats par to, kas notiek sistÄmÄ. ÄŖpaÅ”i svarÄ«gi ir saprast, kuri mikropakalpojumi ir iesaistÄ«ti galvenajos biznesam kritiskajos ceļos.
Å eit mums var palÄ«dzÄt pakalpojumu tÄ«kla pieeja, kas tiks galÄ ar visÄm tÄ«kla informÄcijas vÄkÅ”anas maŔīnÄm zemÄkÄ lÄ«menÄ«, nekÄ darbojas paÅ”i pakalpojumi. Å Ä« pieeja ļauj mums pÄrtvert visu trafiku un analizÄt to lidojuma laikÄ. TurklÄt lietojumprogrammÄm pat nekas par to nav jÄzina.
Servisa tīkla pieeja
Pakalpojumu tÄ«kla pieejas galvenÄ ideja ir tÄ«klam pievienot vÄl vienu infrastruktÅ«ras slÄni, kas ļaus mums veikt jebkÄdas darbÄ«bas ar starppakalpojumu mijiedarbÄ«bu. LielÄkÄ daļa implementÄciju darbojas Å”Ädi: katram mikropakalpojumam tiek pievienots papildu blakusvÄÄ£a konteiners ar caurspÄ«dÄ«gu starpniekserveri, caur kuru tiek nodota visa pakalpojuma ienÄkoÅ”Ä un izejoÅ”Ä trafika. Un tieÅ”i Å”eit mÄs varam veikt klientu lÄ«dzsvaroÅ”anu, piemÄrot droŔības politikas, noteikt pieprasÄ«jumu skaita ierobežojumus un apkopot svarÄ«gu informÄciju par pakalpojumu mijiedarbÄ«bu ražoÅ”anÄ.
RisinÄjumi
Å ai pieejai jau ir vairÄki varianti:
RezultÄtÄ mÄs apskatÄ«jÄm, kÄdas tieÅ”i iespÄjas mums Å”obrÄ«d ir vajadzÄ«gas, un nolÄmÄm, ka galvenais iemesls, kÄpÄc sÄkÄm ieviest Å”Ädus risinÄjumus, bija iespÄja caurskatÄmi savÄkt izsekoÅ”anas informÄciju no visas sistÄmas. MÄs arÄ« vÄlÄjÄmies kontrolÄt pakalpojumu mijiedarbÄ«bu un veikt dažÄdas manipulÄcijas ar galvenÄm, kas tiek pÄrsÅ«tÄ«tas starp pakalpojumiem.
RezultÄtÄ mÄs nonÄcÄm pie sava lÄmuma:ā
Netramesh
JaunÄ risinÄjuma galvenie mÄrÄ·i bija zemas pieskaitÄmÄs izmaksas un augsta veiktspÄja. Starp galvenajÄm funkcijÄm mÄs nekavÄjoties vÄlÄjÄmies, lai mÅ«su Jaeger sistÄmai bÅ«tu iespÄja pÄrredzami nosÅ«tÄ«t izsekoÅ”anas posmus.
MÅ«sdienÄs lielÄkÄ daļa mÄkoÅa risinÄjumu tiek ieviesti GolangÄ. Un, protams, tam ir iemesli. TÄ«kla lietojumprogrammu rakstÄ«Å”ana GolangÄ, kas darbojas asinhroni ar I/O un pÄc vajadzÄ«bas mÄrogojas starp kodoliem, ir Ärti un diezgan vienkÄrÅ”i. Un, kas ir arÄ« ļoti svarÄ«gi, veiktspÄja ir pietiekama, lai atrisinÄtu Å”o problÄmu. TÄpÄc arÄ« izvÄlÄjÄmies Golangu.
ŠŃŠ¾ŠøŠ·Š²Š¾Š“ŠøŃŠµŠ»ŃŠ½Š¾ŃŃŃ
MÄs esam koncentrÄjuÅ”i savus centienus uz maksimÄlÄs produktivitÄtes sasniegÅ”anu. RisinÄjumam, kas tiek izvietots blakus katram pakalpojuma gadÄ«jumam, ir nepiecieÅ”ams neliels RAM un CPU laika patÄriÅÅ”. Un, protams, arÄ« reakcijas aizkavei jÄbÅ«t nelielai.
PaskatÄ«simies, kÄdus rezultÄtus saÅÄmÄm.
RAM
Netramesh patÄrÄ ~ 10 Mb bez trafika un 50 Mb maksimÄli ar slodzi lÄ«dz 10000 XNUMX RPS vienÄ eksemplÄrÄ.
Istio sÅ«tÅa starpniekserveris vienmÄr patÄrÄ ~300Mb mÅ«su klasteros ar tÅ«kstoÅ”iem gadÄ«jumu. Tas neļauj to mÄrogot uz visu klasteru.
Izmantojot Netramesh, atmiÅas patÄriÅÅ” ir samazinÄjies ~ 10x.
CPU
CPU lietojums ir salÄ«dzinoÅ”i vienÄds ar slodzi. Tas ir atkarÄ«gs no pieprasÄ«jumu skaita laika vienÄ«bÄ blakusvÄÄ£im. VÄrtÄ«bas pie 3000 pieprasÄ«jumiem sekundÄ maksimumÄ:
Ir vÄl viens svarÄ«gs punkts: Netramesh - risinÄjums bez vadÄ«bas plaknes un bez slodzes nepatÄrÄ CPU laiku. Izmantojot Istio, blakusvÄÄ£i vienmÄr atjaunina servisa galapunktus. RezultÄtÄ mÄs varam redzÄt Å”o attÄlu bez slodzes:
SaziÅai starp pakalpojumiem mÄs izmantojam HTTP/1. Istio reakcijas laika pieaugums, izmantojot starpniekserveri, bija lÄ«dz 5-10 ms, kas ir diezgan daudz pakalpojumiem, kas ir gatavi atbildÄt milisekundÄ. Izmantojot Netramesh, Å”is laiks ir samazinÄjies lÄ«dz 0.5-2 ms.
MÄrogojamÄ«ba
Katra starpniekservera patÄrÄtais nelielais resursu apjoms ļauj to novietot blakus katram pakalpojumam. Netramesh tika ar nolÅ«ku izveidots bez vadÄ«bas plaknes komponenta, lai katrs blakusvÄÄ£is bÅ«tu viegls. Bieži vien servisa tÄ«kla risinÄjumos vadÄ«bas plakne izplata servisa atklÄÅ”anas informÄciju katrai blakusvÄÄ£im. KopÄ ar to ir informÄcija par taimautiem un balansÄÅ”anas iestatÄ«jumiem. Tas viss ļauj paveikt daudz noderÄ«gu lietu, taÄu diemžÄl tas uzpÅ«Å” blakusvÄÄ£us.
Pakalpojuma atklÄÅ”ana
Netramesh nepievieno nekÄdus papildu mehÄnismus pakalpojumu atklÄÅ”anai. Visa satiksme tiek nodroÅ”inÄta pÄrredzami caur netra blakusvÄÄ£i.
Netramesh atbalsta HTTP/1 lietojumprogrammu protokolu. Lai to definÄtu, tiek izmantots konfigurÄjams portu saraksts. Parasti sistÄmai ir vairÄki porti, caur kuriem notiek HTTP sakari. PiemÄram, pakalpojumu un ÄrÄjo pieprasÄ«jumu mijiedarbÄ«bai izmantojam 80, 8890, 8080. Å ajÄ gadÄ«jumÄ tos var iestatÄ«t, izmantojot vides mainÄ«go. NETRA_HTTP_PORTS
.
Ja izmantojat Kubernetes kÄ organizÄtÄju un tÄ pakalpojuma entÄ«tijas mehÄnismu klastera iekÅ”Äjai saziÅai starp pakalpojumiem, mehÄnisms paliek tieÅ”i tÄds pats. PirmkÄrt, mikropakalpojums iegÅ«st pakalpojuma IP adresi, izmantojot kube-dns, un atver jaunu savienojumu ar to. Å is savienojums vispirms tiek izveidots ar vietÄjo netra blakusvÄÄ£i, un visas TCP paketes sÄkotnÄji nonÄk pie netra. PÄc tam netra blakusvÄÄ£is izveido savienojumu ar sÄkotnÄjo galamÄrÄ·i. NAT uz pod IP mezglÄ paliek tieÅ”i tÄds pats kÄ bez netras.
IzplatÄ«ta izsekoÅ”ana un konteksta pÄrsÅ«tÄ«Å”ana
Netramesh nodroÅ”ina funkcionalitÄti, kas nepiecieÅ”ama, lai nosÅ«tÄ«tu HTTP mijiedarbÄ«bas izsekoÅ”anas posmus. Netra-sidecar parsÄ HTTP protokolu, mÄra pieprasÄ«jumu aizkaves un iegÅ«st nepiecieÅ”amo informÄciju no HTTP galvenÄm. Galu galÄ mÄs iegÅ«stam visas pÄdas vienÄ Jaeger sistÄmÄ. PrecÄ«zai konfigurÄcijai varat izmantot arÄ« vides mainÄ«gos, ko nodroÅ”ina oficiÄlÄ bibliotÄka
Bet ir problÄma. KamÄr pakalpojumi neÄ£enerÄs un nenosÅ«tÄ«s Ä«paÅ”u Uber galveni, mÄs neredzÄsim saistÄ«tos izsekoÅ”anas posmus sistÄmÄ. Un tas ir nepiecieÅ”ams, lai Ätri atrastu problÄmu cÄloni. Å eit atkal Netramesh ir risinÄjums. Starpniekserveri nolasa HTTP galvenes un, ja tajos nav Uber izsekoÅ”anas ID, Ä£enerÄ to. Netramesh arÄ« saglabÄ informÄciju par ienÄkoÅ”ajiem un izejoÅ”ajiem pieprasÄ«jumiem blakusvÄģī un saskaÅo tos, bagÄtinot tos ar nepiecieÅ”amajÄm izejoÅ”o pieprasÄ«jumu galvenÄm. Viss, kas jums jÄdara pakalpojumos, ir jÄnosÅ«ta tikai viena galvene X-Request-Id
, ko var konfigurÄt, izmantojot vides mainÄ«go NETRA_HTTP_REQUEST_ID_HEADER_NAME
. Lai kontrolÄtu konteksta lielumu programmÄ Netramesh, varat iestatÄ«t Å”Ädus vides mainÄ«gos: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS
(laiks, cik ilgi konteksts tiks saglabÄts) un NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL
(konteksta tīrīŔanas biežums).
Ir iespÄjams arÄ« apvienot vairÄkus ceļus savÄ sistÄmÄ, atzÄ«mÄjot tos ar Ä«paÅ”u sesijas marÄ·ieri. Netra ļauj instalÄt HTTP_HEADER_TAG_MAP
lai HTTP galvenes pÄrvÄrstu par atbilstoÅ”iem izsekoÅ”anas diapazona tagiem. Tas var bÅ«t Ä«paÅ”i noderÄ«gi testÄÅ”anai. PÄc funkcionÄlÄs pÄrbaudes nokÄrtoÅ”anas jÅ«s varat redzÄt, kuru sistÄmas daļu ietekmÄja filtrÄÅ”ana pÄc atbilstoÅ”Äs sesijas atslÄgas.
Pieprasījuma avota noteikŔana
Lai noteiktu, no kurienes ir saÅemts pieprasÄ«jums, varat izmantot funkcionalitÄti, kas automÄtiski pievieno galveni ar avotu. Vides mainÄ«gÄ izmantoÅ”ana NETRA_HTTP_X_SOURCE_HEADER_NAME
Varat norÄdÄ«t galvenes nosaukumu, kas tiks automÄtiski instalÄts. Izmantojot NETRA_HTTP_X_SOURCE_VALUE
varat iestatÄ«t vÄrtÄ«bu, uz kÄdu tiks iestatÄ«ta X-Source galvene visiem izejoÅ”ajiem pieprasÄ«jumiem.
Tas ļauj Ŕīs noderÄ«gÄs galvenes sadalÄ«jumu vienmÄrÄ«gi sadalÄ«t visÄ tÄ«klÄ. PÄc tam varat to izmantot pakalpojumos un pievienot žurnÄliem un metrikÄm.
Satiksmes marÅ”rutÄÅ”ana un Netramesh iekÅ”Äjie elementi
Netramesh sastÄv no divÄm galvenajÄm sastÄvdaļÄm. Pirmais, netra-init, nosaka tÄ«kla noteikumus, lai pÄrtvertu trafiku. ViÅÅ” lieto INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS
.
RÄ«kam ir arÄ« interesanta funkcija - varbÅ«tiskÄ marÅ”rutÄÅ”ana. Ja izmantojat Netramesh tikai izsekoÅ”anas diapazonu apkopoÅ”anai, ražoÅ”anas vidÄ varat ietaupÄ«t resursus un iespÄjot varbÅ«tisko marÅ”rutÄÅ”anu, izmantojot mainÄ«gos. NETRA_INBOUND_PROBABILITY
Šø NETRA_OUTBOUND_PROBABILITY
(no 0 lÄ«dz 1). NoklusÄjuma vÄrtÄ«ba ir 1 (visa satiksme tiek pÄrtverta).
PÄc veiksmÄ«gas pÄrtverÅ”anas Netra blakusvÄÄ£is pieÅem jauno savienojumu un izmanto SO_ORIGINAL_DST
ligzdas opciju, lai iegÅ«tu sÄkotnÄjo galamÄrÄ·i. PÄc tam Netra atver jaunu savienojumu ar sÄkotnÄjo IP adresi un izveido divvirzienu TCP saziÅu starp pusÄm, klausoties visu cauri ejoÅ”o trafiku. Ja ports ir definÄts kÄ HTTP, Netra mÄÄ£ina to parsÄt un izsekot. Ja HTTP parsÄÅ”ana neizdodas, Netra atgriežas pie TCP un pÄrredzami izmanto starpniekserveri.
Atkarības grafika izveide
PÄc liela apjoma izsekoÅ”anas informÄcijas saÅemÅ”anas Jaeger, es vÄlos iegÅ«t pilnÄ«gu sistÄmas mijiedarbÄ«bas grafiku. Bet, ja jÅ«su sistÄma ir diezgan noslogota un dienÄ uzkrÄjas miljardiem izsekoÅ”anas diapazonu, to apkopoÅ”ana nav tik viegls uzdevums. Ir oficiÄls veids, kÄ to izdarÄ«t:
Ja izmantojat Elasticsearch, lai saglabÄtu izsekoÅ”anas laidumus, varat izmantot
KÄ lietot Netramesh
Netra var viegli pievienot jebkuram pakalpojumam, kurÄ darbojas jebkurÅ” orÄ·estrÄtÄjs. JÅ«s varat redzÄt piemÄru
Å obrÄ«d Netra nav iespÄjas automÄtiski ieviest blakusvÄÄ£us servisos, taÄu ir plÄni ievieÅ”anai.
Netramesh nÄkotne
galvenais mÄrÄ·is
NÄkotnÄ Netramesh atbalstÄ«s ne tikai HTTP, bet arÄ« citus lietojumprogrammu slÄÅa protokolus. L7 marÅ”rutÄÅ”ana bÅ«s pieejama tuvÄkajÄ nÄkotnÄ.
Izmantojiet Netramesh, ja rodas lÄ«dzÄ«gas problÄmas, un rakstiet mums ar jautÄjumiem un ieteikumiem.
Avots: www.habr.com