Mono-repo e Multi-repo são duas estratégias principais para hospedar e gerenciar código por meio do Git. Discutimos as estratégias e seus prós e contras em detalhes.
últimas postagens
Introdução
A maioria dos projetos modernos são gerenciados e hospedados no Git. O Git se tornou a plataforma padrão para gerenciamento de código-fonte distribuído, controle de versão e colaboração de qualquer lugar do mundo. O Git é rápido e eficiente. Existem duas abordagens principais para hospedar e gerenciar seu código Git:
Antes de nos aprofundarmos nessas abordagens, vamos entender como o repo funciona.
O que são Repos?
Um Repositório (Repo) contém todas as pastas e arquivos do seu projeto. Ele também contém informações sobre usuários, pessoas e computadores.
Os dados do repositório são controlados por versão. Um repositório pode ser de propriedade de um indivíduo ou de um grupo de membros da equipe.
Git é um repositório. Pode ser público, privado ou interno. O GitHub é um serviço de hospedagem do repositório Git e possui uma interface de usuário.
O Git fornece recursos de controle de versão e compartilhamento de código, no entanto, o que diferencia o Git é que, se os desenvolvedores quiserem fazer algumas alterações em seus arquivos, eles podem copiar todo o repositório para o sistema local. Assim, mesmo que um desenvolvedor não tenha acesso de gravação a um projeto específico, ele pode copiar o conteúdo localmente e modificá-lo (chamado de bifurcação).
Além disso, se o desenvolvedor quiser compartilhar alterações feitas localmente, ele poderá enviar uma “requisição pull” para o proprietário do projeto.
Um projeto pode ter um único serviço. Se o seu projeto tiver vários fluxos de trabalho, você poderá criar vários serviços para cada fluxo de trabalho. A maioria dos desenvolvedores prefere dividir projetos maiores em serviços independentes menores, com uma ou mais funções. Cada serviço pode resolver vários problemas de negócios. Com a popularidade dos frameworks sem servidor, os usuários podem acessar funções como serviços.
Depois de criar essas funções como serviços e implantá-las, o próximo passo é estruturá-las e controlá-las de versão – você pode ter todos os seus serviços em um repositório (mono-repo) – ou ter um repositório separado para cada serviço que você possui ( multi-repositório)!
O que é um Mono-repo?
Em uma abordagem mono-repo, você pode manter todos os seus serviços em um único repositório (mono). Você ainda pode implantar e gerenciar cada serviço de forma independente. Os serviços podem compartilhar bibliotecas e códigos comuns.
Empresas como Facebook, Google e Dropbox usam mono-repo.
Vantagens do Mono-repo
A abordagem mono-repo tem muitas vantagens:
- Um único local para armazenar todo o código do projeto, podendo ser acessado por todos da equipe
- Fácil de reutilizar e compartilhar código, colabore com a equipe
- Fácil de entender o impacto de sua mudança em todo o projeto
- Melhor opção para refatoração de código e grandes alterações no código
- Os membros da equipe podem obter uma visão geral de todo o projeto
- Dependências fáceis de gerenciar
Desvantagens do Mono-repo
É claro que o mono-repo tem algumas desvantagens, sendo a principal o desempenho. Se o seu projeto cresce e mais arquivos são adicionados a cada dois dias, as operações de check-out, pull e outras podem se tornar lentas e as pesquisas de arquivos podem demorar mais.
Além disso, se você contratar muitos empreiteiros independentes para o seu projeto, dar a eles acesso a toda a base de código pode não ser tão seguro.
Além disso, é difícil implementar implantações contínuas (CD), porque muitas pessoas podem fazer check-in de suas alterações e seu sistema de integração contínua (CI) pode ter que fazer várias reconstruções.
Grandes empresas que usam mono-repos têm ferramentas personalizadas para lidar com os problemas de expansão. Por exemplo, o Facebook usa um sistema de arquivos personalizado e controle de origem.
O que é um repositório múltiplo?
Em uma abordagem multi-repo, existem vários repositórios que hospedam várias bibliotecas e serviços de um projeto. Se um serviço for alterado, os desenvolvedores precisarão reconstruir apenas esse serviço e não todo o projeto. Indivíduos e equipes podem trabalhar em seus serviços específicos e obtêm acesso apenas aos serviços necessários.
Empresas como Netflix e Amazon usam multi-repos.
Vantagens do Multi-repo
O número de empresas que adotam multi-repo é muito maior do que aquelas que adotam mono-repo, pelos seguintes motivos:
- Cada serviço e biblioteca tem seu próprio controle de versão
- Os check-outs e pulls de código são pequenos e separados, portanto, não há problemas de desempenho, mesmo que o tamanho do projeto cresça
- As equipes podem trabalhar de forma independente e não precisam ter acesso a toda a base de código
- Desenvolvimento e flexibilidade mais rápidos
- Cada serviço pode ser lançado separadamente e ter seu próprio ciclo de implantação, facilitando a implementação de CI e CD
- Melhor controle de acesso – nem todas as equipes precisam ter acesso total a todas as bibliotecas – mas podem obter acesso de leitura se precisarem
Desvantagens do Multi-repo
- As dependências e bibliotecas usadas em serviços e projetos precisam ser sincronizadas regularmente para obter a versão mais recente
- Incentiva uma cultura em silos em algum momento, levando a código duplicado e equipes individuais tentando resolver o mesmo problema
- Cada equipe pode seguir um conjunto diferente de práticas recomendadas para seu código, causando dificuldades em seguir as práticas recomendadas comuns
Diferenças entre Mono e Multi Repo
Vamos recapitular as diferenças entre mono-repo e multi-repo:
Mono-repo
Multi-repo
Todo o código de todos os projetos de uma organização reside em um repositório central
Cada serviço e projeto tem um repositório separado
As equipes podem colaborar e trabalhar juntas; eles podem ver as mudanças um do outro
As equipes podem trabalhar de forma autônoma; mudanças individuais não afetam as mudanças de outras equipes ou projetos
Cada pessoa tem acesso a toda a estrutura do projeto
Os administradores podem limitar o controle de acesso ao projeto ou serviço ao qual o desenvolvedor precisa acessar
Problemas de expansão podem ocorrer se o tamanho do projeto continuar crescendo
Bom desempenho, devido ao código limitado e unidades de serviço menores
Difícil de implementar Implantação Contínua (CD) e Integração Contínua (CI)
Os desenvolvedores podem facilmente obter CD e CI porque podem criar serviços de forma independente
Os desenvolvedores podem compartilhar facilmente bibliotecas, APIs e outros códigos comuns à medida que são atualizados no repositório central
Quaisquer alterações em bibliotecas e outros códigos comuns devem ser sincronizadas periodicamente para evitar problemas posteriores
Conclusão
Tanto o mono-repo quanto o multi-repo são igualmente populares e qual é o melhor depende do tamanho do projeto, dos requisitos do projeto e do nível de controle de versão e de acesso que você precisa.
Mono-repo favorece a consistência, enquanto multi-repo se concentra no desacoplamento. Enquanto em um mono-repo, toda a equipe pode ver as alterações feitas por uma pessoa, o multi-repo cria um repositório separado para cada equipe, que tem acesso apenas aos serviços necessários. Se você quiser usar uma combinação de mono-repo e multi-repo para seus projetos, você pode optar por metauma ferramenta para gerenciar vários projetos e bibliotecas.
Você também pode estar interessado em Recursos gratuitos para aprender Git.