Architecture Decision Record

Active theme: Light

← Примери за записи на решения

Monorepo или multirepo

Съдържание:

Резюме

Проблем

Нашият проект включва разработването на три основни категории софтуер:

  • Front-end графични интерфейси
  • Междинни услуги (middleware)
  • Back-end сървъри

Когато разработваме, нашата система за контрол на версиите (VCS) за управление на изходния код (SCM) е git.

Трябва да изберем как да използваме git за организиране на кода ни.

Основният избор е да организираме като „monorepo“, „polyrepo“ или „hybrid“:

  • Monorepo означава, че слагаме всички части в едно голямо хранилище
  • Polyrepo означава, че слагаме всяка част в собствено хранилище
  • Hybrid означава някаква комбинация от monorepo и polyrepo

За повече информация вижте https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Решение

Monorepo, когато организацията/екипът/проектът е относително малък и бързото итериране е с по-висок приоритет от поддържането на стабилност.

Polyrepo, когато организацията/екипът/проектът е относително голям и поддържането на стабилност е с по-висок приоритет от бързото итериране.

Състояние

Взето. Открити сме да преразгледаме, ако/когато станат налични нови инструменти за управление на monorepo и/или polyrepo.

Подробности

Допускания

Целият код, който разработваме, е за предложенията на една организация, а не за широката общественост. Т.е. Broker-Dealer няма за цел да има нещо като доброволци разработчици от широката общественост.

Ограничения

Ограниченията са добре документирани на https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Позиции

Разгледахме monorepo в стила на Google, Facebook и др. Смятаме, че всички проблеми с мащабирането на monorepo са толкова далеч в бъдещето, че докато ни потрябват, ще можем да използваме същите практики като Google и Facebook.

Разгледахме polyrepo в стила на типични проекти с отворен код в Git, като Google Android, Facebook React и др. Смятаме, че те са най-добрият избор за участие на широката общественост (напр. всеки в света може да работи по кода) и индивидуална достъпност (напр. проектът се използва самостоятелно, без други части).

Аргумент

Когато организацията/екипът/проектът е относително малък, избираме monorepo, защото бързото итериране е значително по-висок приоритет от поддържането на стабилност

Когато организацията/екипът/проектът е относително голям, избираме polyrepo, защото поддържането на стабилност е значително по-висок приоритет от бързото итериране.

Последици

Ако съществува конвейер за CI+CD, може да се наложи да го коригираме за тестване на множество проекти в едно хранилище.

CI+CD може да отнеме повече време за пълно изграждане на monorepo, защото CI+CD може да изгражда всички проекти в monorepo.

Ако организацията/екипът/проектът расте, monorepo ще има проблеми с мащабирането.

Проблемите с мащабирането на monorepo могат да направят преходът към polyrepo все по-ценен.

Преходът от monorepo към polyrepo е значителна devops задача и ще трябва да бъде планиран, управляван и програмиран.

Свързани

Свързани решения

Ще създадем решения за свързани инструменти за управление на monorepo (напр. Google Bazel) и polyrepo (напр. Lyft Refactorator).

Свързани изисквания

Трябва да разработим CI+CD конвейера да работи добре с git.

Свързани артефакти

Очакваме организацията на хранилището да има свързани артефакти за осигуряване на ресурси (provisioning), управление на конфигурацията, тестване и подобни devops области.

Свързани принципи

Лесно обратимо. Ако monorepo не работи на практика или не е желано от ръководството, лесно е да се премине към polyrepo.

Обсебеност от клиента. Ценим довеждането на проекта до клиентите и вярваме, че monorepo може да ни доведе дотам по-бързо от polyrepo, а също да ни помогне да итерираме по-бързо.

Мисли мащабно. Google и Facebook са много силни привърженици на monorepo пред polyrepo, защото всички основни предложения могат да се разработват/тестват/внедряват съгласувано.

Бележки

Добавете бележки тук.