Monorepożitorji: jekk jogħġbok, għandu

Monorepożitorji: jekk jogħġbok, għandu

Traduzzjoni tal-artiklu mħejjija għall-istudenti tal-kors "Prattiċi u għodod DevOps" fil-proġett edukattiv OTUS.

Għandek tagħżel monorepożitorju għaliex l-imġieba li tippromwovi fit-timijiet tiegħek hija trasparenza u responsabbiltà kondiviża, speċjalment hekk kif it-timijiet jikbru. Jew il-mod, ikollok tinvesti fl-għodda, iżda dejjem aħjar jekk l-imġieba awtomatika tkun l-imġieba li trid fil-kmandi tiegħek.

Għaliex qed nitkellmu dwar dan?

Matt Klein kiteb l-artiklu "Monorepos: Jekk jogħġbok ma tagħmilx!"  (nota tat-traduttur: traduzzjoni fuq Habré "Monorepożitorji: jekk jogħġbok ma tagħmilx"). Jogħġobni Matt, naħseb li huwa intelliġenti ħafna u għandek taqra l-opinjoni tiegħu. Oriġinarjament poġġa l-istħarriġ fuq Twitter:

Monorepożitorji: jekk jogħġbok, għandu

Traduzzjoni:
Dan l-Ewwel tas-Sena, ser nargumenta dwar kemm il-monorepożitorji huma redikoli. L-2019 bdiet bil-kwiet. Fl-ispirtu ta’ dan, noffrilek stħarriġ. Min huma l-fanatiċi l-kbar? Partitarji:
- Monorepo
- Rust
- Stħarriġ żbaljat / it-tnejn

It-tweġiba tiegħi kienet, "Jien litteralment dawn iż-żewġ nies." Minflok ma nitkellmu dwar kif Rust huwa droga, ejja nħarsu lejn għaliex naħseb li huwa żbaljat dwar monorepositories. Ftit ftit dwarek innifsek. Jien is-CTO ta' Chef Software. Għandna madwar 100 inġinier, bażi ta 'kodiċi li tmur lura madwar 11-12-il sena, u 4 prodotti ewlenin. Xi wħud minn dan il-kodiċi huma f'polyrepository (il-pożizzjoni tal-bidu tiegħi), xi wħud huma f'monorepository (il-pożizzjoni attwali tiegħi).

Qabel ma nibda: kull argument li nagħmel hawn se japplika għaż-żewġ tipi ta’ repożitorji. Fl-opinjoni tiegħi, m'hemm l-ebda raġuni teknika għaliex għandek tagħżel tip ta' repożitorju fuq ieħor. Tista 'tagħmel kwalunkwe approċċ jaħdem. Ninsab kuntent li nitkellem dwarha, imma m'iniex interessat f'raġunijiet tekniċi artifiċjali għaliex wieħed huwa superjuri għal ieħor.

Naqbel mal-ewwel parti tal-punt ta’ Matt:

Minħabba li fuq skala, monorepożitorju jsolvi l-istess problemi kollha li jsolvi polyrepository, iżda fl-istess ħin iġiegħlek tgħaqqad sewwa l-kodiċi tiegħek u teħtieġ sforzi inkredibbli biex tiżdied l-iskalabbiltà tas-sistema ta 'kontroll tal-verżjoni tiegħek.

Int ser ikollok issolvi l-istess problemi irrispettivament minn jekk tagħżelx monorepository jew polyrepository. Kif tirrilaxxa r-rilaxxi? X'inhu l-approċċ tiegħek għall-aġġornamenti? Kompatibilità b'lura? Dipendenzi bejn il-proġetti? Liema stili arkitettoniċi huma aċċettabbli? Kif timmaniġġja l-infrastruttura tal-bini u tat-test tiegħek? Il-lista hija bla tmiem. U int se ssolvihom kollha hekk kif tikber. M'hemm l-ebda ġobon b'xejn.

Naħseb li l-argument ta' Matt huwa simili għal fehmiet kondiviżi minn ħafna inġiniera (u maniġers) li nirrispetta. Dan iseħħ mill-perspettiva tal-inġinier li jaħdem fuq il-komponent jew it-tim li jaħdem fuq il-komponent. Tisma’ affarijiet bħal:

  • Il-codebase hija goffa - m'għandix bżonn dan kollu junk.
  • Huwa aktar diffiċli biex nittestja għax irrid nittestja dan il-junk kollu li m'għandix bżonn.
  • Huwa aktar diffiċli li taħdem ma 'dipendenzi esterni.
  • Għandi bżonn is-sistemi ta' kontroll tal-verżjoni virtwali tiegħi stess.

Naturalment, dawn il-punti kollha huma ġġustifikati. Dan jiġri fiż-żewġ każijiet - fil-polyrepository għandi l-junk tiegħi, minbarra dak meħtieġ għall-bini... Jista' jkun hemm bżonn ukoll junk ieħor. Allura jien "sempliċement" noħloq għodod li jiċċekkjaw il-proġett kollu. Jew noħloq monorepożitorju falz b'submoduli. Nistgħu nimxu madwar dan il-ġurnata kollha. Imma naħseb li l-argument ta 'Matt jonqos ir-raġuni ewlenija, li flipejt pjuttost ħafna favur il-monorepożitorju:

Jipprovoka komunikazzjoni u juri problemi

Meta nisseparaw ir-repożitorji, noħolqu problema ta' koordinazzjoni u trasparenza de facto. Dan jikkorrispondi mal-mod kif naħsbu dwar it-timijiet (speċjalment il-mod kif il-membri individwali jaħsbu dwarhom): aħna responsabbli għal ċertu komponent. Naħdmu f'iżolament relattiv. Il-konfini huma ffissati fuq it-tim tiegħi u l-komponent(i) li qed naħdmu fuqhom.

Hekk kif l-arkitettura ssir aktar kumplessa, tim wieħed ma jistax jibqa' jmexxiha waħdu. Ftit inġiniera għandhom is-sistema kollha f'rashom. Ejja ngħidu li timmaniġġja komponent kondiviż A li jintuża mit-Timijiet B, C, u D. It-tim A qed jirrefactoring, itejjeb l-API, u wkoll ibiddel l-implimentazzjoni interna. Bħala riżultat, il-bidliet mhumiex kompatibbli b'lura. X'pariri għandek?

  • Sib il-postijiet kollha fejn tintuża l-API l-antika.
  • Hemm postijiet fejn l-API l-ġdida ma tistax tintuża?
  • Tista' tiffissa u tittestja komponenti oħra biex tiżgura li ma jinkisrux?
  • Dawn it-timijiet jistgħu jittestjaw il-bidliet tiegħek bħalissa?

Jekk jogħġbok innota li dawn il-mistoqsijiet huma indipendenti mit-tip ta' repożitorju. Ikollok bżonn issib timijiet B, C u D. Ikollok bżonn tkellem magħhom, issir taf il-ħin, tifhem il-prijoritajiet tagħhom. Mill-inqas nittamaw li inti.

Ħadd ma jrid verament jagħmel dan. Dan huwa ħafna inqas pjaċevoli milli sempliċement jiffissaw l-API kkritikat. Huwa kollu uman u messy. F'polyrepository, tista 'sempliċement tagħmel bidliet, tagħtiha lin-nies li jaħdmu fuq dak il-komponent (probabbilment mhux B, C jew D) għal reviżjoni, u jimxu 'l quddiem. It-timijiet B, C u D jistgħu jibqgħu biss bil-verżjoni attwali tagħhom għalissa. Jiġġeddu meta jirrealizzaw il-ġenju tiegħek!

F'monorepożitorju, ir-responsabbiltà tinbidel awtomatikament. It-tim A jibdel il-komponent tagħhom u, jekk mhux attent, immedjatament ikisser B, C u D. Dan iwassal biex B, C u D jidhru fil-bieb ta’ A, jistaqsu għaliex it-Tim A kisser l-assemblaġġ. Dan jgħallem lil A li ma jistgħux jaqbżu l-lista tiegħi hawn fuq. Għandhom jitkellmu dwar dak li se jagħmlu. Jistgħu B, C u D jiċċaqilqu? X'jiġri jekk B u C jistgħu, iżda D kien relatat mill-qrib ma 'effett sekondarju tal-imġieba tal-algoritmu l-antik?

Imbagħad irridu nitkellmu dwar kif se noħorġu minn din is-sitwazzjoni:

  1. Appoġġ għal APIs interni multipli, u se jimmarka l-algoritmu l-antik bħala deprecated sakemm D jista 'jieqaf jużah.
  2. Appoġġ għal verżjonijiet ta 'rilaxx multipli, waħda bl-interface l-antika, waħda mal-ġdida.
  3. Dewwem ir-rilaxx tal-bidliet ta 'A sakemm B, C, u D jistgħu jaċċettawha simultanjament.

Ejja ngħidu li għażilna 1, diversi APIs. F'dan il-każ għandna żewġ biċċiet ta 'kodiċi. Qadim u ġodda. Pjuttost konvenjenti f'xi sitwazzjonijiet. Aħna niċċekkjaw il-kodiċi l-antik lura, nimmarkawh bħala deprecated, u naqblu fuq skeda ta 'tneħħija mat-tim D. Essenzjalment identiku għal repożitorji poly u mono.

Biex nirilaxxaw verżjonijiet multipli, għandna bżonn fergħa. Issa għandna żewġ komponenti - A1 u A2. It-timijiet B u Ċ jużaw A2 u D juża A1. Għandna bżonn li kull komponent ikun lest għar-rilaxx minħabba li jistgħu jkunu meħtieġa aġġornamenti tas-sigurtà u bug fixes oħra qabel ma D ikun jista' jimxi 'l quddiem. F'polyrepository, nistgħu naħbu dan f'fergħa ta 'ħajja twila li tħossha tajba. F'monorepożitorju, aħna nġiegħlu li l-kodiċi jinħoloq f'modulu ġdid. It-tim D xorta se jkollu jagħmel bidliet fil-komponent "antik". Kulħadd jista 'jara l-ispiża li qed inħallsu hawn - issa għandna d-doppju ta' kodiċi, u kwalunkwe bug fixes li japplikaw għal A1 u A2 għandhom japplikaw għat-tnejn li huma. Bl-approċċ tal-fergħat f'polyrepository, dan huwa moħbi wara ċirasa-pick. Inqisu li l-ispiża hija aktar baxxa għax m'hemmx duplikazzjoni. Mil-lat prattiku, l-ispiża hija l-istess: inti ser tibni, tirrilaxxa, u żżomm żewġ codebases fil-biċċa l-kbira identiċi sakemm tkun tista 'tħassar waħda minnhom. Id-differenza hija li b'monorepository dan l-uġigħ huwa dirett u viżibbli. Dan huwa saħansitra agħar, u dan huwa tajjeb.

Fl-aħħar, wasalna għat-tielet punt. Dewmien tar-rilaxx. Huwa possibbli li l-bidliet li saru minn A jtejbu l-ħajja tat-Tim A. Importanti, iżda mhux urġenti. Nistgħu nittardjaw biss? F'polyrepository, aħna nimbottaw dan biex nirbħu l-artifact. Ovvjament dan qed ngħidu lit-Tim D. Ibqa' biss fuq il-verżjoni l-antika sakemm tlaħħaq! Dan jistabbilixxi inti biex tilgħab il-kodard. It-Tim A jkompli jaħdem fuq il-komponent tagħhom, u jinjora l-fatt li t-Tim D qed juża verżjoni dejjem aktar antikwata (dik hija l-problema tat-Tim D, huma stupidi). Sadanittant, Team D jitkellem ħażin dwar l-attitudni traskurata tat-Tim A lejn l-istabbiltà tal-kodiċi, jekk jitkellmu dwarha xejn. Ix-xhur jgħaddu. Fl-aħħarnett, it-Tim D jiddeċiedi li jħares lejn il-possibbiltà li jaġġorna, iżda A għandu biss aktar bidliet. It-tim A bilkemm jiftakar meta jew kif kissru D. L-upgrade huwa aktar bl-uġigħ u se jieħu aktar żmien. Li jibgħatha aktar 'l isfel fil-munzell prijoritarju. Sal-ġurnata li jkollna kwistjoni ta’ sigurtà f’A li ġġiegħelna nagħmlu fergħa. It-tim A għandu jmur lura fiż-żmien, isib punt meta D kien stabbli, jirranġa l-problema hemmhekk, u jagħmilha lesta għar-rilaxx. Din hija l-għażla de facto li jagħmlu n-nies, u hija bil-bosta l-agħar. Jidher li hu tajjeb kemm għat-Tim A kif ukoll għat-Tim D sakemm nistgħu ninjoraw lil xulxin.

F'monorepożitorju, it-tielet huwa verament mhux għażla. Inti sfurzat li tittratta s-sitwazzjoni b'wieħed minn żewġ modi. Trid tara l-ispejjeż li jkollok żewġ fergħat ta 'rilaxx. Tgħallem tipproteġi lilek innifsek minn aġġornamenti li jiksru l-kompatibilità b'lura. Imma l-aktar importanti: ma tistax tevita li jkollok konverżazzjoni diffiċli.

Fl-esperjenza tiegħi, meta t-timijiet jikbru, m'għadux possibbli li żżomm is-sistema kollha f'moħħok, u dik hija l-aktar parti importanti. Int trid ittejjeb il-viżibilità tad-discord fis-sistema. Trid taħdem b'mod attiv biex it-timijiet iħarsu 'l bogħod mill-komponenti tagħhom u jħarsu lejn ix-xogħol ta' timijiet u konsumaturi oħra.

Iva, tista 'toħloq għodod li jippruvaw isolvu l-problema tal-polyrepository. Imma l-esperjenza tiegħi li ngħallem kunsinna u awtomazzjoni kontinwa f'intrapriżi kbar tgħidli dan: l-imġieba awtomatika mingħajr l-użu ta 'għodod addizzjonali hija l-imġieba li tistenna li tara. L-imġiba awtomatika ta 'polyrepository hija l-iżolament, dak huwa l-punt kollu. L-imġiba awtomatika ta 'monorepożitorju hija responsabbiltà kondiviża u trasparenza, dak huwa l-punt kollu. Fiż-żewġ każijiet, jien ser noħloq għodda li twitti t-truf mhux maħduma. Bħala mexxej, se nagħżel monorepożitorju kull darba għax l-għodod jeħtieġ li jsaħħu l-kultura li rrid, u l-kultura tiġi minn deċiżjonijiet ċkejkna u x-xogħol ta’ kuljum tat-tim.

Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ. Idħol, ta 'xejn.

Min huma l-akbar fanatiċi? Partitarji:

  • Monorepo

  • Rust

  • Stħarriġ żbaljat / it-tnejn

33 utent ivvutaw. 13-il utent astjenew.

Sors: www.habr.com

Żid kumment