Facebook เผยแพร่ระบบ Buck2 build

Facebook เปิดตัวระบบสร้างใหม่ 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
  • ระบบการประกอบใช้กราฟการขึ้นต่อกันแบบเพิ่มทีละกราฟเดียว (โดยไม่แบ่งเป็นขั้นตอน) ซึ่งช่วยเพิ่มความลึกของการทำงานแบบขนานเมื่อเปรียบเทียบกับ Buck และ Bazel และหลีกเลี่ยงข้อผิดพลาดหลายประเภท
  • รหัส Buck2 ที่เผยแพร่บน GitHub และกฎสำหรับการรองรับภาษาการเขียนโปรแกรมนั้นแทบจะเหมือนกับเวอร์ชันภายในที่ใช้ในโครงสร้างพื้นฐานของ Facebook (ความแตกต่างเพียงอย่างเดียวนั้นสัมพันธ์กับรุ่นของคอมไพเลอร์และเซิร์ฟเวอร์แอสเซมบลีที่ใช้ใน Facebook)
  • ระบบแอสเซมบลีได้รับการออกแบบโดยคำนึงถึงการบูรณาการกับระบบการดำเนินการงานระยะไกลที่ช่วยให้คุณสามารถรันงานบนเซิร์ฟเวอร์ระยะไกลได้ API การดำเนินการระยะไกลเข้ากันได้กับ Bazel และทดสอบความเข้ากันได้กับ Buildbarn และ EngFlow
  • มีการบูรณาการกับระบบไฟล์เสมือนซึ่งมีการนำเสนอเนื้อหาของที่เก็บทั้งหมด แต่ในความเป็นจริงงานจะดำเนินการกับส่วนหนึ่งของพื้นที่เก็บข้อมูลในเครื่องปัจจุบัน (นักพัฒนาเห็นพื้นที่เก็บข้อมูลทั้งหมด แต่เฉพาะไฟล์ที่จำเป็นเท่านั้น ที่เข้าถึงได้จะถูกแยกออกจากพื้นที่เก็บข้อมูล) รองรับ VFS ที่ใช้ EdenFS และ Git LFS ซึ่งใช้ใน Sapling

ที่มา: opennet.ru

เพิ่มความคิดเห็น