Mono-Repo vs Multi-Repo: rzucanie światła na strategie repozytorium kodu
Opublikowany: 2021-12-22Mono-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:
- Monorepo
- Wiele repozytoriów
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 go, 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. Wraz z 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 obraz 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ą stać się 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 multi-repo jest znacznie większa niż tych, które wybierają mono-repo, z następujących powodów:
- Każda usługa i biblioteka ma własne wersjonowanie
- Pobieranie kodu i ściąganie kodu jest 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 do istnienia w pewnym momencie 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 i 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 wciąż 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ół może zobaczyć zmiany wprowadzone 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żywać kombinacji mono-repo i multi-repo dla swoich projektów, możesz wybrać meta, narzędzie do zarządzania wieloma projektami i bibliotekami.
Możesz być również zainteresowany bezpłatnymi zasobami do nauki Git.