Netramesh - lub teeb yuag kev pab cuam mesh tov

Thaum peb txav los ntawm daim ntawv thov monolithic mus rau microservices architecture, peb ntsib cov kev cov nyom tshiab.

Hauv daim ntawv thov monolithic, nws feem ntau yog qhov yooj yim los txiav txim siab qhov twg ntawm qhov kev ua yuam kev tshwm sim hauv. Feem ntau, qhov teeb meem yog nyob rau hauv cov cai ntawm lub monolith nws tus kheej, los yog nyob rau hauv lub database. Tab sis thaum peb pib nrhiav qhov teeb meem hauv microservice architecture, txhua yam tsis pom tseeb lawm. Peb yuav tsum nrhiav tag nrho txoj hauv kev uas qhov kev thov coj los ntawm qhov pib kom tiav thiab xaiv nws los ntawm ntau pua microservices. Tsis tas li ntawd, ntau ntawm lawv kuj muaj lawv tus kheej cov chaw cia khoom, uas tuaj yeem ua rau muaj qhov yuam kev, nrog rau cov teeb meem ntawm kev ua haujlwm thiab kev ua txhaum cai.

Netramesh - lub teeb yuag kev pab cuam mesh tov

Kuv tau nrhiav ntev ntev rau ib lub cuab yeej uas yuav pab daws cov teeb meem zoo li no (Kuv tau sau txog qhov no ntawm HabrΓ©: 1, 2), tab sis thaum kawg kuv ua kuv tus kheej qhib qhov kev daws teeb meem. Hauv tsab xov xwm no kuv tham txog cov txiaj ntsig ntawm kev pabcuam mesh mus kom ze thiab qhia txog cov cuab yeej tshiab rau nws qhov kev siv.

Distributed tracing yog ib qho kev daws teeb meem rau cov teeb meem ntawm kev nrhiav qhov yuam kev hauv kev faib khoom. Tab sis yuav ua li cas yog tias txoj hauv kev no los khaws cov ntaub ntawv hais txog kev sib cuam tshuam hauv lub network tseem tsis tau ua tiav hauv qhov system, lossis, qhov phem dua, hauv ib feem ntawm qhov system nws twb ua haujlwm zoo, tab sis ib feem nws tsis ua, vim nws tsis tau muab ntxiv rau cov kev pabcuam qub. ? Txhawm rau txiav txim siab lub hauv paus ntsiab lus ntawm qhov teeb meem, nws yog ib qho tsim nyog yuav tsum muaj daim duab tiav ntawm qhov tshwm sim hauv qhov system. Nws yog ib qho tseem ceeb tshwj xeeb kom nkag siab txog qhov twg microservices koom nrog hauv txoj kev lag luam tseem ceeb.

Ntawm no cov kev pabcuam mesh tuaj yeem tuaj rau peb cov kev pabcuam, uas yuav cuam tshuam nrog txhua lub tshuab rau kev sau cov ntaub ntawv network ntawm qib qis dua cov kev pabcuam lawv tus kheej ua haujlwm. Txoj hauv kev no tso cai rau peb cuam tshuam tag nrho cov tsheb khiav thiab txheeb xyuas nws ntawm ya. Ntxiv mus, cov ntawv thov tsis tas yuav paub dab tsi txog nws.

Service mesh mus kom ze

Lub tswv yim tseem ceeb ntawm kev pabcuam mesh mus kom ze yog ntxiv lwm txheej txheej txheej txheej hauv lub network, uas yuav tso cai rau peb ua txhua yam nrog kev pabcuam kev sib tshuam. Feem ntau cov kev ua haujlwm ua haujlwm raws li hauv qab no: ib lub thawv ntim ntxiv nrog lub npe pob tshab yog ntxiv rau txhua qhov kev pabcuam microservice, uas dhau los ntawm tag nrho cov kev pabcuam nkag mus thiab tawm. Thiab qhov no yog qhov chaw uas peb tuaj yeem ua cov neeg siv khoom sib npaug, siv cov cai tswj kev nyab xeeb, txwv kev txwv rau tus naj npawb ntawm kev thov thiab sau cov ntaub ntawv tseem ceeb ntawm kev sib cuam tshuam ntawm cov kev pabcuam hauv kev tsim khoom.

Netramesh - lub teeb yuag kev pab cuam mesh tov

Lub ntsiab

Muaj twb muaj ntau yam kev siv ntawm txoj kev no: Istio ΠΈ linkerd 2. Lawv muab ntau yam nta tawm ntawm lub thawv. Tab sis tib lub sijhawm, muaj nyiaj siv ua haujlwm loj ntawm cov peev txheej. Tsis tas li ntawd, qhov loj dua cov pawg hauv qhov kev ua haujlwm zoo li no, yuav tsum muaj peev txheej ntxiv los tswj cov txheej txheem tshiab. Ntawm Avito, peb ua haujlwm kubernetes pawg uas muaj ntau txhiab qhov kev pabcuam (thiab lawv cov lej txuas ntxiv nce nrawm). Hauv nws qhov kev siv tam sim no, Istio siv ~ 300Mb ntawm RAM ib qho piv txwv. Vim muaj coob tus muaj peev xwm, pob tshab ntsuas kuj muaj feem xyuam rau tag nrho lub sij hawm teb cov kev pab cuam (txog 10ms).

Yog li ntawd, peb tau saib raws nraim li cov peev txheej uas peb xav tau tam sim no, thiab txiav txim siab tias qhov laj thawj tseem ceeb vim li cas peb pib siv cov kev daws teeb meem no yog lub peev xwm los sau cov ntaub ntawv taug qab los ntawm tag nrho cov txheej txheem pob tshab. Peb kuj xav kom muaj kev tswj hwm kev sib cuam tshuam ntawm cov kev pabcuam thiab ua ntau yam kev siv nrog cov headers uas tau pauv ntawm cov kev pabcuam.

Yog li ntawd, peb tuaj rau peb qhov kev txiav txim siab:β€Š Netramesh.

Netramesh

Netramesh yog ib lub teeb yuag kev pab cuam mesh tov nrog lub peev xwm mus teev infinitely, tsis hais tus naj npawb ntawm cov kev pab cuam nyob rau hauv lub system.

Lub hom phiaj tseem ceeb ntawm cov kev daws teeb meem tshiab yog cov peev txheej tsawg thiab kev ua haujlwm siab. Ntawm cov yam ntxwv tseem ceeb, peb tam sim ntawd xav kom muaj peev xwm ua kom pom tseeb xa cov tracing spans mus rau peb cov kab ke Jaeger.

Niaj hnub no, feem ntau cov kev daws teeb meem huab tau siv hauv Golang. Thiab, tau kawg, muaj laj thawj rau qhov no. Sau cov ntawv thov network hauv Golang uas ua haujlwm asynchronously nrog I / O thiab nplai hla cov cores raws li xav tau yog qhov yooj yim thiab yooj yim heev. Thiab, dab tsi tseem ceeb heev, kev ua tau zoo txaus los daws qhov teeb meem no. Yog li ntawd peb kuj xaiv Golang.

Tsim tau

Peb tau tsom mus rau peb cov kev siv zog kom ua tiav cov khoom tsim tau siab tshaj plaws. Rau cov kev daws teeb meem uas tau muab tso rau ib sab ntawm txhua qhov piv txwv ntawm kev pabcuam, kev siv me me ntawm RAM thiab CPU sijhawm yuav tsum tau ua. Thiab, tau kawg, cov lus teb qeeb yuav tsum me me.

Cia peb saib seb peb tau txais dab tsi.

RAM

Netramesh siv ~ 10Mb yam tsis muaj tsheb khiav thiab 50Mb siab tshaj plaws nrog rau kev thauj khoom mus txog 10000 RPS ib qho piv txwv.

Istio envoy proxy ib txwm siv ~ 300Mb hauv peb pawg nrog ntau txhiab zaus. Qhov no tsis tso cai rau nws scaled rau tag nrho pawg.

Netramesh - lub teeb yuag kev pab cuam mesh tov

Netramesh - lub teeb yuag kev pab cuam mesh tov

Nrog Netramesh peb tau txais ~ 10x txo qis hauv kev nco noj.

CPU

Kev siv CPU kuj sib npaug hauv qab load. Nws nyob ntawm tus naj npawb ntawm kev thov rau ib chav tsev ntawm lub sijhawm rau lub sidecar. Tus nqi ntawm 3000 thov ib ob ntawm lub ncov:

Netramesh - lub teeb yuag kev pab cuam mesh tov

Netramesh - lub teeb yuag kev pab cuam mesh tov

Muaj ib qho tseem ceeb ntxiv: Netramesh - kev daws teeb meem tsis muaj lub dav hlau tswj thiab tsis muaj kev thauj khoom tsis haus CPU sijhawm. Nrog Istio, sidecars ib txwm hloov kho cov kev pabcuam kawg. Yog li ntawd, peb tuaj yeem pom daim duab no yam tsis muaj kev thauj khoom:

Netramesh - lub teeb yuag kev pab cuam mesh tov

Peb siv HTTP/1 rau kev sib txuas lus ntawm cov kev pabcuam. Qhov nce hauv lub sijhawm teb rau Istio thaum tso npe los ntawm tus neeg sawv cev tau nce mus txog 5-10ms, uas yog ntau heev rau cov kev pabcuam uas tau npaj los teb hauv millisecond. Nrog Netramesh lub sijhawm no tau txo qis rau 0.5-2ms.

Scalability

Qhov me me ntawm cov peev txheej siv los ntawm txhua tus neeg sawv cev ua rau nws muaj peev xwm muab nws tso rau ntawm txhua qhov kev pabcuam. Netramesh tau txhob txwm tsim yam tsis muaj lub dav hlau tswj kom yooj yim kom txhua lub tsheb sib tw. Feem ntau hauv cov kev daws teeb meem mesh, lub dav hlau tswj tau faib cov ntaub ntawv nrhiav kev pabcuam rau txhua lub tsheb. Nrog rau nws los txog cov ntaub ntawv hais txog lub sijhawm teem sijhawm thiab ntsuas qhov ntsuas. Tag nrho cov no tso cai rau koj ua ntau yam tseem ceeb, tab sis, hmoov tsis, nws bloats sidecars loj.

Kev pab nrhiav pom

Netramesh - lub teeb yuag kev pab cuam mesh tov

Netramesh tsis ntxiv cov txheej txheem ntxiv rau kev pabcuam nrhiav pom. Tag nrho cov tsheb khiav yog proxied pob tshab los ntawm netra sidecar.

Netramesh txhawb HTTP / 1 daim ntawv thov raws tu qauv. Txhawm rau txhais nws, ib daim ntawv teev cov chaw nres nkoj tau siv tau. Feem ntau, lub kaw lus muaj ntau qhov chaw nres nkoj los ntawm kev sib txuas lus HTTP tshwm sim. Piv txwv li, peb siv 80, 8890, 8080 rau kev sib cuam tshuam ntawm cov kev pabcuam thiab kev thov sab nraud.Qhov no, lawv tuaj yeem tsim siv qhov sib txawv ntawm ib puag ncig. NETRA_HTTP_PORTS.

Yog tias koj siv Kubernetes ua tus kws tshaj lij thiab nws qhov chaw pabcuam kev pabcuam rau kev sib txuas lus hauv pawg ntawm cov kev pabcuam, ces lub tshuab tseem zoo ib yam. Ua ntej, microservice tau txais kev pabcuam IP chaw nyob siv kube-dns thiab qhib kev sib txuas tshiab rau nws. Qhov kev sib txuas no yog thawj zaug tsim nrog lub zos netra-sidecar thiab tag nrho cov pob TCP pib tuaj txog ntawm netra. Tom ntej no, netra-sidecar tsim kev sib txuas nrog rau qhov chaw qub. NAT ntawm pod IP ntawm lub node tseem zoo ib yam li tsis muaj netra.

Distributed tracing thiab cov ntsiab lus xa mus

Netramesh muab cov kev ua haujlwm uas xav tau los xa cov kev sib kis txog HTTP kev sib cuam tshuam. Netra-sidecar txheeb xyuas HTTP raws tu qauv, ntsuas kev thov qeeb, thiab rho tawm cov ntaub ntawv tsim nyog los ntawm HTTP headers. Thaum kawg, peb tau txais tag nrho cov cim hauv ib qho Jaeger system. Rau kev teeb tsa zoo-grained, koj tuaj yeem siv cov kev hloov pauv ib puag ncig muab los ntawm lub tsev qiv ntawv raug cai mus Library.

Netramesh - lub teeb yuag kev pab cuam mesh tov

Netramesh - lub teeb yuag kev pab cuam mesh tov

Tab sis muaj teeb meem. Txog thaum cov kev pabcuam tsim thiab xa ib qho tshwj xeeb uber header, peb yuav tsis pom kev sib txuas tracing spans hauv lub system. Thiab qhov no yog qhov peb yuav tsum ceev nrooj nrhiav qhov ua rau muaj teeb meem. Ntawm no dua Netramesh muaj kev daws teeb meem. Proxies nyeem HTTP headers thiab, yog tias lawv tsis muaj uber trace id, tsim ib qho. Netramesh tseem khaws cov ntaub ntawv hais txog kev thov nkag thiab tawm hauv lub tsheb thauj khoom thiab sib tw rau lawv los ntawm kev txhawb nqa lawv nrog cov ntawv thov tawm uas tsim nyog. Txhua yam koj yuav tau ua nyob rau hauv cov kev pab cuam yog xa ib tug header xwb X-Request-Id, uas tuaj yeem teeb tsa siv ib puag ncig hloov pauv NETRA_HTTP_REQUEST_ID_HEADER_NAME. Txhawm rau tswj qhov loj ntawm cov ntsiab lus hauv Netramesh, koj tuaj yeem teeb tsa qhov chaw ib puag ncig hauv qab no: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (lub sijhawm uas cov ntsiab lus yuav muab khaws cia) thiab NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (ntau zaus ntawm kev ntxuav cov ntsiab lus).

Nws kuj tseem tuaj yeem ua ke ntau txoj hauv kev ntawm koj lub cev los ntawm kev kos lawv nrog rau kev sib tham tshwj xeeb token. Netra tso cai rau koj los nruab HTTP_HEADER_TAG_MAP tig HTTP headers rau hauv cov ntawv sib txuas sib txuas. Qhov no tuaj yeem pab tau tshwj xeeb rau kev sim. Tom qab dhau qhov kev sim ua haujlwm, koj tuaj yeem pom qhov twg ntawm lub kaw lus tau cuam tshuam los ntawm kev lim los ntawm qhov sib tham sib tham.

Kev txiav txim siab qhov thov

Txhawm rau txiav txim siab seb qhov kev thov tuaj ntawm qhov twg, koj tuaj yeem siv qhov kev ua haujlwm ntawm kev cia li ntxiv ib lub taub hau nrog lub hauv paus. Siv ib puag ncig hloov pauv NETRA_HTTP_X_SOURCE_HEADER_NAME Koj tuaj yeem hais qhia lub npe header uas yuav raug muab nruab. Los ntawm kev siv NETRA_HTTP_X_SOURCE_VALUE koj tuaj yeem teeb tsa tus nqi uas X-Source header yuav raug teeb tsa rau txhua qhov kev thov tawm.

Qhov no tso cai rau kev faib tawm ntawm qhov tseem ceeb header no tau muab faib ua tib yam thoob plaws hauv lub network. Tom qab ntawd koj tuaj yeem siv nws hauv cov kev pabcuam thiab ntxiv rau cov cav thiab ntsuas.

Traffic routing thiab Netramesh internals

Netramesh muaj ob lub ntsiab lus tseem ceeb. Thawj, netra-init, teeb tsa cov cai hauv network los cuam tshuam cov tsheb. Nws siv iptables redirect cov cai txhawm rau cuam tshuam tag nrho lossis ib feem ntawm kev khiav tsheb ntawm lub tsheb, uas yog qhov tseem ceeb thib ob ntawm Netramesh. Koj tuaj yeem teeb tsa cov chaw nres nkoj twg yuav tsum tau cuam tshuam rau kev nkag thiab tawm TCP ntu: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Cov cuab yeej kuj muaj ib qho kev nthuav feature - probabilistic routing. Yog tias koj siv Netramesh tshwj xeeb rau kev sau cov tracing spans, tom qab ntawd hauv qhov chaw tsim khoom koj tuaj yeem txuag tau cov peev txheej thiab ua kom muaj kev cuam tshuam txog kev siv cov hloov pauv. NETRA_INBOUND_PROBABILITY ΠΈ NETRA_OUTBOUND_PROBABILITY (los ntawm 0 mus rau 1). Tus nqi pib yog 1 (tag nrho cov tsheb thauj mus los tau cuam tshuam).

Tom qab kev cuam tshuam zoo, netra sidecar lees txais qhov kev sib txuas tshiab thiab siv SO_ORIGINAL_DST qhov (socket) xaiv kom tau qhov chaw qub. Netra tom qab ntawd qhib qhov kev sib txuas tshiab rau tus thawj IP chaw nyob thiab tsim kev sib txuas lus TCP ob tog ntawm ob tog, mloog tag nrho cov tsheb thauj mus los. Yog tias qhov chaw nres nkoj tau txhais raws li HTTP, Netra sim parse thiab taug qab nws. Yog tias HTTP parsing ua tsis tiav, Netra poob rov qab rau TCP thiab pob tshab proxies cov bytes.

Tsim ib daim duab dependency

Tom qab tau txais ntau cov ntaub ntawv taug qab hauv Jaeger, kuv xav kom tau txais daim duab ua tiav ntawm kev sib cuam tshuam hauv qhov system. Tab sis yog tias koj lub kaw lus yog loaded heev thiab billions ntawm tracing spans nyob rau hauv ib hnub, aggregating lawv yuav tsis xws li ib tug yooj yim txoj hauj lwm. Muaj ib txoj hauv kev los ua qhov no: spark-dependencies. Txawm li cas los xij, nws yuav siv sij hawm ntau teev los tsim cov duab tiav thiab yuav yuam kom koj rub tawm tag nrho cov ntaub ntawv los ntawm Jaeger rau XNUMX teev dhau los.

Yog tias koj siv Elasticsearch los khaws cov tracing spans, koj tuaj yeem siv Golang siv yooj yim, uas yuav tsim tib daim duab hauv feeb siv cov yam ntxwv thiab muaj peev xwm ntawm Elasticsearch.

Netramesh - lub teeb yuag kev pab cuam mesh tov

Yuav siv Netramesh li cas

Netra tuaj yeem yooj yim ntxiv rau txhua qhov kev pabcuam uas khiav ib tus kws qhia ntawv. Koj tuaj yeem pom ib qho piv txwv S, SΡ“S,.

Tam sim no, Netra tsis muaj peev xwm los txiav txim siab siv cov tsheb thauj mus los rau cov kev pabcuam, tab sis muaj cov kev npaj rau kev siv.

Lub neej yav tom ntej ntawm Netramesh

lub hom phiaj tseem ceeb Netramesh yog kom ua tiav cov peev txheej tsawg kawg nkaus thiab kev ua haujlwm siab, muab cov peev txheej yooj yim rau kev soj ntsuam thiab tswj kev sib txuas lus ntawm kev pabcuam.

Nyob rau hauv lub neej yav tom ntej, Netramesh yuav txhawb nqa lwm daim ntawv thov txheej txheej txheem dua li HTTP. L7 routing yuav muaj nyob rau yav tom ntej.

Siv Netramesh yog tias koj ntsib teeb meem zoo sib xws thiab sau ntawv rau peb nrog cov lus nug thiab cov lus qhia.

Tau qhov twg los: www.hab.com

Ntxiv ib saib