Meta เปิดซอร์ส Rebalancer เครื่องมือจัดสรรทรัพยากรระดับ 40 ล้านรายการต่อวัน

Meta เปิดซอร์ส Rebalancer เครื่องมือจัดสรรทรัพยากรระดับ 40 ล้านรายการต่อวัน

Meta ประกาศเปิดซอร์ส Rebalancer ไลบรารีภาษา C++ พร้อมอินเทอร์เฟซ Python ที่ออกแบบมาเพื่อแก้ปัญหาการมอบหมาย (Assignment Problems) โดยเฉพาะ ทำหน้าที่ตัดสินใจจัดสรรวัตถุต่างๆ ลงในถังเก็บ (Bins) ภายใต้ข้อจำกัดและเป้าหมายที่กำหนด

จากข้อมูลใน โพสต์ของ Engineering at Meta ระบุว่า Rebalancer เป็นเบื้องหลังการจัดสรรทรัพยากรทั่วทั้ง Meta มานานกว่า 9 ปี การเปิดตัวครั้งนี้มาพร้อมสัญญาอนุญาตแบบ Apache 2.0 โดยมีทั้ง เอกสารประกอบ, แพ็กเกจ PyPI และเครื่องมือดีบั๊ก Rebalancer Explorer

สำหรับการใช้งานในปัจจุบัน ผู้ใช้สามารถติดตั้งได้ทันทีผ่านคำสั่ง pip install rebalancer รองรับ Python 3.12+ บน Linux x86-64 และ macOS 14+ (ARM64) นอกจากนี้ยังมีแพ็กเกจรองรับทั้ง .deb, .rpm และ Homebrew อย่างไรก็ตาม ปัจจุบัน PyPI ยังจัดระดับโครงการนี้ไว้ในช่วง Alpha เท่านั้น

Rebalancer แก้ปัญหาอะไร?

ปัญหาการมอบหมายทรัพยากรนั้นแทรกซึมอยู่ในทุกส่วนของโครงสร้างพื้นฐาน Meta ตั้งแต่การจัดวาง Rack ในดาต้าเซ็นเตอร์, การมอบหมายเซิร์ฟเวอร์ให้แต่ละบริการ, การกระจายงาน (Tasks) ไปยังเซิร์ฟเวอร์ ไปจนถึงการบริหารทราฟฟิกผู้ใช้

อุปสรรคสำคัญที่ Meta เผชิญคือความยากในการใช้งาน (Usability) และการขยายตัว (Scalability) เนื่องจากหลายปัญหาเป็นโจทย์ประเภท NP-hard ที่มีขนาดใหญ่เกินกว่าตัวแก้ปัญหาเชิงพาณิชย์ทั่วไปจะรับมือได้ Rebalancer จึงถูกออกแบบมาเพื่อแยกส่วนการกำหนดรายละเอียดปัญหา (Specification) ออกจากวิธีการแก้ปัญหา (Solver) ซึ่งรายละเอียดเชิงลึกถูกตีพิมพ์ใน เอกสารทางวิชาการ OSDI 2024 ภายใต้หัวข้อ Optimizing Resource Allocation in Hyperscale Datacenters

การทำงานของชั้นการกำหนดรายละเอียด (Specification Layer)

ภาษาสำหรับกำหนดรายละเอียดของ Rebalancer แบ่งออกเป็น 3 ชั้นหลัก ดังนี้:

  • Modeling constructs: กำหนดมิติต่างๆ (เช่น CPU, พื้นที่เก็บข้อมูล), Partitions (กลุ่มวัตถุ), Scopes (กลุ่มของ Bins) และการใช้ประโยชน์ (Utilization)
  • Expression API: คำนวณผลรวมการใช้งานด้วย SUM, MAX หรือแปลงค่าด้วยการดำเนินการอย่าง SQUARE
  • Spec API: รวบรวมเป้าหมายและข้อจำกัดสำเร็จรูปไว้หลายสิบรายการตามที่ระบุใน เอกสารประกอบ

ตัวอย่างเช่น Meta จะจำลองให้งาน (Tasks) เป็นวัตถุ และเซิร์ฟเวอร์เป็น Bin โดยใช้ CapacitySpec เพื่อคุมการใช้ CPU, GroupCountSpec เพื่อกระจายงานประเภทเดียวกันไม่ให้กระจุกตัวใน Rack เดียวกัน และ BalanceSpec เพื่อเกลี่ยภาระงานให้สมดุล

หนึ่ง Expression Graph กับสอง Solver

Rebalancer จะแปลงรายละเอียดที่กำหนดให้กลายเป็น Directed Acyclic Expression Graph โดยผู้ใช้ต้องระบุการมอบหมายเริ่มต้นและเงื่อนไขการหยุด หากการมอบหมายเดิมละเมิดข้อจำกัด ระบบจะตั้งค่าให้เป็นเป้าหมายที่มีลำดับความสำคัญสูงสุดในการแก้ไข

ตัวแก้ปัญหาที่เหมาะสมที่สุด (Optimal solver): ระบบจะแปลงกราฟเป็น Mixed Integer Program (MIP) เพื่อทำงานร่วมกับตัวแก้ปัญหาภายนอกอย่าง FICO Xpress, Gurobi หรือ HiGHS แม้จะมีการลดขนาดโมเดลลงแล้ว แต่ในกรณีที่ปัญหาใหญ่เกินไป ตัวแก้ปัญหา MIP ก็อาจรับไม่ไหว

การค้นหาในพื้นที่ (Local search): ตัวแก้ปัญหานี้จะทำงานบน Expression Graph โดยตรง ใช้วิธีสำรวจการย้ายวัตถุไปยัง Bin อื่นๆ แบบขนาน ซึ่งสามารถประเมินผลได้หลายล้านครั้งต่อวินาที Meta มักใช้ Local Search กับปัญหาขนาดใหญ่เกือบทั้งหมด และใช้ MIP สำหรับโจทย์ขนาดเล็กถึงกลางหรือการสร้างต้นแบบ

ตัวเลขการใช้งานจริงที่ Meta

  • จัดการปัญหาการมอบหมายประมาณ 40 ล้านรายการต่อวัน ผ่านรูปแบบที่ต่างกันกว่า 30 ประเภท
  • ความเร็วในการแก้ปัญหา (P99) อยู่ที่ 12 วินาที สำหรับวัตถุ 265,000 ชิ้น ใน 3,200 Bins
  • โจทย์ขนาดใหญ่ที่มีวัตถุเกิน 1 ล้านชิ้น และ 5,000 Bins ใช้เวลาเฉลี่ย 171 วินาที

กรณีการใช้งานที่เหมาะสม

Rebalancer เหมาะอย่างยิ่งสำหรับการจัดวาง Shards, Tasks หรือ Containers บนคลัสเตอร์ขนาดใหญ่ รวมถึงการรักษาสมดุลทราฟฟิกข้ามภูมิภาคเพื่อลดความหน่วง (Latency) นอกจากนี้ Meta ยังประยุกต์ใช้ในงานทั่วไป เช่น การจับคู่ Ticket สนับสนุนกับวิศวกร หรือการจัดที่นั่งทำงานของพนักงาน

การดีบั๊กด้วย Rebalancer Explorer

การวิเคราะห์พฤติกรรมของ Solver ทำได้ง่ายขึ้นผ่าน Rebalancer Explorer ซึ่งเป็น Web UI แบบ Dockerized ที่ช่วยแสดงข้อจำกัดที่กำลังทำงานอยู่ (Binding constraints) และเหตุผลที่ระบบเลือกวางวัตถุไว้ในตำแหน่งนั้นๆ

Interactive Explainer

เปรียบเทียบกับเครื่องมือ Open Source อื่นๆ

คุณสมบัติMeta RebalancerGoogle OR-ToolsTimefold Solver (Community)
สัญญาอนุญาตApache 2.0Apache 2.0Apache 2.0
ภาษาหลักC++C++Java
APIC++, PythonC++, Python, Java, C#Java, Kotlin
จุดเด่นการจัดวางวัตถุลง Bin ทั่วไปชุดเครื่องมือแก้ปัญหาที่หลากหลายเน้นการวางแผนและจัดตารางเวลา
Local searchมี (ประมวลผลขนาน)มี (ในส่วน Routing)มี (เป็นเอนจินหลัก)
MIP backendsFICO Xpress, Gurobi, HiGHSรองรับหลายค่ายไม่ได้ใช้
การติดตั้งpip install rebalancerpip install ortoolsMaven, JDK 21+

จุดเด่นที่สำคัญของ Rebalancer คือการยอมให้ผู้ใช้กำหนดสเปกเพียงชุดเดียว แต่สามารถเลือกสั่งการได้ทั้ง Local Search และ MIP ตามความเหมาะสมของขนาดงาน

สรุปประเด็นสำคัญ

  • Rebalancer เปลี่ยนปัญหาการจัดวางทรัพยากรให้เป็นโมเดลที่เข้าใจง่าย
  • รองรับการแก้ปัญหาผ่านทั้งวิธี Local Search และ MIP (Gurobi, HiGHS)
  • ประสิทธิภาพสูง รองรับงานระดับ 40 ล้านรายการต่อวันภายใน Meta
  • เปิดให้ใช้งานฟรีภายใต้สัญญาอนุญาต Apache 2.0 ทั้ง C++ และ Python
Source: MarkTechPost
ดูแลงานแปลและเรียบเรียงโดย AttapolK

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร