Facebook publiserte byggesystemet Buck2

Facebook introduserte et nytt byggesystem, Buck2, som tar sikte på å organisere byggingen av prosjekter fra veldig store depoter, inkludert kode på forskjellige programmeringsspråk. De viktigste forskjellene mellom den nye implementeringen og Buck-systemet som tidligere ble brukt på Facebook er bruken av Rust-språket i stedet for Java og en betydelig økning i effektiviteten og produktiviteten til monteringsprosessen (i interne tester i samme infrastruktur utfører Buck2 montering oppgaver dobbelt så raskt som Buck). Koden distribueres under Apache 2.0-lisensen.

Systemet er ikke knyttet til samling av kode på spesifikke språk og støtter ut av esken montering av prosjekter skrevet på språkene C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell og OCaml , brukt av Facebook. Starlark-språket, basert på Python (som i Bazel), brukes til å designe tillegg, bygge skript og regler. Starlark lar deg utvide mulighetene til monteringssystemet og abstrahere fra de spesifikke språkene som brukes i de sammensatte prosjektene.

Høy ytelse oppnås gjennom caching av resultater, parallellisering av arbeid og støtte for fjernutførelse av oppgaver (Remote Build Execution). I monteringsmiljøet brukes begrepet "hermetisitet" - den sammensatte koden er avskåret fra omverdenen, ingenting blir lastet fra utsiden under monteringsprosessen, og gjentatte utføringer av arbeid på forskjellige systemer fører til samme resultat ( gjentatte sammenstillinger, for eksempel, vil resultatet av å sette sammen et prosjekt på utviklerens maskin være helt identisk med bygget på den kontinuerlige integrasjonsserveren). Situasjonen med manglende avhengighet oppfattes som en feil i Buck2.

Nøkkelfunksjoner til Buck2:

  • Reglene for å støtte programmeringsspråk og kjernen i monteringssystemet er helt separate. Reglene bruker Starlark-språket, og Starlark-verktøysettet og implementeringen er skrevet i Rust.
  • Monteringssystemet bruker en enkelt inkrementell avhengighetsgraf (uten inndeling i trinn), som gjør det mulig å øke dybden av parallellisering av arbeid sammenlignet med Buck og Bazel og unngå mange typer feil.
  • Buck2-koden publisert på GitHub og reglene for å støtte programmeringsspråk er nesten identiske med den interne versjonen som brukes i Facebook-infrastrukturen (de eneste forskjellene er i forhold til utgavene av kompilatorer og monteringsservere som brukes i Facebook).
  • Monteringssystemet er designet med tanke på integrasjon med eksterne oppgavekjøringssystemer som lar deg kjøre arbeid på eksterne servere. Fjernkjørings-APIet er kompatibelt med Bazel og testet for kompatibilitet med Buildbarn og EngFlow.
  • Integrasjon med virtuelle filsystemer er gitt, der innholdet i hele depotet presenteres, men faktisk arbeid utføres med en gjeldende lokal del av en del av depotet (utvikleren ser hele depotet, men bare de nødvendige filene som du får tilgang til, trekkes ut fra depotet). VFS basert på EdenFS og Git LFS, som brukes i Sapling, støttes.

Kilde: opennet.ru

Legg til en kommentar