Pred kratkim smo začeli z majhnim projektom, da bi razčistili, kako deli naših sistemov komunicirajo v zakulisju pri Bufferju. Nekaj hitrega konteksta: uporabljamo nekaj, kar se imenuje SQS (Amazon Simple Queue Service. Te čakalne vrste delujejo kot čakalnice za opravila. En del našega sistema odloži sporočilo, drugi pa ga prevzame pozneje. Pomislite na to, kot da bi pustili sporočilo sodelavcu: "Hej, ko boš imel priložnost, obdelaj te podatke." Sistem, ki pošlje note ni treba čakati na odgovor. Naš projekt je bil izvajanje rutinskega vzdrževanja: posodobitev orodij, ki jih uporabljamo za lokalno testiranje čakalnih vrst, in čiščenje njihove konfiguracije. Toda medtem ko smo načrtovali, katere čakalne vrste dejansko uporabljamo, smo našli nekaj, česar nismo pričakovali: sedem različnih procesov v ozadju (ali opravil cron, ki so načrtovana opravila, ki se izvajajo samodejno) in delavcev, ki so tiho delovali do pet let. Vsi niso delali popolnoma nič Tukaj je, zakaj je to pomembno, kako smo jih našli in kaj smo storili glede tega. Zakaj je to pomembnejše, kot bi si mislili. Da, vodenje nepotrebne infrastrukture stane denar in za enega od teh delavcev bi plačali približno 360–600 USD v 5 letih. trdijo, da so finančni stroški pravzaprav najmanjši del težave. Vsakič, ko se novi inženir pridruži našim sistemom, naleti na te skrivnostne procese. "Kaj dela ta delavec?" postane vprašanje, ki požre čas za pripravo na program. Vsi smo bili tam - strmeli smo v delček kode in se ga bali dotakniti. Tudi "pozabljena" infrastruktura občasno potrebuje pozornost posodobitve, popravki odvisnosti, ko se kaj drugega spremeni. To je pripeljalo do tega, da je naša ekipa porabila cikle vzdrževanja na poteh kode, ki niso služile namenu. In sčasoma je bilo to kritično? Ali je bil to začasen popravek, ki je zapustil podjetje pred leti. Kako se to sploh zgodi? Resnica je, da se to zgodi naravno Dolgoživ sistem. Funkcija je zastarela, vendar opravilo v ozadju, ki ga je podpiralo, še naprej deluje. Nekdo "začasno" zažene delavca, ki opravi selitev, in načrtovano opravilo po arhitekturni spremembi ne postane odveč, vendar nihče ne pomisli, da bi to preveril. V Bufferju smo pošiljali e-poštna sporočila za praznovanje. Da bi to naredili, smo zagnali načrtovano opravilo, ki je preverilo celotno bazo podatkov rojstni dnevi, ki se ujemajo s trenutnim datumom, in strankam poslali prilagojeno e-pošto. Med refaktorjem leta 2020 smo zamenjali naše orodje za transakcijsko e-pošto, vendar smo pozabili odstraniti tega delavca – delovalo je še pet let. Nič od tega ni napaka posameznikov – brez namernega čiščenja, ki je vgrajeno v naše delo, zmaga entropija. gibanje mikrostoritev (priljubljen pristop, pri katerem podjetja razdelijo svojo kodo na številne majhne, neodvisne storitve) pred leti. Naš monolit smo razdelili na ločene storitve, od katerih ima vsaka svoje repozitorij, cevovod za uvajanje in infrastrukturo. Takrat je bilo smiselno: vsako storitev je bilo mogoče uvesti samostojno, z jasnimi mejami med ekipami. Toda z leti smo ugotovili, da so režijski stroški upravljanja na desetine repozitorijev odtehtali koristi za. Skupina naše velikosti. Storitve še vedno obstajajo kot logične meje. Izkazalo se je, da je to tisto, kar je omogočilo odkritje. Pozabljenega delavca v enem skladišču morda nikoli ne bodo opazili inženirji, ki delajo v drugem. Ni enotnega mesta za iskanje imen čakalne vrste Z vsem v enem repozitoriju smo lahko končno videli vsako čakalno vrsto do njenih potrošnikov in proizvajalcev. Lahko smo opazili čakalne vrste pri proizvajalcih. Lahko smo našli delavce, ki se sklicujejo na čakalne vrste, ki ne obstajajo več.odkritje skoraj neizogibno. Kaj smo pravzaprav storili. Ko smo identificirali osirotel proces, smo se morali odločiti, kaj bomo z njimi. Evo, kako smo se tega lotili. Najprej smo vsakemu izsledili njegov izvor. Prebrskali smo zgodovino gita in staro dokumentacijo, da bi razumeli, zakaj je bil vsak delavec sploh ustvarjen. V večini primerov je bil prvotni namen jasen: enkratna selitev podatkov, funkcija, ki je prenehala delovati, začasna rešitev, ki je preživela svojo uporabnost. Nato smo potrdili, da so bile resnično neuporabljene. Preden smo kar koli odstranili, smo dodali beleženje, da preverimo, ali ti procesi tiho počnejo nekaj pomembnega, kar smo zamudili. Nekaj ​​dni smo spremljali, da bi se prepričali, da sploh niso bili poklicani, in smo jih postopoma odstranili. Nismo izbrisali vsega naenkrat. Procese smo odstranili enega za drugim in opazovali morebitne nepričakovane stranske učinke. (Na srečo jih ni bilo.) Končno smo dokumentirali, kar smo se naučili. Našim notranjim dokumentom smo dodali opombe o tem, kaj je posamezen proces prvotno naredil in zakaj je bil odstranjen, da se bodoči inženirji ne bi spraševali, če je kaj pomembnega izginilo. Kaj se je spremenilo po čiščenju. Še vedno smo na začetku merjenja celotnega učinka, toda to je tisto, kar smo videli do zdaj. Naš inventar infrastrukture je zdaj točen. Ko nekdo vpraša: "Katere delavce vodimo?" na to vprašanje lahko dejansko odgovorimo z zaupanjem. Tudi pogovori o uvajanju so postali enostavnejši. Novi inženirji ne naletijo na skrivnostne procese in se ne sprašujejo, ali jim manjka kontekst. Baza kode odraža to, kar dejansko počnemo, in ne tistega, kar smo počeli pred petimi leti. Refaktorje obravnavajte kot arheologijo in preventivo. Moj največji zaključek tega projekta: vsak pomemben refaktor je priložnost za arheologijo. Ko ste globoko v sistemu in resnično razumete, kako se deli povezujejo, ste v popolnem položaju, da se sprašujete, kaj je še potrebno. Tista čakalna vrsta iz nekega starega projekta? Delavec, ki ga je nekdo ustvaril za enkratno selitev podatkov? Načrtovano opravilo, ki se sklicuje na funkcijo, za katero še niste slišali? Morda se še vedno izvajajo. Tukaj je tisto, kar vgrajujemo v naš proces naprej: med kakršnim koli refaktorjem se vprašajte: kaj se še dotika tega sistema, česar že nekaj časa nismo pogledali? Ko funkcijo opuščamo, ji sledite vse do procesov v ozadju, ne le do kode, ki je namenjena uporabniku. Ko nekdo zapusti ekipo, dokumentirajte, za kaj je bil zadolžen, zlasti stvari, ki se izvajajo v ozadju. Še vedno imamo starejše dele našega kodno zbirko, ki še ni bila preseljena v eno samo skladišče. Ko nadaljujemo s konsolidacijo, smo prepričani, da bomo našli več teh skritih relikvij. Toda zdaj smo pripravljeni, da jih ujamemo in preprečimo nastanek novih. Ko je vsa vaša koda na enem mestu, se osirotela infrastruktura nima kam skriti.

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