A Facebook közzétette a Buck2 build rendszert

A Facebook bevezetett egy új build rendszert, a Buck2-t, amelynek célja a projektek építésének megszervezése nagyon nagy adattárakból, beleértve a különböző programozási nyelvű kódokat is. A legfontosabb különbségek az új implementáció és a Facebooknál korábban használt Buck rendszer között a Java helyett a Rust nyelv használata, valamint az összeállítási folyamat hatékonyságának és termelékenységének jelentős növekedése (a belső teszteknél ugyanabban az infrastruktúrában a Buck2 végzi az összeszerelést kétszer gyorsabban, mint Buck). A kódot az Apache 2.0 licenc alatt terjesztik.

A rendszer nincs kötve meghatározott nyelvű kód összeállításához, és már a dobozból is támogatja a C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell és OCaml nyelveken írt projektek összeállítását , használja a Facebook. A Python alapú Starlark nyelvet (mint a Bazelnél) kiegészítők tervezésére, szkriptek és szabályok létrehozására használják. A Starlark lehetővé teszi az összeszerelő rendszer képességeinek bővítését és elvonatkoztatását az összeállított projektekben használt nyelvektől.

A nagy teljesítmény az eredmények gyorsítótárazásával, a munka párhuzamosításával és a feladatok távoli végrehajtásának támogatásával érhető el (Remote Build Execution). Az összeállítási környezetben a „hermeticitás” fogalmát használják - az összeállított kód el van vágva a külvilágtól, az összeszerelési folyamat során semmit sem töltenek be kívülről, és a különböző rendszereken végzett munka ismételt végrehajtása ugyanarra az eredményre vezet ( ismételt összeállítások, például egy projekt összeállításának eredménye a fejlesztő gépén teljesen megegyezik a folyamatos integrációs szerveren végzett felépítéssel). A függőség hiányának helyzetét a Buck2 hibaként érzékeli.

A Buck2 főbb jellemzői:

  • A programozási nyelvek támogatására és az összeállítási rendszer magjára vonatkozó szabályok teljesen különállóak. A szabályok a Starlark nyelvet használják, a Starlark eszközkészlet és megvalósítás pedig Rust nyelven íródott.
  • Az összeállítási rendszer egyetlen növekményes függőségi grafikont használ (szakaszokra bontás nélkül), amely lehetővé teszi a munka párhuzamosítási mélységének növelését a Buckhoz és a Bazelhez képest, és sokféle hiba elkerülését.
  • A GitHubon közzétett Buck2 kód és a programozási nyelvek támogatására vonatkozó szabályok szinte teljesen megegyeznek a Facebook infrastruktúrájában használt belső verzióval (az egyetlen eltérés a Facebookban használt fordítók és assembly szerverek kiadásaiban van).
  • Az összeszerelő rendszert úgy tervezték, hogy integrálható legyen a távoli feladat-végrehajtási rendszerekkel, amelyek lehetővé teszik a távoli szervereken történő munkavégzést. A távoli végrehajtási API kompatibilis a Bazel-lel, és a Buildbarn és az EngFlow kompatibilitást tesztelték.
  • A virtuális fájlrendszerekkel való integráció biztosított, amelyben a teljes tároló tartalma megjelenik, de valójában a tároló egy részének aktuális helyi szeletével történik a munka (a fejlesztő látja a teljes tárolót, de csak a szükséges fájlokat amelyek elérik a tárolóból). A Saplingben használt EdenFS és Git LFS alapú VFS támogatott.

Forrás: opennet.ru

Hozzászólás