Наскоро започнахме малък проект, за да изчистим как части от нашите системи комуникират зад кулисите в 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