Проливаємо світло на стратегії сховища коду

Моно-репо та мульти-репо — це дві основні стратегії розміщення та керування кодом через Git. Ми детально обговорюємо як стратегії, так і їх плюси та мінуси.

вступ

Більшість сучасних проектів управляються та розміщуються на Git. Git став стандартною платформою для управління розподіленим вихідним кодом, керування версіями та співпраці з будь-якої точки світу. Git швидкий і ефективний. Є два основні підходи до розміщення та керування кодом Git:

Перш ніж заглибитися в ці підходи, давайте розберемося, як працює репо.

Що таке репо?

Репозиторій (Repo) містить усі папки та файли вашого проекту. Він також містить інформацію про користувачів, людей і комп’ютери.

Дані сховища контролюються версіями. Репо може належати окремій особі або групі членів команди.

Git — це сховище. Він може бути публічним, приватним або внутрішнім. GitHub — це служба розміщення репозиторію Git і має інтерфейс користувача.

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

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

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

  Як виправити Kernel_task High CPU на Mac

Після того, як ви створите ці функції як послуги та розгорнете їх, наступним кроком стане їх структурування та контроль версій – ви можете мати всі свої служби в одному репозиторії (монорепозиторій) – або мати окреме сховище для кожної наявної служби ( мультирепо)!

Що таке монорепо?

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

Такі компанії, як Facebook, Google і Dropbox, використовують монорепо.

Переваги монорепо

Підхід монорепо має багато переваг:

  • Єдине місце для зберігання всього коду проекту, до якого можуть отримати доступ усі члени команди
  • Легко повторно використовувати та ділитися кодом, співпрацювати з командою
  • Легко зрозуміти вплив ваших змін на весь проект
  • Найкращий варіант для рефакторингу коду та великих змін коду
  • Члени команди можуть отримати загальне уявлення про весь проект
  • Легко керувати залежностями

Недоліки монорепо

Звичайно, монорепо має деякі недоліки, основним з яких є продуктивність. Якщо ваш проект розростається і щодня додається більше файлів, операції витягування, витягування та інші операції можуть сповільнюватися, а пошук файлів може тривати довше.

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

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

  Як видалити дані про місцезнаходження під час обміну фотографіями на iPhone

Великі компанії, які використовують монорепо, мають налаштовані інструменти для вирішення проблем масштабування. Наприклад, Facebook використовує спеціальну файлову систему та контроль джерел.

Що таке Multi-repo?

У підході з декількома сховищами є кілька сховищ, які містять кілька бібліотек і служб проекту. Якщо сервіс змінюється, розробникам потрібно перебудувати лише цей сервіс, а не весь проект. Окремі особи та групи можуть працювати над своїми спеціальними послугами, і вони отримують доступ лише до необхідних послуг.

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

Переваги Multi-repo

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

  • Кожна служба та бібліотека мають власну версію
  • Отримання та отримання коду є невеликими та окремими, тому немає проблем із продуктивністю, навіть якщо розмір проекту зростає
  • Команди можуть працювати незалежно і не потребують доступу до всієї кодової бази
  • Швидший розвиток і гнучкість
  • Кожну службу можна випустити окремо та мати власний цикл розгортання, що спрощує впровадження CI та CD
  • Кращий контроль доступу – усім командам не обов’язково мати повний доступ до всіх бібліотек – але за потреби вони можуть отримати доступ для читання

Недоліки Multi-repo

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

Відмінності між Mono і Multi Repo

Давайте повторимо відмінності між моно-репо та мульти-репо:

  9 платформ для розумного та легкого вертикального садівництва в приміщенні

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

Висновок

Як моно-, так і мульти-репо однаково популярні, і який із них кращий, залежить від розміру вашого проекту, вимог до проекту та необхідного вам рівня управління версіями та контролю доступу.

Моно-репо надає перевагу узгодженості, тоді як мульти-репо зосереджується на відокремленні. У той час як у монорепо вся команда може бачити зміни, внесені однією особою, мультирепо створює окреме репо для кожної команди, яка має доступ лише до необхідних служб. Якщо ви хочете використовувати комбінацію монорепо та мультирепо для своїх проектів, ви можете вибрати метаінструмент для керування кількома проектами та бібліотеками.

Вас також можуть зацікавити безкоштовні ресурси для вивчення Git.