Facebook zverejnil zostavovací systém Buck2

Facebook predstavil nový systém zostavovania, Buck2, zameraný na organizáciu zostavovania projektov z veľmi veľkých úložísk, vrátane kódu v rôznych programovacích jazykoch. Kľúčovými rozdielmi medzi novou implementáciou a systémom Buck predtým používaným na Facebooku je použitie jazyka Rust namiesto Javy a výrazné zvýšenie efektivity a produktivity montážneho procesu (v interných testoch v rovnakej infraštruktúre Buck2 vykonáva montáž úlohy dvakrát rýchlejšie ako Buck). Kód je distribuovaný pod licenciou Apache 2.0.

Systém nie je viazaný na zostavovanie kódu v konkrétnych jazykoch a hneď po vybalení podporuje zostavovanie projektov napísaných v jazykoch C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell a OCaml , ktorú používa Facebook. Jazyk Starlark, založený na Pythone (ako v Bazel), sa používa na navrhovanie doplnkov, vytváranie skriptov a pravidiel. Starlark vám umožňuje rozšíriť možnosti montážneho systému a abstrahovať od konkrétnych jazykov používaných v zostavených projektoch.

Vysoký výkon je dosiahnutý prostredníctvom cachovania výsledkov, paralelizácie práce a podpory vzdialeného vykonávania úloh (Remote Build Execution). V prostredí montáže sa používa koncept „hermetickosti“ - zostavený kód je odrezaný od vonkajšieho sveta, počas procesu montáže sa nič nenačítava zvonku a opakované vykonávanie prác na rôznych systémoch vedie k rovnakému výsledku ( opakované zostavy, napríklad výsledok zostavenia projektu na počítači vývojára bude úplne identický so zostavením na serveri kontinuálnej integrácie). Situácia nedostatočnej závislosti je v Buck2 vnímaná ako chyba.

Kľúčové vlastnosti Buck2:

  • Pravidlá pre podporu programovacích jazykov a jadro systému montáže sú úplne oddelené. Pravidlá používajú jazyk Starlark a súprava nástrojov Starlark a implementácia sú napísané v jazyku Rust.
  • Montážny systém používa jeden inkrementálny graf závislosti (bez rozdelenia na etapy), čo umožňuje zvýšiť hĺbku paralelizácie práce v porovnaní s Buck a Bazel a vyhnúť sa mnohým typom chýb.
  • Kód Buck2 publikovaný na GitHub a pravidlá pre podporu programovacích jazykov sú takmer totožné s internou verziou používanou v infraštruktúre Facebooku (jediné rozdiely sú vo vzťahu k edíciám kompilátorov a montážnych serverov používaných na Facebooku).
  • Montážny systém je navrhnutý s ohľadom na integráciu so systémami vykonávania vzdialených úloh, ktoré vám umožňujú spúšťať prácu na vzdialených serveroch. Vzdialené spustenie API je kompatibilné s Bazel a testované na kompatibilitu s Buildbarn a EngFlow.
  • Je zabezpečená integrácia s virtuálnymi súborovými systémami, v ktorých je prezentovaný obsah celého úložiska, ale v skutočnosti sa pracuje s aktuálnym lokálnym rezom časti úložiska (vývojár vidí celé úložisko, ale iba požadované súbory ku ktorým sa pristupuje, sú extrahované z úložiska). Podporované sú VFS založené na EdenFS a Git LFS, ktoré sa používajú v Sapling.

Zdroj: opennet.ru

Pridať komentár