Architecture Decision Record

Active theme: Light

← Eżempji ta' rekords ta' deċiżjoni

Monorepo jew multirepo

Werrej:

Sommarju

Kwistjoni

Il-proġett tagħna jinvolvi l-iżvilupp ta' tliet kategoriji ewlenin ta' software:

  • GUIs front-end
  • Servizzi middleware
  • Servers back-end

Meta nżviluppaw, is-sistema tagħna tal-kontroll tal-verżjonijiet (VCS) tal-ġestjoni tal-kodiċi sors (SCM) hija git.

Neħtieġu nagħżlu kif nużaw git biex niorganizzaw il-kodiċi tagħna.

L-għażla ta' livell għoli hija li niorganizzaw bħala "monorepo" jew "polyrepo" jew "ibrida":

  • Monorepo ifisser li npoġġu l-biċċiet kollha f'repo kbir wieħed
  • Polyrepo ifisser li npoġġu kull biċċa fir-repo tagħha stess
  • Ibrida tfisser taħlita ta' monorepo u polyrepo

Għal aktar jekk jogħġbok ara https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Deċiżjoni

Monorepo meta organizzazzjoni/tim/proġett ikun relattivament żgħir, u l-iterazzjoni mgħaġġla tkun ta' prijorità ogħla mill-żamma tal-istabbiltà.

Polyrepo meta organizzazzjoni/tim/proġett ikun relattivament kbir, u ż-żamma tal-istabbiltà tkun ta' prijorità ogħla mill-iterazzjoni mgħaġġla.

Stat

Deċiż. Miftuħin biex nerġgħu nirrevedu jekk/meta jsiru disponibbli għodod ġodda għall-ġestjoni ta' monorepos u/jew polyrepos.

Dettalji

Suppożizzjonijiet

Il-kodiċi kollu li qed niżviluppaw huwa għall-offerti ta' organizzazzjoni waħda, u mhux għall-pubbliku ġenerali. Jiġifieri l-Broker-Dealer m'għandux l-għan li jkollu xi ħaġa bħal żviluppaturi voluntiera mill-pubbliku ġenerali.

Restrizzjonijiet

Ir-restrizzjonijiet huma dokumentati tajjeb f'https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Pożizzjonijiet

Ikkunsidrajna monorepos fl-istil ta' Google, Facebook, eċċ. Aħna naħsbu li kwalunkwe kwistjoni ta' skalar ta' monorepo hija tant 'il bogħod fil-futur li se nkunu nistgħu nisfruttaw l-istess prattiki ta' Google u Facebook, sa meta nkunu neħtieġuhom.

Ikkunsidrajna polyrepos fl-istil ta' proġetti open source tipiċi ta' Git, bħal Google Android, Facebook React, eċċ. Aħna naħsbu li dawn huma l-aħjar għażla għall-parteċipazzjoni tal-pubbliku ġenerali (eż. kulħadd fid-dinja jista' jaħdem fuq il-kodiċi) u d-disponibbiltà individwali (eż. il-proġett jintuża waħdu, mingħajr ebda biċċa oħra).

Argument

Meta organizzazzjoni/tim/proġett ikun relattivament żgħir, nagħżlu monorepo, għax l-iterazzjoni mgħaġġla hija ferm ogħla fil-prijorità mill-żamma tal-istabbiltà

Meta organizzazzjoni/tim/proġett ikun relattivament kbir, nagħżlu polyrepo, għax iż-żamma tal-istabbiltà hija ferm ogħla fil-prijorità mill-iterazzjoni mgħaġġla.

Implikazzjonijiet

Jekk hemm pipeline eżistenti għal CI+CD, allura jista' jkun li neħtieġu naġġustawha biex tittestja proġetti multipli fi ħdan repo wieħed.

CI+CD jista' jieħu aktar ħin għal bini sħiħ ta' monorepo, għax CI+CD jista' jibni l-proġetti kollha fil-monorepo.

Jekk organizzazzjoni/tim/proġett jikber, allura monorepo se jkollu kwistjonijiet ta' skalar.

Il-kwistjonijiet ta' skalar tal-monorepo jistgħu jagħmlu tranżizzjoni għal polyrepo dejjem aktar siewja.

It-tranżizzjoni minn monorepo għal polyrepo hija kompitu devops sinifikanti, u se jkollha bżonn tiġi ppjanata, immaniġġjata, u mprogrammata.

Relatati

Deċiżjonijiet relatati

Se noħolqu deċiżjonijiet għall-għodod relatati biex jimmaniġġjaw monorepos (eż. Google Bazel) u polyrepos (eż. Lyft Refactorator).

Rekwiżiti relatati

Neħtieġu nżviluppaw il-pipeline CI+CD biex taħdem tajjeb ma' git.

Artefatti relatati

Nistennew li l-organizzazzjoni tar-repo jkollha artefatti relatati għall-provvediment, il-ġestjoni tal-konfigurazzjoni, l-ittestjar, u oqsma devops simili.

Prinċipji relatati

Faċilment riversibbli. Jekk il-monorepo ma jaħdimx fil-prattika, jew ma jkunx mixtieq mit-tmexxija, huwa sempliċi li jinbidel għal polyrepo.

Ossessjoni mal-klijent. Aħna napprezzaw li l-proġett jitpoġġa f'idejn il-klijenti, u nemmnu li monorepo jista' jwassalna hemm aktar malajr minn polyrepo, u jgħinna wkoll nirripetu aktar malajr.

Aħseb kbir. Google u Facebook huma sostenituri b'saħħithom ħafna tal-monorepos fuq il-polyrepos, għax l-offerti ewlenin kollha jistgħu jiġu żviluppati/ittestjati/mqiegħda flimkien.

Noti

Żid kwalunkwe noti hawn.