Architecture Decision Record

Active theme: Light

← Příklady záznamů rozhodnutí

Monorepo nebo multirepo

Obsah:

Shrnutí

Problém

Náš projekt zahrnuje vývoj tří hlavních kategorií softwaru:

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

Při vývoji je naším systémem správy zdrojového kódu (SCM) a správy verzí (VCS) git.

Musíme zvolit, jak použijeme git k organizaci našeho kódu.

Zásadní volbou je organizovat jako „monorepo“, „polyrepo“ nebo „hybrid“:

  • Monorepo znamená, že všechny části dáme do jednoho velkého repozitáře
  • Polyrepo znamená, že každou část dáme do vlastního repozitáře
  • Hybrid znamená určitou kombinaci monorepa a polyrepa

Více viz https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Rozhodnutí

Monorepo, když je organizace/tým/projekt relativně malý a rychlá iterace má vyšší prioritu než udržení stability.

Polyrepo, když je organizace/tým/projekt relativně velký a udržení stability má vyšší prioritu než rychlá iterace.

Stav

Rozhodnuto. Jsme otevřeni k přehodnocení, pokud a když budou k dispozici nové nástroje pro správu monorepozitářů a/nebo polyrepozitářů.

Podrobnosti

Předpoklady

Veškerý kód, který vyvíjíme, je určen pro nabídky jedné organizace, nikoli pro širokou veřejnost. Tj. Broker-Dealer nemá v úmyslu mít nic jako dobrovolné vývojáře z široké veřejnosti.

Omezení

Omezení jsou dobře zdokumentována na https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Stanoviska

Zvažovali jsme monorepa ve stylu Googlu, Facebooku atd. Domníváme se, že jakékoli problémy se škálováním monorepa jsou tak vzdálené v budoucnosti, že než je budeme potřebovat, budeme moci využít stejné postupy jako Google a Facebook.

Zvažovali jsme polyrepa ve stylu typických open source projektů v Gitu, jako Google Android, Facebook React atd. Domníváme se, že jsou nejlepší volbou pro účast široké veřejnosti (např. kdokoli na světě může pracovat na kódu) a individuální dostupnost (např. projekt se používá samostatně, bez jakýchkoli dalších částí).

Argument

Když je organizace/tým/projekt relativně malý, volíme monorepo, protože rychlá iterace má výrazně vyšší prioritu než udržení stability

Když je organizace/tým/projekt relativně velký, volíme polyrepo, protože udržení stability má výrazně vyšší prioritu než rychlá iterace.

Důsledky

Pokud existuje stávající pipeline pro CI+CD, možná ji bude nutné upravit pro testování více projektů v jednom repozitáři.

CI+CD může trvat déle při úplném sestavení monorepa, protože CI+CD může sestavovat všechny projekty v monorepu.

Pokud organizace/tým/projekt roste, monorepo bude mít problémy se škálováním.

Problémy se škálováním monorepa mohou činit přechod na polyrepo stále cennějším.

Přechod z monorepa na polyrepo je významný devops úkol a bude třeba ho naplánovat, řídit a naprogramovat.

Související

Související rozhodnutí

Vytvoříme rozhodnutí pro související nástroje pro správu monorepozitářů (např. Google Bazel) a polyrepozitářů (např. Lyft Refactorator).

Související požadavky

Potřebujeme vyvinout pipeline CI+CD tak, aby dobře fungovala s gitem.

Související artefakty

Očekáváme, že organizace repozitářů bude mít související artefakty pro provisioning, správu konfigurace, testování a podobné devops oblasti.

Související principy

Snadno vratné. Pokud monorepo v praxi nefunguje nebo ho vedení nechce, je jednoduché přejít na polyrepo.

Posedlost zákazníkem. Ceníme si toho, že projekt dostaneme do rukou zákazníků, a věříme, že monorepo nás tam dostane rychleji než polyrepo a také nám pomůže rychleji iterovat.

Myslete ve velkém. Google a Facebook jsou velmi silnými zastánci monorepozitářů před polyrepozitáři, protože všechny základní nabídky lze vyvíjet/testovat/nasazovat společně.

Poznámky

Sem přidejte jakékoli poznámky.