Facebook го објави системот за градење Buck2

Фејсбук воведе нов систем за градење, Buck2, чија цел е да организира изградба на проекти од многу големи складишта, вклучувајќи код на различни програмски јазици. Клучните разлики помеѓу новата имплементација и системот Buck претходно користен на Facebook се употребата на јазикот Rust наместо Java и значително зголемување на ефикасноста и продуктивноста на процесот на склопување (во внатрешните тестови во истата инфраструктура, Buck2 врши монтажа задачи двојно побрзо од Бак). Кодот се дистрибуира под лиценцата Apache 2.0.

Системот не е врзан за склопување код на одредени јазици и надвор од кутијата поддржува склопување проекти напишани на јазиците C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell и OCaml , користен од Фејсбук. Јазикот Starlark, базиран на Python (како во Bazel), се користи за дизајнирање додатоци, градење скрипти и правила. Starlark ви овозможува да ги проширите можностите на системот за склопување и да апстрахирате од специфичните јазици што се користат во собраните проекти.

Високите перформанси се постигнуваат преку кеширање на резултатите, паралелизирање на работата и поддршка за далечинско извршување на задачите (Remote Build Execution). Во склопувачката средина, се користи концептот на „херметичност“ - собраниот код е отсечен од надворешниот свет, ништо не се вчитува однадвор за време на процесот на склопување, а повторените извршување на работата на различни системи доведуваат до истиот резултат ( повторени склопови, на пример, резултатот од склопување на проект на машината на развивачот ќе биде целосно идентичен со изградбата на серверот за континуирана интеграција). Ситуацијата на недостаток на зависност се сфаќа како грешка во Buck2.

Главни карактеристики на Buck2:

  • Правилата за поддршка на програмските јазици и јадрото на системот за склопување се целосно одвоени. Правилата го користат јазикот Starlark, а пакетот алатки и имплементацијата на Starlark се напишани во Rust.
  • Системот на склопување користи единечен график на зголемена зависност (без поделба на фази), што овозможува зголемување на длабочината на паралелизација на работата во споредба со Бак и Базел и избегнување на многу видови грешки.
  • Кодот Buck2 објавен на GitHub и правилата за поддршка на програмските јазици се речиси идентични со внатрешната верзија што се користи во инфраструктурата на Фејсбук (единствените разлики се во однос на изданијата на компајлери и сервери за склопување што се користат во Facebook).
  • Системот за склопување е дизајниран со цел да се интегрира со системи за далечинско извршување задачи што ви дозволуваат да работите на оддалечени сервери. API за далечинско извршување е компатибилен со Bazel и тестиран за компатибилност со Buildbarn и EngFlow.
  • Обезбедена е интеграција со виртуелни датотечни системи, во кои е претставена содржината на целото складиште, но всушност, работата се изведува со тековен локален дел од дел од складиштето (програмерот го гледа целото складиште, но само потребните датотеки до кои се пристапува се извлекуваат од складиштето). Поддржани се VFS базирани на EdenFS и Git LFS, кои се користат во Sapling.

Извор: opennet.ru

Додадете коментар