Vrhat světlo na strategie úložiště kódu

Mono-repo a Multi-repo jsou dvě hlavní strategie pro hostování a správu kódu přes Git. Podrobně probíráme jak strategie, tak jejich klady a zápory.

Úvod

Většina moderních projektů je spravována a hostována na Git. Git se stal standardní platformou pro správu distribuovaného zdrojového kódu, správu verzí a spolupráci odkudkoli na světě. Git je rychlý a efektivní. Existují dva hlavní přístupy k hostování a správě kódu Git:

Než se pustíme do těchto přístupů, pojďme pochopit, jak funguje repo.

Co jsou Repos?

Úložiště (Repo) obsahuje všechny složky a soubory vašeho projektu. Obsahuje také informace o uživatelích, lidech a počítačích.

Data úložiště jsou řízena verzí. Repo může vlastnit jednotlivec nebo skupina členů týmu.

Git je úložiště. Může být veřejný, soukromý nebo interní. GitHub je hostingová služba úložiště Git a má uživatelské rozhraní.

Git poskytuje funkce pro správu verzí a sdílení kódu, čím se však Git liší tím, že pokud chtějí vývojáři provést nějaké změny ve svých souborech, mohou zkopírovat celé úložiště do svého lokálního systému. I když tedy vývojář nemá přístup k zápisu do určitého projektu, může lokálně kopírovat obsah a upravovat jej (tzv. forking).

Dále, pokud chce vývojář sdílet lokálně provedené změny, může vlastníkovi projektu poslat „žádost o stažení“.

Projekt může mít jednu službu. Pokud má váš projekt více pracovních postupů, můžete pro každý pracovní postup vytvořit více služeb. Většina vývojářů dává přednost rozdělení větších projektů do menších nezávislých služeb, které mají jednu nebo více funkcí. Každá služba může vyřešit různé obchodní problémy. S popularitou bezserverových frameworků mohou uživatelé přistupovat k funkcím jako ke službám.

Jakmile vytvoříte tyto funkce jako služby a nasadíte je, dalším krokem je jejich strukturování a řízení verzí – můžete mít všechny své služby v jednom úložišti (mono-repo) – nebo mít samostatné úložiště pro každou službu, kterou máte ( multi-repo)!

Co je to Mono-repo?

V mono-repo přístupu můžete všechny své služby uchovávat v jediném (mono) úložišti. Stále můžete nasadit a spravovat každou službu nezávisle. Služby mohou sdílet společné knihovny a kód.

Společnosti jako Facebook, Google a Dropbox používají mono-repo.

Výhody Mono-repo

Mono-repo přístup má mnoho výhod:

  • Jediné místo pro uložení veškerého kódu projektu a přístup k němu má každý v týmu
  • Snadné opětovné použití a sdílení kódu, spolupráce s týmem
  • Snadno porozumíte dopadu vaší změny na celý projekt
  • Nejlepší volba pro refaktoring kódu a velké změny kódu
  • Členové týmu mohou získat celkový přehled o celém projektu
  • Snadná správa závislostí

Nevýhody Mono-repo

Mono-repo má samozřejmě nějaké nevýhody, hlavní je výkon. Pokud se váš projekt rozrůstá a další soubory jsou přidávány každý druhý den, operace odhlášení, stahování a další operace se mohou zpomalit a vyhledávání souborů může trvat déle.

Také pokud si pro svůj projekt najmete mnoho nezávislých dodavatelů, poskytnutí přístupu k celé kódové základně nemusí být tak bezpečné.

Dále je obtížné implementovat Continuous Deployments (CD), protože mnoho lidí může zkontrolovat své změny a váš systém Continuous Integration (CI) možná bude muset provést více přestaveb.

Velké společnosti, které používají mono-repo, mají přizpůsobené nástroje pro řešení problémů se škálováním. Například Facebook používá vlastní souborový systém a ovládání zdroje.

Co je to Multi-repo?

V multi-repo přístupu existuje více úložišť, která hostí několik knihoven a služeb projektu. Pokud se služba změní, vývojáři potřebují znovu sestavit pouze tuto službu a ne celý projekt. Jednotlivci a týmy mohou pracovat na svých specifických službách a mají přístup pouze k požadovaným službám.

Společnosti jako Netflix a Amazon používají multi-repo.

Výhody Multi-repo

Počet společností, které používají multi-repo, je mnohem více než těch, které přecházejí na mono-repo, a to z následujících důvodů:

  • Každá služba a knihovna mají vlastní verzi
  • Odbavení a stahování kódu jsou malé a oddělené, takže nedochází k problémům s výkonem, i když velikost projektu roste
  • Týmy mohou pracovat nezávisle a nemusí mít přístup k celé kódové základně
  • Rychlejší vývoj a flexibilita
  • Každá služba může být vydána samostatně a má svůj vlastní cyklus nasazení, což usnadňuje implementaci CI a CD
  • Lepší kontrola přístupu – všechny týmy nemusí mít úplný přístup ke všem knihovnám – ale mohou získat přístup pro čtení, pokud potřebují

Nevýhody Multi-repo

  • Závislosti a knihovny používané napříč službami a projekty je třeba pravidelně synchronizovat, abyste získali nejnovější verzi
  • Povzbuzuje v určitém okamžiku umlčenou kulturu, což vede k duplicitnímu kódu a jednotlivé týmy se snaží vyřešit stejný problém
  • Každý tým se může řídit jinou sadou osvědčených postupů pro svůj kód, což způsobuje potíže při dodržování běžných osvědčených postupů

Rozdíly mezi Mono a Multi Repo

Pojďme si zrekapitulovat rozdíly mezi mono-repo a multi-repo:

Mono-repo
Multi-repo
Veškerý kód všech projektů organizace je umístěn v centrálním úložišti
Každá služba a projekt má samostatné úložiště
Týmy mohou spolupracovat a spolupracovat; mohou vidět vzájemné změny
Týmy mohou pracovat autonomně; jednotlivé změny nemají vliv na změny jiných týmů nebo projektů
Každá osoba má přístup k celé struktuře projektu
Správci mohou omezit řízení přístupu k projektu nebo službě, ke které vývojář potřebuje přístup
Pokud velikost projektu neustále roste, může dojít k problémům s škálováním
Dobrý výkon díky omezenému kódu a menším jednotkám služby
Obtížná implementace Continuous Deployment (CD) a Continuous Integration (CI)
Vývojáři mohou snadno dosáhnout CD a CI, protože mohou vytvářet služby nezávisle
Vývojáři mohou snadno sdílet knihovny, rozhraní API a další společný kód, když jsou aktualizovány v centrálním úložišti
Jakékoli změny knihoven a dalšího běžného kódu by měly být pravidelně synchronizovány, aby se předešlo pozdějším problémům

Závěr

Mono-repo i multi-repo jsou stejně oblíbené a který z nich je lepší, závisí na velikosti vašeho projektu, požadavcích projektu a úrovni verzování a řízení přístupu, které potřebujete.

Mono-repo upřednostňuje konzistenci, zatímco multi-repo se zaměřuje na oddělení. Zatímco v mono-repo může celý tým vidět změny provedené jednou osobou, multi-repo vytváří samostatné repo pro každý tým, který má přístup pouze k požadovaným službám. Pokud chcete pro své projekty používat kombinaci mono-repo a multi-repo, můžete jít do toho metanástroj pro správu více projektů a knihoven.

Také by vás mohly zajímat bezplatné zdroje pro výuku Git.