Facebook je objavio sustav izgradnje Buck2

Facebook je predstavio novi sustav izgradnje, Buck2, s ciljem organiziranja izgradnje projekata iz vrlo velikih repozitorija, uključujući kod u različitim programskim jezicima. Ključne razlike između nove implementacije i sustava Buck koji se prethodno koristio u Facebooku su korištenje jezika Rust umjesto Jave i značajno povećanje učinkovitosti i produktivnosti procesa sklapanja (u internim testovima u istoj infrastrukturi, Buck2 izvodi sklapanje zadatke dvostruko brže od Bucka). Kod se distribuira pod licencom Apache 2.0.

Sustav nije vezan za sklapanje koda na određenim jezicima i izvan okvira podržava sklapanje projekata napisanih na jezicima C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell i OCaml , koristi Facebook. Jezik Starlark, temeljen na Pythonu (kao u Bazelu), koristi se za dizajniranje dodataka, izradu skripti i pravila. Starlark vam omogućuje da proširite mogućnosti sustava sastavljanja i apstrahirate od specifičnih jezika koji se koriste u sastavljenim projektima.

Visoke performanse postignute su predmemoriranjem rezultata, paralelizacijom rada i podrškom za daljinsko izvršavanje zadataka (Remote Build Execution). U okruženju montaže koristi se koncept "hermetičnosti" - sastavljeni kod je odsječen od vanjskog svijeta, ništa se ne učitava izvana tijekom procesa montaže, a ponovljena izvođenja radova na različitim sustavima dovode do istog rezultata ( ponovljene sklopove, na primjer, rezultat sastavljanja projekta na stroju programera bit će potpuno identičan nadogradnji na poslužitelju kontinuirane integracije). Situacija nedostatka ovisnosti percipira se kao pogreška u Buck2.

Ključne značajke Buck2:

  • Pravila za podršku programskim jezicima i jezgri montažnog sustava potpuno su odvojena. Pravila koriste jezik Starlark, a Starlark alat i implementacija napisani su u Rustu.
  • Sustav montaže koristi jedan inkrementalni graf ovisnosti (bez podjele na faze), što omogućuje povećanje dubine paralelizacije rada u usporedbi s Buckom i Bazelom i izbjegavanje mnogih vrsta pogrešaka.
  • Buck2 kod objavljen na GitHubu i pravila za podršku programskim jezicima gotovo su identični internoj verziji koja se koristi u Facebook infrastrukturi (jedine su razlike u odnosu na izdanja kompajlera i asemblerskih poslužitelja koji se koriste u Facebooku).
  • Sustav za sklapanje dizajniran je s ciljem integracije sa sustavima za daljinsko izvršavanje zadataka koji vam omogućuju rad na udaljenim poslužiteljima. API za daljinsko izvođenje kompatibilan je s Bazelom i testiran na kompatibilnost s Buildbarn i EngFlow.
  • Omogućena je integracija s virtualnim datotečnim sustavima u kojima je prikazan sadržaj cijelog repozitorija, ali zapravo se radi s trenutnim lokalnim odsječkom dijela repozitorija (programer vidi cijeli repozitorij, ali samo potrebne datoteke kojima se pristupa izdvajaju se iz repozitorija). Podržani su VFS temeljen na EdenFS i Git LFS koji se koriste u Saplingu.

Izvor: opennet.ru

Dodajte komentar