Facebook publicerade Buck2-byggsystemet

Facebook introducerade ett nytt byggsystem, Buck2, som syftar till att organisera byggandet av projekt från mycket stora arkiv, inklusive kod på olika programmeringsspråk. De viktigaste skillnaderna mellan den nya implementeringen och Buck-systemet som tidigare använts på Facebook är användningen av Rust-språket istället för Java och en betydande ökning av effektiviteten och produktiviteten i monteringsprocessen (i interna tester i samma infrastruktur utför Buck2 montering uppgifter dubbelt så snabbt som Buck). Koden distribueras under Apache 2.0-licensen.

Systemet är inte bundet till sammansättningen av kod på specifika språk och stöder ur lådan sammansättning av projekt skrivna på språken C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell och OCaml , som används av Facebook. Starlark-språket, baserat på Python (som i Bazel), används för att designa tillägg, bygga skript och regler. Starlark låter dig utöka kapaciteten hos monteringssystemet och abstrahera från de specifika språk som används i de sammansatta projekten.

Hög prestanda uppnås genom cachning av resultat, parallellisering av arbete och stöd för fjärrexekvering av uppgifter (Remote Build Execution). I monteringsmiljön används begreppet "hermeticitet" - den sammansatta koden är avskuren från omvärlden, ingenting laddas från utsidan under monteringsprocessen, och upprepade körningar av arbete på olika system leder till samma resultat ( upprepade sammanställningar, till exempel, kommer resultatet av att montera ett projekt på utvecklarens maskin vara helt identiskt med bygget på den kontinuerliga integrationsservern). Situationen med bristande beroende uppfattas som ett fel i Buck2.

Nyckelfunktioner i Buck2:

  • Reglerna för att stödja programmeringsspråk och kärnan i monteringssystemet är helt separata. Reglerna använder Starlark-språket, och Starlark-verktygslådan och implementeringen är skrivna i Rust.
  • Monteringssystemet använder en enda inkrementell beroendegraf (utan uppdelning i steg), vilket gör det möjligt att öka djupet av parallellisering av arbetet jämfört med Buck och Bazel och undvika många typer av fel.
  • Buck2-koden publicerad på GitHub och reglerna för att stödja programmeringsspråk är nästan identiska med den interna versionen som används i Facebook-infrastrukturen (de enda skillnaderna är i förhållande till utgåvorna av kompilatorer och monteringsservrar som används i Facebook).
  • Monteringssystemet är designat med sikte på integration med fjärruppgiftskörningssystem som låter dig köra arbete på fjärrservrar. Fjärrexekverings-API:et är kompatibelt med Bazel och testat för kompatibilitet med Buildbarn och EngFlow.
  • Integration med virtuella filsystem tillhandahålls, där innehållet i hela förvaret presenteras, men i själva verket utförs arbete med en aktuell lokal del av en del av förvaret (utvecklaren ser hela förvaret, men bara de nödvändiga filerna som nås extraheras från förvaret). VFS baserad på EdenFS och Git LFS, som används i Sapling, stöds.

Källa: opennet.ru

Lägg en kommentar