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

Mono-repo a multi-repo představují dvě odlišné strategie pro hostování a správu kódu s využitím systému Git. Nyní se podíváme detailně na obě tyto metody, včetně jejich výhod a nevýhod.

Úvodní pohled

V dnešní době je většina softwarových projektů spravována a hostována prostřednictvím systému Git. Git se stal standardem pro distribuovanou správu zdrojového kódu, verzování a umožňuje spolupráci na dálku. Je rychlý a efektivní. V zásadě se setkáváme se dvěma hlavními přístupy k hostování a správě kódu v Gitu:

Než se však do těchto přístupů ponoříme, je klíčové porozumět tomu, jak fungují repozitáře.

Co jsou to repozitáře (Repos)?

Repozitář (repo) je místo, kde jsou uloženy veškeré složky a soubory daného projektu. Obsahuje také informace o uživatelích, týmu a počítačích.

Data v repozitáři jsou verzovaná. Vlastníkem repozitáře může být jednotlivec nebo skupina členů týmu.

Git je systém pro správu repozitářů. Repozitář může být veřejný, soukromý nebo interní. Služba GitHub nabízí hosting pro repozitáře Gitu a poskytuje k nim uživatelské rozhraní.

Git umožňuje správu verzí a sdílení kódu. Jeho specifickou vlastností je, že vývojáři si mohou zkopírovat celý repozitář do svého lokálního systému, pokud chtějí provést změny. I v případě, že nemají práva pro zápis přímo do projektu, mohou pracovat s lokální kopií a provádět úpravy (tzv. forking).

Poté, co vývojář provede lokální změny, může odeslat „pull request“ (žádost o vložení změn) vlastníkům projektu.

Projekt se může skládat z jedné služby. Pokud má ale projekt více pracovních postupů, je možné vytvořit více služeb pro každý z nich. Většina vývojářů preferuje rozdělení větších projektů do menších, nezávislých služeb s konkrétními funkcemi. Každá taková služba může řešit specifický obchodní problém. S popularitou bezserverových architektur mohou uživatelé přistupovat k funkcím jako ke službám.

Po vytvoření a nasazení těchto funkcí jako služeb, je dalším krokem jejich strukturování a verzování. Můžete všechny služby uchovávat v jednom repozitáři (mono-repo) nebo mít samostatný repozitář pro každou službu (multi-repo).

Co je to Mono-repo?

V případě přístupu mono-repo, všechny služby projektu se nacházejí v jediném repozitáři. I přesto je možné každou službu spravovat a nasazovat nezávisle. Služby v rámci mono-repo mohou sdílet společné knihovny a kód.

Velké společnosti jako Facebook, Google a Dropbox používají strategii mono-repo.

Výhody Mono-repo

Přístup mono-repo přináší řadu výhod:

  • Veškerý kód projektu je uložen na jednom místě, což umožňuje snadný přístup pro všechny členy týmu.
  • Usnadňuje opětovné použití a sdílení kódu, a také zjednodušuje spolupráci v týmu.
  • Umožňuje lepší pochopení dopadu jednotlivých změn na celý projekt.
  • Je optimální pro refaktorování kódu a velké změny.
  • Členové týmu získávají ucelený přehled o celém projektu.
  • Zjednodušuje správu závislostí.

Nevýhody Mono-repo

Mono-repo má i své nevýhody, zejména s ohledem na výkon. S rostoucím počtem souborů a jejich častým přibýváním se mohou zpomalit operace jako odhlášení, stahování a vyhledávání souborů.

Pokud na projektu pracuje větší počet externích spolupracovníků, nemusí být bezpečné poskytovat jim přístup k celému repozitáři.

Dalším problémem je složitější implementace Continuous Deployment (CD), protože mnoho lidí může odesílat změny, což může vyžadovat častější sestavování v systému Continuous Integration (CI).

Velké společnosti, které používají mono-repo, mají většinou vyvinuté vlastní nástroje pro řešení problémů se škálováním. Například Facebook používá svůj vlastní souborový systém a systém pro správu zdrojového kódu.

Co je to Multi-repo?

V přístupu multi-repo existuje více repozitářů, kde jsou uloženy jednotlivé knihovny a služby projektu. V případě změny konkrétní služby, stačí znovu sestavit pouze tuto službu, nikoli celý projekt. Jednotlivci a týmy mohou pracovat na konkrétních službách a mají přístup pouze k těm, které potřebují.

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

Výhody Multi-repo

Multi-repo je hojně využívanou strategií, a to z následujících důvodů:

  • Každá služba a knihovna má vlastní verzi.
  • Odbavení a stahování kódu je menší a oddělené, takže nedochází k problémům s výkonem, i když se projekt rozrůstá.
  • Týmy mohou pracovat nezávisle a nemají přístup ke všem částem kódu.
  • Umožňuje rychlejší vývoj a větší flexibilitu.
  • Každá služba může být vydána samostatně s vlastním cyklem nasazení, což usnadňuje implementaci CI a CD.
  • Zlepšuje kontrolu přístupu – ne všechny týmy musí mít plný přístup ke všem knihovnám, ale mohou mít přístup pro čtení v případě potřeby.

Nevýhody Multi-repo

  • Závislosti a knihovny používané napříč službami a projekty je nutné pravidelně synchronizovat, aby se zajistilo používání aktuálních verzí.
  • Může vést k neefektivní komunikaci a duplicitnímu kódu, když se jednotlivé týmy snaží řešit stejný problém.
  • Každý tým může aplikovat vlastní postupy při kódování, což komplikuje dodržování jednotných standardů.

Srovnání Mono a Multi Repo

Shrňme si hlavní rozdíly mezi mono-repo a multi-repo:

Mono-repo Multi-repo
Veškerý kód všech projektů v organizaci je uložen v centrálním repozitáři. Každá služba a projekt má svůj samostatný repozitář.
Týmy mohou spolupracovat a sledovat změny ostatních. Týmy pracují autonomně a jejich změny nemají přímý dopad na změny v jiných týmech nebo projektech.
Každý má přístup k celkové struktuře projektu. Správci mohou omezit přístup k projektu nebo službě dle potřeby.
S nárůstem projektu se mohou objevit problémy se škálováním. Dobrá výkonnost díky menšímu objemu kódu a menším jednotkám služeb.
Implementace Continuous Deployment (CD) a Continuous Integration (CI) může být komplikovanější. Vývojáři mohou snadno implementovat CD a CI, protože mohou sestavovat služby nezávisle.
Vývojáři snadno sdílí knihovny, API a další sdílený kód, protože jsou aktualizovány v centrálním repozitáři. Jakékoli změny knihoven a sdíleného kódu je třeba pravidelně synchronizovat, aby se předešlo problémům.

Závěr

Mono-repo i multi-repo jsou populární přístupy. Výběr nejvhodnější strategie závisí na velikosti projektu, jeho požadavcích, a také na požadované míře verzování a řízení přístupu.

Mono-repo klade důraz na konzistenci, zatímco multi-repo se zaměřuje na izolaci. V mono-repo má celý tým přehled o změnách provedených kýmkoli, zatímco multi-repo vytváří samostatné repozitáře pro jednotlivé týmy, které mají přístup pouze k potřebným službám. Pokud byste chtěli využít kombinaci obou přístupů, můžete zvážit použití meta, což je nástroj pro správu více projektů a knihoven.

Doporučujeme vám také prozkoumat zdroje pro bezplatnou výuku Gitu.