Facebook julkaisi Buck2-koontijärjestelmän

Facebook esitteli uuden Buck2-koontijärjestelmän, jonka tarkoituksena on järjestää projektien rakentaminen erittäin suurista arkistoista, mukaan lukien koodia eri ohjelmointikielillä. Keskeisimmät erot uuden toteutuksen ja Facebookissa aiemmin käytetyn Buck-järjestelmän välillä ovat Rust-kielen käyttö Javan sijaan sekä kokoonpanoprosessin tehokkuuden ja tuottavuuden merkittävä kasvu (saman infrastruktuurin sisäisissä testeissä Buck2 suorittaa kokoonpanon kaksi kertaa nopeammin kuin Buck). Koodia jaetaan Apache 2.0 -lisenssillä.

Järjestelmä ei ole sidottu koodin kokoamiseen tietyillä kielillä, ja se tukee kielillä C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell ja OCaml kirjoitettujen projektien kokoamista. , jota Facebook käyttää. Pythoniin perustuvaa Starlark-kieltä (kuten Bazelissa) käytetään lisäosien suunnitteluun, skriptien ja sääntöjen rakentamiseen. Starlarkin avulla voit laajentaa kokoonpanojärjestelmän ominaisuuksia ja irrottaa kootuissa projekteissa käytetyistä erityisistä kielistä.

Korkea suorituskyky saavutetaan tulosten välimuistilla, työn rinnakkaistoiminnolla ja tehtävien etäsuorituksen tuella (Remote Build Execution). Kokoonpanoympäristössä käytetään "hermeettisyyden" käsitettä - koottu koodi leikataan pois ulkomaailmasta, mitään ei ladata ulkopuolelta kokoonpanoprosessin aikana ja toistuva töiden suorittaminen eri järjestelmissä johtaa samaan tulokseen ( toistuvat kokoonpanot, esimerkiksi projektin kokoamisen tulos kehittäjän koneelle on täysin identtinen jatkuvan integrointipalvelimen rakentamisen kanssa). Riippuvuuden puutteen tilanne nähdään Buck2:n virheenä.

Buck2:n tärkeimmät ominaisuudet:

  • Ohjelmointikielten ja kokoonpanojärjestelmän ytimen tukemista koskevat säännöt ovat täysin erillisiä. Säännöt käyttävät Starlark-kieltä, ja Starlarkin työkalupakki ja toteutus on kirjoitettu rustilla.
  • Kokoonpanojärjestelmä käyttää yhtä inkrementaalista riippuvuusgraafia (ilman vaiheisiin jakamista), mikä mahdollistaa työn rinnakkaissyvyyden lisäämisen Buckiin ja Bazeliin verrattuna ja monen tyyppisten virheiden välttämisen.
  • GitHubissa julkaistu Buck2-koodi ja ohjelmointikielten tukisäännöt ovat lähes identtiset Facebookin infrastruktuurissa käytetyn sisäisen version kanssa (ainoat erot liittyvät Facebookissa käytettäviin kääntäjien ja kokoonpanopalvelimien versioihin).
  • Kokoonpanojärjestelmä on suunniteltu integroitaviksi etätehtävien suoritusjärjestelmiin, jotka mahdollistavat työn suorittamisen etäpalvelimilla. Etäsuorituksen API on yhteensopiva Bazelin kanssa, ja sen yhteensopivuus on testattu Buildbarnin ja EngFlown kanssa.
  • Integraatio virtuaalisiin tiedostojärjestelmiin tarjotaan, jossa esitetään koko arkiston sisältö, mutta itse asiassa työ tehdään nykyisen paikallisen osan arkistosta (kehittäjä näkee koko arkiston, mutta vain vaaditut tiedostot joita käytetään, ne poimitaan arkistosta). Saplingissa käytettyjä EdenFS- ja Git LFS -pohjaisia ​​VFS-tiedostoja tuetaan.

Lähde: opennet.ru

Lisää kommentti