„Facebook“ paskelbė „Buck2“ kūrimo sistemą

Facebook представил новую сборочную систему Buck2, ориентированную на организацию сборки проектов из очень крупных репозиториев, включающих код на разных языках программирования. Ключевыми отличиями новой реализации от ранее применявшейся в Facebook системы Buck является использование языка Rust вместо Java и существенное увеличение эффективности и производительности сборочного процесса (во внутренних тестах в той же инфраструктуре Buck2 выполняет сборочные задания быстрее Buck в два раза). Код распространяется под лицензией Apache 2.0.

Система не привязана к сборке кода на конкретных языках и из коробки поддерживает сборку проектов, написанных на языках C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell и OCaml, используемых в Facebook. Для оформления дополнений, сборочных сценариев и правил применяется язык Starlark, основанный на Python (как в Bazel). Starlark позволяет расширять возможности сборочной системы и абстрагироваться от конкретных языков, применяемых в собираемых проектах.

Высокая производительнось достигается за счёт кэширования результатов, распараллелирования работ и поддержки удалённого выполнения заданий (Remote Build Execution). В сборочном окружении применяется концепция «гермитичности» — собираемый код отрезан от внешнего мира, в процессе сборки извне ничего не загружается, а повторные выполнения работ на разных системах приводят к одному и тому же результату (повторяемые сборки, например, результат сборки проекта на машине разработчика будет полностью совпадать со сборкой на сервере непрерывной интеграции). Ситуация отсутствия зависимости воспринимается в Buck2 как ошибка.

Ключевые особенности Buck2:

  • Правила поддержки языков программирования и ядро сборочной системы полностью разделены. Для правил используется язык Starlark, а инструментарий и реализация Starlark написаны на Rust.
  • В сборочной системе применяется единый инкрементальный граф зависимостей (без разделения на стадии), что позволяет повысить глубину распараллеливания работ по сравнению с Buck и Bazel и избежать многих типов ошибок.
  • Опубликованный на GitHub код Buck2 и правила поддержки языков программирования почти идентичны со внутренней версией, применяемой в инфраструктуре Facebook (отличия только в привязке к редакциям компиляторов и сборочным серверам, применяемым в Facebook).
  • Сборочная система спроектирована с оглядкой на интеграцию с системами удалённого выполнения заданий, позволяющими запускать работы на удалённых серверах. API для удалённого выполнения совместим с Bazel и протестирован на совместимость с Buildbarn и EngFlow.
  • Обеспечена интеграция с виртуальными файловыми системами, в которых представлено содержимое всего репозитория, но фактически работа осуществляется с актуальным локальным срезом части репозитория (разработчик видит весь репозиторий, но из репозитория извлекаются только востребованные файлы, к которым выполняется обращение). Поддерживаются VFS на базе EdenFS и Git LFS, которые используются в Sapling.

Šaltinis: opennet.ru

Добавить комментарий