Netramesh - ҳалли торҳои хидматрасонии сабук

Вақте ки мо аз як барномаи монолитӣ ба меъмории хидматрасонии хурд мегузарем, мо бо мушкилоти нав рӯ ба рӯ мешавем.

Дар як барномаи монолитӣ, одатан муайян кардани он, ки хато дар кадом қисми система рух додааст, хеле осон аст. Эҳтимол, мушкилот дар коди худи монолит ё дар пойгоҳи додаҳо аст. Аммо вақте ки мо ба ҷустуҷӯи мушкилот дар меъмории микросервис оғоз мекунем, ҳама чиз дигар он қадар равшан нест. Мо бояд тамоми роҳеро, ки дархост аз аввал то ба охир гирифта буд, пайдо кунем ва онро аз садҳо хидматрасонии хурд интихоб кунем. Гузашта аз ин, бисёре аз онҳо инчунин дорои анборҳои нигаҳдории худро доранд, ки метавонанд боиси хатогиҳои мантиқӣ, инчунин мушкилот бо кор ва таҳаммулпазирии хатогиҳо шаванд.

Netramesh - ҳалли торҳои хидматрасонии сабук

Ман муддати тӯлонӣ дар ҷустуҷӯи асбобе будам, ки дар мубориза бо чунин мушкилот кӯмак мекунад (ман дар ин бора дар Ҳабре навишта будам: 1, 2), аммо дар ниҳоят ман ҳалли манбаи кушодаи худро сохтам. Дар ин мақола ман дар бораи бартариҳои равиши хидматрасонӣ сӯҳбат мекунам ва як воситаи навро барои татбиқи он мубодила мекунам.

Пайгирии тақсимшуда роҳи ҳалли маъмули мушкилоти дарёфти хатогиҳо дар системаҳои тақсимшуда мебошад. Аммо чӣ мешавад, ки агар ин равиш барои ҷамъоварии маълумот дар бораи ҳамкории шабакавӣ ҳанӯз дар система татбиқ нашуда бошад, ё бадтараш, дар як қисми система он аллакай дуруст кор мекунад, аммо қисман кор намекунад, зеро он ба хидматҳои кӯҳна илова карда нашудааст. ? Барои муайян кардани сабабҳои аслии мушкилот, тасаввуроти пурраи он чизе, ки дар система рӯй медиҳад, зарур аст. Фаҳмидани он, ки кадом хидматҳои микросервисҳо дар роҳҳои калидии муҳими тиҷорат иштирок мекунанд, махсусан муҳим аст.

Дар ин ҷо равиши шабакаи хидматрасонӣ метавонад ба кӯмаки мо расад, ки бо тамоми техникаи ҷамъоварии иттилооти шабакавӣ дар сатҳи пасттар аз хидматҳои худи онҳо кор мекунад. Ин равиш ба мо имкон медиҳад, ки тамоми трафикро пешгирӣ кунем ва онро дар парвоз таҳлил кунем. Гузашта аз ин, барномаҳо ҳатто набояд дар бораи он чизе донанд.

Равиши шабакаи хидматрасонӣ

Идеяи асосии равиши шабакаи хидматрасонӣ ин илова кардани қабати дигари инфрасохторӣ дар шабака мебошад, ки ба мо имкон медиҳад, ки ҳама корҳоро бо ҳамкории байнихизматрасонӣ иҷро кунем. Аксари татбиқҳо ба таври зерин кор мекунанд: ба ҳар як микросервис як контейнери иловагӣ бо прокси шаффоф илова карда мешавад, ки тавассути он тамоми трафики воридотӣ ва содиротии хидмат мегузарад. Ва ин маҳз ҷойест, ки мо метавонем мувозинати муштариёнро анҷом диҳем, сиёсати амниятро татбиқ кунем, ба шумораи дархостҳо маҳдудият ҷорӣ кунем ва маълумоти муҳимро дар бораи ҳамкории хидматрасонӣ дар истеҳсолот ҷамъоварӣ кунем.

Netramesh - ҳалли торҳои хидматрасонии сабук

Қарорҳо

Якчанд амалисозии ин равиш аллакай вуҷуд дорад: Истио и пайвандак 2. Онҳо бисёр хусусиятҳои берун аз қуттӣ таъмин. Аммо дар баробари ин ба ресурсхо харочоти калон ба амал меояд. Гузашта аз ин, кластере, ки дар он чунин система фаъолият мекунад, ҳар қадар калонтар бошад, барои нигоҳдории инфрасохтори нав ҳамон қадар захираҳои бештар талаб карда мешаванд. Дар Avito, мо кластерҳои кубернетҳоро идора мекунем, ки дорои ҳазорҳо мисолҳои хидматӣ мебошанд (ва шумораи онҳо босуръат меафзояд). Дар татбиқи кунунии худ, Istio барои як мисоли хидматӣ ~ 300 Мб хотираи оперативӣ истеъмол мекунад. Аз сабаби шумораи зиёди имкониятҳо, мувозинати шаффоф инчунин ба вақти вокуниши умумии хидматҳо (то 10 мс) таъсир мерасонад.

Дар натиҷа, мо маҳз ба кадом қобилиятҳое, ки ба мо лозим аст, дида баромадем ва қарор додем, ки сабаби асосии оғози татбиқи чунин қарорҳо қобилияти ҷамъоварии иттилооти пайгирӣ аз тамоми система шаффоф аст. Мо инчунин мехостем, ки таъсири мутақобилаи хидматҳоро назорат кунем ва бо сарлавҳаҳое, ки байни хидматҳо интиқол дода мешаванд, амалҳои гуногун анҷом диҳем.

Дар натиҷа мо ба қарори худ омадем:  Нетрамеш.

Нетрамеш

Нетрамеш як ҳалли сабуки хидматрасонӣ бо қобилияти васеъ кардани миқёси беохир, новобаста аз шумораи хидматҳо дар система мебошад.

Ҳадафҳои асосии ҳалли нав ками захираҳои изофӣ ва самаранокии баланд буданд. Дар байни хусусиятҳои асосӣ, мо фавран мехостем, ки ба системаи Jaeger фосилаҳои пайгирӣ шаффоф фиристем.

Имрӯз, аксари қарорҳои абрӣ дар Голанг амалӣ карда мешаванд. Ва, албатта, ин сабабхо дорад. Навиштани замимаҳои шабакавӣ дар Голанг, ки асинхронӣ бо I/O кор мекунанд ва миқёси ядроҳо дар ҳолати зарурӣ қулай ва хеле содда аст. Ва он чизе, ки хеле муҳим аст, иҷроиш барои ҳалли ин мушкилот кофӣ аст. Барои ҳамин мо ҳам Голангро интихоб кардем.

Маҳсулнокӣ

Мо чидду чахди худро ба он равона кардаем, ки хосилнокии максималй ба даст оварда шавад. Барои ҳалли он, ки дар паҳлӯи ҳар як мисоли хидмат ҷойгир шудааст, истеъмоли ками RAM ва вақти CPU лозим аст. Ва, албатта, таъхири посух низ бояд хурд бошад.

Биёед бубинем, ки мо чӣ гуна натиҷаҳоро ба даст овардем.

RAM

Netramesh бидуни трафик ~ 10 Мб ва ҳадди аксар 50 Мб бо сарбории то 10000 RPS дар як мисол истеъмол мекунад.

Прокси фиристодаи Истио ҳамеша дар кластерҳои мо бо ҳазорҳо мисол ~ 300 Мб истеъмол мекунад. Ин имкон намедиҳад, ки он ба тамоми кластер васеъ карда шавад.

Netramesh - ҳалли торҳои хидматрасонии сабук

Netramesh - ҳалли торҳои хидматрасонии сабук

Бо Netramesh мо истеъмоли хотираро ~ 10 маротиба кам кардем.

ВПМ - Воҳиди Пардозиши Марказӣ

Истифодаи CPU дар зери сарборӣ нисбатан баробар аст. Он аз шумораи дархостҳо дар як воҳиди вақт ба вагон вобаста аст. Арзишҳо дар 3000 дархост дар як сония дар авҷи:

Netramesh - ҳалли торҳои хидматрасонии сабук

Netramesh - ҳалли торҳои хидматрасонии сабук

Боз як нуқтаи муҳим вуҷуд дорад: Netramesh - ҳалли бе ҳавопаймои идоракунӣ ва бе сарборӣ вақти CPU-ро сарф намекунад. Бо Istio, мошинҳои канорӣ ҳамеша нуқтаҳои хидматрасониро нав мекунанд. Дар натиҷа, мо метавонем ин расмро бидуни сарборӣ бубинем:

Netramesh - ҳалли торҳои хидматрасонии сабук

Мо HTTP/1-ро барои иртибот байни хидматҳо истифода мебарем. Афзоиши вақти вокуниш барои Истио ҳангоми прокси тавассути фиристодан то 5-10 мс буд, ки барои хидматҳое, ки дар як миллисония омодаанд, хеле зиёданд. Бо Netramesh ин вақт то 0.5-2ms кам шудааст.

Миқёспазирӣ

Миқдори ками захираҳое, ки ҳар як прокси истеъмол мекунад, имкон медиҳад, ки он дар паҳлӯи ҳар як хидмат ҷойгир карда шавад. Netramesh қасдан бидуни ҷузъҳои ҳавопаймои идоракунӣ сохта шудааст, то ҳар як вагон сабукрав нигоҳ дорад. Аксар вақт дар ҳалли торҳои хидматӣ, ҳавопаймои идоракунӣ маълумоти кашфи хидматро ба ҳар як вагон паҳн мекунад. Дар баробари он маълумот дар бораи мӯҳлатҳо ва танзимоти мувозинат меояд. Ҳамаи ин ба шумо имкон медиҳад, ки бисёр чизҳои муфидро иҷро кунед, аммо, мутаассифона, он ба андозаи он варақаҳои канорӣ меафтад.

Кашфи хидмат

Netramesh - ҳалли торҳои хидматрасонии сабук

Netramesh ягон механизми иловагӣ барои кашфи хидмат илова намекунад. Ҳама трафик ба таври шаффоф тавассути netra sidecar прокси карда мешавад.

Netramesh протоколи барномаи HTTP/1-ро дастгирӣ мекунад. Барои муайян кардани он, рӯйхати танзимшавандаи портҳо истифода мешавад. Одатан, система якчанд портҳо дорад, ки тавассути онҳо иртиботи HTTP сурат мегирад. Масалан, мо 80, 8890, 8080-ро барои ҳамкорӣ байни хидматҳо ва дархостҳои беруна истифода мебарем. Дар ин ҳолат онҳо метавонанд бо истифода аз тағирёбандаи муҳити зист муқаррар карда шаванд. NETRA_HTTP_PORTS.

Агар шумо Kubernetes-ро ҳамчун оркестр ва механизми хидматрасонии он барои иртиботи дохили кластерӣ байни хидматҳо истифода баред, механизм комилан ҳамон боқӣ мемонад. Аввалан, микросервис бо истифода аз kube-dns суроғаи IP-и хидматрасониро ба даст меорад ва ба он пайвасти нав мекушояд. Ин пайваст аввал бо netra-sidecar маҳаллӣ муқаррар карда мешавад ва ҳамаи бастаҳои TCP аввал ба netra меоянд. Баъдан, netra-sidecar бо макони аслии таъинот робита барқарор мекунад. NAT дар pod IP дар гиреҳ маҳз ҳамон тавре ки бидуни netra боқӣ мемонад.

Пайгирии тақсимшуда ва интиқоли контекст

Netramesh функсионалии заруриро барои фиристодани фосилаҳои пайгирӣ дар бораи ҳамкории HTTP таъмин мекунад. Netra-sidecar протоколи HTTP-ро таҳлил мекунад, таъхирҳои дархостро чен мекунад ва маълумоти заруриро аз сарлавҳаҳои HTTP мегирад. Дар ниҳоят, мо ҳама пайраҳаҳоро дар як системаи ягонаи Jaeger ба даст меорем. Барои конфигуратсияи дақиқ, шумо инчунин метавонед тағирёбандаҳои муҳити аз ҷониби китобхонаи расмӣ пешниҳодшударо истифода баред jaeger go китобхона.

Netramesh - ҳалли торҳои хидматрасонии сабук

Netramesh - ҳалли торҳои хидматрасонии сабук

Аммо як мушкилот вуҷуд дорад. То он даме, ки хидматҳо сарлавҳаи махсуси uber тавлид ва ирсол накунанд, мо дар система фосилаҳои пайгирии пайвастшударо намебинем. Ва ин аст, ки мо бояд сабаби мушкилотро зуд пайдо кунем. Дар ин ҷо боз Netramesh ҳалли худро дорад. Проксиҳо сарлавҳаҳои HTTP-ро мехонанд ва агар онҳо ID trace uber надошта бошанд, як тавлид кунед. Netramesh инчунин маълумотро дар бораи дархостҳои воридотӣ ва содиротӣ дар як варақ нигоҳ медорад ва онҳоро бо ғанӣ гардонидани онҳо бо сарлавҳаҳои дархости содиротӣ мувофиқ мекунад. Ба шумо танҳо дар хидматҳо лозим аст, ки танҳо як сарлавҳа фиристед X-Request-Id, ки онро бо истифода аз тағирёбандаи муҳити зист танзим кардан мумкин аст NETRA_HTTP_REQUEST_ID_HEADER_NAME. Барои назорат кардани андозаи контекст дар Netramesh, шумо метавонед тағирёбандаҳои муҳити зеринро танзим кунед: NETRA_TRACING_CONTEXT_EXPIRATION_MILLISECONDS (вақте, ки барои он контекст нигоҳ дошта мешавад) ва NETRA_TRACING_CONTEXT_CLEANUP_INTERVAL (басомади тозакунии контекст).

Инчунин мумкин аст, ки якчанд роҳҳоро дар системаи шумо бо нишон додани онҳо бо аломати сессияи махсус якҷоя кунед. Netra ба шумо имкон медиҳад, ки насб кунед HTTP_HEADER_TAG_MAP барои табдил додани сарлавҳаҳои HTTP ба барчаспҳои мувофиқи пайгирӣ. Ин метавонад махсусан барои санҷиш муфид бошад. Пас аз гузаштани санҷиши функсионалӣ, шумо метавонед бубинед, ки кадом қисми система тавассути филтркунӣ бо калиди мувофиқи сессия таъсир кардааст.

Муайян кардани манбаи дархост

Барои муайян кардани он, ки дархост аз куҷо омадааст, шумо метавонед аз функсияи ба таври худкор илова кардани сарлавҳа бо манбаъ истифода баред. Истифодаи тағирёбандаи муҳити зист NETRA_HTTP_X_SOURCE_HEADER_NAME Шумо метавонед номи сарлавҳаеро муайян кунед, ки ба таври худкор насб карда мешавад. Бо истифода NETRA_HTTP_X_SOURCE_VALUE шумо метавонед арзишеро, ки сарлавҳаи X-Source барои ҳама дархостҳои содиротӣ муқаррар карда мешавад, таъин кунед.

Ин имкон медиҳад, ки тақсимоти ин сарлавҳаи муфид дар тамоми шабака яксон тақсим карда шавад. Пас шумо метавонед онро дар хидматҳо истифода баред ва онро ба гузоришҳо ва ченакҳо илова кунед.

Масири трафик ва дохилии Netramesh

Netramesh аз ду ҷузъи асосӣ иборат аст. Якум, netra-init, қоидаҳои шабакаро барои боздоштани трафик муқаррар мекунад. Ӯ истифода мебарад қоидаҳои масири iptables барои боздоштани ҳама ё як қисми трафик дар канори мошин, ки ҷузъи дуюми асосии Netramesh мебошад. Шумо метавонед танзим кунед, ки кадом портҳо барои сессияҳои воридотӣ ва содиротии TCP боздошта шаванд: INBOUND_INTERCEPT_PORTS, OUTBOUND_INTERCEPT_PORTS.

Восита инчунин як хусусияти ҷолиб дорад - масири эҳтимолӣ. Агар шумо Netramesh-ро танҳо барои ҷамъоварии фосилаҳои пайгирӣ истифода баред, пас дар муҳити истеҳсолӣ шумо метавонед захираҳоро сарфа кунед ва масири эҳтимолиро бо истифода аз тағирёбандаҳо фаъол созед NETRA_INBOUND_PROBABILITY и NETRA_OUTBOUND_PROBABILITY (аз 0 то 1). Арзиши пешфарз 1 аст (тамоми трафик боздошта мешавад).

Пас аз боздоштани бомуваффақият, netra sidecar пайвасти навро қабул мекунад ва истифода мебарад SO_ORIGINAL_DST имконоти розетка барои ба даст овардани таъиноти аслӣ. Сипас Netra пайвасти навро ба суроғаи аслии IP мекушояд ва иртиботи дуҷонибаи TCP-ро байни тарафҳо муқаррар мекунад ва тамоми трафики аз тариқи он гузаштаро гӯш мекунад. Агар порт ҳамчун HTTP муайян карда шавад, Netra кӯшиш мекунад, ки онро таҳлил ва пайгирӣ кунад. Агар таҳлили HTTP ноком шавад, Netra ба TCP бармегардад ва байтҳоро шаффоф прокси мекунад.

Сохтани графики вобастагӣ

Пас аз гирифтани миқдори зиёди иттилооти пайгирӣ дар Jaeger, ман мехоҳам як графики мукаммали мутақобила дар система гирам. Аммо агар системаи шумо хеле пурбор бошад ва дар як рӯз миллиардҳо фосилаҳои пайгирӣ ҷамъ шаванд, ҷамъ овардани онҳо кори осон нест. Роҳи расмии ин кор вуҷуд дорад: вобастагии шарора. Бо вуҷуди ин, барои сохтани графики мукаммал соатҳо лозим мешавад ва шуморо маҷбур мекунад, ки тамоми маълумотро аз Jaeger дар давоми XNUMX соати охир зеркашӣ кунед.

Агар шумо Elasticsearch-ро барои нигоҳ доштани фосилаҳои пайгирӣ истифода баред, шумо метавонед истифода баред як барномаи оддии Golang, ки бо истифода аз хусусиятҳо ва имкониятҳои Elasticsearch ҳамон графикро дар тӯли дақиқаҳо месозад.

Netramesh - ҳалли торҳои хидматрасонии сабук

Чӣ тавр истифода бурдани Netramesh

Netraро ба осонӣ ба ҳама гуна хидмате, ки ягон оркестр идора мекунад, илова кардан мумкин аст. Шумо метавонед як мисол дид дар ин ҷо.

Дар айни замон, Netra қобилияти ба таври худкор ба хидматрасонӣ татбиқ кардани канори мошинҳоро надорад, аммо нақшаҳо барои татбиқ вуҷуд доранд.

Ояндаи Netramesh

максади асосй Нетрамеш ноил шудан ба хароҷоти ҳадди ақали захираҳо ва иҷрои баланд, таъмини қобилиятҳои асосӣ барои мушоҳида ва назорати алоқаи байнихизматӣ мебошад.

Дар оянда Netramesh ба ғайр аз HTTP протоколҳои дигари қабати барномаро дастгирӣ мекунад. Масири L7 дар ояндаи наздик дастрас хоҳад шуд.

Агар шумо бо чунин мушкилот рӯ ба рӯ шавед, Netramesh-ро истифода баред ва бо саволҳо ва пешниҳодҳо ба мо нависед.

Манбаъ: will.com

Илова Эзоҳ