Gava ku em ji serîlêdanek yekparêz berbi mîmariya mîkroxizmetê ve diçin, em bi pirsgirêkên nû re rû bi rû dimînin.
Di serîlêdanek monolîtîk de, bi gelemperî pir hêsan e ku meriv diyar bike ku xeletî di kîjan beşa pergalê de çêbûye. Bi îhtîmalek mezin, pirsgirêk di koda monolîtê bixwe de, an di databasê de ye. Lê gava ku em dest bi lêgerîna pirsgirêkek di mîmariya mîkroxizmetê de dikin, êdî her tişt ne ew qas eşkere ye. Pêdivî ye ku em tevahiya riya ku daxwaz ji destpêkê heya dawiyê girtiye bibînin û wê ji bi sedan mîkroservisan hilbijêrin. Digel vê yekê, gelek ji wan jî xwedan dezgehên hilanînê yên xwe ne, ku di heman demê de dibe sedema xeletiyên mantiqî, û her weha pirsgirêkên performansê û tolerasyona xeletiyê.
Ez demek dirêj li amûrek digerim ku dê ji pirsgirêkên weha re bibe alîkar (min li ser vê yekê li ser Habré nivîsî:
Şopandina belavkirî çareseriyek hevpar e ji bo pirsgirêka dîtina xeletiyan di pergalên belavbûyî de. Lê çi dibe bila bibe ev nêzîkatiya berhevkirina agahdariya di derheqê danûstendinên torê de hîn di pergalê de nehatiye bicîh kirin, an jî xirabtir, di beşek pergalê de ew jixwe bi rêkûpêk dixebite, lê beşek jî nake, ji ber ku ew li karûbarên kevn nehatiye zêdekirin ? Ji bo destnîşankirina sedema rastîn a pirsgirêkê, pêdivî ye ku meriv wêneyek bêkêmasî ya ku di pergalê de diqewime hebe. Bi taybetî girîng e ku meriv fêm bike ka kîjan mîkroxizmet di rêyên girîng ên karsaziya krîtîk de beşdar dibin.
Li vir nêzîkatiya tevna karûbarê dikare were alîkariya me, ku dê bi hemî makîneyên berhevkirina agahdariya torê re di astek ji karûbarên ku bixwe dixebitin re mijûl bibe. Ev nêzîkatî dihêle ku em hemî seyrûseferê bişopînin û wê li ser firînê analîz bikin. Wekî din, serîlêdan ne hewce ne ku di derheqê wê de tiştek zanibin.
Nêzîkatiya tevna xizmetê
Fikra bingehîn a nêzîkbûna tevna karûbarê ev e ku meriv qatek binesaziyê ya din li ser torê zêde bike, ku dê bihêle ku em bi danûstendina nav-karûbar re her tiştî bikin. Pir sepanan bi vî rengî dixebitin: konteynirek kêlek din a bi proxyek zelal li her mîkroxizmetê tê zêdekirin, ku tê de hemî seyrûsefera ketin û derketinê ya karûbarê derbas dibe. Û ev cihê ku em dikarin hevsengiya xerîdar bikin, polîtîkayên ewlehiyê bicîh bînin, li ser hejmara daxwazan sînordar bikin û li ser danûstendina karûbaran di hilberînê de agahdariya girîng berhev bikin.
Rûsya
Jixwe çend pêkanînên vê rêbazê hene:
Wekî encamek, me tam li kîjan kapasîteyên ku em niha hewce ne nihêrîn, û biryar da ku sedema bingehîn a ku me dest bi cîbicîkirina çareseriyên weha kir, şiyana berhevkirina agahdariya şopandinê ji tevahiya pergalê bi zelalî bû. Di heman demê de me xwest ku em li ser danûstendina karûbaran bibin xwedî kontrol û bi sernavên ku di navbera karûbaran de têne veguheztin manîpulasyonên cihêreng bikin.
Di encamê de, em gihîştin biryara xwe:
Netramesh
Armancên sereke yên çareseriya nû sermaya çavkaniyê kêm û performansa bilind bûn. Ji taybetmendiyên sereke, me tavilê xwest ku em karibin bi zelalî şopên şopandinê ji pergala xweya Jaeger re bişînin.
Îro, piraniya çareseriyên ewr li Golang têne bicîh kirin. Û, bê guman, sedemên vê yekê hene. Nivîsandina serîlêdanên torê yên li Golang ên ku bi I/O re asynkron dixebitin û li gorî hewcedariyê li ser navîkan pîvandin rehet û pir hêsan e. Û, ya ku di heman demê de pir girîng e, performans ji bo çareserkirina vê pirsgirêkê bes e. Ji ber vê yekê me jî Golang hilbijart.
Berhemdariyê
Me xebatên xwe li ser bidestxistina berhemdariya herî zêde rawestandiye. Ji bo çareseriyek ku li kêleka her mînakek karûbarê hatî bicîh kirin, vexwarinek piçûk a dema RAM û CPU hewce ye. Û, bê guman, derengiya bersivê jî divê piçûk be.
Ka em bibînin ka me çi encam girt.
BERAN
Netramesh bêyî seyrûseferê ~ 10Mb û herî zêde 50Mb bi barkirina heya 10000 RPS-ê ji bo nimûneyê vedixwe.
Proxeya nûnerê Istio her gav di nav komên me de bi hezaran mînakan ~ 300 Mb dixwe. Ev rê nade ku ew bi tevahî komê were pîvan kirin.
Bi Netramesh re me ~ 10x kêmkirina mezaxtina bîranînê girt.
CPU
Bikaranîna CPU-ê di bin barkirinê de bi rengek wekhev e. Ew bi hejmara daxwaznameyên her yekîneya wextê ve girêdayî ye ku li kêlekê. Nirxên li ser 3000 daxwazî di çirkeyê de di lûtkeyê de:
Xalek girîngek din jî heye: Netramesh - çareseriyek bêyî balafirek kontrolê û bêyî barkirinê dema CPU-ê naxwe. Bi Istio re, kêlîk her gav xalên dawiya karûbarê nûve dikin. Wekî encamek, em dikarin vê wêneyê bêyî barkirinê bibînin:
Em HTTP/1 ji bo danûstendina di navbera karûbaran de bikar tînin. Zêdebûna dema bersivê ji bo Istio dema ku bi navgîniya nûnerê veguhezîne heya 5-10ms bû, ku ji bo karûbarên ku amade ne ku di milîsaniyeyekê de bersivê bidin pir pir e. Bi Netramesh re ev dem daketiye 0.5-2ms.
Scalability
Rêjeya piçûk a çavkaniyên ku ji hêla her proxy ve tê vexwarin dihêle ku ew li tenişta her karûbar bi cîh bike. Netramesh bi mebest bêyî hêmanek balafirek kontrolê hate afirandin ku bi hêsanî her kêlek sivik bimîne. Bi gelemperî di çareseriyên tevna karûbarê de, balafira kontrolê agahdariya vedîtina karûbarê li her kêlekê belav dike. Li gel wê agahdarî li ser dem û mîhengên hevsengiyê tê. Hemî ev dihêle hûn gelek tiştên kêrhatî bikin, lê, mixabin, ew bi mezinahiyê kêlekan dişewitîne.
Vedîtina xizmetê
Netramesh ji bo vedîtina karûbarê mekanîzmayên din zêde nake. Hemî seyrûsefer bi şefafî bi navgîniya kêleka netra ve tê veguheztin.
Netramesh protokola serîlêdanê ya HTTP/1 piştgirî dike. Ji bo pênasekirina wê, navnîşek mîhengbar a portan tê bikar anîn. Bi gelemperî, pergalê gelek port hene ku pêwendiya HTTP bi wan re çêdibe. Mînakî, em 80, 8890, 8080 ji bo danûstendina di navbera karûbar û daxwazên derveyî de bikar tînin NETRA_HTTP_PORTS
.
Ger hûn Kubernetes wekî orkestrator û mekanîzmaya saziya Karûbarê wê ji bo danûstendina hundurîn-komê di navbera karûbaran de bikar bînin, wê hingê mekanîzma tam heman dimîne. Pêşîn, microservice navnîşek IP-ya karûbarê bi karanîna kube-dns digire û pêwendiyek nû jê re vedike. Ev pêwendiya yekem bi netra-sidecara herêmî re tê saz kirin û hemî pakêtên TCP di destpêkê de digihîjin netra. Dûv re, netra-sidecar têkiliyek bi cîhê bingehîn re saz dike. NAT li ser pod IP-ya li ser girêkê tam wekî bêyî netra dimîne.
Şopandin û şandina kontekstê belav kirin
Netramesh fonksiyona ku ji bo şandina şopên di derheqê danûstendinên HTTP de hewce dike peyda dike. Netra-sidecar protokola HTTP par dike, derengiya daxwazê dipîve, û agahdariya pêwîst ji sernavên HTTP derdixe. Di dawiyê de, em hemî şopan di yek pergala Jaeger de digirin. Ji bo veavakirina hûrgulî, hûn dikarin guhêrbarên jîngehê yên ku ji hêla pirtûkxaneya fermî ve hatî peyda kirin jî bikar bînin
Lê pirsgirêkek heye. Heya ku karûbar sernavek uber-a taybetî neafirînin û bişînin, em ê di pergalê de şopên pêvekirî nebînin. Û ev e ya ku em hewce ne ku zû sedema pirsgirêkan bibînin. Li vir dîsa çareseriyek Netramesh heye. Proxies sernavên HTTP-ê dixwînin û, heke ew nasnameya şopa uber nehewînin, yekê çêdikin. Netramesh di heman demê de agahdariya li ser daxwazên hatin û derketinê di kêlekek de hilîne û wan bi sernavên daxwazên derketinê yên pêwîst dewlemend dike. Tişta ku hûn hewce ne ku di karûbaran de bikin ev e ku hûn tenê sernavek bişînin X-Request-Id
, ku dikare bi karanîna guhêrbarek jîngehê were mîheng kirin NETRA_HTTP_REQUEST_ID_HEADER_NAME
. Ji bo kontrolkirina mezinahiya çarçoveyê li Netramesh, hûn dikarin guhêrbarên jîngehê yên jêrîn bicîh bikin: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS
(dema ku tê de dê were hilanîn) û NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL
(frekansa paqijkirina çarçoveyê).
Di heman demê de mimkun e ku meriv gelek rêçikan li ser pergala xwe bi îşaretek danişîna taybetî nîşan bide. Netra destûrê dide te ku saz bike HTTP_HEADER_TAG_MAP
da ku sernavên HTTP-ê veguherînin etîketên paşîn ên şopandinê yên têkildar. Ev dikare bi taybetî ji bo ceribandinê kêrhatî be. Piştî ku ceribandina fonksiyonê derbas kir, hûn dikarin bibînin ka kîjan beşek pergalê ji hêla fîlterkirina bişkojka danişîna têkildar ve hatî bandor kirin.
Diyarkirina Çavkaniya Daxwazê
Ji bo destnîşankirina ku daxwaz ji ku hatî, hûn dikarin fonksiyona ku bixweber sernavek bi çavkaniyê re zêde bikin bikar bînin. Bikaranîna guherbarek jîngehê NETRA_HTTP_X_SOURCE_HEADER_NAME
Hûn dikarin navek sernavê ku dê bixweber were saz kirin diyar bikin. Bi karanîna NETRA_HTTP_X_SOURCE_VALUE
hûn dikarin nirxa ku sernavê X-Source dê ji bo hemî daxwazên derketinê were danîn destnîşan bikin.
Ev dihêle ku belavkirina vê sernavê kêrhatî li seranserê torê bi yekrengî were belavkirin. Wê hingê hûn dikarin wê di karûbaran de bikar bînin û wê li têketin û metrîkan zêde bikin.
Rêvekirina trafîkê û hundurên Netramesh
Netramesh ji du beşên sereke pêk tê. Ya yekem, netra-init, qaîdeyên torê destnîşan dike ku seyrûseferê bigire. Ew bikar tîne INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS
.
Di heman demê de amûrek xwedan taybetmendiyek balkêş e - rêvekirina îhtîmalî. Ger hûn Netramesh tenê ji bo berhevkirina şopên şopandinê bikar tînin, wê hingê di hawîrdorek hilberînê de hûn dikarin çavkaniyan hilînin û bi karanîna guhêrbaran rêça îhtîmalî çalak bikin. NETRA_INBOUND_PROBABILITY
и NETRA_OUTBOUND_PROBABILITY
(ji 0 heta 1). Nirxa xwerû 1 e (hemû seyrûsefer tê asteng kirin).
Piştî navgîniya serfiraz, netra sidecar pêwendiya nû qebûl dike û bikar tîne SO_ORIGINAL_DST
vebijarka soketê ji bo bidestxistina cîhê bingehîn. Dûv re Netra pêwendiyek nû bi navnîşana IP-ya orjînal vedike û pêwendiya TCP-ya du-alî di navbera aliyan de saz dike, guh dide hemî seyrûsefera ku tê de derbas dibe. Ger port wekî HTTP were pênase kirin, Netra hewl dide ku wê parsek bike û bişopîne. Ger parskirina HTTP têk biçe, Netra vedigere TCP-ê û bi şefaf bîtan prox dike.
Avakirina grafiyek girêdayîbûnê
Piştî ku li Jaeger gelek agahdariya şopandinê werdigirim, ez dixwazim grafiyek bêkêmasî ya danûstendinên di pergalê de bistînim. Lê heke pergala we pir barkirî be û bi mîlyaran şopên şopandinê her roj berhev dibin, komkirina wan ne karekî wusa hêsan dibe. Ji bo vê yekê rêyek fermî heye:
Ger hûn Elasticsearch-ê bikar tînin da ku hûn pêlên şopandinê hilînin, hûn dikarin bikar bînin
Meriv çawa Netramesh bikar tîne
Netra dikare bi hêsanî li her karûbarek ku her orkestratorek dixebite were zêdekirin. Hûn dikarin mînakek bibînin
Heya nuha, Netra ne xwediyê şiyana ku bixweber karûbarên kêlekê bicîh bike, lê ji bo bicîhkirinê plan hene.
Pêşeroja Netramesh
Armanca sereke
Di pêşerojê de, Netramesh dê ji bilî HTTP-ê protokolên qata serîlêdanê yên din piştgirî bike. Rêwîtiya L7 dê di demek nêzîk de peyda bibe.
Ger hûn bi pirsgirêkên bi vî rengî re rû bi rû bimînin Netramesh bikar bînin û bi pirs û pêşniyaran ji me re binivîsin.
Source: www.habr.com