Cyhoeddodd Facebook system adeiladu Buck2

Mae Facebook wedi cyflwyno system adeiladu newydd, Buck2, sy'n canolbwyntio ar brosiectau adeiladu o ystorfeydd mawr iawn sy'n cynnwys cod mewn gwahanol ieithoedd rhaglennu. Y gwahaniaethau allweddol rhwng y gweithrediad newydd a'r system Buck a ddefnyddiwyd yn flaenorol gan Facebook yw'r defnydd o'r iaith Rust yn lle Java a chynnydd sylweddol yn effeithlonrwydd a pherfformiad y broses ymgynnull (mewn profion mewnol yn yr un seilwaith, mae Buck2 yn perfformio cynulliad tasgau ddwywaith mor gyflym Γ’ Buck). Mae'r cod yn cael ei ddosbarthu o dan y drwydded Apache 2.0.

Nid yw'r system yn gysylltiedig Γ’ chod adeiladu mewn ieithoedd penodol ac mae allan o'r blwch yn cefnogi prosiectau adeiladu a ysgrifennwyd yn C ++, Python, Rust, Kotlin, Erlang, Swift, Amcan-C, Haskell ac OCaml a ddefnyddir gan Facebook. Defnyddir yr iaith Starlark sy'n seiliedig ar Python (fel yn Bazel) i ddylunio ychwanegion, adeiladu sgriptiau a rheolau. Mae Starlark yn eich galluogi i ymestyn galluoedd y system adeiladu a haniaethol o'r ieithoedd penodol a ddefnyddir yn y prosiectau sy'n cael eu hadeiladu.

Cyflawnir perfformiad uchel trwy gadw canlyniadau, paraleleiddio gwaith a chefnogaeth ar gyfer cyflawni tasgau o bell (Cyflawni Adeiladu o Bell). Yn yr amgylchedd adeiladu, defnyddir y cysyniad o "dyndra" - mae'r cod a luniwyd yn cael ei dorri i ffwrdd o'r byd y tu allan, nid oes dim yn cael ei lwytho o'r tu allan yn ystod y broses adeiladu, ac mae cyflawni gwaith dro ar Γ΄l tro ar wahanol systemau yn arwain at yr un canlyniad ( adeiladu dro ar Γ΄l tro, er enghraifft, bydd canlyniad adeiladu prosiect ar beiriant y datblygwr yn union yr un fath Γ’'r adeiladu ar y gweinydd integreiddio parhaus). Mae sefyllfa diffyg dibyniaeth yn cael ei gweld yn Buck2 fel camgymeriad.

Nodweddion allweddol Buck2:

  • Mae'r rheolau ar gyfer cefnogi ieithoedd rhaglennu a chraidd y system adeiladu wedi'u gwahanu'n llwyr. Mae'r rheolau wedi'u hysgrifennu yn iaith Starlark, ac mae pecyn cymorth a gweithrediad Starlark wedi'u hysgrifennu yn Rust.
  • Mae'r system adeiladu yn defnyddio un graff dibyniaeth gynyddrannol (heb ei rannu'n gamau), sy'n eich galluogi i gynyddu dyfnder cyfochrogiad gwaith o'i gymharu Γ’ Buck a Bazel ac osgoi llawer o fathau o wallau.
  • Mae cod Buck2 a gyhoeddwyd ar GitHub a'r rheolau cymorth iaith raglennu bron yn union yr un fath Γ’'r fersiwn fewnol a ddefnyddir yn seilwaith Facebook (yr unig wahaniaethau yw rhwymo'r rhifynnau casglwr a gweinyddwyr adeiladu a ddefnyddir gan Facebook).
  • Mae'r system adeiladu wedi'i chynllunio gyda llygad i integreiddio Γ’ systemau cyflawni swyddi o bell sy'n eich galluogi i redeg swyddi ar weinyddion anghysbell. Mae'r API gweithredu o bell yn gydnaws Γ’ Bazel ac mae wedi'i brofi am gydnawsedd Γ’ Buildbarn ac EngFlow.
  • Darperir integreiddio Γ’ systemau ffeiliau rhithwir, lle cyflwynir cynnwys yr ystorfa gyfan, ond mewn gwirionedd, mae gwaith yn cael ei wneud gyda'r darn lleol gwirioneddol o ran o'r ystorfa (mae'r datblygwr yn gweld yr ystorfa gyfan, ond dim ond yr hyn sydd ei angen ffeiliau y ceir mynediad iddynt yn cael eu hadalw o'r gadwrfa). Cefnogir VFS yn seiliedig ar EdenFS a Git LFS, a ddefnyddir gan Sapling.

Ffynhonnell: opennet.ru

Ychwanegu sylw