Facebook het die Buck2-boustelsel gepubliseer

Facebook het 'n nuwe boustelsel, Buck2, bekendgestel wat daarop gemik is om die bou van projekte uit baie groot bewaarplekke te organiseer, insluitend kode in verskillende programmeertale. Die belangrikste verskille tussen die nuwe implementering en die Buck-stelsel wat voorheen by Facebook gebruik is, is die gebruik van die Rust-taal in plaas van Java en 'n aansienlike toename in die doeltreffendheid en produktiwiteit van die monteerproses (in interne toetse in dieselfde infrastruktuur voer Buck2 montering uit take twee keer so vinnig as Buck). Die kode word onder die Apache 2.0-lisensie versprei.

Die stelsel is nie gekoppel aan die samestelling van kode in spesifieke tale nie en ondersteun uit die boks die samestelling van projekte geskryf in die tale C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell en OCaml , wat deur Facebook gebruik word. Die Starlark-taal, gebaseer op Python (soos in Bazel), word gebruik om byvoegings te ontwerp, skrifte en reëls te bou. Starlark laat jou toe om die vermoëns van die samestellingstelsel uit te brei en te abstraheer van die spesifieke tale wat in die saamgestelde projekte gebruik word.

Hoë werkverrigting word behaal deur die kas van resultate, parallelisering van werk en ondersteuning vir afstanduitvoering van take (Remote Build Execution). In die monteeromgewing word die konsep van "hermetisiteit" gebruik - die saamgestelde kode word van die buitewêreld afgesny, niks word van buite af gelaai tydens die monteerproses nie, en herhaalde uitvoering van werk op verskillende stelsels lei tot dieselfde resultaat ( herhaalde samestellings, byvoorbeeld, die resultaat van die samestelling van 'n projek op die ontwikkelaar se masjien sal heeltemal identies wees aan die bou op die deurlopende integrasiebediener). Die situasie van gebrek aan afhanklikheid word in Buck2 as 'n fout beskou.

Sleutel kenmerke van Buck2:

  • Die reëls vir die ondersteuning van programmeertale en die kern van die samestellingstelsel is heeltemal apart. Die reëls gebruik die Starlark-taal, en die Starlark-gereedskapstel en implementering is in Rust geskryf.
  • Die samestellingstelsel gebruik 'n enkele inkrementele afhanklikheidsgrafiek (sonder verdeling in stadiums), wat dit moontlik maak om die diepte van parallelisering van werk te verhoog in vergelyking met Buck en Bazel en baie soorte foute te vermy.
  • Die Buck2-kode wat op GitHub gepubliseer is en die reëls vir die ondersteuning van programmeertale is amper identies aan die interne weergawe wat in die Facebook-infrastruktuur gebruik word (die enigste verskille is met betrekking tot die uitgawes van samestellers en samestellingbedieners wat in Facebook gebruik word).
  • Die samestellingstelsel is ontwerp met die oog op integrasie met afgeleë taakuitvoerstelsels wat jou toelaat om werk op afgeleë bedieners uit te voer. Die remote uitvoering API is versoenbaar met Bazel en getoets vir verenigbaarheid met Buildbarn en EngFlow.
  • Integrasie met virtuele lêerstelsels word verskaf, waarin die inhoud van die hele bewaarplek aangebied word, maar in werklikheid word werk uitgevoer met 'n huidige plaaslike deel van 'n deel van die bewaarplek (die ontwikkelaar sien die hele bewaarplek, maar slegs die vereiste lêers wat verkry word, word uit die bewaarplek onttrek). VFS gebaseer op EdenFS en Git LFS, wat in Sapling gebruik word, word ondersteun.

Bron: opennet.ru

Voeg 'n opmerking