Architecture Decision Record

Active theme: Light

← Príklady záznamov rozhodnutí

Monorepo alebo multirepo

Obsah:

Zhrnutie

Problém

Náš projekt zahŕňa vývoj troch hlavných kategórií softvéru:

  • Front-endové GUI
  • Middlewarové služby
  • Back-endové servery

Pri vývoji je naším systémom správy zdrojového kódu (SCM) a verzovania (VCS) git.

Musíme zvoliť, ako použijeme git na organizáciu nášho kódu.

Základnou voľbou je organizovať ako „monorepo“, „polyrepo“ alebo „hybrid“:

  • Monorepo znamená, že všetky časti dáme do jedného veľkého repozitára
  • Polyrepo znamená, že každú časť dáme do vlastného repozitára
  • Hybrid znamená nejakú zmes monorepa a polyrepa

Viac nájdete na https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Rozhodnutie

Monorepo, keď je organizácia/tím/projekt relatívne malý a rýchla iterácia má vyššiu prioritu než udržiavanie stability.

Polyrepo, keď je organizácia/tím/projekt relatívne veľký a udržiavanie stability má vyššiu prioritu než rýchla iterácia.

Stav

Rozhodnuté. Sme otvorení opätovnému posúdeniu, ak/keď budú dostupné nové nástroje na správu monorepozitárov a/alebo polyrepozitárov.

Podrobnosti

Predpoklady

Všetok kód, ktorý vyvíjame, je určený pre ponuky jednej organizácie a nie pre širokú verejnosť. T. j. Broker-Dealer nemá v úmysle mať nič ako dobrovoľných vývojárov z radov širokej verejnosti.

Obmedzenia

Obmedzenia sú dobre zdokumentované na https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Pozície

Zvažovali sme monorepá v štýle Googlu, Facebooku atď. Myslíme si, že akékoľvek problémy so škálovaním monorepa sú tak ďaleko v budúcnosti, že kým ich budeme potrebovať, budeme môcť využiť rovnaké postupy ako Google a Facebook.

Zvažovali sme polyrepá v štýle typických open source projektov v Gite, ako Google Android, Facebook React atď. Myslíme si, že sú najlepšou voľbou pre účasť širokej verejnosti (napr. ktokoľvek na svete môže pracovať na kóde) a individuálnu dostupnosť (napr. projekt sa používa samostatne, bez akýchkoľvek ďalších častí).

Argument

Keď je organizácia/tím/projekt relatívne malý, zvolíme monorepo, pretože rýchla iterácia má výrazne vyššiu prioritu než udržiavanie stability

Keď je organizácia/tím/projekt relatívne veľký, zvolíme polyrepo, pretože udržiavanie stability má výrazne vyššiu prioritu než rýchla iterácia.

Dôsledky

Ak existuje pipeline pre CI+CD, možno ju bude potrebné upraviť na testovanie viacerých projektov v jednom repozitári.

CI+CD môže trvať dlhšie pri úplnom zostavení monorepa, pretože CI+CD môže zostavovať všetky projekty v monorepe.

Ak organizácia/tím/projekt rastie, monorepo bude mať problémy so škálovaním.

Problémy so škálovaním monorepa môžu robiť prechod na polyrepo čoraz hodnotnejším.

Prechod z monorepa na polyrepo je významná devops úloha a bude ju treba naplánovať, riadiť a naprogramovať.

Súvisiace

Súvisiace rozhodnutia

Vytvoríme rozhodnutia pre súvisiace nástroje na správu monorepozitárov (napr. Google Bazel) a polyrepozitárov (napr. Lyft Refactorator).

Súvisiace požiadavky

Musíme vyvinúť pipeline CI+CD tak, aby dobre fungovala s gitom.

Súvisiace artefakty

Očakávame, že organizácia repozitárov bude mať súvisiace artefakty pre provisioning, správu konfigurácie, testovanie a podobné devops oblasti.

Súvisiace princípy

Ľahko vratné. Ak monorepo v praxi nefunguje alebo ho vedenie nechce, je jednoduché prejsť na polyrepo.

Posadnutosť zákazníkom. Ceníme si doručenie projektu do rúk zákazníkov a veríme, že monorepo nás tam môže dostať rýchlejšie než polyrepo a tiež nám pomôcť rýchlejšie iterovať.

Mysli vo veľkom. Google a Facebook sú veľmi silní zástancovia monorepozitárov pred polyrepozitármi, pretože všetky základné ponuky možno vyvíjať/testovať/nasadzovať súhrnne.

Poznámky

Sem pridajte poznámky.