
Meta 正式开源了内部使用超过 9 年的核心资源分配库Rebalancer。这不是一个普通的算法库,而是专门解决「把对象放到容器里」这类经典分配问题的高性能框架。它每天在 Meta 内部处理约 4000 万次分配任务,已在服务器分配、ML 训练/推理放置、流量路由、负载均衡迁移等场景中大规模落地。

Rebalancer 网站截图
它到底解决什么问题?
任何「把东西放到盒子里」的问题,只要满足「每个对象只能放进一个容器、需要满足约束、并优化目标」,都可以用 Rebalancer 建模。例如:
- 把任务分配到服务器,同时保证 CPU/内存不超限、负载尽量均衡
- 把数据库分片放到主机上,兼顾容灾和亲和性
- 经典的数独、八皇后问题也能轻松表达
核心优势在于:用高层 DSL 描述问题,而不是手写复杂的数学公式。你只需组合现成的 25+ 个 Spec(如 CapacitySpec、BalanceSpec、MinimizeMovementSpec 等),就能快速定义约束和目标。
两大求解器,灵活切换
- Local Search(局部搜索):默认推荐。从初始分配出发,通过移动、交换等操作不断改进,可轻松处理百万级对象规模,速度极快(大规模问题平均 171 秒左右),但不保证全局最优。
- Optimal Solver(MIP 精确求解):基于混合整数规划,支持开源 HiGHS 以及商业求解器 Gurobi、FICO Xpress,适合中小规模问题,能给出可证明最优解。
问题定义与求解器完全解耦,同一套模型可随时切换算法。
调试利器:Rebalancer Explorer
配套的 Web UI 工具让你直观查看对象、容器、约束、目标得分,支持对比初始与最终分配、模拟「如果把某个对象移到另一个容器会怎样」,极大降低调试成本。
快速部署与使用
最简单方式(Python):
pip install rebalancer
几行代码即可跑通示例(任务放到主机,内存容量约束):
from rebalancer import ProblemSolver
from rebalancer.specs import CapacitySpec, ConstraintSpec, LocalSearchSolverSpec, ...
solver = ProblemSolver(...)
# 设置对象、容器、维度、约束、求解器
solution = solver.solve()
print(solution["assignment"])
从源码编译(Ubuntu/macOS 均有详细指引):克隆仓库后用 CMake + Ninja 构建,支持 C++ 和 Python 接口。也可直接下载 .deb / .rpm / Homebrew 预编译包。
启动 Explorer:
REBALANCER_PROXY_AUTH_TOKEN=secret docker compose up --build
浏览器打开 http://localhost:3000 即可可视化调试。
结语
Rebalancer 把「可用性」和「可扩展性」做到了极致——DSL 降低建模门槛,Local Search 解决大规模难题,Explorer 让结果可解释。无论你是做基础设施调度、运筹优化,还是想玩经典约束满足问题,都值得一试。
相关导航


Mocha

Demo2APK

橙篇AI

通义ai






