Como é possível criar toda a base de código a partir da fonte na escala do Google?


8

A primeira resposta a um velho, ativo recentemente questão ligada a um vídeo que fala sobre como repositório Google é feito.

Uma coisa interessante mencionada é o fato de que tudo é construído a partir da fonte, sem depender de binários. Isso ajuda a evitar problemas com as dependências se tornando obsoletas, mas ainda sendo usadas em outros projetos, um problema que de fato encontrei bastante.

Como é tecnicamente possível? Se eu tentar a mesma coisa na minha empresa, mesmo considerando a enorme lacuna entre a escala da base de código da minha empresa e a escala da do Google, não seria possível por dois motivos:

  • O IDE (Visual Studio) ficará rapidamente sem resposta, uma vez que sofre muito até em pequenas soluções contendo, por exemplo, 50 projetos.

  • Qualquer análise estática seria analisada pelo tamanho de toda a base de código. Por exemplo, métricas de código ou verificação estática de contratos de código dificilmente seriam possíveis (contratos de código provavelmente levariam dias ou semanas).

  • Com a integração contínua, a compilação também levaria muito tempo e trituraria os servidores assim que um projeto com muitas dependências fosse modificado, exigindo que uma grande árvore de projetos fosse recompilada.

Como uma pequena empresa pode contornar esses problemas e ser capaz de:

  1. Use o IDE sem ser afetado pelo mau desempenho,

  2. Compile o código após cada confirmação sem compactar o servidor, mesmo quando as consequências de uma alteração exigirem que uma grande quantidade da base de código seja recompilada?


Há uma conversa no Youtube sobre como o Google faz: youtube.com/watch?v=2qv3fcXW1mg
Patrick

Respostas:


11

Você está assumindo um processo de criação tradicional, e o processo do Google é tudo menos tradicional. Há uma série de artigos no blog Ferramentas de engenharia que explicam seus processos com mais detalhes, elaborando a apresentação de 2010: Ferramentas para integração contínua na escala do Google :

  1. Construa na nuvem: acessando o código-fonte
  2. Construir na nuvem: como o sistema de construção funciona
  3. Construir na nuvem: distribuir etapas de construção
  4. Construa na nuvem: acessando o código-fonte
  5. Teste na velocidade e escala do Google

Para resumir, eles usam um sistema de construção distribuído personalizado que permite um alto grau de paralelismo e automação, aproveitando ao máximo sua infraestrutura existente. Ele também depende muito do armazenamento em cache, com uma taxa de acerto geral de cache de 90%.

Mas como você pode aplicar tudo isso na sua empresa? A primeira etapa é distribuir a compilação e, para isso, você precisará:

  • Uma nuvem
  • Um compilador distribuído
  • Um cache do compilador

Em um ambiente de desenvolvimento gcc, configurar um farm de compilação é relativamente fácil. O distcc cuida da distribuição e o ccache cuida do cache, e eles funcionam lindamente juntos. Não conheço nenhuma ferramenta semelhante para o ecossistema da Microsoft (suponho que você esteja usando uma linguagem da Microsoft com base na sua escolha de IDE), mas sei que o MSBuild pode executar compilações em paralelo , aproveitando as CPUs com vários núcleos . Não é realmente uma fazenda compilada, mas certamente um passo na direção certa.


2
  1. Você não precisa criar todos os 2000 projetos para usar apenas os necessários.
  2. O idioma Go foi projetado especificamente para aliviar esse problema, tornando os tempos de compilação muito rápidos. foi uma das razões pelas quais eles inventaram a linguagem.

Dito isso, eu seria cauteloso em "construção just-in-time", a menos que o código que está sendo implantado em toda a empresa tenha sido verificado como parte de um (mais ou menos) ciclo formal de lançamento e não seja apenas um acaso Construção noturna. H

Ter 5000 desenvolvedores acessando 2000 projetos que estão todos em um estado contínuo de fluxo soa como uma receita para um desastre, e o Google contrata pessoas muito inteligentes, por isso tenho certeza de que não é isso que está realmente acontecendo.


1. Claro, mas foi por isso que contei sobre o caso em que uma modificação é feita em um projeto que afeta muitos outros projetos. Isso não acontece com frequência, mas acontece. 2. No vídeo, Ashish Kumar observa que a base de código está principalmente em C e Java. Não houve menção ao Go.
Arseni Mourzenko

Então, talvez a criação do Go seja uma resposta às dificuldades que eles estão tendo.
Robert Harvey

verdade, mas ainda assim, o Google ainda conseguiu fazê-lo funcionar por anos. Quão?
Arseni Mourzenko

Muito cuidado? Lembre-se, eles não costumavam ser tão grandes quanto são agora. Você assistiu o vídeo que Patrick ligou?
Robert Harvey

1
Não estou realmente interessado na época em que a base de código do Google era pequena, nem na época em que o Google migrou magicamente / migrará toda a base de código para o Go. Estou falando de 2010 (no momento em que Ashish Kumar está falando sobre a base de código, acho que é 2010). Em 2010 , de acordo com o vídeo de Ashish Kumar, (1) a base de código é enorme, (2) contém C e Java primário, (3) tudo é compilado a partir da fonte, (4) os desenvolvedores do Google ainda podem abrir o código em seu IDE e os servidores ainda podem compilar o código. Nota: não, eu ainda não assisti o vídeo que Patrick vinculou. Eu assisto amanhã.
Arseni Mourzenko
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.