Facebook avaldas Buck2 ehitussüsteemi

Facebook on kasutusele võtnud uue ehitussüsteemi Buck2, mis on keskendunud projektide ehitamisele väga suurtest hoidlatest, mis sisaldavad koodi erinevates programmeerimiskeeltes. Peamised erinevused uue juurutuse ja Facebookis varem kasutatud Bucki süsteemi vahel on Rust keele kasutamine Java asemel ning koosteprotsessi efektiivsuse ja jõudluse märkimisväärne kasv (sama infrastruktuuri sisetestides teostab Buck2 montaaži kaks korda kiiremini kui Buck). Koodi levitatakse Apache 2.0 litsentsi all.

Süsteem ei ole seotud konkreetsete keelte ehituskoodiga ja toetab juba valmis ehitusprojekte, mis on kirjutatud C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell ja OCaml, mida kasutab Facebook. Pythonil põhinevat Starlarki keelt (nagu Bazelis) kasutatakse lisandmoodulite kujundamiseks, skriptide ja reeglite koostamiseks. Starlark võimaldab teil laiendada ehitussüsteemi võimalusi ja võtta abstraheerida ehitatavates projektides kasutatud konkreetsetest keeltest.

Kõrge jõudlus saavutatakse tulemuste vahemällu salvestamise, töö paralleelsuse ja ülesannete kaugtäitmise (Remote Build Execution) toega. Ehituskeskkonnas kasutatakse "tiheduse" kontseptsiooni - kompileeritud kood lõigatakse välismaailmast ära, väljastpoolt ei laadita ehitamise ajal midagi ning töö korduv läbiviimine erinevates süsteemides viib sama tulemuseni ( korduvad ehitused, näiteks arendaja masinas projekti ehitamise tulemus on täpselt sama, mis pideva integratsiooni serveris). Sõltuvuse puudumise olukorda tajutakse Buck2-s veana.

Buck2 põhifunktsioonid:

  • Programmeerimiskeelte toetamise reeglid ja ehitussüsteemi tuum on täielikult eraldatud. Reeglid on kirjutatud Starlarki keeles ning Starlarki tööriistakomplekt ja rakendus on kirjutatud Rust keeles.
  • Ehitussüsteem kasutab ühte järkjärgulist sõltuvusgraafikut (ilma etappideks jagamiseta), mis võimaldab teil võrreldes Bucki ja Bazeliga suurendada töö paralleelsuse sügavust ning vältida mitut tüüpi vigu.
  • GitHubis avaldatud Buck2 kood ja programmeerimiskeele tugireeglid on peaaegu identsed Facebooki infrastruktuuris kasutatava siseversiooniga (ainsad erinevused on Facebooki kasutatavate kompilaatoriväljaannete ja ehitusserveritega sidumises).
  • Koostamissüsteem on kavandatud silmas pidades integreerimist kaugtöö täitmissüsteemidega, mis võimaldavad teil töid kaugserverites käivitada. Kaugkäivituse API ühildub Bazeliga ning selle ühilduvust on testitud Buildbarni ja EngFlow'ga.
  • Pakutakse integratsiooni virtuaalsete failisüsteemidega, milles esitatakse kogu hoidla sisu, kuid tegelikult töötatakse hoidla osa tegeliku lokaalse lõiguga (arendaja näeb kogu hoidlat, kuid ainult vajalikku failid, millele juurdepääsetakse, hangitakse hoidlast). Toetatud on EdenFS-il ja Git LFS-il põhinevad VFS-id, mida kasutab Sapling.

Allikas: opennet.ru

Lisa kommentaar