Architecture Decision Record

Active theme: Light

← Primeri zapisov odločitev

Monorepo ali multirepo

Vsebina:

Povzetek

Vprašanje

Naš projekt vključuje razvoj treh glavnih kategorij programske opreme:

  • Grafični uporabniški vmesniki
  • Storitve vmesne programske opreme (middleware)
  • Zaledni strežniki

Pri razvoju je naš sistem za upravljanje izvorne kode (SCM) oziroma nadzor različic (VCS) git.

Odločiti se moramo, kako z gitom organiziramo svojo kodo.

Izbira na najvišji ravni je organizacija kot »monorepo«, »polyrepo« ali »hibrid«:

  • Monorepo pomeni, da vse dele damo v en velik repozitorij
  • Polyrepo pomeni, da vsak del damo v svoj repozitorij
  • Hibrid pomeni neko mešanico monorepa in polyrepa

Za več glejte https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Odločitev

Monorepo, kadar je organizacija/ekipa/projekt razmeroma majhen in je hitra iteracija večja prednostna naloga kot ohranjanje stabilnosti.

Polyrepo, kadar je organizacija/ekipa/projekt razmeroma velik in je ohranjanje stabilnosti večja prednostna naloga kot hitra iteracija.

Stanje

Odločeno. Odprti smo za ponovno preučitev, če in ko bodo na voljo nova orodja za upravljanje monorepov in/ali polyrepov.

Podrobnosti

Predpostavke

Vsa koda, ki jo razvijamo, je za ponudbe ene organizacije in ne za splošno javnost. Tj. posrednik-trgovec (Broker-Dealer) ne namerava imeti nečesa takega, kot so prostovoljni razvijalci iz splošne javnosti.

Omejitve

Omejitve so dobro dokumentirane na https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Stališča

Preučili smo monorepe v slogu Googla, Facebooka itd. Menimo, da so morebitne težave s skaliranjem monorepa tako daleč v prihodnosti, da bomo do časa, ko jih bomo potrebovali, lahko izkoristili enake prakse kot Google in Facebook.

Preučili smo polyrepe v slogu tipičnih odprtokodnih projektov Git, kot sta Google Android, Facebook React itd. Menimo, da so to najboljša izbira za sodelovanje splošne javnosti (npr. na kodi lahko dela kdor koli na svetu) in samostojno razpoložljivost (npr. projekt se uporablja samostojno, brez drugih delov).

Argument

Kadar je organizacija/ekipa/projekt razmeroma majhen, izberemo monorepo, ker je hitra iteracija občutno višja prednostna naloga kot ohranjanje stabilnosti

Kadar je organizacija/ekipa/projekt razmeroma velik, izberemo polyrepo, ker je ohranjanje stabilnosti občutno višja prednostna naloga kot hitra iteracija.

Posledice

Če že obstaja cevovod za CI+CD, ga bomo morda morali prilagoditi za testiranje več projektov znotraj enega repozitorija.

CI+CD lahko za monorepo potrebuje več časa za polno gradnjo, ker lahko CI+CD zgradi vse projekte v monorepu.

Če organizacija/ekipa/projekt raste, bo imel monorepo težave s skaliranjem.

Težave s skaliranjem monorepa lahko vedno bolj upravičujejo prehod na polyrepo.

Prehod z monorepa na polyrepo je pomembna naloga DevOps in jo bo treba načrtovati, upravljati in programirati.

Povezano

Povezane odločitve

Ustvarili bomo odločitve za sorodna orodja za upravljanje monorepov (npr. Google Bazel) in polyrepov (npr. Lyft Refactorator).

Povezane zahteve

Cevovod CI+CD moramo razviti tako, da bo dobro deloval z gitom.

Povezani artefakti

Pričakujemo, da bo organizacija repozitorijev imela sorodne artefakte za zagotavljanje virov, upravljanje konfiguracije, testiranje in podobna področja DevOps.

Povezana načela

Lahko povratljivo. Če monorepo v praksi ne deluje ali ga vodstvo ne želi, je prehod na polyrepo preprost.

Obsedenost s strankami. Cenimo, da projekt pride v roke strankam, in verjamemo, da nas lahko monorepo tja pripelje hitreje kot polyrepo ter nam tudi pomaga hitreje iterirati.

Razmišljajte veliko. Google in Facebook sta zelo močna zagovornika monorepov pred polyrepi, ker je mogoče vse temeljne ponudbe razvijati/testirati/uvajati usklajeno.

Opombe

Tu dodajte vse opombe.