Хвърляне на светлина върху стратегиите за хранилища на кодове

Mono-repo и Multi-repo са две основни стратегии за хостване и управление на код чрез Git. Обсъждаме подробно както стратегиите, така и техните плюсове и минуси.

Въведение

Повечето от съвременните проекти се управляват и хостват на Git. Git се превърна в стандартна платформа за управление на разпределен изходен код, контрол на версиите и сътрудничество от всяка точка на света. Git е бърз и ефективен. Има два основни подхода за хостване и управление на вашия Git код:

Преди да се заровим в тези подходи, нека разберем как работи репо.

Какво представляват Repos?

Хранилище (Repo) съдържа всички папки и файлове на вашия проект. Той също така съдържа информация за потребители, хора и компютри.

Данните от хранилището се контролират от версия. Репото може да бъде собственост на физическо лице или група членове на екипа.

Git е хранилище. Тя може да бъде публична, частна или вътрешна. GitHub е хостинг услуга на Git хранилище и има потребителски интерфейс.

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

Освен това, ако разработчикът иска да сподели локално направени промени, той може да изпрати „заявка за изтегляне“ до собственика на проекта.

Един проект може да има една услуга. Ако вашият проект има множество работни потоци, можете да създадете множество услуги за всеки работен поток. Повечето разработчици предпочитат да разделят по-големите проекти на по-малки независими услуги, имащи една или повече функции. Всяка услуга може да реши различни бизнес проблеми. С популярността на безсървърните рамки, потребителите могат да имат достъп до функции като услуги.

  Как да поправите автоматично вашите изкривени снимки на iPhone

След като създадете тези функции като услуги и ги внедрите, следващата стъпка е да ги структурирате и контролирате версиите – можете да имате всичките си услуги в едно хранилище (моно-репо) – или да имате отделно хранилище за всяка услуга, която имате ( мултирепо)!

Какво е монорепо?

При моно-репо подход можете да съхранявате всичките си услуги в едно (моно) хранилище. Все още можете да внедрите и управлявате всяка услуга независимо. Услугите могат да споделят общи библиотеки и код.

Компании като Facebook, Google и Dropbox използват монорепо.

Предимства на Mono-repo

Mono-repo подходът има много предимства:

  • Едно място за съхраняване на целия код на проекта и достъпно за всеки в екипа
  • Лесен за повторно използване и споделяне на код, сътрудничете с екипа
  • Лесно за разбиране въздействието на вашата промяна върху целия проект
  • Най-добрият вариант за рефакторинг на код и големи промени в кода
  • Членовете на екипа могат да получат цялостен поглед върху целия проект
  • Лесни за управление зависимости

Недостатъци на Mono-repo

Разбира се, mono-repo има някои недостатъци, основният от които е производителността. Ако проектът ви се разраства и през ден се добавят повече файлове, операциите за изтегляне, изтегляне и други операции може да станат бавни и търсенето на файлове може да отнеме повече време.

Освен това, ако наемете много независими изпълнители за вашия проект, предоставянето на достъп до цялата кодова база може да не е толкова сигурно.

  Как да намерите и изтриете дублиращи се снимки на вашия iPhone

Освен това е трудно да се приложат непрекъснати внедрявания (CD), тъй като много хора могат да проверят промените си и вашата система за непрекъсната интеграция (CI) може да трябва да извърши множество реконструкции.

Големите компании, които използват монорепо, имат персонализирани инструменти за справяне с проблемите с мащабирането. Например Facebook използва персонализирана файлова система и контрол на източника.

Какво е Multi-repo?

При подход с множество репо има множество хранилища, които хостват няколко библиотеки и услуги на даден проект. Ако дадена услуга се промени, разработчиците трябва да възстановят само тази услуга, а не целия проект. Индивидите и екипите могат да работят върху своите специфични услуги и получават достъп само до необходимите услуги.

Компании като Netflix и Amazon използват мултирепо сделки.

Предимства на Multi-repo

Броят на компаниите, които приемат мулти-репо, е много повече от тези, които избират моно-репо, поради следните причини:

  • Всяка услуга и библиотека имат собствена версия
  • Изтеглянето и изтеглянето на кода са малки и отделни, поради което няма проблеми с производителността, дори ако размерът на проекта нараства
  • Екипите могат да работят независимо и не е необходимо да имат достъп до цялата кодова база
  • По-бързо развитие и гъвкавост
  • Всяка услуга може да бъде пусната отделно и да има свой собствен цикъл на внедряване, което прави CI и CD по-лесни за внедряване
  • По-добър контрол на достъпа – не е необходимо всички екипи да имат пълен достъп до всички библиотеки – но могат да получат достъп за четене, ако имат нужда

Недостатъци на Multi-repo

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

Разлики между Mono и Multi Repo

Нека повторим разликите между моно-репо и мулти-репо:

Моно-репо
Мултирепо
Целият код на всички проекти на една организация се намира в централно хранилище
Всяка услуга и проект имат отделно хранилище
Екипите могат да си сътрудничат и да работят заедно; те могат да виждат промените един на друг
Екипите могат да работят автономно; индивидуалните промени не засягат промените от други екипи или проекти
Всеки човек получава достъп до цялата структура на проекта
Администраторите могат да ограничат контрола на достъпа до проекта или услугата, до които програмистът се нуждае от достъп
Проблеми с мащабирането могат да възникнат, ако размерът на проекта продължава да расте
Добра производителност поради ограничения код и по-малките единици услуга
Трудно внедряване на непрекъснато внедряване (CD) и непрекъсната интеграция (CI)
Разработчиците могат лесно да постигнат CD и CI, защото могат да изграждат услуги независимо
Разработчиците могат лесно да споделят библиотеки, API и друг общ код, докато се актуализират в централното хранилище
Всички промени в библиотеките и друг общ код трябва периодично да се синхронизират, за да се избегнат проблеми по-късно

Заключение

Както моно-репо, така и мулти-репо са еднакво популярни и кой е по-добър зависи от размера на вашия проект, изискванията на проекта и нивото на управление на версиите и контрол на достъпа, от които се нуждаете.

Mono-repo благоприятства последователността, докато multi-repo се фокусира върху отделянето. Докато в моно-репо целият екип може да види промените, направени от един човек, мулти-репо създава отделно репо за всеки екип, който има достъп само до необходимите услуги. Ако искате да използвате комбинация от моно-репо и мулти-репо за вашите проекти, можете да изберете метаинструмент за управление на множество проекти и библиотеки.

Може също да се интересувате от безплатни ресурси за изучаване на Git.