Facebook je objavio Buck2 sistem izgradnje

Facebook je predstavio novi sistem izgradnje, Buck2, fokusiran na izgradnju projekata iz veoma velikih spremišta koja uključuju kod na različitim programskim jezicima. Ključne razlike između nove implementacije i Buck sistema koji je ranije koristio Facebook su upotreba Rust jezika umjesto Jave i značajno povećanje efikasnosti i performansi procesa asemblera (u internim testovima u istoj infrastrukturi, Buck2 obavlja sklapanje zadatke dvostruko brže od Bucka). Kod se distribuira pod licencom Apache 2.0.

Sistem nije vezan za građenje koda na određenim jezicima i iz kutije podržava građevinske projekte napisane na C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell i OCaml koje koristi Facebook. Starlark jezik zasnovan na Pythonu (kao u Bazelu) koristi se za dizajniranje dodataka, pravljenje skripti i pravila. Starlark vam omogućava da proširite mogućnosti sistema izgradnje i apstrahujete od specifičnih jezika koji se koriste u projektima koji se grade.

Visoke performanse se postižu kroz keširanje rezultata, paralelizaciju rada i podršku za daljinsko izvršavanje zadataka (Remote Build Execution). U build okruženju koristi se koncept "zategnutosti" - kompajlirani kod je odsječen od vanjskog svijeta, ništa se ne učitava izvana tokom procesa izgradnje, a ponovljeno izvršavanje rada na različitim sistemima dovodi do istog rezultata ( ponovljene gradnje, na primjer, rezultat izgradnje projekta na stroju programera bit će potpuno isti kao i na serveru za kontinuiranu integraciju). Situacija nedostatka zavisnosti se u Buck2 doživljava kao greška.

Buck2 ključne karakteristike:

  • Pravila za podršku programskim jezicima i jezgro sistema izgradnje potpuno su razdvojena. Pravila su napisana na Starlark jeziku, a Starlark alat i implementacija su napisani u Rust-u.
  • Sistem izgradnje koristi jedan inkrementalni graf zavisnosti (bez podele na faze), koji vam omogućava da povećate dubinu paralelizacije rada u poređenju sa Buckom i Bazelom i izbegnete mnoge vrste grešaka.
  • Buck2 kod objavljen na GitHubu i pravila podrške programskom jeziku su skoro identični internoj verziji koja se koristi u infrastrukturi Facebooka (jedine razlike su u vezivanju za izdanja kompajlera i servere za izgradnju koje koristi Facebook).
  • Sistem izgradnje je dizajniran s ciljem integracije sa sistemima za udaljeno izvršavanje poslova koji vam omogućavaju pokretanje poslova na udaljenim serverima. API za daljinsko izvršavanje je kompatibilan sa Bazel-om i testiran je na kompatibilnost sa Buildbarn i EngFlow.
  • Obezbeđena je integracija sa virtuelnim sistemima datoteka, u kojima je predstavljen sadržaj čitavog spremišta, a zapravo se radi sa stvarnim lokalnim isečkom dela spremišta (programer vidi celo spremište, ali samo ono što je potrebno datoteke kojima se pristupa preuzimaju se iz spremišta). Podržani su VFS zasnovani na EdenFS i Git LFS, koje koristi Sapling.

izvor: opennet.ru

Dodajte komentar