Buck2, det nye Facebook-byggesystemet

Buck2-Hero

Buck2, Facebooks nye open source byggesystem

Facebook introdusert nylig utgitt et nytt byggesystem kalt "Buck2", som bemerker at det er det fokusert på å bygge prosjekter fra depoter muy store som inkluderer kode på forskjellige språk programmering.

Forskjellene mellom den nye implementeringen og systemet tidligere brukt bukk Av facebook bruker Rust-språket i stedet for Java og en betydelig økning i effektiviteten og ytelsen til monteringsprosessen (i interne tester på samme infrastruktur utfører Buck2 monteringsoppgaver dobbelt så raskt som Buck).

Byggsystemer står mellom en utvikler og deres kode som kjører, så alt vi kan gjøre for å gjøre opplevelsen raskere eller mer produktiv, påvirker direkte hvor effektiv en utvikler kan være. Målet for Buck2 var å beholde det vi elsket med Buck1 (det grunnleggende og arbeidsflyter), ta inspirasjon fra post-Buck1-innovasjoner (inkludert Bazel, Adapton og Shake), og fokusere på hastighet og muliggjør nye opplevelser.

Om Buck2

Det er fremhevet det systemet er ikke bundet til å lage kode på bestemte språk og ut av esken støtter den byggeprosjekter skrevet i 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 plugins, lage skript og regler. Starlark lar deg utvide mulighetene til byggesystemet og abstrahere fra de spesifikke språkene som brukes i prosjektene som bygges.

Det er nevnt at høy ytelse oppnås ved å bufre resultatene, parallellisering av arbeid og støtte for fjernutførelse av oppgaver (Remote Build Execution).

Byggemiljøet bruker begrepet "hermetisitet": den kompilerte koden er løsrevet fra omverdenen, ingenting lastes fra utsiden under byggeprosessen, og gjentatt utførelse av jobben på forskjellige systemer fører til samme resultat (gjentatte bygg, for eksempel resultatet av å kompilere et prosjekt på maskinen fra utvikleren vil være nøyaktig den samme som bygget på den kontinuerlige integrasjonsserveren). Den manglende avhengighetssituasjonen oppfattes i Buck2 som en feil.

På den delen av Buck2 Nøkkelfunksjoner, følgende skiller seg ut:

  • Reglene for å støtte programmeringsspråk og kjernebyggesystemet er helt separate. Reglene er skrevet på Starlark-språket, og Starlark-verktøysettet og implementeringen er skrevet i Rust.
  • Byggesystemet bruker en enkelt inkrementell avhengighetsgraf (ingen staging), som lar deg øke dybden av parallellisering av arbeid sammenlignet med Buck og Bazel og unngå mange typer feil.
  • Buck2s kode lagt ut på GitHub og reglene for programmeringsspråkstøtte er nesten identiske med den interne versjonen som brukes i Facebooks infrastruktur (de eneste forskjellene er i lenken til kompilatorutgaver og byggeservere som brukes av Facebook).
  • Byggesystemet er designet for å integreres med eksterne jobbutførelsessystemer som lar deg kjøre jobber på eksterne servere. Fjernkjørings-APIet er kompatibelt med Bazel og har blitt testet for kompatibilitet med Buildbarn og EngFlow.
  • Det tilbys integrasjon med virtuelle filsystemer, der innholdet i hele depotet presenteres, men faktisk utføres arbeidet med den virkelige lokale delen av en del av depotet (utvikleren ser hele depotet, men bare det som er påkrevd) filer som du får tilgang til, hentes fra depotet). EdenFS-basert VFS og Git LFS støttes, som brukes av Sapling.

Til slutt, for de som er interessert i å kunne lære mer om det, bør de vite at koden er distribuert under Apache 2.0-lisensen, og de kan se detaljene I den følgende lenken.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.