Facebook menerbitkan sistem pembangunan Buck2

Facebook memperkenalkan sistem pembangunan baru, Buck2, yang bertujuan untuk mengatur pembangunan proyek dari repositori yang sangat besar, termasuk kode dalam bahasa pemrograman yang berbeda. Perbedaan utama antara implementasi baru dan sistem Buck yang sebelumnya digunakan di Facebook adalah penggunaan bahasa Rust alih-alih Java dan peningkatan signifikan dalam efisiensi dan produktivitas proses perakitan (dalam pengujian internal di infrastruktur yang sama, Buck2 melakukan perakitan tugas dua kali lebih cepat dari Buck). Kode ini didistribusikan di bawah lisensi Apache 2.0.

Sistem ini tidak terikat pada perakitan kode dalam bahasa tertentu dan langsung mendukung perakitan proyek yang ditulis dalam bahasa C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell dan OCaml , digunakan oleh Facebook. Bahasa Starlark, berdasarkan Python (seperti di Bazel), digunakan untuk mendesain add-on, membuat skrip, dan aturan. Starlark memungkinkan Anda untuk memperluas kemampuan sistem perakitan dan mengabstraksi dari bahasa tertentu yang digunakan dalam proyek yang dirakit.

Performa tinggi dicapai melalui caching hasil, paralelisasi pekerjaan, dan dukungan untuk pelaksanaan tugas jarak jauh (Remote Build Execution). Dalam lingkungan perakitan, konsep "kedap udara" digunakan - kode yang dirakit terputus dari dunia luar, tidak ada yang dimuat dari luar selama proses perakitan, dan eksekusi berulang pada sistem yang berbeda menghasilkan hasil yang sama ( perakitan berulang, misalnya, hasil perakitan proyek di mesin pengembang akan sepenuhnya identik dengan build di server integrasi berkelanjutan). Situasi kurangnya ketergantungan dianggap sebagai kesalahan dalam Buck2.

Fitur utama Buck2:

  • Aturan untuk mendukung bahasa pemrograman dan inti sistem perakitan sepenuhnya terpisah. Aturannya menggunakan bahasa Starlark, dan toolkit serta implementasi Starlark ditulis dalam Rust.
  • Sistem perakitan menggunakan grafik ketergantungan inkremental tunggal (tanpa pembagian menjadi beberapa tahapan), yang memungkinkan peningkatan kedalaman paralelisasi pekerjaan dibandingkan dengan Buck dan Bazel dan menghindari banyak jenis kesalahan.
  • Kode Buck2 yang dipublikasikan di GitHub dan aturan untuk mendukung bahasa pemrograman hampir identik dengan versi internal yang digunakan di infrastruktur Facebook (satu-satunya perbedaan adalah terkait dengan edisi kompiler dan server perakitan yang digunakan di Facebook).
  • Sistem perakitan dirancang dengan tujuan integrasi dengan sistem eksekusi tugas jarak jauh yang memungkinkan Anda menjalankan pekerjaan di server jarak jauh. API eksekusi jarak jauh kompatibel dengan Bazel dan diuji kompatibilitasnya dengan Buildbarn dan EngFlow.
  • Integrasi dengan sistem file virtual disediakan, di mana konten seluruh repositori disajikan, tetapi pada kenyataannya, pekerjaan dilakukan dengan bagian lokal saat ini dari bagian repositori (pengembang melihat seluruh repositori, tetapi hanya file yang diperlukan yang diakses diekstraksi dari repositori). VFS berdasarkan EdenFS dan Git LFS, yang digunakan di Sapling, didukung.

Sumber: opennet.ru

Tambah komentar