Buck2, nový systém zostavovania Facebooku

Buck2-Hero

Buck2, nový open source systém zostavovania Facebooku

Facebook predstavil nedávno vydal nový systém zostavovania s názvom "Buck2", ktorý uvádza, že je zameraná na budovanie projektov z úložísk veľmi veľké, ktoré obsahujú kód v rôznych jazykoch programovanie.

Rozdiely medzi novou implementáciou a systémom predtým používaný dolár Prostredníctvom facebooku namiesto Javy používajú jazyk Rust a výrazné zvýšenie efektivity a výkonu montážneho procesu (v interných testoch na rovnakej infraštruktúre Buck2 vykonáva montážne úlohy dvakrát rýchlejšie ako Buck).

Zostavovacie systémy stoja medzi vývojárom a ich spusteným kódom, takže čokoľvek, čo môžeme urobiť, aby bolo prostredie rýchlejšie alebo produktívnejšie, priamo ovplyvňuje, aký efektívny môže byť vývojár. Cieľom Buck2 bolo zachovať to, čo sa nám na Buck1 páčilo (základy a pracovné postupy), inšpirovať sa inováciami po Buck1 (vrátane Bazel, Adapton a Shake) a zamerať sa na rýchlosť a umožnenie nových zážitkov.

O Buck2

Je zdôraznené, že systém nie je viazaný na tvorbu kódu v konkrétnych jazykoch a hneď po vybalení podporuje projekty staviteľov napísané v 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 pluginov, vytváranie skriptov a pravidiel. Starlark vám umožňuje rozšíriť možnosti zostavovacieho systému a abstrahovať od konkrétnych jazykov používaných v budovaných projektoch.

Je to spomenuté vysoký výkon sa dosahuje ukladaním výsledkov do vyrovnávacej pamäte, paralelizácia práce a podpora vzdialeného vykonávania úloh (Remote Build Execution).

Prostredie stavby používa pojem „hermetickosť“: kompilovaný kód je oddelený od vonkajšieho sveta, nič sa nenačítava zvonku počas procesu zostavovania a opakované vykonávanie úlohy na rôznych systémoch vedie k rovnakému výsledku (opakované zostavy, napríklad výsledok kompilácie projektu na stroj od vývojára bude presne rovnaký ako zostava na serveri nepretržitej integrácie). Nedostatok závislosti je v Buck2 vnímaný ako chyba.

Na strane Kľúčové vlastnosti Buck2, vynikajú:

  • Pravidlá pre podporu programovacích jazykov a základný systém zostavenia sú úplne oddelené. Pravidlá sú napísané v jazyku Starlark a sada nástrojov a implementácia Starlark sú napísané v jazyku Rust.
  • Zostavovací systém používa jeden prírastkový graf závislosti (žiadna príprava), čo vám umožňuje zvýšiť hĺbku paralelizácie práce v porovnaní s Buck and Bazel a vyhnúť sa mnohým druhom chýb.
  • Kód Buck2 zverejnený na GitHub a pravidlá podpory programovacieho jazyka sú takmer totožné s internou verziou používanou v infraštruktúre Facebooku (jediné rozdiely sú v odkaze na edície kompilátora a zostavovacie servery používané Facebookom).
  • Zostavovací systém je navrhnutý na integráciu so vzdialenými systémami vykonávania úloh, ktoré vám umožňujú spúšťať úlohy na vzdialených serveroch. Vzdialené spustenie API je kompatibilné s Bazel a bolo 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 so skutočnou lokálnou časťou časti úložiska (vývojár vidí celé úložisko, ale iba to, čo je povinné) súbory, ku ktorým sa pristupuje, sa získavajú z úložiska). Podporované sú VFS založené na EdenFS a Git LFS, ktoré používa Sapling.

Nakoniec, pre tých, ktorí majú záujem dozvedieť sa o ňom viac, by mali vedieť, že kód je šírený pod licenciou Apache 2.0 a môžu si prekonzultovať podrobnosti Na nasledujúcom odkaze.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.