Mono-Repo vs Multi-Repo : mettre en lumière les stratégies de référentiel de code
Publié: 2021-12-22Mono-repo et Multi-repo sont deux stratégies principales d'hébergement et de gestion de code via Git. Nous discutons à la fois des stratégies et de leurs avantages et inconvénients en détail.
Introduction
La plupart des projets modernes sont gérés et hébergés sur Git. Git est devenu la plate-forme standard pour la gestion distribuée du code source, le contrôle des versions et la collaboration depuis n'importe où dans le monde. Git est rapide et efficace. Il existe deux approches principales pour héberger et gérer votre code Git :
- Mono-repo
- Multi-repo
Avant d'approfondir ces approches, comprenons comment fonctionne le dépôt.
Que sont les dépôts ?
Un Repository (Repo) contient tous les dossiers et fichiers de votre projet. Il contient également des informations sur les utilisateurs, les personnes et les ordinateurs.
Les données du référentiel sont contrôlées par version. Un référentiel peut appartenir à un individu ou à un groupe de membres de l'équipe.
Git est un dépôt. Il peut être public, privé ou interne. GitHub est un service d'hébergement du référentiel Git et dispose d'une interface utilisateur.
Git fournit des fonctionnalités de contrôle de version et de partage de code, cependant, ce qui rend Git différent, c'est que si les développeurs souhaitent apporter des modifications à leurs fichiers, ils peuvent copier l'intégralité du référentiel sur leur système local. Ainsi, même si un développeur n'a pas accès en écriture à un projet particulier, il peut copier le contenu localement et le modifier (appelé forking).
De plus, si le développeur souhaite partager les modifications apportées localement, il peut envoyer une "demande d'extraction" au propriétaire du projet.
Un projet peut avoir un seul service. Si votre projet comporte plusieurs workflows, vous pouvez créer plusieurs services pour chaque workflow. La plupart des développeurs préfèrent diviser les grands projets en services indépendants plus petits, ayant une ou plusieurs fonctions. Chaque service peut résoudre divers problèmes commerciaux. Avec la popularité des frameworks sans serveur, les utilisateurs peuvent accéder aux fonctions en tant que services.
Une fois que vous avez créé ces fonctions en tant que services et que vous les avez déployées, l'étape suivante consiste à les structurer et à en contrôler la version - vous pouvez avoir tous vos services dans un référentiel (mono-repo) - ou avoir un référentiel séparé pour chaque service dont vous disposez ( multi-repo) !

Qu'est-ce qu'un mono-repo ?
Dans une approche mono-repo, vous pouvez conserver tous vos services dans un seul référentiel (mono). Vous pouvez toujours déployer et gérer chaque service indépendamment. Les services peuvent partager des bibliothèques et du code communs.
Des entreprises comme Facebook, Google et Dropbox utilisent le mono-repo.
Avantages du mono-repo
L'approche mono-repo présente de nombreux avantages :
- Un seul endroit pour stocker tout le code du projet, accessible à tous les membres de l'équipe
- Code facile à réutiliser et à partager, collaborer avec l'équipe
- Comprendre facilement l'impact de votre changement sur l'ensemble du projet
- Meilleure option pour la refactorisation du code et les modifications importantes du code
- Les membres de l'équipe peuvent avoir une vue d'ensemble de l'ensemble du projet
- Dépendances faciles à gérer
Inconvénients du mono-repo
Bien sûr, le mono-repo a quelques inconvénients, le principal étant la performance. Si votre projet grandit et que d'autres fichiers sont ajoutés tous les deux jours, les opérations d'extraction, d'extraction et autres peuvent devenir lentes et les recherches de fichiers peuvent prendre plus de temps.
De plus, si vous embauchez de nombreux entrepreneurs indépendants pour votre projet, leur donner accès à l'ensemble de la base de code peut ne pas être aussi sûr.
De plus, il est difficile d'implémenter des déploiements continus (CD), car de nombreuses personnes peuvent enregistrer leurs modifications et votre système d'intégration continue (CI) peut devoir effectuer plusieurs reconstructions.
Les grandes entreprises qui utilisent des dépôts uniques disposent d'outils personnalisés pour gérer les problèmes de mise à l'échelle. Par exemple, Facebook utilise un système de fichiers personnalisé et un contrôle de code source.

Qu'est-ce qu'un multi-repo ?
Dans une approche multi-dépôts, il existe plusieurs référentiels qui hébergent plusieurs bibliothèques et services d'un projet. Si un service change, les développeurs doivent reconstruire uniquement ce service et non l'ensemble du projet. Les individus et les équipes peuvent travailler sur leurs services spécifiques et n'ont accès qu'aux services requis.
Des entreprises comme Netflix et Amazon utilisent plusieurs dépôts.
Avantages du multi-repo
Le nombre d'entreprises qui adoptent le multi-repo est bien plus élevé que celles qui optent pour le mono-repo, pour les raisons suivantes :
- Chaque service et bibliothèque a son propre versioning
- Les extractions et extractions de code sont petites et séparées, il n'y a donc pas de problèmes de performances même si la taille du projet augmente
- Les équipes peuvent travailler de manière indépendante et n'ont pas besoin d'avoir accès à l'intégralité de la base de code
- Développement plus rapide et flexibilité
- Chaque service peut être publié séparément et avoir son propre cycle de déploiement, ce qui facilite la mise en œuvre du CI et du CD
- Meilleur contrôle d'accès - toutes les équipes n'ont pas besoin d'avoir un accès complet à toutes les bibliothèques - mais peuvent obtenir un accès en lecture si elles en ont besoin
Inconvénients du multi-repo
- Les dépendances et les bibliothèques utilisées dans les services et les projets doivent être régulièrement synchronisées pour obtenir la dernière version
- Encourage une culture cloisonnée à un moment donné, conduisant à un code en double et à des équipes individuelles essayant de résoudre le même problème
- Chaque équipe peut suivre un ensemble différent de meilleures pratiques pour son code, ce qui entraîne des difficultés à suivre les meilleures pratiques communes
Différences entre Mono et Multi Repo
Récapitulons les différences entre mono-repo et multi-repo :
| Mono-repo | Multi-repo |
| Tout le code de tous les projets d'une organisation réside dans un référentiel central | Chaque service et projet dispose d'un référentiel distinct |
| Les équipes peuvent collaborer et travailler ensemble ; ils peuvent voir les changements les uns des autres | Les équipes peuvent travailler de manière autonome ; les modifications individuelles n'affectent pas les modifications apportées par d'autres équipes ou projets |
| Chaque personne a accès à l'ensemble de la structure du projet | Les administrateurs peuvent limiter le contrôle d'accès au projet ou au service auquel le développeur a besoin d'accéder |
| Des problèmes de mise à l'échelle peuvent survenir si la taille du projet ne cesse de croître | Bonnes performances, en raison du code limité et des unités de service plus petites |
| Difficile à mettre en œuvre le déploiement continu (CD) et l'intégration continue (CI) | Les développeurs peuvent facilement atteindre CD et CI car ils peuvent créer des services indépendamment |
| Les développeurs peuvent facilement partager des bibliothèques, des API et d'autres codes communs à mesure qu'ils sont mis à jour dans le référentiel central | Toute modification apportée aux bibliothèques et à tout autre code commun doit être synchronisée périodiquement pour éviter les problèmes ultérieurs |
Conclusion
Le mono-dépôt et le multi-dépôt sont également populaires et celui qui est le meilleur dépend de la taille de votre projet, des exigences du projet et du niveau de contrôle de version et d'accès dont vous avez besoin.
Le mono-repo favorise la cohérence, tandis que le multi-repo se concentre sur le découplage. Alors que dans un mono-repo, toute l'équipe peut voir les modifications effectuées par une seule personne, le multi-repo crée un repo distinct pour chaque équipe, qui n'a accès qu'aux services requis. Si vous souhaitez utiliser une combinaison de mono-repo et multi-repo pour vos projets, vous pouvez opter pour meta, un outil pour gérer plusieurs projets et bibliothèques.
Vous pouvez également être intéressé par des ressources gratuites pour apprendre Git.
