Facebook a publicat sistemul de construire Buck2

Facebook a introdus un nou sistem de compilare, Buck2, care vizează organizarea construirii proiectelor din depozite foarte mari, inclusiv cod în diferite limbaje de programare. Diferențele cheie între noua implementare și sistemul Buck folosit anterior la Facebook sunt utilizarea limbajului Rust în locul Java și o creștere semnificativă a eficienței și productivității procesului de asamblare (în testele interne în aceeași infrastructură, Buck2 realizează asamblarea). sarcini de două ori mai rapide decât Buck). Codul este distribuit sub licența Apache 2.0.

Sistemul nu este legat de asamblarea codului în anumite limbi și acceptă din cutie asamblarea proiectelor scrise în limbajele C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell și OCaml , folosit de Facebook. Limbajul Starlark, bazat pe Python (ca și în Bazel), este folosit pentru a proiecta suplimente, pentru a construi scripturi și reguli. Starlark vă permite să extindeți capacitățile sistemului de asamblare și să abțineți de la limbajele specifice utilizate în proiectele asamblate.

Performanța ridicată este atinsă prin memorarea în cache a rezultatelor, paralelizarea lucrărilor și suport pentru execuția de la distanță a sarcinilor (Remote Build Execution). În mediul de asamblare, se utilizează conceptul de „ermeticitate” - codul asamblat este tăiat din lumea exterioară, nimic nu este încărcat din exterior în timpul procesului de asamblare, iar execuțiile repetate de lucru pe diferite sisteme conduc la același rezultat ( asamblari repetate, de exemplu, rezultatul asamblării unui proiect pe mașina dezvoltatorului va fi complet identic cu construcția pe serverul de integrare continuă). Situația de lipsă de dependență este percepută ca o eroare în Buck2.

Caracteristici cheie ale Buck2:

  • Regulile pentru sprijinirea limbajelor de programare și nucleul sistemului de asamblare sunt complet separate. Regulile folosesc limbajul Starlark, iar setul de instrumente și implementarea Starlark sunt scrise în Rust.
  • Sistemul de asamblare folosește un singur grafic de dependență incremental (fără împărțire în etape), care permite creșterea adâncimii de paralelizare a lucrării în comparație cu Buck și Bazel și evitarea multor tipuri de erori.
  • Codul Buck2 publicat pe GitHub și regulile de suport pentru limbaje de programare sunt aproape identice cu versiunea internă folosită în infrastructura Facebook (singurele diferențe sunt în raport cu edițiile compilatoarelor și serverelor de asamblare utilizate în Facebook).
  • Sistemul de asamblare este proiectat pentru integrarea cu sistemele de execuție a sarcinilor de la distanță care vă permit să executați lucrul pe servere la distanță. API-ul de execuție la distanță este compatibil cu Bazel și a fost testat pentru compatibilitate cu Buildbarn și EngFlow.
  • Este furnizată integrarea cu sisteme de fișiere virtuale, în care este prezentat conținutul întregului depozit, dar, de fapt, se lucrează cu o porțiune locală curentă a unei părți a depozitului (dezvoltatorul vede întregul depozit, dar numai fișierele necesare care sunt accesate sunt extrase din depozit). VFS bazat pe EdenFS și Git LFS, care sunt utilizate în Sapling, sunt acceptate.

Sursa: opennet.ru

Adauga un comentariu