Am început recent un mic proiect pentru a curăța modul în care părți ale sistemelor noastre comunică în culise la Buffer. Un context rapid: folosim ceva numit SQS (Amazon Simple Queue Service. Aceste cozi acționează ca niște săli de așteptare pentru sarcini. O parte a sistemului nostru trimite un mesaj, iar alta îl preia mai târziu. Gândiți-vă la asta ca și cum ați lăsa o notă pentru un coleg de lucru: „Hei, coleg de lucru: atunci când trimiteți un sistem.” Nota nu trebuie să aștepte un răspuns. Proiectul nostru a fost să efectuăm întreținere de rutină: să actualizăm instrumentele pe care le folosim pentru a testa cozile la nivel local și pentru a le curăța configurația. Dar, în timp ce mapam ce cozi pe care le folosim de fapt, am găsit ceva la care nu ne așteptam: șapte procese de fundal diferite (sau joburi cron, care sunt sarcini programate care rulează automat) și lucrătorii care nu rulau absolut nimic de cinci ani util. Iată de ce contează, cum i-am găsit și ce am făcut în privința asta. De ce contează asta mai mult decât ați crede Da, gestionarea infrastructurii inutile costă bani. Am făcut un calcul rapid și pentru unul dintre acești lucrători, am fi plătit ~ 360-600 USD în 5 ani. Aceasta este o sumă modestă în marele proces al finanțelor noastre. de curățare, aș argumenta că costul financiar este de fapt cea mai mică parte a problemei. De fiecare dată când un nou inginer se alătură echipei și explorează sistemele noastre, se confruntă cu aceste procese misterioase „Ce face acest lucrător devine o întrebare care consumă timpul de îmbarcare și creează incertitudine – ne-am uitat cu toții la un cod. Ocazional, o infrastructură „uitată” necesită atenție, Actualizări de securitate, probleme de dependență, remedieri de compatibilitate atunci când se schimbă altceva. Adevărul este că acest lucru se întâmplă în mod natural în orice sistem cu durată lungă de viață. O funcție devine depreciată, dar munca de fundal care a susținut-o continuă să ruleze „temporar” pentru a gestiona o migrare și nu este niciodată desființată Întreaga bază de date pentru zilele de naștere care corespunde datei curente și le-a trimis clienților un e-mail personalizat. În timpul unei refactorări în 2020, am schimbat instrumentul nostru de e-mail tranzacțional, dar am uitat să eliminăm acest lucrător - a continuat să funcționeze încă cinci ani. Nici unul dintre acestea nu sunt eșecuri ale unor persoane - sunt eșecuri de proces încorporate în modul în care lucrăm, întropia a ajutat multe companii să le câștige. Mișcarea microserviciilor (o abordare populară în care companiile își împărțeau codul în multe servicii mici, independente) cu ani în urmă. Ne-am împărțit monolitul în servicii separate, fiecare cu propriul depozit, pipeline de implementare și infrastructură. La momentul respectiv, avea sens: fiecare serviciu putea fi implementat singur, cu limite clare între echipe într-un depozit unic cu mai multe servicii. Serviciile există încă ca limite logice, dar trăiesc împreună într-un singur loc. Acesta s-a dovedit a fi ceea ce a făcut posibilă descoperirea. În lumea microserviciilor, fiecare depozit este propria sa insulă. am putut vedea în sfârșit imaginea completă. Am putut urmări fiecare coadă până la consumatorii și producătorii săi. Am putut identifica cozile cu producători, dar nu am putut găsi lucrători care nu mai existau. Consolidarea nu a fost concepută pentru a ne ajuta să găsim infrastructura zombie.descoperirea aproape inevitabilă.Ce am făcut de fapt Odată ce am identificat procesele orfane, a trebuit să decidem ce să facem cu ele. Iată cum l-am abordat. În primul rând, am urmărit fiecare dintre ele până la originea sa. Am săpat prin istoria git și documentația veche pentru a înțelege de ce fiecare lucrător a fost creat în primul rând. În cele mai multe cazuri, scopul inițial a fost clar: o migrare unică a datelor, o caracteristică care s-a apus, o soluție temporară care și-a depășit utilitatea. Apoi am confirmat că au fost cu adevărat neutilizate. Înainte de a elimina orice, am adăugat înregistrarea în jurnal pentru a verifica că aceste procese nu făceau în liniște ceva important pe care l-am ratat. Am monitorizat câteva zile pentru a ne asigura că nu au fost apelați deloc și le-am eliminat treptat. Nu am șters totul deodată. Am eliminat procesele unul câte unul, urmărind orice efecte secundare neașteptate. (Din fericire, nu au existat.) În cele din urmă, am documentat ceea ce am învățat. Am adăugat note în documentele noastre interne despre ceea ce a făcut inițial fiecare proces și de ce a fost eliminat, astfel încât viitorii ingineri să nu se întrebe dacă ceva important a dispărut. Ce s-a schimbat după curățare Suntem încă devreme în măsurarea impactului total, dar iată ce am văzut până acum. Inventarul nostru de infrastructură este acum exact. Când cineva întreabă: „Ce muncitori conducem?” De fapt, putem răspunde la această întrebare cu încredere. Conversațiile de integrare au devenit, de asemenea, mai simple. Noii ingineri nu dau peste procese misterioase și nu se întreabă dacă le lipsește contextul. Baza de cod reflectă ceea ce facem de fapt, nu ceea ce făceam acum cinci ani. Tratați refactorii ca arheologie și prevenție. Cea mai mare concluzie a mea din acest proiect: fiecare refactor semnificativ este o oportunitate pentru arheologie. Când sunteți adânc într-un sistem, înțelegând cu adevărat modul în care piesele se conectează, sunteți în poziția perfectă pentru a pune la îndoială ce mai este nevoie. Acea coadă de la vreun proiect vechi? Lucrătorul creat de cineva pentru o migrare unică a datelor? Sarcina programată care face referire la o caracteristică despre care nu ați auzit niciodată? S-ar putea să fie încă în funcțiune. Iată ce construim în procesul nostru de acum înainte: în timpul oricărei refactorări, întrebați: ce altceva afectează acest sistem pe care nu l-am privit de ceva vreme? Când renunțăm la o caracteristică, urmăriți-o până la procesele ei de fundal, nu doar codul cu care se confruntă utilizatorul. Când cineva părăsește echipa, documentați ceea ce era în fundal pe care încă le conducem, mai ales părțile pe care le conducem. bază de cod care nu a fost încă migrată la un singur depozit. Pe măsură ce continuăm consolidarea, suntem încrezători că vom găsi mai multe dintre aceste relicve ascunse. Dar acum suntem pregătiți să le prindem și să împiedicăm formarea altora noi. Când tot codul dvs. locuiește într-un singur loc, infrastructura orfană nu are unde să se ascundă.

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