先看证据

Meta称每天求解约4000万个分配问题关键事实
支持30多种问题表述关键事实
P99为12秒26.5万对象、3200容器
平均171秒超100万对象、5000容器
上述超大规模运行超过3400次关键事实
本地搜索每秒数百万次评估(Meta称)关键事实

把机制串起来

输入先把素材压到可处理的规模

分配问题就是把每个对象放进一个容器,同时满足容量、容错等规则,并尽量优化负载或延迟;对象可以是任务,容器可以是服务器。约束回答“哪些分配不允许”,目标回答“在允许的分配里哪个更好”;两者常常需要权衡。MIP(混合整数规划)能表达这类问题并在求解完成时给出最优解,但规模变大后,求解时间和模型规模可能迅速膨胀。

机制再把计算集中到关键步骤

用户定义对象、容器、属性(如 CPU、存储)、初始分配,以及容量、均衡等约束和目标;规格会编译成表达式有向无环图,叶节点保存利用率,聚合与变换节点组合出更高层的计算。这个中间表示把“问题怎么说”与“问题怎么解”分开,同一规格可交给 MIP 或本地搜索。MIP 路径将表达式转成整数规划,并用变量聚合、对称性破除缩小模型;但最坏模型规模仍为 O(对象数×容器数),超大问题可能超出求解能力。本地搜索从现有分配出发,尝试移动或交换对象,在不违反约束的候选中选取改善目标的动作;其最坏邻

结果最后落到可验证的工作结果

['先用 MIP 验证小规模模型,再评估大规模本地搜索', '提供可信初始分配,并明确违约约束与目标优先级', '适合任务、分片、流量等对象到服务器或地域的分配', '若必须证明全局最优,或规格无法表达,不宜只靠本地搜索']

不同团队的放置问题,常有同一种结构

Meta开源的Rebalancer是一套C++资源分配求解库,提供Python接口,用来决定对象应放进哪些容器,同时满足容量等约束并优化目标。它面向的不是一种特定的服务器调度,而是数据中心机架放置、服务器分配给服务、任务分配到服务器,以及用户流量在数据中心间路由等问题。Meta称这套库已在内部使用超过九年,并以Apache 2.0许可证发布。

这些场景的共同点,是工程团队都要把“什么可以放在哪里、哪些条件不能违反、怎样的分配更好”变成可执行决策。表面上看,机架放置和流量路由是两种业务,模型里却都涉及对象、容器、资源属性、约束和目标。Rebalancer试图复用的正是这种问题结构,而非某一条固定的调度策略。对技术负责人来说,值得研究的是这种抽象能否减少重复造轮子,同时仍然允许团队准确表达自己的运行规则。

先描述策略,再把模型交给求解器

Rebalancer把建模拆成几层:维度描述CPU、存储等属性,分区和范围组织对象与容器,利用率表示资源占用;表达式可以对这些值求和、取最大值或做变换,再由预定义的约束和目标组成完整问题。使用者还要提供一个初始分配和停止条件。库会把问题编译成表达式有向无环图,叶节点保存利用率,聚合和变换节点则把局部数值组合成整体判断。

例如,把任务作为对象、服务器作为容器、机架作为范围,就能表达服务器的CPU和存储上限、每个机架只放一种作业类型,以及服务器间的利用率平衡。初始分配中已经违反的约束也不会被忽略,而会被提升为高优先级目标。这种设计让业务规则不必直接写进某个搜索算法,但也没有替团队完成策略设计:容量限制、故障隔离和负载平衡究竟如何取舍,仍要由建模者定义。模型越通用,越需要明确说明目标之间的优先级。

两条求解路径,交换的是规模与最优性

同一张表达式图可以走两条求解路径。MIP路径把模型转换为混合整数规划,能够使用HiGHS、Gurobi或FICO Xpress。变量聚合和对称性消除可以缩小模型,但最坏情况下模型规模仍随对象数与容器数的乘积增长。Meta称,其最大的问题大到任何MIP求解器都难以处理,因此这条路径主要用于小到中等规模的问题,也常用于先验证问题建模。

另一条路径是直接在表达式图上做本地搜索。算法从一个已有分配开始,尝试把对象移到其他容器,评估候选变化,再采用不违反约束且能改善目标的操作,直到达到停止条件或找不到合适进展。Meta称搜索会并行评估并剪枝,每秒能进行数百万次评估。其最坏邻域规模按对象数与容器数相加增长,而不是相乘,因此适合更大的问题。不过本地搜索是启发式方法,不保证找到全局最优解。两条路径不是同一答案的快慢版本,而是面对不同规模和最优性要求时的不同选择。

Meta的数字证明了使用规模,不是外部基准

Meta报告称,Rebalancer每天处理约4,000万个分配问题,支持30多种不同的问题表述。对于26.5万个对象、3,200个容器的问题,Meta给出的求解时间P99为12秒。对于超过100万个对象、5,000个容器的问题,公开口径是平均171秒,相关运行次数超过3,400次。这些数据说明Rebalancer被用于高频、不同规模的内部问题,而不只是一个演示用库。

但这些数字的解释范围有限。公开材料没有给出完整硬件、配置和测试方法,也没有定义“一个分配问题”的计数口径,因此每天4,000万次更适合作为Meta内部采用规模,而不是可以复制的吞吐基准。P99和平均时间也分别对应特定问题规模,不能直接推断其他团队的延迟。Meta披露的数百万次每秒评估同样是能力描述,不是独立基准测试。评估者应先把自己的对象数、容器数、约束密度和停止条件说清,再把这些内部数字当作参考背景,而非性能承诺。

开源让它可试用,生产适配仍要自己验证

Rebalancer的发布不只提供求解核心,也提供文档、PyPI包和用于排查模型行为的Rebalancer Explorer。这个Docker化网页界面可以显示哪些约束正在限制结果、放宽约束会产生什么影响,以及某个对象为何被放进特定容器。Meta提到,建模者过去把大量时间花在理解求解器行为上,因此可解释和调试能力并非外围装饰,而是把通用模型带入日常工程的组成部分。

实际采用时,安装可用性和生产成熟度也要分开看。材料给出的安装方式是`pip install rebalancer`,当前PyPI版本为1.0.4,要求Python 3.12或更新版本,预编译wheel覆盖Linux x86-64和macOS 14及以上的ARM64,也提供.deb、.rpm和Homebrew包。不过PyPI仍将项目标为Alpha。更稳妥的评估办法,是挑一个已有分配任务,先把手写策略转成明确的约束与目标,再用Explorer检查模型行为,并比较MIP和本地搜索的可行性、耗时与结果质量。若业务必须保证全局最优,不能把本地搜索的扩展能力当作保证;若MIP规模不可承受,则必须接受启发式方法的最优性边界。