Architecture Decision Record

Active theme: Light

← Exempel på beslutsposter

Monorepo eller multirepo

Innehåll:

Sammanfattning

Problem

Vårt projekt innebär att utveckla tre huvudkategorier av programvara:

  • Frontend-GUI:n
  • Mellanvarutjänster
  • Backend-servrar

När vi utvecklar är vårt versionshanteringssystem (VCS) för källkodshantering (SCM) git.

Vi behöver välja hur vi använder git för att organisera vår kod.

Valet på toppnivå är att organisera som ”monorepo” eller ”polyrepo” eller ”hybrid”:

  • Monorepo innebär att vi lägger alla delar i ett stort repo
  • Polyrepo innebär att vi lägger varje del i sitt eget repo
  • Hybrid innebär någon blandning av monorepo och polyrepo

För mer information, se https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Beslut

Monorepo när en organisation/ett team/ett projekt är relativt litet och snabb iteration har högre prioritet än att upprätthålla stabilitet.

Polyrepo när en organisation/ett team/ett projekt är relativt stort och att upprätthålla stabilitet har högre prioritet än snabb iteration.

Status

Beslutat. Öppet för omprövning om/när nya verktyg blir tillgängliga för att hantera monorepon och/eller polyrepon.

Detaljer

Antaganden

All kod som vi utvecklar är för en organisations erbjudanden och inte för allmänheten. Det vill säga att Broker-Dealer inte siktar på att ha något som liknar frivilliga utvecklare från allmänheten.

Begränsningar

Begränsningar är väldokumenterade på https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Ståndpunkter

Vi övervägde monorepon i stil med Google, Facebook osv. Vi tror att eventuella skalningsproblem med monorepon ligger så långt fram i tiden att vi kommer att kunna utnyttja samma metoder som Google och Facebook när vi behöver dem.

Vi övervägde polyrepon i stil med typiska Git-projekt med öppen källkod, som Google Android, Facebook React osv. Vi tror att dessa är det bästa valet för allmänhetens deltagande (t.ex. vem som helst i världen kan arbeta med koden) och individuell tillgänglighet (t.ex. projektet används fristående, utan några andra delar).

Argument

När en organisation/ett team/ett projekt är relativt litet väljer vi monorepo, eftersom snabb iteration har betydligt högre prioritet än att upprätthålla stabilitet

När en organisation/ett team/ett projekt är relativt stort väljer vi polyrepo, eftersom att upprätthålla stabilitet har betydligt högre prioritet än snabb iteration.

Implikationer

Om det redan finns en pipeline för CI+CD kan vi behöva justera den för att testa flera projekt i ett repo.

CI+CD kan ta mer tid för ett fullständigt bygge för ett monorepo, eftersom CI+CD kan bygga alla projekt i monorepot.

Om en organisation/ett team/ett projekt växer kommer ett monorepo att få skalningsproblem.

Skalningsproblem med monorepon kan göra det alltmer värdefullt att övergå till ett polyrepo.

Övergången från monorepo till polyrepo är en betydande devops-uppgift och måste planeras, hanteras och programmeras.

Relaterat

Relaterade beslut

Vi kommer att skapa beslut för relaterade verktyg för att hantera monorepon (t.ex. Google Bazel) och polyrepon (t.ex. Lyft Refactorator).

Relaterade krav

Vi behöver utveckla CI+CD-pipelinen så att den fungerar väl med git.

Relaterade artefakter

Vi förväntar oss att repoorganisationen har relaterade artefakter för provisionering, konfigurationshantering, testning och liknande devops-områden.

Relaterade principer

Lätt att ångra. Om monorepot inte fungerar i praktiken, eller inte önskas av ledningen, är det enkelt att byta till polyrepo.

Kundfixering. Vi värdesätter att få projektet i kundernas händer, och vi tror att ett monorepo kan få oss dit snabbare än ett polyrepo, och även hjälpa oss att iterera snabbare.

Tänk stort. Google och Facebook är mycket starka förespråkare för monorepon framför polyrepon, eftersom alla kärnerbjudanden kan utvecklas/testas/driftsättas i samklang.

Anteckningar

Lägg till eventuella anteckningar här.