Facebook publikigis la konstrusistemon Buck2

Facebook enkondukis novan konstrusistemon, Buck2, fokusitan al konstruado de projektoj de tre grandaj deponejoj, kiuj inkluzivas kodon en malsamaj programlingvoj. La ŝlosilaj diferencoj inter la nova efektivigo kaj la Buck-sistemo antaŭe uzita de Facebook estas la uzo de la Rust-lingvo anstataŭ Java kaj signifa pliiĝo en la efikeco kaj rendimento de la kunigprocezo (en internaj testoj en la sama infrastrukturo, Buck2 elfaras muntadon. taskoj duoble pli rapide ol Buck). La kodo estas distribuita sub la permesilo Apache 2.0.

La sistemo ne estas ligita al konstrukodo en specifaj lingvoj kaj el la skatolo subtenas konstruprojektojn skribitajn en C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell kaj OCaml uzataj de Facebook. La Starlark-lingvo bazita sur Python (kiel en Bazel) estas uzata por desegni aldonaĵojn, konstrui skriptojn kaj regulojn. Starlark permesas vin etendi la kapablojn de la konstrusistemo kaj abstrakti de la specifaj lingvoj uzataj en la projektoj konstruataj.

Alta rendimento estas atingita per kaŝmemoro de rezultoj, paraleligo de laboro kaj subteno por fora plenumo de taskoj (Remote Build Execution). En la konstrumedio, la koncepto de "streco" estas uzata - la kompilita kodo estas fortranĉita de la ekstera mondo, nenio estas ŝarĝita de ekstere dum la konstruprocezo, kaj ripeta ekzekuto de laboro sur malsamaj sistemoj kondukas al la sama rezulto ( ripetaj konstruoj, ekzemple, la rezulto de konstruado de projekto sur la maŝino de la programisto estos ĝuste la sama kiel la konstruo sur la kontinua integriga servilo). La situacio de manko de dependeco estas perceptita en Buck2 kiel eraro.

Ĉefaj trajtoj de Buck2:

  • La reguloj por subteni programlingvojn kaj la kernon de la konstrusistemo estas tute apartigitaj. La reguloj estas skribitaj en la lingvo Starlark, kaj la ilaro kaj efektivigo de Starlark estas skribitaj en Rust.
  • La konstrusistemo uzas ununuran pliigan dependecan grafeon (sen divido en stadiojn), kiu ebligas al vi pliigi la profundon de paraleligo de laboro kompare kun Buck kaj Bazel kaj eviti multajn specojn de eraroj.
  • La Buck2-kodo publikigita sur GitHub kaj la subtenaj reguloj de programlingvo estas preskaŭ identaj al la interna versio uzata en la Facebook-infrastrukturo (la nuraj diferencoj estas en ligado al la kompilildonoj kaj konstruaj serviloj uzataj de Facebook).
  • La konstrusistemo estas desegnita kun okulo al integriĝo kun foraj labor-ekzekutaj sistemoj, kiuj ebligas al vi ruli laborpostenojn sur foraj serviloj. La fora ekzekuta API estas kongrua kun Bazel kaj estis provita pri kongruo kun Buildbarn kaj EngFlow.
  • Integriĝo kun virtualaj dosiersistemoj estas provizita, en kiu la enhavo de la tuta deponejo estas prezentita, sed fakte, laboro estas farita kun la fakta loka tranĉaĵo de parto de la deponejo (la programisto vidas la tutan deponejon, sed nur la bezonatan). dosieroj kiuj estas aliritaj estas prenitaj el la deponejo). Subtenataj estas VFS bazitaj sur EdenFS kaj Git LFS, kiuj estas uzataj de Sapling.

fonto: opennet.ru

Aldoni komenton