Facebook kompaniyasi Buck2 qurish tizimini nashr etdi

Facebook juda katta omborlardan, jumladan turli dasturlash tillaridagi kodlardan loyihalar qurishni tashkil etishga qaratilgan yangi Buck2 qurish tizimini taqdim etdi. Yangi dastur va Facebook-da ilgari qo'llanilgan Buck tizimi o'rtasidagi asosiy farqlar Java o'rniga Rust tilidan foydalanish va yig'ish jarayonining samaradorligi va mahsuldorligini sezilarli darajada oshirishdir (bir xil infratuzilmadagi ichki testlarda Buck2 yig'ishni amalga oshiradi. vazifalarni Bakdan ikki baravar tez bajaradi). Kod Apache 2.0 litsenziyasi ostida tarqatiladi.

Tizim ma'lum tillardagi kodlarni yig'ish bilan bog'lanmagan va qutidan tashqarida C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell va OCaml tillarida yozilgan loyihalarni yig'ishni qo'llab-quvvatlaydi. , Facebook tomonidan qo'llaniladi. Python-ga asoslangan Starlark tili (Bazelda bo'lgani kabi) qo'shimchalarni loyihalash, skriptlar va qoidalarni yaratish uchun ishlatiladi. Starlark sizga yig'ish tizimining imkoniyatlarini kengaytirish va yig'ilgan loyihalarda qo'llaniladigan muayyan tillardan abstrakt qilish imkonini beradi.

Natijalarni keshlash, ishlarni parallellashtirish va vazifalarni masofadan bajarishni qo'llab-quvvatlash (Remote Build Execution) orqali yuqori samaradorlikka erishiladi. Yig'ish muhitida "germetiklik" tushunchasi qo'llaniladi - yig'ilgan kod tashqi dunyodan uziladi, yig'ish jarayonida tashqaridan hech narsa yuklanmaydi va turli xil tizimlarda ishlarning takroriy bajarilishi bir xil natijaga olib keladi ( takroriy yig'ilishlar, masalan, loyihani ishlab chiquvchining mashinasida yig'ish natijasi uzluksiz integratsiya serveridagi qurilish bilan butunlay bir xil bo'ladi). Qaramlikning yo'qligi holati Buck2-da xato sifatida qabul qilinadi.

Buck2 asosiy xususiyatlari:

  • Dasturlash tillarini qo'llab-quvvatlash qoidalari va montaj tizimining yadrosi butunlay alohida. Qoidalar Starlark tilidan foydalanadi va Starlark asboblar to'plami va amalga oshirish Rust tilida yozilgan.
  • Yig'ish tizimida yagona qo'shimcha bog'liqlik grafigi (bosqichlarga bo'linmasdan) qo'llaniladi, bu Bak va Bazel bilan taqqoslaganda ishni parallellashtirish chuqurligini oshirishga va ko'p turdagi xatolardan qochishga imkon beradi.
  • GitHub-da nashr etilgan Buck2 kodi va dasturlash tillarini qo'llab-quvvatlash qoidalari Facebook infratuzilmasida qo'llaniladigan ichki versiya bilan deyarli bir xil (farqlar faqat Facebook-da ishlatiladigan kompilyatorlar va montaj serverlarining nashrlari bilan bog'liq).
  • Yig'ish tizimi masofaviy serverlarda ishlarni bajarishga imkon beruvchi masofaviy vazifalarni bajarish tizimlari bilan integratsiyani ko'zda tutgan holda ishlab chiqilgan. Masofaviy ijro etuvchi API Bazel bilan mos keladi va Buildbarn va EngFlow bilan muvofiqligi uchun sinovdan o‘tgan.
  • Virtual fayl tizimlari bilan integratsiya ta'minlanadi, unda butun omborning mazmuni taqdim etiladi, lekin aslida ish omborning bir qismining joriy mahalliy qismi bilan amalga oshiriladi (ishlab chiquvchi butun omborni ko'radi, lekin faqat kerakli fayllarni ko'radi. kirish mumkin bo'lganlar ombordan chiqariladi). Sapling tomonidan qo'llaniladigan EdenFS va Git LFS asosidagi VFS qo'llab-quvvatlanadi.

Manba: opennet.ru

a Izoh qo'shish