Facebook ilichapisha mfumo wa ujenzi wa Buck2

Facebook ilianzisha mfumo mpya wa kujenga, Buck2, unaolenga kuandaa ujenzi wa miradi kutoka kwa hazina kubwa sana, ikijumuisha msimbo katika lugha tofauti za programu. Tofauti kuu kati ya utekelezaji mpya na mfumo wa Buck uliotumiwa hapo awali kwenye Facebook ni matumizi ya lugha ya Rust badala ya Java na ongezeko kubwa la ufanisi na tija ya mchakato wa mkusanyiko (katika majaribio ya ndani katika miundombinu sawa, Buck2 hufanya mkusanyiko. kazi mara mbili haraka kama Buck). Nambari hiyo inasambazwa chini ya leseni ya Apache 2.0.

Mfumo haujaunganishwa na mkusanyiko wa nambari katika lugha maalum na nje ya sanduku inasaidia mkusanyiko wa miradi iliyoandikwa kwa lugha C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell na OCaml. , inayotumiwa na Facebook. Lugha ya Starlark, yenye msingi wa Python (kama ilivyo Bazel), inatumika kubuni nyongeza, kujenga hati na sheria. Starlark hukuruhusu kupanua uwezo wa mfumo wa kusanyiko na muhtasari kutoka kwa lugha maalum zinazotumiwa katika miradi iliyokusanyika.

Utendaji wa juu unapatikana kupitia caching ya matokeo, usawa wa kazi na usaidizi wa utekelezaji wa kazi wa kijijini (Utekelezaji wa Kujenga Mbali). Katika mazingira ya kusanyiko, wazo la "hermeticity" hutumiwa - nambari iliyokusanywa imekatwa kutoka kwa ulimwengu wa nje, hakuna kitu kinachopakiwa kutoka nje wakati wa mchakato wa kusanyiko, na utekelezaji wa mara kwa mara wa kazi kwenye mifumo tofauti husababisha matokeo sawa. makusanyiko ya mara kwa mara, kwa mfano, matokeo ya kukusanya mradi kwenye mashine ya msanidi itakuwa sawa kabisa na kujenga kwenye seva ya ushirikiano inayoendelea). Hali ya ukosefu wa utegemezi inachukuliwa kuwa kosa katika Buck2.

Vipengele muhimu vya Buck2:

  • Sheria za kusaidia lugha za programu na msingi wa mfumo wa kusanyiko ni tofauti kabisa. Sheria hutumia lugha ya Starlark, na zana ya zana ya Starlark na utekelezaji imeandikwa kwa Rust.
  • Mfumo wa mkusanyiko hutumia grafu moja ya utegemezi wa nyongeza (bila mgawanyiko katika hatua), ambayo inaruhusu kuongeza kina cha ulinganifu wa kazi ikilinganishwa na Buck na Bazel na kuepuka aina nyingi za makosa.
  • Nambari ya Buck2 iliyochapishwa kwenye GitHub na sheria za kusaidia lugha za programu ni karibu sawa na toleo la ndani linalotumiwa katika miundombinu ya Facebook (tofauti pekee ni kuhusiana na matoleo ya watunzi na seva za kusanyiko zinazotumiwa kwenye Facebook).
  • Mfumo wa mkusanyiko umeundwa kwa jicho la kuunganishwa na mifumo ya utekelezaji wa kazi ya mbali ambayo inakuwezesha kuendesha kazi kwenye seva za mbali. API ya utekelezaji ya mbali inaoana na Bazel na imejaribiwa ili kuona uoanifu na Buildbarn na EngFlow.
  • Ushirikiano na mifumo ya faili halisi hutolewa, ambayo yaliyomo kwenye hazina nzima yanawasilishwa, lakini kwa kweli, kazi inafanywa na kipande cha sasa cha sehemu ya hifadhi (msanidi huona hazina nzima, lakini faili zinazohitajika tu. ambazo zinafikiwa hutolewa kutoka kwa hazina). VFS kulingana na EdenFS na Git LFS, ambazo hutumiwa katika Miche, zinaungwa mkono.

Chanzo: opennet.ru

Kuongeza maoni