Facebook menerbitkan sistem binaan Buck2

Facebook memperkenalkan sistem binaan baharu, Buck2, bertujuan untuk mengatur binaan projek daripada repositori yang sangat besar, termasuk kod dalam bahasa pengaturcaraan yang berbeza. Perbezaan utama antara pelaksanaan baharu dan sistem Buck yang sebelum ini digunakan di Facebook ialah penggunaan bahasa Rust dan bukannya Java dan peningkatan ketara dalam kecekapan dan produktiviti proses pemasangan (dalam ujian dalaman dalam infrastruktur yang sama, Buck2 melakukan pemasangan tugas dua kali lebih cepat daripada Buck). Kod itu diedarkan di bawah lesen Apache 2.0.

Sistem ini tidak terikat dengan pemasangan kod dalam bahasa tertentu dan di luar kotak menyokong pemasangan projek yang ditulis dalam bahasa C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell dan OCaml , digunakan oleh Facebook. Bahasa Starlark, berdasarkan Python (seperti dalam Bazel), digunakan untuk mereka bentuk alat tambah, membina skrip dan peraturan. Starlark membolehkan anda mengembangkan keupayaan sistem pemasangan dan abstrak daripada bahasa tertentu yang digunakan dalam projek yang dipasang.

Prestasi tinggi dicapai melalui caching hasil, penyelarasan kerja dan sokongan untuk pelaksanaan tugas dari jauh (Remote Build Execution). Dalam persekitaran pemasangan, konsep "hermeticity" digunakan - kod yang dipasang terputus dari dunia luar, tiada apa yang dimuatkan dari luar semasa proses pemasangan, dan pelaksanaan kerja berulang pada sistem yang berbeza membawa kepada hasil yang sama ( pemasangan berulang, sebagai contoh, hasil pemasangan projek pada mesin pembangun akan sama sepenuhnya dengan binaan pada pelayan penyepaduan berterusan). Keadaan kekurangan pergantungan dianggap sebagai ralat dalam Buck2.

Ciri utama Buck2:

  • Peraturan untuk menyokong bahasa pengaturcaraan dan teras sistem pemasangan adalah berasingan sepenuhnya. Peraturan menggunakan bahasa Starlark, dan kit alat serta pelaksanaan Starlark ditulis dalam Rust.
  • Sistem pemasangan menggunakan graf pergantungan tambahan tunggal (tanpa pembahagian berperingkat), yang membolehkan meningkatkan kedalaman selari kerja berbanding Buck dan Bazel dan mengelakkan banyak jenis ralat.
  • Kod Buck2 yang diterbitkan di GitHub dan peraturan untuk menyokong bahasa pengaturcaraan hampir sama dengan versi dalaman yang digunakan dalam infrastruktur Facebook (satu-satunya perbezaan adalah berkaitan dengan edisi penyusun dan pelayan pemasangan yang digunakan dalam Facebook).
  • Sistem pemasangan direka bentuk dengan fokus kepada penyepaduan dengan sistem pelaksanaan tugas jauh yang membolehkan anda menjalankan kerja pada pelayan jauh. API pelaksanaan jauh serasi dengan Bazel dan diuji untuk keserasian dengan Buildbarn dan EngFlow.
  • Penyepaduan dengan sistem fail maya disediakan, di mana kandungan keseluruhan repositori dibentangkan, tetapi sebenarnya, kerja dijalankan dengan kepingan tempatan semasa sebahagian daripada repositori (pemaju melihat keseluruhan repositori, tetapi hanya fail yang diperlukan yang diakses diekstrak daripada repositori). VFS berdasarkan EdenFS dan Git LFS, yang digunakan dalam Sapling, disokong.

Sumber: opennet.ru

Tambah komen