Нядаўна мы пачалі невялікі праект па ачыстцы таго, як часткі нашых сістэм ўзаемадзейнічаюць за кулісамі ў Buffer. Некалькі кароткага кантэксту: мы выкарыстоўваем нешта пад назвай SQS (Amazon Simple Queue Service. Гэтыя чэргі дзейнічаюць як залы чакання для выканання заданняў. Адна частка нашай сістэмы адпраўляе паведамленне, а іншая падбірае яго пазней. Думайце пра гэта як пра тое, каб пакінуць нататку для калегі: «Гэй, калі будзе магчымасць, апрацуй гэтыя даныя». Сістэма, якая адпраўляе note не трэба чакаць адказу. Наш праект заключаўся ў выкананні планавага тэхнічнага абслугоўвання: абнаўленні інструментаў, якія мы выкарыстоўваем для лакальнага тэсціравання чэргаў, і ачыстцы іх канфігурацыі. Але пакуль мы вызначалі, якія чэргі мы насамрэч выкарыстоўваем, мы выявілі тое, чаго не чакалі: сем розных фонавых працэсаў (або заданняў cron, якія з'яўляюцца запланаванымі задачамі, якія выконваюцца аўтаматычна) і рабочых, якія працавалі бясшумна на працягу пяці гадоў. Усе яны не рабілі абсалютна нічога Вось чаму гэта важна, як мы іх знайшлі і што мы з гэтым зрабілі. Чаму гэта мае большае значэнне, чым вы думаеце. Так, запуск непатрэбнай інфраструктуры каштуе грошай, і за аднаго з гэтых работнікаў мы заплацілі б ~360-600 долараў за 5 гадоў. Гэта сціплая сума ў нашай фінансавай схеме, але, безумоўна, пустая трата для працэсу, які нічога не дае. сцвярджаюць, што фінансавыя выдаткі - гэта самая малая частка праблемы. Кожны раз, калі новы інжынер далучаецца да нашай сістэмы, ён сутыкаецца з гэтымі таямнічымі працэсамі. "Што робіць гэты работнік?" становіцца пытаннем, якое з'ядае час на ўсталёўку і стварае нявызначанасць - утаропіўшыся ў фрагмент кода, баючыся дакрануцца да яго, часам патрабуе ўвагі "забытая" інфраструктура абнаўленні, выпраўленні сумяшчальнасці. Гэта прывяло да таго, што наша каманда марнавала цыклы тэхнічнага абслугоўвання, якія не выкарыстоўвалі мэты. Ці было гэта часовае выпраўленне, якое стала пастаянным? Чалавек, які стварыў яго, пакінуў кампанію разам з ім. Як гэта адбываецца? Функцыя састарэла, але фонавая праца, якая падтрымлівала яе, працягвае працаваць. Для выканання міграцыі запланаванае заданне ніколі не становіцца лішнім, але ніхто не думае пра гэта дні нараджэння, якія адпавядаюць бягучай даце, і адправілі кліентам персаналізаваную электронную пошту. У 2020 годзе мы змянілі наш інструмент транзакцыйнай электроннай пошты, але забыліся выдаліць гэты воркер — ён працаваў яшчэ пяць гадоў. Нічога з гэтага не з'яўляецца збоем асобных людзей — гэта збой у працэсе, убудаваным у нашу працу, энтрапія перамагае. рух мікрасэрвісаў (папулярны падыход, пры якім кампаніі разбіваюць свой код на мноства невялікіх незалежных сэрвісаў). Мы падзялілі наш маналіт на асобныя сэрвісы, кожны са сваім уласным сховішчам, канвеерам разгортвання і інфраструктурай. У той час гэта мела сэнс: кожны сэрвіс можна было разгарнуць асобна, з выразнымі межамі паміж камандамі. Але на працягу многіх гадоў мы выявілі, што накладныя выдаткі на кіраванне дзесяткамі сховішчаў пераважылі карысць для нас. Такім чынам, мы аб'ядналі адзіны рэпазітар з некалькімі службамі, але яны жывуць разам. У свеце мікрасэрвісаў кожны рэпазітар - гэта асобны астравок. Інжынеры, якія працуюць у іншым, ніколі не заўважаць аднаго месца для пошуку імёнаў чаргі Калі ўсё было ў адным сховішчы, мы змаглі прасачыць кожную чаргу да яе спажыўцоў і вытворцаў, але не змаглі знайсці рабочых, якія спасылаліся на чэргі, якія больш не існавалі.Адкрыццё амаль непазбежна. Што мы на самой справе зрабілі. Пасля таго, як мы выявілі асірацелыя працэсы, нам трэба было вырашыць, што з імі рабіць. Вось як мы падышлі да гэтага. Спачатку мы прасачылі паходжанне кожнага з іх. Мы прагледзелі гісторыю git і старую дакументацыю, каб зразумець, чаму ўвогуле быў створаны кожны рабочы. У большасці выпадкаў першапачатковая мэта была зразумелая: аднаразовая міграцыя даных, функцыя, якая спынілася, часовы абыходны шлях, які перажыў сваю прыдатнасць. Потым мы пацвердзілі, што яны сапраўды не выкарыстоўваліся. Перш чым што-небудзь выдаліць, мы дадалі рэгістрацыю, каб пераканацца, што гэтыя працэсы ціха не робяць нешта важнае, што мы прапусцілі. Мы назіралі некалькі дзён, каб пераканацца, што іх наогул не выклікалі, і паступова выдалялі іх. Мы не выдалялі ўсё адразу. Мы выдалялі працэсы адзін за адным, сочачы за любымі нечаканымі пабочнымі эфектамі. (На шчасце, іх не было.) Нарэшце, мы задакументавалі тое, што даведаліся. Мы дадалі нататкі да нашых унутраных дакументаў пра тое, што першапачаткова рабіў кожны працэс і чаму ён быў выдалены, каб будучыя інжынеры не задаваліся пытаннем, калі нешта важнае прапала. Што змянілася пасля ачысткі. Мы яшчэ рана вымяраць поўнае ўздзеянне, але вось што мы бачылі да гэтага часу. Наша інвентарызацыя інфраструктуры цяпер дакладная. Калі нехта пытаецца: "Якімі рабочымі мы займаемся?" мы сапраўды можам з упэўненасцю адказаць на гэтае пытанне. Размовы аб адаптацыі таксама сталі прасцей. Новыя інжынеры не натыкаюцца на таямнічыя працэсы і не задаюцца пытаннем, ці не хапае ім кантэксту. Кодавая база адлюстроўвае тое, што мы на самой справе робім, а не тое, што мы рабілі пяць гадоў таму. Ставіцеся да рэфактараў як да археалогіі і прафілактыкі. Мой самы вялікі вынік з гэтага праекта: кожны значны рэфактаринг - гэта магчымасць для археалогіі. Калі вы глыбока ў сістэме, сапраўды разумееце, як злучаюцца часткі, вы знаходзіцеся ў ідэальным становішчы, каб задацца пытаннем, што яшчэ трэба. Тая чарга з нейкага старога праекта? Работнік, створаны кімсьці для аднаразовай міграцыі даных? Запланаванае заданне, якое спасылаецца на функцыю, пра якую вы ніколі не чулі? Магчыма, яны ўсё яшчэ працуюць. Вось што мы ўбудоўваем у наш далейшы працэс: падчас любой рэфактарынгі спытайце: што яшчэ датычыцца гэтай сістэмы, чаго мы даўно не разглядалі? Пры спыненні падтрымкі функцыі адсочвайце яе аж да яе фонавых працэсаў, а не толькі да карыстальніцкага кода. Калі хтосьці пакідае каманду, дакументуйце, за што ён адказваў, асабліва тое, што працуе ў фонавым рэжыме. У нас усё яшчэ ёсць старыя часткі нашага кодавай базы, якія яшчэ не былі перанесены ў адзіны рэпазітар. Працягваючы кансалідацыю, мы ўпэўненыя, што знойдзем больш гэтых схаваных рэліквій. Але цяпер мы гатовыя злавіць іх і прадухіліць з'яўленне новых. Калі ўвесь ваш код знаходзіцца ў адным месцы, асірацелай інфраструктуры няма дзе схавацца.

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free