Facebook publiceerde het Buck2-buildsysteem

Facebook introduceerde een nieuw bouwsysteem, Buck2, gericht op het organiseren van de bouw van projecten uit zeer grote repository's, inclusief code in verschillende programmeertalen. De belangrijkste verschillen tussen de nieuwe implementatie en het Buck-systeem dat eerder bij Facebook werd gebruikt, zijn het gebruik van de Rust-taal in plaats van Java en een aanzienlijke toename van de efficiëntie en productiviteit van het assemblageproces (bij interne tests in dezelfde infrastructuur voert Buck2 de assemblage uit taken twee keer zo snel als Buck). De code wordt gedistribueerd onder de Apache 2.0-licentie.

Het systeem is niet gebonden aan het samenstellen van code in specifieke talen en ondersteunt out-of-the-box het samenstellen van projecten geschreven in de talen C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell en OCaml , gebruikt door Facebook. De Starlark-taal, gebaseerd op Python (zoals in Bazel), wordt gebruikt om add-ons te ontwerpen, scripts en regels te bouwen. Met Starlark kunt u de mogelijkheden van het assemblagesysteem uitbreiden en abstraheren van de specifieke talen die in de geassembleerde projecten worden gebruikt.

Hoge prestaties worden bereikt door het cachen van resultaten, parallellisatie van werk en ondersteuning voor het op afstand uitvoeren van taken (Remote Build Execution). In de assemblageomgeving wordt het concept van "hermeticiteit" gebruikt: de geassembleerde code wordt afgesneden van de buitenwereld, tijdens het assemblageproces wordt niets van buitenaf geladen en herhaalde uitvoeringen van werk op verschillende systemen leiden tot hetzelfde resultaat ( herhaalde assemblages, het resultaat van het assembleren van een project op de machine van de ontwikkelaar zal bijvoorbeeld volledig identiek zijn aan de build op de continue integratieserver). De situatie van gebrek aan afhankelijkheid wordt in Buck2 als een fout gezien.

Belangrijkste kenmerken van Buck2:

  • De regels voor het ondersteunen van programmeertalen en de kern van het assemblagesysteem zijn volledig gescheiden. De regels gebruiken de Starlark-taal en de Starlark-toolkit en implementatie zijn geschreven in Rust.
  • Het assemblagesysteem maakt gebruik van een enkele incrementele afhankelijkheidsgrafiek (zonder opdeling in fasen), waardoor de parallellisatie van het werk kan worden vergroot in vergelijking met Buck en Bazel en vele soorten fouten kunnen worden vermeden.
  • De op GitHub gepubliceerde Buck2-code en de regels voor het ondersteunen van programmeertalen zijn vrijwel identiek aan de interne versie die in de Facebook-infrastructuur wordt gebruikt (de enige verschillen hebben betrekking op de edities van compilers en assemblageservers die op Facebook worden gebruikt).
  • Het assemblagesysteem is ontworpen met het oog op integratie met externe taakuitvoeringssystemen waarmee u werk op externe servers kunt uitvoeren. De API voor uitvoering op afstand is compatibel met Bazel en getest op compatibiliteit met Buildbarn en EngFlow.
  • Er wordt voorzien in integratie met virtuele bestandssystemen, waarbij de inhoud van de gehele repository wordt gepresenteerd, maar in feite wordt er gewerkt met een actueel lokaal deel van een deel van de repository (de ontwikkelaar ziet de gehele repository, maar alleen de benodigde bestanden waartoe toegang wordt verkregen, worden uit de repository gehaald). VFS gebaseerd op EdenFS en Git LFS, die in Sapling worden gebruikt, worden ondersteund.

Bron: opennet.ru

Voeg een reactie