Facebook je objavil sistem gradnje Buck2

Facebook je predstavil nov sistem gradnje, Buck2, katerega namen je organizirati gradnjo projektov iz zelo velikih skladišč, vključno s kodo v različnih programskih jezikih. Ključne razlike med novo implementacijo in sistemom Buck, ki so ga prej uporabljali pri Facebooku, so uporaba jezika Rust namesto Jave in znatno povečanje učinkovitosti in produktivnosti procesa sestavljanja (v internih testih v isti infrastrukturi Buck2 izvaja sestavljanje dvakrat hitreje kot Buck). Koda se distribuira pod licenco Apache 2.0.

Sistem ni vezan na sestavljanje kode v določenih jezikih in takoj po namestitvi podpira sestavljanje projektov, napisanih v jezikih C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell in OCaml. , ki ga uporablja Facebook. Jezik Starlark, ki temelji na Pythonu (kot v Bazelu), se uporablja za oblikovanje dodatkov, izdelavo skriptov in pravil. Starlark vam omogoča, da razširite zmogljivosti montažnega sistema in abstrahirate od specifičnih jezikov, ki se uporabljajo v sestavljenih projektih.

Visoka zmogljivost je dosežena s predpomnjenjem rezultatov, paralelizacijo dela in podporo za oddaljeno izvajanje nalog (Remote Build Execution). V okolju montaže se uporablja koncept "hermetičnosti" - sestavljena koda je odrezana od zunanjega sveta, med postopkom montaže se nič ne naloži od zunaj, ponavljajoče se izvajanje dela na različnih sistemih pa vodi do istega rezultata ( ponovljene sestave, na primer rezultat sestavljanja projekta na stroju razvijalca bo popolnoma enak gradnji na strežniku za neprekinjeno integracijo). Stanje pomanjkanja odvisnosti je v Buck2 zaznano kot napaka.

Ključne značilnosti Buck2:

  • Pravila za podporo programskih jezikov in jedro montažnega sistema so popolnoma ločena. Pravila uporabljajo jezik Starlark, komplet orodij Starlark in izvedba pa sta napisana v Rustu.
  • Sistem sestavljanja uporablja en sam inkrementalni graf odvisnosti (brez delitve na stopnje), ki omogoča povečanje globine paralelizacije dela v primerjavi z Buckom in Bazelom ter izogibanje številnim vrstam napak.
  • Koda Buck2, objavljena na GitHubu, in pravila za podporo programskih jezikov so skoraj enaki interni različici, ki se uporablja v Facebook infrastrukturi (razlike so le v zvezi z izdajami prevajalnikov in zbirnih strežnikov, ki se uporabljajo v Facebooku).
  • Sistem za sestavljanje je zasnovan tako, da se vključi v sisteme za oddaljeno izvajanje nalog, ki vam omogočajo izvajanje dela na oddaljenih strežnikih. API za oddaljeno izvajanje je združljiv z Bazelom in preizkušen glede združljivosti z Buildbarn in EngFlow.
  • Zagotovljena je integracija z virtualnimi datotečnimi sistemi, v katerih je predstavljena vsebina celotnega repozitorija, dejansko pa se delo izvaja s trenutno lokalno rezino dela repozitorija (razvijalec vidi celotno repozitorij, vendar le zahtevane datoteke do katerih dostopate, so ekstrahirani iz repozitorija). Podprt je VFS, ki temelji na EdenFS in Git LFS, ki se uporablja v Saplingu.

Vir: opennet.ru

Dodaj komentar