Mono-Repo против Multi-Repo: проливаем свет на стратегии репозитория кода

Опубликовано: 2021-12-22

Mono-repo и Multi-repo — это две основные стратегии размещения и управления кодом через Git. Мы подробно обсуждаем как стратегии, так и их плюсы и минусы.

Введение

Большинство современных проектов управляются и размещаются на Git. Git стал стандартной платформой для распределенного управления исходным кодом, контроля версий и совместной работы из любой точки мира. Git работает быстро и эффективно. Существует два основных подхода к размещению кода Git и управлению им:

  • монорепозиторий
  • Мультирепо

Прежде чем углубляться в эти подходы, давайте разберемся, как работает репо.

Что такое репо?

Репозиторий (Repo) содержит все папки и файлы вашего проекта. Он также содержит информацию о пользователях, людях и компьютерах.

Данные репозитория контролируются версиями. Репозиторий может принадлежать отдельному лицу или группе членов команды.

Git — это репозиторий. Он может быть общедоступным, частным или внутренним. GitHub — это служба хостинга репозитория Git с пользовательским интерфейсом.

Git предоставляет функции контроля версий и совместного использования кода, однако Git отличается тем, что если разработчики хотят внести некоторые изменения в свои файлы, они могут скопировать весь репозиторий в свою локальную систему. Таким образом, даже если у разработчика нет прав на запись в конкретный проект, он может локально копировать содержимое и изменять его (так называемое разветвление).

Кроме того, если разработчик хочет поделиться локальными изменениями, он может отправить «запрос на включение» владельцу проекта.

Проект может иметь один сервис. Если в вашем проекте несколько рабочих процессов, вы можете создать несколько сервисов для каждого рабочего процесса. Большинство разработчиков предпочитают разбивать большие проекты на более мелкие независимые службы, выполняющие одну или несколько функций. Каждый сервис может решать различные бизнес-задачи. Благодаря популярности бессерверных сред пользователи могут получать доступ к функциям как к службам.

После того, как вы создадите эти функции как службы и развернете их, следующим шагом будет их структурирование и управление версиями — вы можете иметь все свои службы в одном репозитории (моно-репозиторий) — или иметь отдельный репозиторий для каждой службы, которая у вас есть ( мультирепо)!

моно репо мульти репо

Что такое монорепозиторий?

В подходе с монорепозиторием вы можете хранить все свои сервисы в одном (моно) репозитории. Вы по-прежнему можете развертывать каждую службу и управлять ею независимо. Сервисы могут совместно использовать общие библиотеки и код.

Такие компании, как Facebook, Google и Dropbox, используют монорепозитории.

Преимущества монорепозитория

Подход моно-репо имеет много преимуществ:

  • Единое место для хранения всего кода проекта, доступ к которому может получить каждый член команды.
  • Легко повторно использовать и делиться кодом, сотрудничать с командой
  • Легко понять влияние ваших изменений на весь проект
  • Лучший вариант для рефакторинга кода и больших изменений кода
  • Члены команды могут получить общее представление обо всем проекте
  • Легко управлять зависимостями

Недостатки монорепозитория

Конечно, монорепозиторий имеет некоторые недостатки, главный из которых — производительность. Если ваш проект растет и через день добавляется больше файлов, извлечение, извлечение и другие операции могут замедлиться, а поиск файлов может занять больше времени.

Кроме того, если вы нанимаете много независимых подрядчиков для своего проекта, предоставление им доступа ко всей кодовой базе может быть не таким безопасным.

Кроме того, реализовать непрерывное развертывание (CD) сложно, потому что многие люди могут зафиксировать свои изменения, и вашей системе непрерывной интеграции (CI), возможно, придется выполнить несколько перестроек.

Крупные компании, использующие монорепозитории, имеют специализированные инструменты для решения проблем масштабирования. Например, Facebook использует собственную файловую систему и систему управления версиями.

Что такое мультирепо?

При подходе с несколькими репозиториями существует несколько репозиториев, в которых размещаются несколько библиотек и сервисов проекта. Если служба изменяется, разработчикам необходимо перестроить только эту службу, а не весь проект. Отдельные лица и группы могут работать над своими конкретными службами и получать доступ только к необходимым службам.

Такие компании, как Netflix и Amazon, используют мультирепозитории.

Преимущества мультирепо

Количество компаний, использующих мультирепо, намного больше, чем тех, которые используют монорепо, по следующим причинам:

  • Каждая служба и библиотека имеют собственную версию
  • Проверка и извлечение кода небольшие и отдельные, поэтому проблем с производительностью нет, даже если размер проекта увеличивается.
  • Команды могут работать независимо и не должны иметь доступ ко всей кодовой базе.
  • Более быстрая разработка и гибкость
  • Каждая услуга может быть выпущена отдельно и иметь собственный цикл развертывания, что упрощает внедрение CI и CD.
  • Улучшенный контроль доступа — всем командам не обязательно иметь полный доступ ко всем библиотекам, но при необходимости они могут получить доступ для чтения.

Недостатки мультирепо

  • Зависимости и библиотеки, используемые в сервисах и проектах, необходимо регулярно синхронизировать, чтобы получать последнюю версию.
  • В какой-то момент поощряет разрозненность культуры, что приводит к дублированию кода и попыткам отдельных команд решить одну и ту же проблему.
  • Каждая команда может следовать разным наборам лучших практик для своего кода, что вызывает трудности в следовании общим лучшим практикам.

Различия между моно и мульти репо

Давайте резюмируем различия между монорепо и мультирепо:

монорепозиторий Мультирепо
Весь код всех проектов организации находится в центральном репозитории. Каждый сервис и проект имеют отдельный репозиторий
Команды могут сотрудничать и работать вместе; они могут видеть изменения друг друга Команды могут работать автономно; индивидуальные изменения не влияют на изменения других команд или проектов
Каждый человек получает доступ ко всей структуре проекта Администраторы могут ограничить контроль доступа к проекту или сервису, к которым разработчику нужен доступ.
Проблемы с масштабированием могут возникнуть, если размер проекта продолжает расти Хорошая производительность из-за ограниченного кода и меньших единиц обслуживания
Сложно реализовать непрерывное развертывание (CD) и непрерывную интеграцию (CI) Разработчики могут легко достичь CD и CI, поскольку они могут создавать сервисы независимо друг от друга.
Разработчики могут легко обмениваться библиотеками, API и другим общим кодом по мере их обновления в центральном репозитории. Любые изменения в библиотеках и другом общем коде следует периодически синхронизировать, чтобы избежать проблем в дальнейшем.

Вывод

И монорепозиторий, и мультирепозиторий одинаково популярны, и какой из них лучше, зависит от размера вашего проекта, требований к проекту и необходимого вам уровня управления версиями и контроля доступа.

Монорепо способствует согласованности, тогда как мультирепо фокусируется на разделении. В то время как в монорепозитории вся команда может видеть изменения, внесенные одним человеком, мультирепо создает отдельное репо для каждой команды, у которой есть доступ только к необходимым службам. Если вы хотите использовать для своих проектов комбинацию монорепозиториев и мультирепозиториев, вы можете выбрать мета, инструмент для управления несколькими проектами и библиотеками.

Вас также могут заинтересовать бесплатные ресурсы для изучения Git.