Monorepositooreid: palun, see on vajalik

Monorepositooreid: palun, see on vajalik

Artikli tĂ”lge on ette valmistatud kursuse ĂŒliĂ”pilaste jaoks «DevOps praktikad ja tööriistad» OTUS hariduse projektis.

Te peate valima monorepo, kuna see soodustab teie meeskondades lÀbipaistvust ja kollektiivset vastutust, eriti meeskondade kasvu korral. Igal juhul peate investeerima tööriistadesse, kuid alati on parem, kui vaikimisi kÀitumine on see, mida soovite oma meeskondades nÀha.

Miks me sellest rÀÀgime?

Matt Klein kirjutas artikli «Monorepos: Palun Ă€rge tehke seda!»  (tĂ”lkija mĂ€rkuseks: tĂ”lge Habr's) «Monorepos: palun Ă€rge tehke seda»). Mulle meeldib Matt, ma arvan, et ta on vĂ€ga tark ja te peaksite lugema tema seisukohta. Alguses avaldas ta Twitteris kĂŒsitluse:

Monorepositooreid: palun, see on vajalik

TÔlge:
Selle uusaasta pĂ€eva puhul kavatsen vaielda, kui absurdne on monoreposid kasutada. 2019. aasta algas mĂ€rkamatult. Sellega seoses pakun teile kĂŒsitluse. Kes on suured fĂ€nnid? Pooldajad:
— Monorepo
— Rustis
— Vale kĂŒsitlus / mĂ”lemad

Minu vastus oli: «Ma olen sisuliselt mĂ”lemad need inimesed». Selle asemel, et rÀÀkida, kui uimastav on Rust, vaatame, miks ma arvan, et ta eksib monoreposide osas. Natuke enda kohta. Olen Chef Software'i tehniline direktor. Meil on umbes 100 inseneri, koodibaas, mis on umbes 11–12 aastat vana, ja 4 peamist toodet. Osad sellest koodist asuvad polirepos (minu algne positsioon), osad monorepos (minu praegune positsioon).

Enne kui hakkan: iga argument, mida siin esitlen, kehtib mĂ”lema tĂŒĂŒbi hoidlate kohta. Minu arvates ei ole tehnilisi pĂ”hjuseid, miks peaksite valima ĂŒhte tĂŒĂŒpi hoidla ĂŒle teise. Saate mistahes lĂ€henemist tööle panna. Olen valmis sellest rÀÀkima, kuid mind ei huvita kunstlikud tehnilised pĂ”hjused, miks ĂŒks ĂŒletab teist.

Ma nÔustun Matti seisukoha esimese osaga:

Sest suurel skaalal lahendab monorepo kĂ”ik need samad probleemid, mida lahendab ka polirepo, kuid samal ajal provotseerib teid oma koodi tugevale sidususele ja nĂ”uab uskumatuid jĂ”upingutusi teie versioonihaldus sĂŒsteemi skaleeritavuse suurendamiseks.

Teil peate lahendama samu probleeme, olgu te valikuks monoreposiitor vÔi poli-reposiitor. Kuidas te vÀljalaskeid vÀlja annate? Milline on teie lÀhenemine uuendustele? Tagasipöördumine? Projekti vahelised sÔltuvused? Millised arhitektuurilised stiilid on vastuvÔetavad? Kuidas te haldate oma ehitus- ja testimisstruktuuri? Loend on lÔpmatu. Ja te peate neid kÔiki lahendama, kui kasvate. Tasuta juustu ei ole.

Ma arvan, et Matti argument sarnaneb paljude inseneride (ja juhtide) vaadete kohale, keda ma austan. See tuleb inseneri perspektiivist, kes töötab komponendi kallal, vÔi meeskonna perspektiivist, mis töötab komponendi kallal. Te kuulete selliseid asju nagu:

  • Koodibaas on mahukas — mulle ei ole kogu see kraam vajalik.
  • Seda on keerulisem testida, kuna pean kontrollima kogu seda kraami, mis mulle ei ole vajalik.
  • Keerulisem on töötada vĂ€liste sĂ”ltuvustega.
  • Mul on vaja oma versioonihaldussĂŒsteeme.

Ilmselt on kĂ”ik need punktid pĂ”hjendatud. See toimub mĂ”lemas olukorras — poli-reposiitoris on mul oma kraam, peale selle, mida on vaja ehitamiseks
 VĂ”ib-olla pean veel rohkemat kraami. SeetĂ”ttu loon "lihtsalt" tööriistu, mis teevad kogu projekti lahti. VĂ”i loon vale monoreposiitori alamsubmodulitega. Me vĂ”iksime sellega terve pĂ€eva ringi kĂ€ia. Kuid ma arvan, et Matti argument jĂ€tab tĂ€helepanuta peamise pĂ”hjuse, mida ma tĂ”eliselt muutsin monoreposiitori kasuks:

See provotseerib suhtlemist ja nÀitab probleeme.

Kui me jagame repod, loome de facto koordineerimise ja lÀbipaistvuse probleemi. See vastab sellele, kuidas me mÔtleme meeskondadele (eriti sellele, kuidas eraldi liikmed neid mÔistavad): me vastutame teatud komponendi eest. Me töötame suhtelises isolatsioonis. Piirid on fikseeritud minu meeskonna ja komponendi (-de) vahel, millega me töötame.

Kui arhitektuur muutub keerulisemaks, ei saa ĂŒks meeskond enam ĂŒksi sellega hakkama. Ainult vĂ€ga vĂ€hesed insenerid suudavad kogu sĂŒsteemi oma peas hoida. Oletame, et te haldate ĂŒhiseid komponente A, mida kasutavad meeskonnad B, C ja D. Meeskond A viib lĂ€bi refaktoreerimise, parendab API-d ning muudab sisemise teostuse. Selle tulemusena on muudatused tagasisidekĂ”lbmatud. Millist nĂ”u annate?

  • Leia kĂ”ik kohad, kus kasutatakse vana API-d.
  • Kas on kohti, kus uut API-d ei saa kasutada?
  • Kas saate parandada ja testida teisi komponente, et veenduda, et need ei purune?
  • Kas need meeskonnad saavad teie muudatusi kohe kontrollida?

Pange tĂ€hele, et need kĂŒsimused ei sĂ”ltu hoidla tĂŒĂŒbist. Teil on vaja leida meeskonnad B, C ja D. Te peate nendega rÀÀkima, vĂ€lja selgitama nende ajakava ja prioriteedid. Loodame, et teete seda.

Tegelikult ei taha keegi sellega tegeleda. See on palju vĂ€hem pĂ”nev kui lihtsalt kuradi API parandamine. KĂ”ik see on inimese ja keeruline. PolĂŒhoidlas saate lihtsalt muudatusi teha, lasta need ĂŒle vaadata neil, kes selle komponendi kallal töötavad (tĂ”enĂ€oliselt mitte B, C vĂ”i D), ja edasi liikuda. Meeskonnad B, C ja D saavad hetkel jÀÀda oma praegusele versioonile. Nad uuendavad, kui nad teie geniaalsust tunnustavad!

Monorepois nihkub vastutus vaikimisi. Meeskond A muudab oma komponenti ja kui nad ei ole ettevaatlikud, rikuvad nad kohe B, C ja D. See toob kaasa selle, et B, C ja D ilmuvad A uksele ja imestavad, miks meeskond A rikkus koostamist. See Ă”petab A-le, et nad ei saa minu ĂŒlaltoodud loendit vahele jĂ€tta. Nad peavad rÀÀkima, millest nad kavatsevad teha. Kas B, C ja D saavad edasi liikuda? Mis siis, kui B ja C saavad, kuid D on tihedalt seotud vana algoritmi kĂŒlgefektidega?

Siis peame rÀÀkima sellest, kuidas me olukorrast vÀlja pÀÀseme:

  1. Toetage mitut sisemist API-d, samal ajal kui vana algoritm on mÀrgistatud aegunuks, kuni D suudab selle kasutamise lÔpetada.
  2. Toetage mitut versiooni, ĂŒks vanadele liidesele, teine uuele.
  3. Kasutage muudatuste A vÀljaandmiseks viivitust kuni hetkeni, mil B, C ja D saavad selle koos vastu vÔtta.

Oletame, et valisime 1, mitu API-d. Sel juhul on meil kaks tĂŒkki koodi. Vanem ja uuem. See on mĂ”nes olukorras ĂŒsna mugav. Tagastame vanema koodi, mĂ€rgime selle kasutusest kĂ”rvaldatuks (deprecated) ja kooskĂ”lastame selle eemaldamise ajakava meeskonnaga D. Sisuliselt on see sama nii poli kui ka monoreposiidi puhul.

Mitme versiooni vabastamiseks meil on vajalik haru. NĂŒĂŒd on meil kaks komponenti — A1 ja A2. Meeskonnad B ja C kasutavad A2, samas kui D kasutab A1. Me vajame, et iga komponent oleks vabastamiseks valmis, kuna enne kui D saab edasi liikuda, vĂ”ivad olla vajalikud turvauuendused ja teiste tĂ”rgete parandused. Polireposiitides saame selle peita pikaajalisse harusse, mis toimib hĂ€sti. Monorepositories sunnime me koodi loomist uues moodulis. Meeskond D peab endiselt tegema muudatusi „vana“ komponendi osas. KĂ”ik saavad nĂ€ha hinda, mida me siin maksame — meil on nĂŒĂŒd kaks korda rohkem koodi ja kĂ”ik parandused, mis rakendatakse A1 ja A2-le, peavad olema rakendatud ka mĂ”lemale. Harudega töötamise lĂ€henemisega polireposiitides on see peidetud cherry-pick'i alla. Peame hinda madalamaks, kuna seal ei ole dubleerimist. Praktikas on hind sama: peate looma, vabastama ja toetama kahte, pĂ”himĂ”tteliselt identset koodibaasi, kuni suudate ĂŒhe neist eemaldada. Erinevus on see, et monoreposiis tagab, et see valu on otsene ja nĂ€htav. See on veel hullem ja see on hea.

LĂ”puks oleme jĂ”udnud kolmanda punktini. VĂ€ljalaske tĂ€htaeg. On vĂ”imalik, et A poolt tehtud muudatused parandavad A tiimi tööd. Oluline, aga mitte kiire. Kas me saame lihtsalt oodata? PolĂŒrepoositooriumis suuname seda artefakti kindlakstegemise suunas. Loomulikult rÀÀgime sellest D tiimile. Lihtsalt jÀÀge vana versiooni juurde, kuni catch-up teete! See valmistab ette mĂ€ngu kartlikuks. A tiim töötab endiselt oma komponendi kallal, ignoreerides fakti, et D tiim kasutab ĂŒha aegumatumat versiooni (see on D tiimi probleem, nad on lollid). Samal ajal rÀÀgib D tiim halvasti A tiimi kohatu suhtumise ĂŒle koodi stabiilsusesse, kui nad sellest ĂŒldse rÀÀgivad. Kuu jooksul möödub. LĂ”puks otsustavad D tiim vaadata uuendamise vĂ”imalust, aga A-s on muudatusi ainult juurde tulnud. A tiim ei mĂ€leta peaaegu, millal ja kuidas nad D-t lĂ”hkusid. Uuendamine on valusam ja vĂ”tab rohkem aega. Mis tĂ”ukab selle allapoole prioriteetide jĂ€rjestust. Kuni pĂ€eva, mil meil tekib A-s turvaprobleem, mis sunnib meid haru tegema. A tiim peab tagasi minema ajas, leidma hetke, mil D oli stabiilne, parandama seal probleemi ja valmistama selle vĂ€ljalaskeks. See on de-fakto valik, mille inimesed teevad, ja see on kindlasti halvim. See tundub olevat hea nii A tiimi kui ka D jaoks, kuni me saame ĂŒksteist ignoreerida.

Monorepositoorses kolmas ei ole tĂ”eliselt variant. Sa pead toimetulema olukorraga kahest viisist. Sa pead nĂ€gema kahe vĂ€ljalaske haru pidamise kulusid. Õppima end kaitsma tagasipöördumisuuenduste vastu. Aga kĂ”ige tĂ€htsam: sa ei pÀÀse keerulisest vestlusest.

Minu kogemuse pĂ”hjal, kui tiimid kasvavad, kaob vĂ”ime hoida kogu sĂŒsteemi meeles, ja see on kĂ”ige olulisem osa. Pead parandama vastuolude nĂ€htavust sĂŒsteemis. Pead aktiivselt töötama, et sundida tiime oma komponente vaatamast eemale ning vaatama teiste tiimide ja tarbijate tööd.

Jah, te saate luua tööriistu, mis pĂŒĂŒavad probleemset polirepositooriumi lahendada. Kuid minu kogemus pideva tarnimise ja automatiseerimise alal suurtes ettevĂ”tetes ĂŒtleb mulle jĂ€rgmist: vaikimisi kĂ€itumine ilma tĂ€iendavate tööriistadeta on see, mida te eeldate nĂ€gevat. Polirepositooriumi vaikimisi kĂ€itumine on isoleerimine, see on kogu mĂ”te. Monorepositooriumi vaikimisi kĂ€itumine on ĂŒhine vastutus ja lĂ€bipaistvus, see on kogu mĂ”te. MĂ”lemal juhul kavatse ma luua tööriista, mis aitab teravaid nurki siluda. Juhtkonnana valin ma alati monorepositooriumi, sest tööriistad peaksid tugevdama kultuuri, mida ma soovin, ja kultuur tuleneb pisikestest otsustest ja meeskonna igapĂ€evasest tööst.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kes on suurimad fanaatikud? Toetajad:

  • Monorepo

  • Rustis

  • Vale kĂŒsitlus / mĂ”lemad

33 kasutajat hÀÀletasid. 13 kasutajat hoidusid.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster