Monorepositories: punten, kedah

Monorepositories: punten, kedah

Tarjamahan tina artikel disusun pikeun siswa tangtu "Praktik sareng alat DevOps" dina proyék atikan OTUS.

Anjeun kedah milih monorepository sabab paripolah anu didorong dina tim anjeun nyaéta transparansi sareng tanggung jawab anu dibagi, khususna nalika tim tumbuh. Barina ogé, anjeun kedah investasi dina alat, tapi éta langkung saé upami paripolah standar nyaéta kabiasaan anu anjeun pikahoyong dina paréntah anjeun.

Naha urang ngobrol ngeunaan ieu?

Matt Klein nyerat tulisan éta "Monorepos: Punten ulah!"  (catetan penerjemah: tarjamahan dina Habré "Monorepositories: punten ulah"). Kuring resep Matt, Jigana anjeunna pisan pinter jeung anjeun kudu maca sudut pandang na. Anjeunna mimitina masangkeun polling dina Twitter:

Monorepositories: punten, kedah

Tarjamahan:
Poé Taun Anyar ieu, abdi bade ngabantah kumaha ridiculous monorepositories. 2019 dimimitian sepi. Dina sumanget ieu, kuring nawiskeun anjeun survey. Saha anu fanatik gedé? Ngadukung:
- Monorepo
- karahaan
- Polling salah / duanana

Tanggapan kuring nyaéta, "Kuring sacara harfiah duanana jalma éta." Gantina ngawangkong ngeunaan kumaha Rust mangrupakeun ubar, hayu urang tingali naha Jigana anjeunna salah ngeunaan monorepositories. A saeutik ngeunaan diri. Abdi teh CTO of Chef Software. Simkuring gaduh ngeunaan 100 insinyur, basis kode balik deui ngeunaan 11-12 taun, sarta 4 produk utama. Sababaraha kode ieu aya dina polyrepository (posisi awal kuring), sababaraha aya dina monorepository (posisi kuring ayeuna).

Sateuacan kuring ngamimitian: unggal argumen anu kuring lakukeun di dieu bakal dilarapkeun kana dua jinis repositori. Dina pamanggih kuring, teu aya alesan téknis naha anjeun kedah milih hiji jinis gudang anu sanés. Anjeun tiasa ngadamel pendekatan naon waé. Abdi senang ngobrol ngeunaan eta, tapi Kaula teu kabetot dina alesan teknis jieunan naha hiji punjul ti sejen.

Abdi satuju sareng bagian mimiti titik Matt:

Kusabab dina skala, monorepository bakal ngabéréskeun sagala masalah anu sami anu direngsekeun ku polyrepository, tapi dina waktos anu sami maksa anjeun pikeun ngapasangkeun kode anjeun sareng meryogikeun usaha anu luar biasa pikeun ningkatkeun skalabilitas sistem kontrol versi anjeun.

Anjeun kedah ngajawab masalah anu sami henteu paduli naha anjeun milih monorepository atanapi polyrepository. Kumaha anjeun ngaleupaskeun rilis? Naon pendekatan anjeun pikeun apdet? Kasaluyuan mundur? kagumantungan proyék cross? Naon gaya arsitéktur anu ditarima? Kumaha anjeun ngatur ngawangun sareng infrastruktur tés anjeun? daftar téh sajajalan. Sareng anjeun bakal ngabéréskeun sadayana nalika anjeun tumbuh. Henteu aya kéju gratis.

Jigana argumen Matt urang sarupa pintonan dibagikeun ku loba insinyur (jeung manajer) kuring hormat. Ieu lumangsung tina sudut pandang insinyur anu damel dina komponén atanapi tim anu damel dina komponén. Anjeun ngadangu hal sapertos:

  • Dasar kodeu ageung - Abdi henteu peryogi sadayana sampah ieu.
  • Éta langkung hese pikeun nguji sabab kuring kedah nguji sadayana sampah ieu anu kuring henteu peryogikeun.
  • Éta langkung hese damel sareng katergantungan éksternal.
  • Abdi peryogi sistem kontrol versi virtual kuring sorangan.

Tangtosna, sadaya titik ieu diyakinkeun. Ieu kajadian dina dua kasus - dina polyrepository kuring boga junk sorangan, sajaba ti hiji diperlukeun pikeun ngawangun ... Kuring ogé bisa butuh junk séjén. Ku kituna kuring "saukur" nyieun parabot nu pariksa sakabéh proyék. Atawa kuring nyieun monorepository palsu kalawan submodules. Urang bisa leumpang sabudeureun ieu sapopoe. Tapi Jigana argumen Matt urang sono alesan utama, nu kuring flipped rada beurat dina kahadean monorepository nu:

Ieu provokes komunikasi sarta nembongkeun masalah

Nalika urang misahkeun repositori, urang nyiptakeun masalah de facto ngeunaan koordinasi sareng transparansi. Ieu pakait jeung cara urang mikir ngeunaan tim (utamana cara anggota individu mikir ngeunaan aranjeunna): kami jawab komponén nu tangtu. Urang damel di isolasi relatif. Watesna dibenerkeun dina tim kuring sareng komponén (s) anu kami damel.

Nalika arsitéktur janten langkung kompleks, hiji tim henteu tiasa ngatur deui nyalira. Saeutik pisan insinyur gaduh sadayana sistem dina sirahna. Hayu urang nyebutkeun anjeun ngatur komponén dibagikeun A nu dipaké ku Teams B, C, sarta D. Tim A refactoring, ngaronjatkeun API, sarta ogé ngarobah palaksanaan internal. Hasilna, parobihan henteu cocog ka tukang. Naon nasehat anjeun?

  • Manggihan sagala tempat dimana API heubeul dipaké.
  • Aya tempat dimana API anyar teu bisa dipaké?
  • Naha anjeun tiasa ngalereskeun sareng nguji komponén sanés pikeun mastikeun yén éta henteu rusak?
  • Naha tim ieu tiasa nguji parobahan anjeun ayeuna?

Punten dicatet yén patarosan ieu henteu gumantung kana jinis gudang. Anjeun kedah milarian tim B, C sareng D. Anjeun kedah ngobrol sareng aranjeunna, milarian waktosna, ngartos prioritasna. Sahenteuna urang miharep anjeun bakal.

Teu aya anu hoyong ngalakukeun ieu. Ieu pisan kirang senang ti ngan ngalereskeun API damn. Éta sadayana manusa sareng pabalatak. Dina polyrepository, anjeun ngan saukur tiasa ngadamel parobihan, masihan ka jalma anu damel dina komponén éta (sigana sanés B, C atanapi D) pikeun ditinjau, teras teraskeun. Tim B, C sareng D ngan ukur tiasa tetep nganggo versi ayeuna ayeuna. Aranjeunna bakal renewed nalika maranéhna sadar genius Anjeun!

Dina monorepository, tanggung jawab digeser sacara standar. Tim A ngarobah komponén maranéhanana sarta, lamun teu ati, geuwat megatkeun B, C jeung D. Hal ieu jadi marga pikeun B, C jeung D némbongkeun up di panto A urang, wondering naha Tim A peupeus assembly nu. Ieu ngajarkeun A yén maranéhna moal bisa ngaliwatan daptar abdi di luhur. Aranjeunna kedah ngobrol ngeunaan naon anu bakal aranjeunna laksanakeun. Naha B, C sareng D tiasa ngalih? Kumaha lamun B jeung C bisa, tapi D ieu raket patalina jeung efek samping tina kabiasaan algoritma heubeul?

Teras urang kedah nyarios kumaha urang bakal kaluar tina kaayaan ieu:

  1. Rojongan pikeun sababaraha API internal, sarta bakal ditandaan algoritma heubeul salaku deprecated dugi D bisa eureun maké éta.
  2. Rojongan pikeun sababaraha versi release, hiji jeung interface heubeul, hiji jeung nu anyar.
  3. Tunda sékrési parobahan A dugi ka B, C, sareng D tiasa nampi sakaligus.

Hayu urang milih 1, sababaraha API. Dina hal ieu urang gaduh dua potongan kode. Heubeul jeung anyar. Cukup merenah dina sababaraha kaayaan. Urang pariksa kodeu heubeul deui, cirian salaku deprecated, sarta satuju kana jadwal panyabutan jeung tim D. Intina idéntik pikeun repositories poli na mono.

Pikeun ngaleupaskeun sababaraha versi, urang peryogi cabang. Ayeuna urang gaduh dua komponén - A1 sareng A2. Tim B sareng C nganggo A2 sareng D nganggo A1. Urang peryogi unggal komponén janten siap dileupaskeun sabab apdet kaamanan sareng perbaikan bug sanésna diperyogikeun sateuacan D tiasa maju. Dina polyrepository, urang tiasa nyumputkeun ieu dina cabang umur panjang anu karasaeun saé. Dina monorepository a, urang maksakeun kode pikeun dijieun dina modul anyar. Tim D tetep kudu nyieun parobahan kana komponén "heubeul". Sadayana tiasa ningali biaya anu urang mayar di dieu - ayeuna gaduh kode dua kali langkung seueur, sareng perbaikan bug anu berlaku pikeun A1 sareng A2 kedah dilarapkeun ka duanana. Kalayan pendekatan branching dina polyrepository, ieu disumputkeun tukangeun céri-pick. Kami nganggap biaya langkung handap sabab teu aya duplikasi. Tina sudut pandang praktis, biayana sami: anjeun bakal ngawangun, ngaleupaskeun, sareng ngajaga dua basis kode anu sami dugi ka anjeun tiasa ngahapus salah sahijina. Bédana nyaéta kalayan monorepository nyeri ieu langsung sareng katingali. Ieu malah parah, tur éta alus.

Tungtungna, urang meunang ka titik katilu. Leupaskeun reureuh. Ieu mungkin yen parobahan dijieun ku A bakal ngaronjatkeun kahirupan Tim A. penting, tapi teu urgent. Dupi urang ngan reureuh? Dina polyrepository, urang nyorong ieu pikeun pin artefak. Tangtu kami ngabejaan ieu Tim D. Ngan tetep dina versi heubeul dugi ka nyekel up! Ieu nyetél anjeun maén pengecut. Tim A terus ngerjakeun komponén maranéhanana, ignoring kanyataan yén Tim D ngagunakeun versi beuki luntur (éta masalah Tim D urang, aranjeunna bodo). Samentara éta, Tim D nyarios kirang ngeunaan sikep teu ati-ati Tim A kana stabilitas kode, upami aranjeunna nyarioskeun éta. Bulan ngaliwat. Tungtungna, Tim D mutuskeun katingal dina kamungkinan ngamutahirkeun, tapi A ngan boga leuwih parobahan. Tim A bieu apal iraha atanapi kumaha aranjeunna peupeus D. Ngaronjatkeun leuwih nyeri tur bakal nyandak deui. Nu ngirimkeun eta salajengna handap tumpukan prioritas. Nepi ka poé urang boga masalah kaamanan di A nu maksa urang nyieun cabang. Tim A kudu balik dina jangka waktu nu, manggihan titik nalika D éta stabil, ngalereskeun masalah aya, sarta nyieun siap pikeun release. Ieu mangrupikeun pilihan de facto anu dilakukeun ku jalma, sareng éta paling awon. Sigana hadé pikeun Tim A sareng Tim D salami urang tiasa saling malire.

В монорепозитории третий — действительно не вариант. Вы вынуждены справляться с ситуацией одним из двух способов. Вам нужно видеть издержки наличия двух релизных веток. Научиться защищать себя от обновлений, ломающих обратную совместимость. Но главное: Anjeun teu bisa nyingkahan ngabogaan paguneman hésé.

Dina pangalaman kuring, nalika tim janten ageung, éta henteu mungkin deui pikeun ngémutan sadayana sistem, sareng éta bagian anu paling penting. Anjeun kedah ningkatkeun visibilitas perselisihan dina sistem. Anjeun kedah aktip damel pikeun nyandak tim pikeun ngajauhan komponénna sareng ningali karya tim sareng konsumen anu sanés.

Leres, anjeun tiasa nyiptakeun alat anu nyobian ngabéréskeun masalah polyrepository. Tapi pangalaman kuring ngajar pangiriman kontinyu sareng otomatisasi di perusahaan ageung nyarioskeun ka kuring: kabiasaan standar tanpa ngagunakeun alat tambahan nyaéta kabiasaan anu anjeun ngarepkeun. Paripolah standar tina polyrepository nyaéta isolasi, éta sadayana titik. Paripolah standar tina monorepository mangrupikeun tanggung jawab sareng transparansi, éta sadayana. Dina duanana kasus, abdi bade nyieun alat anu bakal halus kaluar edges kasar. Salaku pamimpin, kuring bakal milih monorepository unggal waktos sabab alat-alat kedah nguatkeun budaya anu kuring pikahoyong, sareng budaya asalna tina kaputusan leutik sareng padamelan sapopoe tim.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Saha anu fanatik pangbadagna? Ngadukung:

  • Monorepo

  • karahaan

  • Polling salah / duanana

33 pamaké milih. 13 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar