Lançando luz sobre 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. 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.

  Como obter voz Siri neutra em termos de gênero no iPhone, iPad e Mac

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.

  Como tirar fotos que estão sempre em foco

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
  Como desativar o console PS4 primário

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.