Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст

Рӯзҳои таътил ба охир расиданд ва мо бо паёми дуюми худ дар силсилаи Istio Service Mesh бармегардем.

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст

Мавзӯи имрӯза Circuit Breaker аст, ки ба забони русӣ баргардонидашуда маънои «шиканка»-ро дорад, ба истилоҳи маъмулӣ - «шиканка». Факат дар Истио-ма ин машина контури кутох-шуда ё аз хад зиёд пурбор не, балки зарфхои вайроншударо аз он чудо мекунад.

Чӣ тавр ин бояд ба таври идеалӣ кор кунад

Вақте ки хидматрасониҳои хурд аз ҷониби Kubernetes идора карда мешаванд, масалан, дар доираи платформаи OpenShift, онҳо вобаста ба сарборӣ ба таври худкор миқёси боло ва паст мекунанд. Азбаски хидматҳои микросервисҳо дар қаҳваҳо кор мекунанд, метавонанд дар як нуқтаи ниҳоӣ якчанд мисолҳои микросервиси контейнерӣ дошта бошанд ва Kubernetes дархостҳоро роҳнамоӣ мекунад ва тавозуни байни онҳоро бор мекунад. Ва - идеалӣ - ҳамаи ин бояд комилан кор кунад.

Мо дар хотир дорем, ки микросервисҳо хурд ва муваққатӣ мебошанд. Эфемерӣ, ки дар ин ҷо маънои осонии зуҳур ва нопадидшавиро дорад, аксар вақт нодида гирифта мешавад. Таваллуд ва марги як мисоли дигари хидматрасонии микросервис дар подк чизҳои хеле интизорраванда мебошанд, OpenShift ва Kubernetes ин корро хуб ҳал мекунанд ва ҳама чиз хуб кор мекунад - аммо боз ҳам дар назария.

Чӣ тавр он дар ҳақиқат кор мекунад

Акнун тасаввур кунед, ки як мисоли мушаххаси хидматрасонии микросервис, яъне контейнер, корношоям шудааст: ё он ҷавоб намедиҳад (хатои 503), ё он чизе, ки нохуштар аст, он ҷавоб медиҳад, аммо хеле суст. Ба ибораи дигар, он нофаҳмо мегардад ё ба дархостҳо ҷавоб намедиҳад, аммо он ба таври худкор аз ҳавз хориҷ карда намешавад. Дар ин ҳолат чӣ бояд кард? Барои дубора кӯшиш кардан? Оё ман бояд онро аз нақшаи масир хориҷ кунам? Ва "хеле суст" чӣ маъно дорад - ин рақам чанд аст ва онҳоро кӣ муайян мекунад? Шояд танҳо як танаффус диҳед ва баъдтар бори дигар кӯшиш кунед? Агар ҳа, пас чӣ қадар баъдтар?

Ejection Pool дар Истио чист?

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

Бо истифода аз стратегияи муайянкунии бартариятҳо, Istio қуттиҳои каҷро, ки аз хат берунанд, муайян мекунад ва онҳоро аз ҳавзи захиравӣ барои муддати муайян, ки равзанаи хоб номида мешавад, хориҷ мекунад.

Барои нишон додани он, ки ин дар Кубернетес дар платформаи OpenShift чӣ гуна кор мекунад, биёед бо скриншоти хидматрасониҳои маъмулан коркунанда аз мисоли репозиторий оғоз кунем. Намоишҳои таҳиягари Red Hat. Дар ин ҷо мо ду pods, v1 ва v2 дорем, ки ҳар яки онҳо як контейнер доранд. Вақте ки қоидаҳои масири Istio истифода намешаванд, Kubernetes ба таври пешфарз масири баробар мутавозиншудаи давриро муқаррар мекунад:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст

Омодагӣ ба садама

Пеш аз анҷом додани Ejection Pool, шумо бояд қоидаи масири Istio эҷод кунед. Фарз мекунем, ки мо мехоҳем дархостҳоро дар байни подкҳо дар таносуби 50/50 тақсим кунем. Илова бар ин, мо шумораи контейнерҳои v2-ро аз як то ду афзоиш медиҳем, ба монанди:

oc scale deployment recommendation-v2 --replicas=2 -n tutorial

Ҳоло мо қоидаи масирро муқаррар кардем, то трафик дар байни подкҳо бо таносуби 50/50 тақсим карда шавад.

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Ин аст, ки натиҷаи ин қоида чӣ гуна аст:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Шумо айбро дар он ёфтан мумкин аст, ки ин экран на 50/50, балки 14:9 аст, аммо бо мурури замон вазъият беҳтар мешавад.

Сохтани хато

Акнун биёед яке аз ду контейнери v2-ро ғайрифаъол кунем, то ки мо як контейнери солим v1, як контейнери v2 солим ва як контейнери v2 хато дошта бошем:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст

Ислоҳи хато

Ҳамин тавр, мо як контейнери нодуруст дорем ва вақти баровардани ҳавз расидааст. Бо истифода аз конфигуратсияи хеле содда, мо ин контейнери нокомро аз ҳама гуна нақшаҳои масир барои 15 сония хориҷ хоҳем кард, то он ба ҳолати солим бармегардад (ё аз нав оғоз кунед ё корашро барқарор кунед). Ин конфигуратсия ва натиҷаҳои кори он чунин аст:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Тавре ки шумо мебинед, контейнери ноком v2 дигар барои дархостҳои масир истифода намешавад, зеро он аз ҳавз хориҷ карда шудааст. Аммо пас аз 15 сония он ба таври худкор ба ҳавз бармегардад. Дар асл, мо танҳо нишон додем, ки Pool Ejection чӣ гуна кор мекунад.

Биёед ба сохтмони меъморӣ шурӯъ кунем

Ejection Pool, дар якҷоягӣ бо қобилиятҳои мониторинги Istio, ба шумо имкон медиҳад, ки ба сохтани чаҳорчӯба барои ба таври худкор иваз кардани контейнерҳои вайроншуда оғоз кунед, то вақти бекорӣ ва нокомиро кам кунад, агар бартараф накунад.

NASA як шиори баланд дорад - Нокомӣ имкон нест, ки муаллифи он директори парвоз ҳисобида мешавад. Ген Кранз. Онро ба забони русӣ метавон ҳамчун "Номаъфарӣ нест" тарҷума кард ва дар ин ҷо маънои онро дорад, ки агар шумо иродаи кофӣ дошта бошед, ҳама чизро кор кардан мумкин аст. Аммо, дар ҳаёти воқеӣ, нокомиҳо на танҳо рӯй медиҳанд, онҳо дар ҳама ҷо ва дар ҳама чиз ногузиранд. Ва чӣ гуна бояд бо онҳо дар мавриди микросервисҳо мубориза бурд? Ба фикри мо, беҳтар аст, ки на ба ирода, балки ба имкониятҳои контейнерҳо, Кубернитель, RedHat OpenShiftва Истио.

Истио, чунон ки мо дар боло навишта будем, концепцияи рахнаку-нандахоро, ки дар олами физикй хуб исбот кардааст, ба амал мебарорад. Ва ҳамон тавре, ки ноқилҳои барқӣ қисмати мушкилии схемаро хомӯш мекунад, нармафзори Istio Circuit Breaker алоқаро байни ҷараёни дархостҳо ва контейнери мушкилотро мекушояд, вақте ки дар нуқтаи ниҳоӣ чизе нодуруст аст, масалан, вақте ки сервер суқут кард ё ба кор шурӯъ кард оҳиста шав.

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

Дар назария

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

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Дар ин чо кайд кардан зарур аст, ки хамаи ин дар сатхи, гуем, меъмории система ба амал меояд. Ҳамин тавр, дар баъзе лаҳзаҳо ба шумо лозим меояд, ки барномаҳои худро барои кор бо Circuit Breaker омӯзед, ба монанди пешниҳоди арзиши пешфарз дар посух ё агар имконпазир бошад, мавҷудияти хидматро нодида гиред. Барои ин намунаи сарпӯш истифода мешавад, аммо он аз доираи ин мақола берун аст.

Дар амал

Масалан, мо ду версияи микросервиси тавсиявии худро дар OpenShift иҷро мекунем. Версияи 1 хуб кор хоҳад кард, аммо дар v2 мо барои тақлид кардани сустшавӣ дар сервер ба таъхир месозем. Барои дидани натиҷаҳо, асбобро истифода баред муҳосира:

siege -r 2 -c 20 -v customer-tutorial.$(minishift ip).nip.io

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Ба назар чунин мерасад, ки ҳама чиз кор мекунад, аммо ба кадом арзиш? Дар назари аввал, мо 100% мавҷудият дорем, аммо бодиққат нигоҳ кунед - давомнокии максималии транзаксия то 12 сония аст. Ин бешубха монеа аст ва онро вусъат додан лозим аст.

Барои ин, мо Истио-ро барои нест кардани зангҳо ба контейнерҳои суст истифода мебарем. Ин аст он чизест, ки конфигуратсияи мувофиқ бо истифода аз Circuit Breaker:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст
Сатри охирин бо параметри httpMaxRequestsPerConnection сигнал медиҳад, ки пайвастшавӣ бо он бояд ҳангоми кӯшиши эҷоди пайвасти дигар - дуюм - ба ғайр аз пайвасти мавҷуда қатъ карда шавад. Азбаски контейнери мо хидмати сустро тақлид мекунад, чунин ҳолатҳо давра ба давра ба вуҷуд меоянд ва баъд Истио хатои 503-ро бармегардонад, аммо ин аст он чизе ки муҳосира нишон медиҳад:

Истиобуркунандаи барқ: ғайрифаъол кардани контейнерҳои нодуруст

Хуб, мо Circuit Breaker дорем, оянда чӣ мешавад?

Ҳамин тавр, мо қатъи автоматиро бидуни даст нарасондан ба рамзи сарчашмаи худи хидматҳо амалӣ кардем. Бо истифода аз Circuit Breaker ва тартиби Ejection Pool Ejection, ки дар боло тавсиф шудааст, мо метавонем контейнерҳои тормозиро аз ҳавзи захиравӣ то ба ҳолати муқаррарӣ баргаштан хориҷ кунем ва ҳолати онҳоро бо басомади муайян тафтиш кунем - дар мисоли мо, ин ду дақиқа аст (параметри хоби Window).

Дар хотир доред, ки қобилияти барнома барои посух додан ба хатои 503 ҳанӯз дар сатҳи коди манбаъ муқаррар карда мешавад. Вобаста ба вазъият стратегияҳои зиёде барои истифодаи Circuit Breaker мавҷуданд.

Дар паёми навбатӣ: Мо дар бораи пайгирӣ ва мониторинге, ки аллакай дарунсохт ё ба осонӣ ба Istio илова карда шудааст, инчунин чӣ гуна ба таври қасдан ворид кардани хатогиҳо ба система сӯҳбат хоҳем кард.

Манбаъ: will.com

Илова Эзоҳ