Facebook zveřejnil sestavovací systém Buck2

Facebook představil nový systém sestavování, Buck2, zaměřený na vytváření projektů z velmi velkých úložišť, které obsahují kód v různých programovacích jazycích. Klíčovými rozdíly mezi novou implementací a systémem Buck dříve používaným Facebookem je použití jazyka Rust místo Javy a výrazné zvýšení efektivity a výkonu procesu montáže (v interních testech ve stejné infrastruktuře Buck2 provádí montáž úkoly dvakrát rychleji než Buck). Kód je distribuován pod licencí Apache 2.0.

Systém není vázán na stavební kód v konkrétních jazycích a ihned po vybalení podporuje stavební projekty napsané v C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell a OCaml používané Facebookem. Jazyk Starlark založený na Pythonu (jako v Bazelu) se používá k navrhování doplňků, vytváření skriptů a pravidel. Starlark vám umožňuje rozšířit možnosti systému sestavení a abstrahovat od konkrétních jazyků používaných v budovaných projektech.

Vysokého výkonu je dosahováno ukládáním výsledků do mezipaměti, paralelizací práce a podporou vzdáleného provádění úloh (Remote Build Execution). V prostředí sestavení se používá koncept "těsnosti" - zkompilovaný kód je odříznut od vnějšího světa, během procesu sestavení se nic nenačítá zvenčí a opakované provádění práce na různých systémech vede ke stejnému výsledku ( opakovaná sestavení, například výsledek sestavení projektu na vývojářském počítači bude přesně stejný jako sestavení na serveru pro kontinuální integraci). Situace nedostatku závislosti je v Buck2 vnímána jako chyba.

Klíčové vlastnosti Buck2:

  • Pravidla pro podporu programovacích jazyků a jádro systému sestavení jsou zcela odděleny. Pravidla jsou napsána v jazyce Starlark a sada nástrojů a implementace Starlark jsou napsány v Rustu.
  • Sestavovací systém používá jeden inkrementální graf závislosti (bez rozdělení na etapy), který umožňuje zvýšit hloubku paralelizace práce ve srovnání s Buck a Bazel a vyhnout se mnoha typům chyb.
  • Kód Buck2 publikovaný na GitHubu a pravidla podpory programovacího jazyka jsou téměř totožné s interní verzí používanou v infrastruktuře Facebooku (jediné rozdíly jsou ve vazbě na edice kompilátoru a servery sestavení používané Facebookem).
  • Systém sestavení je navržen s ohledem na integraci se systémy vzdáleného provádění úloh, které vám umožňují spouštět úlohy na vzdálených serverech. Vzdálené spouštění API je kompatibilní s Bazel a bylo testováno na kompatibilitu s Buildbarn a EngFlow.
  • Je zajištěna integrace s virtuálními souborovými systémy, ve kterých je prezentován obsah celého úložiště, ale ve skutečnosti se pracuje se skutečným lokálním řezem části úložiště (vývojář vidí celé úložiště, ale pouze požadované soubory, ke kterým se přistupuje, se načítají z úložiště). Podporovány jsou VFS založené na EdenFS a Git LFS, které používá Sapling.

Zdroj: opennet.ru

Přidat komentář