Facebook publicou o sistema de construção Buck2

O Facebook introduziu um novo sistema de construção, Buck2, destinado a organizar a construção de projetos a partir de repositórios muito grandes, incluindo código em diferentes linguagens de programação. As principais diferenças entre a nova implementação e o sistema Buck utilizado anteriormente no Facebook são o uso da linguagem Rust em vez de Java e um aumento significativo na eficiência e produtividade do processo de montagem (em testes internos na mesma infraestrutura, Buck2 realiza montagem tarefas duas vezes mais rápidas que Buck). O código é distribuído sob a licença Apache 2.0.

O sistema não está vinculado à montagem de código em linguagens específicas e pronto para uso suporta a montagem de projetos escritos nas linguagens C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell e OCaml , usado pelo Facebook. A linguagem Starlark, baseada em Python (como no Bazel), é usada para projetar complementos, construir scripts e regras. Starlark permite expandir os recursos do sistema de montagem e abstrair das linguagens específicas usadas nos projetos montados.

O alto desempenho é alcançado por meio de cache de resultados, paralelização de trabalho e suporte para execução remota de tarefas (Remote Build Execution). No ambiente de montagem, o conceito de “hermeticidade” é usado - o código montado é isolado do mundo exterior, nada é carregado de fora durante o processo de montagem e execuções repetidas de trabalho em sistemas diferentes levam ao mesmo resultado ( montagens repetidas, por exemplo, o resultado da montagem de um projeto na máquina do desenvolvedor será completamente idêntico ao da construção no servidor de integração contínua). A situação de falta de dependência é percebida como um erro no Buck2.

Principais recursos do Buck2:

  • As regras para suporte a linguagens de programação e o núcleo do sistema assembly são completamente separados. As regras usam a linguagem Starlark, e o kit de ferramentas e implementação Starlark são escritos em Rust.
  • O sistema assembly utiliza um único gráfico de dependência incremental (sem divisão em etapas), o que permite aumentar a profundidade de paralelização do trabalho em relação a Buck e Bazel e evitar diversos tipos de erros.
  • O código Buck2 publicado no GitHub e as regras de suporte às linguagens de programação são quase idênticas à versão interna utilizada na infraestrutura do Facebook (as únicas diferenças são em relação às edições dos compiladores e servidores assembly utilizados no Facebook).
  • O sistema de montagem foi projetado visando a integração com sistemas de execução remota de tarefas que permitem executar trabalhos em servidores remotos. A API de execução remota é compatível com Bazel e testada quanto à compatibilidade com Buildbarn e EngFlow.
  • É fornecida integração com sistemas de arquivos virtuais, nos quais é apresentado o conteúdo de todo o repositório, mas na verdade o trabalho é realizado com uma fatia local atual de parte do repositório (o desenvolvedor vê todo o repositório, mas apenas os arquivos necessários que são acessados ​​são extraídos do repositório). VFS baseado em EdenFS e Git LFS, que são usados ​​no Sapling, são suportados.

Fonte: opennet.ru

Adicionar um comentário