Anastasija Abrašitova je svoju karijeru započela kao C# developer, a sada Head of Repository Tools u kompaniji Yandex vodi šest timova. Odgovorna je za Arcadia mono-repo sistem koji u sebi sadrži kodove iz svih Yandex projekata. U razgovoru sa WebMind portalom, Anastasija priča o benefitima I izazovima koji dolaze sa korišćenjem mono-repo sistema, i otkriva kako Yandex upravlja timovima i kodovima koji funkcionišu u okviru ove velike kodne baze.
Intervju sa Anastasijom Abrašitovom
- Možete li da nam opišete složenost kodne baze i izazove sa kojima se suočavate u upravljanju mono-repo sistemom pod nazivom „Arcadia“?
Arcadia predstavlja mono-repo sistem, odnosno veliku kodnu bazu koja sadrži nezavisne projekte. Pošto je Yandex izuzetno razvijena kompanija koja posluje čak 26 godina, baza kodova kojom upravljamo na dnevnom nivou obrađuje više od 10Tb podataka u bazi ili 240Gb podataka koji se nalaze u trenutnoj reviziji.
Ne postoje otvoreni izvori niti komercijalni alati koji mogu da rukuju tako velikom bazom. Kompanije koje su dovoljno velike uglavnom razvijaju sopstvene alate, a što upravo i mi radimo. Imamo sopstveni sistem kontrole zasnovan na virtuelnom sistemu datoteka, pod nazivom Arc. Takođe, imamo web portal za programere za preglede kodova, CI/CD rezultate, kao i pretragu koda, a pored toga razvijamo dodatke za popularne IDE-ove kako bi naši programeri mogli da ih koriste zajedno sa sistemom Arcadia.
- Koji su bili glavni motivi iza odluke da se usvoji mono-repo arhitektura? Kakve ste benefite primetili pri korišćenju objedinjene baze kodova?
Mono-repo vam pruža tri glavne prednosti:
- Ponovnu upotrebu koda – ne želimo da naši programeri napišu kod koji je već napisan. Upravo zbog toga imamo za cilj da doprinesemo tehnološkom razvoju usled međusobnog deljenja znanja i konstantne primene novih informacija.
- Deljenje znanja – imamo izvanredne programere i želimo da kroz razmenu iskustava postanu još bolji. Arcadia omogućava svima da pogledaju kodove drugih projekata, i da doprinesu zajedničkim komponentama kao i da traže određeni deo koda. Svakog dana 58 odsto naših programera koristi pretragu kodova na webu.
- Neprestano ažuriranje kodova i izbegavanje neovlašćenih promena – pošto su naši projekti kompleksni i često u okviru njih ponovo koristimo već postojeće kodove, važno je da budemo sigurni da se dalji rad razvija na poslednjoj verziji koda. Mono-repo sistem nam omogućavaju da to i postignemo. Takođe, u okviru Arcadia sistema koristimo i CI program kako bismo osigurali da svaka nadogradnja kodova bude ispravna.
- Kako upravljate različitim kodovima ali i timovima koji rade u okviru sistema Arcadia?
Kao što sam prethodno spomenula, ponovna upotreba koda nam je ključna. Samim tim je neophodno da postoji uzajamno razumevanje i dobra saradnja između različitih timova. Za to imamo tri pravila:
- U sklopu svakog projekta postoji testiranje kodova. Važno je da programeri mogu da se oslone na testove koji im pružaju osećaj sigurnosti da sve ispravno funkcioniše dok su rezultati zeleni. Ukoliko dolazi do greške, a svi testovi projekta pokazuju uspeh, neophodno je da se radi na poboljšanju kodova. Upravo zbog toga je naš CI za skladištenje podataka zaista ogroman, jer vršimo više od milijardu testiranja dnevno.
- Svako može da pristupi bazi kodova sve dok su njihovi testovi zeleni. Na ovaj način kada nešto unesete u zajednički deo koda, možete biti sasvim sigurni da je sve pod kontrolom. Ukoliko su pojedini testovi neuspešni, odgovornost programera je da primeti i popravi kod kako bi na taj način i doprineo daljem razvoju sistema.
- Timovi mogu davati recenzije kodovima kada je to potrebno. U redu je ako želite da ocenite promene koje vaše kolege unose u kod za koji ste odgovorni, samo je važno da budete brzi radi efikasnijeg procesa.
- Možete li da navedete primere na koji način je Arcadia olakšala ponovnu upotrebu koda i poboljšala saradnju među programerima?
Pre svega, imamo mnogo zajedničkih kodova koji su razvijeni na internoj bazi. To mogu biti uslužne funkcije, komponente otvorenog koda, biblioteke i klijenti za rad sa našim infrastrukturnim sistemima kao što su YDB ili YTSaurus. Svi se oni dele i masovno ponovo koriste, dok je 44 odsto koda u našim projektima deljeni kod.
Takođe, promovišemo deljenje kodova između projekata. Ponekad naši timovi imaju zaista sofisticiran kod koji nije široko potreban u projektima, tako da ne bi trebalo da ide na deljene komponente, ali ga neke kolege mogu ponovo koristiti da li kroz planere i složeno šifrovanje i time uštedeti vreme.
- Održavanje stabilnog i pouzdanog sistema kao što je mono-repo je ključno. Na koji način pristupate testiranju i osiguravanju kvaliteta kako biste sačuvali integritet baze koda?
Trudimo se da temeljno testiramo naše alate za skladištenje pre nego što ih izdamo, inače bismo rizikovali da izgubimo kod naših programera pa čak i da pokvarimo bazu. Imamo jedinične i end-to-end testove ali i stabilna okruženja gde se nove verzije testiraju pre nego što budu objavljene. Pored toga interno vršimo i beta testiranje, kako bismo osigurali stabilan proizvod. Posedujemo mehanizme koji nam pomažu da se vratimo na prethodna izdanja ali i rezervne kopije celog spremišta i pregleda stanja naših alata u slučaju da nešto krene naopako. Srećom, nikada nismo morali da ih koristimo poslednjih godina.
Najvažnije, trudimo se da koristimo najbolje SRE prakse. Naši backendovi su geografski raspoređeni i horizontalno skalabilni, saobraćaj često prolazi kroz balansere, dok se podaci čuvaju u visoko pouzdanom YDB skladištu.
- Da li postoje određene lekcije ili najbolje prakse koje biste želeli da podelite sa drugim programerima koji razmatraju rad sa mono-repo sistemima velikih razmera?
Postoje dva zlatna pravila za uspešan rad na mono-repo sistemu: neophodno je da koriste alate koji odgovaraju njihovoj skali, odnosno veštinama ali i da imaju konstantnu saradnju sa drugim timovima. Ponekad programeri infrastrukture ulažu sav svoj trud u alate i zaborave na organizacionu kulturu. Na taj način dobijate veliko skladište nepovezanog koda, umesto dobrog mono-repo sistema. Zato je važno da kao programer, ali i mi kao kompanija promovišemo ponovnu upotrebu koda, deljenje znanja i uzajamno poverenje.