Architecture Decision Record

Active theme: Light

← Conto cathetan keputusan

Monorepo utawa multirepo

Isi:

Ringkesan

Masalah

Proyek kita nglibatake pangembangan telung kategori utama piranti lunak:

  • GUI front-end
  • Layanan middleware
  • Server back-end

Nalika ngembangake, sistem kontrol versi (VCS) manajemen kode sumber (SCM) kita yaiku git.

Kita kudu milih carane nggunakake git kanggo ngatur kode kita.

Pilihan tingkat paling dhuwur yaiku ngatur minangka "monorepo" utawa "polyrepo" utawa "hibrida":

  • Monorepo tegese kita nglebokake kabeh bagean ing siji repo gedhe
  • Polyrepo tegese kita nglebokake saben bagean ing repo dhewe-dhewe
  • Hibrida tegese campuran monorepo lan polyrepo

Kanggo informasi luwih akeh deleng https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Keputusan

Monorepo nalika organisasi/tim/proyek relatif cilik, lan iterasi cepet luwih dhuwur prioritase tinimbang njaga stabilitas.

Polyrepo nalika organisasi/tim/proyek relatif gedhe, lan njaga stabilitas luwih dhuwur prioritase tinimbang iterasi cepet.

Status

Wis diputuske. Terbuka kanggo ditimbang maneh yen/nalika piranti anyar kanggo ngatur monorepo lan/utawa polyrepo kasedhiya.

Rincian

Anggepan

Kabeh kode sing kita kembangake yaiku kanggo tawaran siji organisasi, dudu kanggo masarakat umum. Yaiku Broker-Dealer ora ngarahake nduwe pangembang sukarelawan masarakat umum.

Watesan

Watesan didokumentasi kanthi apik ing https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Posisi

Kita nimbang monorepo kaya gaya Google, Facebook, lan sapanunggalane. Kita nganggep masalah skala monorepo isih adoh ing mbesuk, mula kita bakal bisa nggunakake praktik sing padha karo Google lan Facebook, nalika kita mbutuhake.

Kita nimbang polyrepo kaya gaya proyek open source Git sing khas, kayata Google Android, Facebook React, lan sapanunggalane. Kita nganggep iki pilihan paling apik kanggo partisipasi masarakat umum (upamane sapa wae ing donya bisa makarya ing kode) lan kasedhiyan individu (upamane proyek digunakake dhewekan, tanpa bagean liya).

Argumentasi

Nalika organisasi/tim/proyek relatif cilik, kita milih monorepo, amarga iterasi cepet prioritase luwih dhuwur banget tinimbang njaga stabilitas

Nalika organisasi/tim/proyek relatif gedhe, kita milih polyrepo, amarga njaga stabilitas prioritase luwih dhuwur banget tinimbang iterasi cepet.

Implikasi

Yen wis ana pipeline kanggo CI+CD, mbok menawa kita kudu nyesuekake kanggo nes pirang-pirang proyek ing siji repo.

CI+CD bisa mbutuhake wektu luwih akeh kanggo build lengkap monorepo, amarga CI+CD bisa mbangun kabeh proyek ing monorepo.

Yen organisasi/tim/proyek tuwuh, monorepo bakal nduwe masalah skala.

Masalah skala monorepo bisa ndadekake transisi menyang polyrepo saya aji.

Transisi saka monorepo menyang polyrepo yaiku tugas devops sing penting, lan kudu direncanakake, diatur, lan diprogram.

Gegayutan

Keputusan gegayutan

Kita bakal nggawe keputusan kanggo piranti gegayutan kanggo ngatur monorepo (upamane Google Bazel) lan polyrepo (upamane Lyft Refactorator).

Kabutuhan gegayutan

Kita kudu ngembangake pipeline CI+CD supaya makarya apik karo git.

Artefak gegayutan

Kita ngarepake organisasi repo duwe artefak gegayutan kanggo provisioning, manajemen konfigurasi, tes, lan bidang devops sing padha.

Prinsip gegayutan

Gampang dibatalake. Yen monorepo ora makarya ing praktik, utawa ora dikarepake pimpinan, gampang diganti dadi polyrepo.

Obsesi Pelanggan. Kita ngajeni nyedhiyakake proyek marang pelanggan, lan kita pitados yen monorepo bisa nuntun kita menyang kana luwih cepet tinimbang polyrepo, lan uga mbiyantu iterasi luwih cepet.

Mikir gedhe. Google lan Facebook yaiku panyengkuyung kuwat monorepo tinimbang polyrepo, amarga kabeh tawaran inti bisa dikembangake/dites/disebar bebarengan.

Cathetan

Tambahna cathetan apa wae ing kene.