Rzucanie światła na strategie repozytorium kodu

Mono-repo i Multi-repo to dwie główne strategie hostingu i zarządzania kodem za pośrednictwem Git. Szczegółowo omawiamy zarówno strategie, jak i ich zalety i wady.

Wstęp

Większość nowoczesnych projektów jest zarządzana i hostowana na Git. Git stał się standardową platformą do zarządzania rozproszonym kodem źródłowym, kontroli wersji i współpracy z dowolnego miejsca na świecie. Git jest szybki i wydajny. Istnieją dwa główne podejścia do hostowania kodu Git i zarządzania nim:

Zanim zagłębimy się w te podejścia, zrozummy, jak działa repo.

Czym są repozytoria?

Repozytorium (Repo) zawiera wszystkie foldery i pliki Twojego projektu. Zawiera również informacje o użytkownikach, osobach i komputerach.

Dane repozytorium podlegają kontroli wersji. Repo może być własnością osoby lub grupy członków zespołu.

Git to repozytorium. Może być publiczny, prywatny lub wewnętrzny. GitHub to usługa hostingowa repozytorium Git i posiada interfejs użytkownika.

Git zapewnia kontrolę wersji i funkcje udostępniania kodu, jednak to, co wyróżnia Git, to fakt, że jeśli programiści chcą wprowadzić pewne zmiany w swoich plikach, mogą skopiować całe repozytorium do swojego systemu lokalnego. W ten sposób, nawet jeśli programista nie ma dostępu do zapisu w określonym projekcie, może skopiować zawartość lokalnie i zmodyfikować ją (tzw. forking).

Ponadto, jeśli deweloper chce udostępnić zmiany wprowadzone lokalnie, może wysłać „prośbę ściągnięcia” do właściciela projektu.

Projekt może mieć jedną usługę. Jeśli Twój projekt ma wiele przepływów pracy, możesz utworzyć wiele usług dla każdego przepływu pracy. Większość programistów woli dzielić większe projekty na mniejsze niezależne usługi, posiadające jedną lub więcej funkcji. Każda usługa może rozwiązać różne problemy biznesowe. Dzięki popularności frameworków bezserwerowych użytkownicy mogą uzyskiwać dostęp do funkcji jako usług.

Po utworzeniu tych funkcji jako usług i wdrożeniu ich następnym krokiem jest ich struktura i kontrola wersji – możesz mieć wszystkie swoje usługi w jednym repozytorium (mono-repo) – lub mieć osobne repozytorium dla każdej posiadanej usługi ( multi-repo)!

Co to jest Mono-repo?

W podejściu mono-repo możesz przechowywać wszystkie swoje usługi w jednym (mono) repozytorium. Nadal możesz wdrażać każdą usługę i zarządzać nią niezależnie. Usługi mogą udostępniać wspólne biblioteki i kod.

Firmy takie jak Facebook, Google i Dropbox używają mono-repo.

Zalety Mono-repo

Podejście mono-repo ma wiele zalet:

  • Jedno miejsce do przechowywania całego kodu projektu, dostępne dla wszystkich członków zespołu
  • Łatwy w ponownym użyciu i udostępnianiu kodu, współpracuj z zespołem
  • Łatwo zrozumieć wpływ Twojej zmiany na cały projekt
  • Najlepsza opcja do refaktoryzacji kodu i dużych zmian w kodzie
  • Członkowie zespołu mogą uzyskać ogólny widok całego projektu
  • Łatwe zarządzanie zależnościami

Wady Mono-repo

Oczywiście mono-repo ma pewne wady, z których najważniejszą jest wydajność. Jeśli projekt się rozrasta i co drugi dzień dodawanych jest więcej plików, wyewidencjonowywanie, ściąganie i inne operacje mogą być wolniejsze, a wyszukiwanie plików może potrwać dłużej.

Ponadto, jeśli zatrudniasz wielu niezależnych wykonawców do swojego projektu, udostępnienie im całej bazy kodu może nie być tak bezpieczne.

Ponadto trudno jest zaimplementować ciągłe wdrożenia (CD), ponieważ wiele osób może zaewidencjonować swoje zmiany, a system ciągłej integracji (CI) może wymagać wielu przebudów.

Duże firmy korzystające z repozytoriów mono mają dostosowane narzędzia do obsługi problemów związanych ze skalowaniem. Na przykład Facebook używa niestandardowego systemu plików i kontroli źródła.

Co to jest multirepo?

W podejściu multi-repo istnieje wiele repozytoriów, które obsługują kilka bibliotek i usług projektu. Jeśli usługa ulegnie zmianie, programiści muszą odbudować tylko tę usługę, a nie cały projekt. Osoby i zespoły mogą pracować nad swoimi konkretnymi usługami i uzyskują dostęp tylko do wymaganych usług.

Firmy takie jak Netflix i Amazon korzystają z wielu repozytoriów.

Zalety Multi-repo

Liczba firm stosujących multirepo jest znacznie większa niż tych, które wybierają mono-repo, z następujących powodów:

  • Każda usługa i biblioteka ma swoje własne wersje
  • Pobieranie kodu i pobieranie kodu są małe i oddzielne, dzięki czemu nie ma problemów z wydajnością, nawet jeśli rozmiar projektu rośnie
  • Zespoły mogą pracować niezależnie i nie muszą mieć dostępu do całej bazy kodu
  • Szybszy rozwój i elastyczność
  • Każda usługa może być wydana osobno i mieć własny cykl wdrażania, co ułatwia wdrożenie CI i CD
  • Lepsza kontrola dostępu – wszystkie zespoły nie muszą mieć pełnego dostępu do wszystkich bibliotek – ale w razie potrzeby mogą uzyskać dostęp do odczytu

Wady Multi-repo

  • Zależności i biblioteki używane w usługach i projektach muszą być regularnie synchronizowane, aby uzyskać najnowszą wersję
  • Zachęca w pewnym momencie do zamkniętej kultury, co prowadzi do zduplikowania kodu i prób rozwiązania tego samego problemu przez poszczególne zespoły
  • Każdy zespół może stosować inny zestaw najlepszych praktyk dotyczących swojego kodu, co powoduje trudności w przestrzeganiu wspólnych najlepszych praktyk

Różnice między Mono i Multi Repo

Podsumujmy różnice między mono-repo a multi-repo:

Monorepo
Wiele repozytoriów
Cały kod wszystkich projektów organizacji znajduje się w centralnym repozytorium
Każda usługa i projekt mają osobne repozytorium
Zespoły mogą współpracować i pracować razem; widzą nawzajem swoje zmiany
Zespoły mogą pracować autonomicznie; indywidualne zmiany nie wpływają na zmiany dokonywane przez inne zespoły lub projekty
Każda osoba otrzymuje dostęp do całej struktury projektu
Administratorzy mogą ograniczyć kontrolę dostępu do projektu lub usługi, do której programista potrzebuje dostępu
Problemy ze skalowaniem mogą wystąpić, jeśli rozmiar projektu stale rośnie
Dobra wydajność ze względu na ograniczony kod i mniejsze jednostki obsługi
Trudne do wdrożenia Continuous Deployment (CD) i Continuous Integration (CI)
Deweloperzy mogą łatwo uzyskać CD i CI, ponieważ mogą samodzielnie budować usługi
Deweloperzy mogą łatwo udostępniać biblioteki, interfejsy API i inny wspólny kod, gdy są one aktualizowane w centralnym repozytorium
Wszelkie zmiany w bibliotekach i innym wspólnym kodzie powinny być okresowo synchronizowane, aby uniknąć późniejszych problemów

Wniosek

Zarówno mono-repo, jak i multi-repo są równie popularne, a to, które z nich jest lepsze, zależy od wielkości projektu, wymagań projektu oraz wymaganego poziomu wersjonowania i kontroli dostępu.

Mono-repo sprzyja spójności, podczas gdy multi-repo skupia się na rozłączeniu. Podczas gdy w mono-repo cały zespół widzi zmiany dokonane przez jedną osobę, multi-repo tworzy osobne repozytorium dla każdego zespołu, który ma dostęp tylko do wymaganych usług. Jeśli chcesz użyć kombinacji mono-repo i multi-repo w swoich projektach, możesz wybrać metanarzędzie do zarządzania wieloma projektami i bibliotekami.

Możesz być również zainteresowany bezpłatnymi zasobami do nauki Git.