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 Rebalancer | Google OR-Tools | Timefold Solver (Community) |
|---|---|---|---|
| สัญญาอนุญาต | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| ภาษาหลัก | C++ | C++ | Java |
| API | C++, Python | C++, Python, Java, C# | Java, Kotlin |
| จุดเด่น | การจัดวางวัตถุลง Bin ทั่วไป | ชุดเครื่องมือแก้ปัญหาที่หลากหลาย | เน้นการวางแผนและจัดตารางเวลา |
| Local search | มี (ประมวลผลขนาน) | มี (ในส่วน Routing) | มี (เป็นเอนจินหลัก) |
| MIP backends | FICO Xpress, Gurobi, HiGHS | รองรับหลายค่าย | ไม่ได้ใช้ |
| การติดตั้ง | pip install rebalancer | pip install ortools | Maven, JDK 21+ |
จุดเด่นที่สำคัญของ Rebalancer คือการยอมให้ผู้ใช้กำหนดสเปกเพียงชุดเดียว แต่สามารถเลือกสั่งการได้ทั้ง Local Search และ MIP ตามความเหมาะสมของขนาดงาน
สรุปประเด็นสำคัญ
- Rebalancer เปลี่ยนปัญหาการจัดวางทรัพยากรให้เป็นโมเดลที่เข้าใจง่าย
- รองรับการแก้ปัญหาผ่านทั้งวิธี Local Search และ MIP (Gurobi, HiGHS)
- ประสิทธิภาพสูง รองรับงานระดับ 40 ล้านรายการต่อวันภายใน Meta
- เปิดให้ใช้งานฟรีภายใต้สัญญาอนุญาต Apache 2.0 ทั้ง C++ และ Python
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
