Mono-Repo vs Multi-Repo: esclarecendo as estratégias de repositório de código

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.

Introdução

A maioria dos projetos modernos são gerenciados e hospedados no Git. Git tornou-se a plataforma padrão para gerenciamento de código-fonte distribuído, controle de versão e colaboração de qualquer lugar do mundo. Git é rápido e eficiente. Existem duas abordagens principais para hospedar e gerenciar seu código Git:

  • Mono-repo
  • Multirepo

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 pertencer a um indivíduo ou a um grupo de membros da equipe.

Git é um repositório. Pode ser público, privado ou interno. GitHub é um serviço de hospedagem do repositório Git e tem uma interface de usuário.

O Git fornece recursos de controle de versão e compartilhamento de código, no entanto, o que torna o Git diferente é que, se os desenvolvedores quiserem fazer algumas alterações em seus arquivos, eles podem copiar todo o repositório para seu sistema local. Assim, mesmo que um desenvolvedor não tenha acesso de gravação a um determinado projeto, ele pode copiar o conteúdo localmente e modificá-lo (chamado bifurcação).

Além disso, se o desenvolvedor quiser compartilhar as alterações feitas localmente, ele pode enviar uma “solicitação pull” ao proprietário do projeto.

Um projeto pode ter um único serviço. Se o seu projeto tiver vários fluxos de trabalho , você pode 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 de estruturas sem servidor os usuários podem acessar funções como serviços.

Depois de criar essas funções como serviços e implantá-las, a próxima etapa é estruturá-las e controlá-las – 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-repo)!

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

Obviamente, o mono-repo tem algumas desvantagens, sendo a principal delas o desempenho. Se o seu projeto crescer e mais arquivos forem adicionados a cada dois dias, o check-out, pull e outras operações podem se tornar lentas e as pesquisas de arquivos podem demorar mais.

Além disso, se você contratar muitos contratantes 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 o check-in de suas alterações e seu sistema de integração contínua (CI) pode ter que fazer várias reconstruções.

As 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 Multi-repo?

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 precisam reconstruir apenas esse serviço e não todo o projeto. Indivíduos e equipes podem trabalhar em seus serviços específicos e obter acesso apenas aos serviços necessários.

Empresas como Netflix e Amazon usar multi-repos .

Vantagens do Multirepo

O número de empresas que adotam o multi-repo é muito maior do que o mono-repo, pelos seguintes motivos:

  • Cada serviço e biblioteca tem seu próprio controle de versão
  • 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 aumente
  • As equipes podem trabalhar de forma independente e não precisam ter acesso a toda a base de código
  • Desenvolvimento mais rápido e flexibilidade
  • 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 – todas as equipes não precisam ter acesso total a todas as bibliotecas – mas podem obter acesso de leitura se necessário

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
  • Encoraja uma cultura isolada em algum ponto, levando a código duplicado e equipes individuais tentando resolver o mesmo problema
  • Cada equipe pode seguir um conjunto diferente de melhores práticas para seu código, causando dificuldades em seguir as melhores práticas comuns

Diferenças entre Mono e Multi Repo

Vamos recapitular as diferenças entre mono-repo e multi-repo:

Mono-repo Multirepo
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 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 aumento de escala 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 versão e controle de acesso de que você precisa.

O mono-repo favorece a consistência, enquanto o multi-repo se concentra no desacoplamento. Enquanto em um repositório único, toda a equipe pode ver as alterações feitas por uma pessoa, o repositório múltiplo cria um repositório separado para cada equipe, que tem acesso apenas aos serviços necessários. Se você deseja usar uma combinação de mono-repo e multi-repo para seus projetos, pode optar por meta uma ferramenta para gerenciar vários projetos e bibliotecas.

Você também pode estar interessado em Recursos gratuitos para aprender Git .

Artigos relacionados