Kursa studentiem sagatavots raksta tulkojums
Jums vajadzÄtu izvÄlÄties monokrÄtuvi, jo jÅ«su komandÄs tÄ veicina caurspÄ«dÄ«gumu un dalÄ«tu atbildÄ«bu, jo Ä«paÅ”i komandÄm augot. JebkurÄ gadÄ«jumÄ jums bÅ«s jÄiegulda instrumenti, taÄu vienmÄr ir labÄk, ja noklusÄjuma darbÄ«ba ir tÄda, kÄdu vÄlaties savÄs komandÄs.
KÄpÄc mÄs par to runÄjam?
Mets Kleins uzrakstīja rakstu
Tulkojums:
Å ajÄ Jaungada dienÄ es strÄ«dÄÅ”os par to, cik smieklÄ«gi ir monorepozitoriji. 2019. gads sÄkÄs mierÄ«gi. Å ajÄ garÄ es piedÄvÄju jums aptauju. Kas ir tie lielie fanÄtiÄ·i? AtbalstÄ«tÄji:
SÄkot no Monorepo
SÄkot no RÅ«sa
SÄkot no Nepareiza aptauja / abi
Mana atbilde bija: "Es burtiski esmu abi no Å”iem cilvÄkiem." TÄ vietÄ, lai runÄtu par to, kÄ Rust ir narkotika, paskatÄ«simies, kÄpÄc, manuprÄt, viÅÅ” kļūdÄs attiecÄ«bÄ uz monokrÄtuvÄm. Mazliet par sevi. Es esmu Chef Software CTO. Mums ir aptuveni 100 inženieru, koda bÄze, kas aizsÄkÄs aptuveni 11ā12 gadus, un 4 galvenie produkti. Daļa no Ŕī koda atrodas polirepozitorijÄ (mana sÄkuma pozÄ«cija), daļa ir monorepozitorijÄ (mana paÅ”reizÄjÄ pozÄ«cija).
Pirms es sÄku: visi Å”eit minÄtie argumenti attieksies uz abu veidu krÄtuvÄm. ManuprÄt, nav tehnisku iemeslu, kÄpÄc jums vajadzÄtu izvÄlÄties viena veida repozitoriju, nevis citu. Jebkurai pieejai var darboties. Es labprÄt par to runÄju, bet mani neinteresÄ mÄkslÄ«gi tehniski apsvÄrumi, kÄpÄc viens ir pÄrÄks par otru.
Es piekrītu Metta punkta pirmajai daļai:
TÄ kÄ mÄrogÄ monorepozitorijs atrisinÄs visas tÄs paÅ”as problÄmas, kuras atrisina polirepozitorijs, bet tajÄ paÅ”Ä laikÄ liekot jums cieÅ”i savienot savu kodu un pieprasot neticamas pÅ«les, lai palielinÄtu versiju kontroles sistÄmas mÄrogojamÄ«bu.
Jums bÅ«s jÄatrisina tÄs paÅ”as problÄmas neatkarÄ«gi no tÄ, vai izvÄlaties monokrÄtuvi vai polirepozitoriju. KÄ jÅ«s izlaižat izlaidumus? KÄda ir jÅ«su pieeja atjauninÄjumiem? AtgriezeniskÄ saderÄ«ba? VairÄku projektu atkarÄ«bas? KÄdi arhitektÅ«ras stili ir pieÅemami? KÄ jÅ«s pÄrvaldÄt savu izveides un testÄÅ”anas infrastruktÅ«ru? Saraksts ir bezgalÄ«gs. Un jÅ«s tos visus atrisinÄsiet augot. Bezmaksas siera nav.
Es domÄju, ka Metta arguments ir lÄ«dzÄ«gs uzskatiem, kurus piekrÄ«t daudzi inženieri (un vadÄ«tÄji), kurus es cienu. Tas notiek no inženiera, kas strÄdÄ pie komponenta, vai komandas, kas strÄdÄ pie komponenta, skatÄ«jumÄ. JÅ«s dzirdat tÄdas lietas kÄ:
- Kodu bÄze ir apjomÄ«ga ā man nevajag visu Å”o atkritumu.
- To ir grÅ«tÄk pÄrbaudÄ«t, jo man ir jÄtestÄ viss Å”is man nevajadzÄ«gais krÄms.
- GrÅ«tÄk ir strÄdÄt ar ÄrÄjÄm atkarÄ«bÄm.
- Man ir vajadzÄ«gas savas virtuÄlÄs versiju kontroles sistÄmas.
Protams, visi Å”ie punkti ir pamatoti. Tas notiek abos gadÄ«jumos - polirepozitorijÄ man ir savs krÄms, papildus tam, kas nepiecieÅ”ams bÅ«vÄÅ”anai... Man var bÅ«t nepiecieÅ”ams arÄ« kÄds cits. TÄpÄc es "vienkÄrÅ”i" izveidoju rÄ«kus, kas pÄrbauda visu projektu. Vai arÄ« es izveidoju viltotu monokrÄtuvi ar apakÅ”moduļiem. MÄs varÄtu staigÄt pa Å”o visu dienu. Bet es domÄju, ka Metta arguments izlaiž garÄm galveno iemeslu, kuru es diezgan lielÄ mÄrÄ pagriezu par labu monokrÄtuvei:
Tas provocÄ saziÅu un parÄda problÄmas
Atdalot repozitorijus, mÄs radÄm de facto koordinÄcijas un pÄrredzamÄ«bas problÄmu. Tas atbilst tam, kÄ mÄs domÄjam par komandÄm (Ä«paÅ”i tam, kÄ par tÄm domÄ atseviŔķi dalÄ«bnieki): mÄs esam atbildÄ«gi par noteiktu sastÄvdaļu. MÄs strÄdÄjam relatÄ«vi izolÄti. Robežas ir noteiktas manai komandai un komponentam(-iem), pie kÄ mÄs strÄdÄjam.
TÄ kÄ arhitektÅ«ra kļūst sarežģītÄka, viena komanda vairs nevar to pÄrvaldÄ«t viena. Ä»oti nedaudziem inženieriem visa sistÄma ir prÄtÄ. PieÅemsim, ka jÅ«s pÄrvaldÄt koplietotu komponentu A, ko izmanto komandas B, C un D. Komanda A pÄrveido, uzlabo API un arÄ« maina iekÅ”Äjo ievieÅ”anu. RezultÄtÄ izmaiÅas nav savietojamas atpakaļ. KÄds jums ir padoms?
- Atrodiet visas vietas, kur tiek izmantota vecÄ API.
- Vai ir vietas, kur nevar izmantot jauno API?
- Vai varat salabot un pÄrbaudÄ«t citus komponentus, lai pÄrliecinÄtos, ka tie neplÄ«st?
- Vai Ŕīs komandas var pÄrbaudÄ«t jÅ«su izmaiÅas tieÅ”i tagad?
LÅ«dzu, Åemiet vÄrÄ, ka Å”ie jautÄjumi nav atkarÄ«gi no repozitorija veida. Jums bÅ«s jÄatrod komandas B, C un D. Jums bÅ«s ar viÅiem jÄrunÄ, jÄnoskaidro laiks, jÄsaprot viÅu prioritÄtes. MÄs vismaz ceram, ka jÅ«s to darÄ«siet.
Neviens Ä«sti nevÄlas to darÄ«t. Tas ir daudz mazÄk jautri nekÄ tikai sasodÄ«tÄ API laboÅ”ana. Tas viss ir cilvÄciski un nekÄrtÄ«gi. PolirepozitorijÄ varat vienkÄrÅ”i veikt izmaiÅas, nodot to cilvÄkiem, kas strÄdÄ pie Ŕī komponenta (iespÄjams, ne B, C vai D), lai viÅi to pÄrskatÄ«tu, un turpinÄt. Komandas B, C un D pagaidÄm var palikt pie paÅ”reizÄjÄs versijas. Tie tiks atjaunoti, kad viÅi apzinÄs jÅ«su Ä£enialitÄti!
MonokrÄtuvÄ atbildÄ«ba pÄc noklusÄjuma tiek pÄrcelta. Komanda A maina savu komponentu un, ja nav piesardzÄ«ga, nekavÄjoties salauž B, C un D. Tas noved pie tÄ, ka B, C un D parÄdÄs pie A durvÄ«m, prÄtojot, kÄpÄc A komanda salauza komplektu. Tas mÄca A, ka viÅi nevar izlaist manu iepriekÅ” minÄto sarakstu. ViÅiem ir jÄrunÄ par to, ko viÅi gatavojas darÄ«t. Vai B, C un D var pÄrvietoties? Ko darÄ«t, ja B un C var, bet D bija cieÅ”i saistÄ«ts ar vecÄ algoritma uzvedÄ«bas blakusefektu?
Tad mums ir jÄrunÄ par to, kÄ mÄs izkļūsim no Ŕīs situÄcijas:
- Atbalsts vairÄkÄm iekÅ”ÄjÄm API, un vecais algoritms tiks atzÄ«mÄts kÄ novecojis, lÄ«dz D nevarÄs to lietot.
- Atbalsts vairÄkÄm laidiena versijÄm, vienai ar veco saskarni, otrai ar jauno.
- Atlikt A izmaiÅu izlaiÅ”anu, lÄ«dz B, C un D var tÄs vienlaikus pieÅemt.
PieÅemsim, ka esam atlasÄ«juÅ”i 1 ā vairÄkas API. Å ajÄ gadÄ«jumÄ mums ir divas koda daļas. Vecs un jauns. Diezgan Ärti dažÄs situÄcijÄs. MÄs pÄrbaudÄm veco kodu, atzÄ«mÄjam to kÄ novecojuÅ”u un vienojamies par noÅemÅ”anas grafiku ar D komandu. BÅ«tÄ«bÄ tas ir identisks poli un mono krÄtuvÄm.
Lai izdotu vairÄkas versijas, mums ir nepiecieÅ”ama filiÄle. Tagad mums ir divas sastÄvdaļas - A1 un A2. Komandas B un C izmanto A2 un D izmanto A1. Mums ir nepiecieÅ”ams, lai katrs komponents bÅ«tu gatavs izlaiÅ”anai, jo var bÅ«t nepiecieÅ”ami droŔības atjauninÄjumi un citi kļūdu labojumi, pirms D var virzÄ«ties uz priekÅ”u. PolirepozitorijÄ mÄs to varam paslÄpt ilgmūžīgÄ zarÄ, kas jÅ«tas labi. MonorepozitorijÄ mÄs piespiežam kodu izveidot jaunÄ modulÄ«. Komandai D joprojÄm bÅ«s jÄveic izmaiÅas "vecajÄ" komponentÄ. Ikviens var redzÄt izmaksas, ko mÄs Å”eit maksÄjam ā tagad mums ir divreiz vairÄk koda, un visiem kļūdu labojumiem, kas attiecas uz A1 un A2, ir jÄattiecas uz abiem. Izmantojot sazaroÅ”anas pieeju polirepozitorijÄ, tas tiek paslÄpts aiz Ä·irÅ”u izvÄles. MÄs uzskatÄm, ka izmaksas ir zemÄkas, jo nav dublÄÅ”anÄs. No praktiskÄ viedokļa izmaksas ir tÄdas paÅ”as: jÅ«s izveidosit, izlaidÄ«sit un uzturÄsit divas lielÄ mÄrÄ identiskas kodu bÄzes, lÄ«dz varÄsit dzÄst vienu no tÄm. AtŔķirÄ«ba ir tÄda, ka ar monorepozitoriju Ŕīs sÄpes ir tieÅ”as un redzamas. Tas ir vÄl sliktÄk, un tas ir labi.
Beidzot tikÄm pie treÅ”Ä punkta. IzlaiÅ”anas aizkave. IespÄjams, ka A veiktÄs izmaiÅas uzlabos A komandas dzÄ«vi. SvarÄ«gi, bet ne steidzami. Vai mÄs varam aizkavÄt? PolirepozitorijÄ mÄs to nospiežam, lai piespraustu artefaktu. Protams, mÄs to stÄstÄm komandai D. VienkÄrÅ”i palieciet pie vecÄs versijas, lÄ«dz panÄkat! Tas liek jums spÄlÄt gļÄvuli. Komanda A turpina strÄdÄt pie sava komponenta, ignorÄjot faktu, ka komanda D izmanto arvien novecojuÅ”u versiju (tÄ ir komandas D problÄma, viÅi ir stulbi). TikmÄr komanda D slikti runÄ par komandas A neuzmanÄ«go attieksmi pret koda stabilitÄti, ja viÅi par to vispÄr runÄ. Paiet mÄneÅ”i. Visbeidzot, komanda D nolemj izskatÄ«t iespÄju atjauninÄt, bet A ir tikai vairÄk izmaiÅu. Komanda A gandrÄ«z neatceras, kad un kÄ viÅi salauza D. JauninÄÅ”ana ir sÄpÄ«gÄka un prasÄ«s ilgÄku laiku. Kas to nosÅ«ta tÄlÄk prioritÄrÄ kaudze. LÄ«dz dienai, kad A ir droŔības problÄma, kas liek mums izveidot filiÄli. A komandai ir jÄatgriežas pagÄtnÄ, jÄatrod punkts, kad D bija stabils, jÄnovÄrÅ” problÄma un jÄsagatavo tÄ atbrÄ«voÅ”anai. TÄ ir cilvÄku de facto izvÄle, un tÄ ir lÄ«dz Å”im sliktÄkÄ. Å Ä·iet, ka tas nÄk par labu gan komandai A, gan D komandai, ja vien varam viens otru ignorÄt.
MonokrÄtuvÄ treÅ”ais tieÅ”Äm nav risinÄjums. JÅ«s esat spiests risinÄt situÄciju vienÄ no diviem veidiem. Jums ir jÄredz divu izlaiÅ”anas filiÄļu izmaksas. Uzziniet, kÄ pasargÄt sevi no atjauninÄjumiem, kas traucÄ atpakaļejoÅ”u saderÄ«bu. Bet pats galvenais: jÅ«s nevarat izvairÄ«ties no sarežģītas sarunas.
PÄc manas pieredzes, kad komandas kļūst lielas, vairs nav iespÄjams paturÄt prÄtÄ visu sistÄmu, un tÄ ir vissvarÄ«gÄkÄ daļa. Jums jÄuzlabo nesaskaÅu redzamÄ«ba sistÄmÄ. Jums ir aktÄ«vi jÄstrÄdÄ, lai komandas atskatÄ«tos no savÄm sastÄvdaļÄm un skatÄ«tos uz citu komandu un patÄrÄtÄju darbu.
JÄ, jÅ«s varat izveidot rÄ«kus, kas mÄÄ£ina atrisinÄt polirepozitorija problÄmu. TaÄu mana pieredze, mÄcot nepÄrtrauktu piegÄdi un automatizÄciju lielos uzÅÄmumos, liecina: noklusÄjuma darbÄ«ba bez papildu rÄ«ku izmantoÅ”anas ir tÄda, kÄdu jÅ«s sagaidÄt. NoklusÄjuma polirepozitorija darbÄ«ba ir izolÄcija, un tÄ ir visa bÅ«tÄ«ba. Monorepozitorija noklusÄjuma darbÄ«ba ir dalÄ«ta atbildÄ«ba un caurspÄ«dÄ«gums, tas ir visa bÅ«tÄ«ba. Abos gadÄ«jumos es izveidoÅ”u instrumentu, kas izlÄ«dzinÄs raupjÄs malas. KÄ vadÄ«tÄjs es katru reizi izvÄlÄÅ”os monokrÄtuvi, jo rÄ«kiem ir jÄnostiprina kultÅ«ra, kuru es vÄlos, un kultÅ«ra rodas no sÄ«kiem lÄmumiem un komandas ikdienas darba.
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Kuri ir lielÄkie fanÄtiÄ·i? AtbalstÄ«tÄji:
-
Monorepo
-
RÅ«sa
-
Nepareiza aptauja / abi
Nobalsoja 33 lietotÄji. 13 lietotÄji atturÄjÄs.
Avots: www.habr.com