Administrator
Published on 2026-09-22 / 10 Visits
0
0

Meta Rebalancer:把策略、求解与调试分开

Meta Rebalancer 展示了怎样用稳定合同连接业务策略、数学表达、求解器和调试工具。这套经验并不局限于数据中心:先定义对象、容器、目标、约束和验收规则,再选择算法。只有团队能说清什么叫有效分配,并能解释系统为什么给出某个结果,求解速度才真正有价值。

阅读时间:约 9 分钟 · 约 2900 字

TL;DR

  • 把业务政策放在与求解器无关的规格层,避免与某个算法绑定。
  • 分开硬约束和优化目标,让有效与更优保持不同语义。
  • 将规格编译为共享表达式图,供不同求解器和调试工具复用。
  • 规模允许时用 MIP 获取最优解或基线,大规模限时决策用局部搜索。
  • 把初始约束违例视为显式修复任务,并用独立检查器验收最终分配。

Rebalancer 是一套架构,不是一种聪明算法

Meta 在内部使用和改进 Rebalancer 超过九年后,于 2026 年 9 月 21 日将其开源。它处理一种反复出现的分配问题:把对象放入容器,在满足约束的同时优化目标。

在 Meta 内部,同一种问题形状出现在硬件布局、服务放置、任务调度、流量路由、数据迁移和机器学习工作负载分配中。领域名词不断变化,控制问题保持相似。

Rebalancer 的核心设计是职责分离:

  1. 领域问题怎样描述;
  2. 问题怎样在内存中紧凑表示;
  3. 使用什么方法求解;
  4. 怎样理解和调试求解器行为。

配套的 OSDI 2024 论文把易用性和可扩展性列为通用资源分配框架的两项主要障碍。领域工程师很难把现实政策翻译成数学表达,大规模 NP-hard 问题又会超出通用最优求解器的实际能力。可复用系统必须同时处理这两点,同时保持政策和实现解耦。

从与求解器无关的政策模型开始

Rebalancer 先定义对象和容器,再增加一组小型领域词汇:

构造 含义 示例
Object 必须分配的对象 task、shard、server
Bin 或 container 对象的目的地 host、rack、service
Dimension 数值属性 CPU、内存、功率
Partition 对象分组 属于同一作业的任务
Scope 容器分组 同一机架中的服务器
Utilization 已分配对象的贡献 主机上的内存总量

在这些基础构造上,可复用 Spec 表达常见目标和规则。Capacity 约束可以限制每台主机的内存。Balance 目标可以降低利用率偏差。Group Count 规则可以限制一个机架上出现多少种作业。

这种结构可以解除一种高成本耦合。如果业务政策只存在于局部搜索循环的过程代码里,更换算法时就可能同时改变政策含义。新的审阅者也只能从 Move 逻辑中反向猜测设计意图。

与求解器无关的合同让团队分别回答两个问题:

  • 我们是否准确建模了预期政策?
  • 当前求解器是否为这套模型生成了可接受答案?

第一个问题属于领域负责人,第二个问题属于优化与系统工程。双方可以独立演进,并共享一套测试样例。

分开硬约束与优化目标

约束定义系统可以接受哪些分配,目标负责在可接受集合中排序。混在一起后,系统可能为了更高分数牺牲容量或安全规则。

以把任务分配到主机为例:

  • 主机内存容量是一条约束。
  • 副本分散到不同机架也可能是一条约束。
  • CPU 负载均衡可以是优化目标。
  • 最小化迁移成本可以是另一个目标。

冲突政策必须显式。两条硬约束无法同时满足时,求解器应该返回带证据的不可行或待修复状态。把其中一条静默变成软惩罚,等于把政策决定藏进优化器内部。

Rebalancer 接受一份初始分配。Meta 的说明称,优化结果不能违反新增约束。初始状态已经违反的约束会成为高优先级目标,系统尽量把违例降到零。这可以看作一种修复模式,但结果需要严格报告。

修复后的分配至少要说明:

  • 运行前存在哪些违例;
  • 哪些违例已经消除;
  • 哪些仍然存在,幅度多大;
  • 修复牺牲了多少目标质量;
  • 最终结果是否具备生产可用资格。

这才是目标、约束与修复分离的准确含义。修复是一段状态转换和证据记录,而不是静默混进分数里的第三类政策。

先编译成共享表达式图

Rebalancer 把规格转换为有向无环表达式图。叶节点代表利用率等基础值,上层节点通过 Sum、Max、Square 和 Abs 等操作继续组合。对象在容器间移动时,图中数值也随之变化。

表达式图是一层中间表示,让不同消费者共享同一语义:

  • 局部搜索可以评估一次移动怎样改变约束和目标;
  • MIP 翻译器可以为外部求解器生成数学模型;
  • 剪枝和等价性分析可以减少搜索工作;
  • 调试工具可以解释哪些表达式主导最终结果。

这很像编译器架构。领域政策是源语言,表达式图是中间表示,局部搜索与 MIP 是后端,Explorer 则是检查界面。

这个类比也给出了测试方法:优化之前验证规格,在小规模分配上检查表达式图计算结果,在可解实例上比较不同求解器,再用独立验证器检查最终分配是否满足约束。

先说明取舍,再选择求解器

Rebalancer 主要提供两类求解路径。

混合整数规划 MIP 会把表达式图转换为 FICO Xpress、Gurobi 或开源 HiGHS 可以处理的模型。在时间充足时,它可以给出最优解。对象与容器之间的选择会制造大量决策变量,导致模型快速膨胀。Meta 使用变量聚合、可交换性和对称性破除降低规模,但最大问题仍超出 MIP 的实际承载范围。

局部搜索 从现有分配出发,探索移动单个对象、交换对象等邻域操作。它持续接受有效且改善目标的移动,直到无法继续进步,或达到时间与步数上限。Meta 的开源仓库明确给出边界:局部搜索扩展性更好,但不保证全局最优。

因此,真正的问题并不是哪种求解器最好,而是当前决策需要什么证据:

场景 合适路径
小规模且最优性重要 MIP,加最优性证明或 Gap
大规模在线修复,有严格时间预算 局部搜索,加有效性和质量检查
新问题规格 先在缩小实例上建立 MIP 基线,再实现局部搜索
生产回归 固定样本集,在可行范围内同时运行两种求解器

OSDI 论文和 Meta 开源说明都展示了这种混合用法:最优求解可以建立基线或帮助调参,大规模生产负载通常依赖局部搜索。

调试会成为下一个瓶颈

框架让问题更容易描述和求解后,工程时间会转移到理解行为。OSDI 论文指出,模型接入过程中的大量工程工作集中在目标排序、约束冲突等调试问题上。

Meta 为此开发了 Rebalancer Explorer。开源 UI 可以检查对象、容器、约束和目标,并回答某个对象为什么进入某个容器、放宽一条约束会发生什么。

这是典型的瓶颈迁移。更快的搜索让团队可以更快尝试政策,新的限制因素变成如何区分求解器缺陷、规格错误、不可行政策和可接受取舍。

生产分配系统至少要能回答五个问题:

  1. 哪些约束正在限制结果?
  2. 哪些目标主导总分?
  3. 某个对象为什么移动到这个容器?
  4. 什么因素阻止了预期分配?
  5. 一项政策或数据变化会让结果发生多大变化?

普通日志往往只能记录执行细节,无法说明模型语义。解释工具应该和求解器消费同一份政策与表达式表示。

最小实现与验收模式

开源仓库提供 C++ 和 Python 接口。下面用与具体 API 无关的伪代码保留四个阶段:

solver = ProblemSolver(service_name="scheduler", service_scope="prod")

solver.set_assignment(current_assignment)
solver.add_object_dimension("memory", task_memory)
solver.add_container_dimension("memory", host_capacity)
solver.add_constraint(memory_capacity_spec)
solver.add_objective(cpu_balance_spec)
solver.add_solver(local_search_spec)

solution = solver.solve()

政策构造应与 solve() 调用分离。求解结束后,再使用不复用求解器内部计算路径的代码独立验收:

assert every_object_assigned_once(solution)
assert all_capacity_limits_hold(solution, host_capacity, task_memory)
assert required_failure_domain_spread_holds(solution)
assert objective_score(solution) <= production_threshold

上线前可以使用这份清单:

  1. 冻结一组代表性的有效、不可行和待修复初始分配。
  2. 写清全部硬约束、目标优先级、停止条件和允许残余违例。
  3. 在人工可计算的小样本上验证表达式值。
  4. 在 MIP 可承载的实例上对照局部搜索结果。
  5. 用独立检查器验证最终分配。
  6. 分别记录修复前后的违例。
  7. 明确确定性要求,或报告不同随机种子与线程数下的结果方差。
  8. 为质量、求解时间和无法解释的行为设置回滚规则。

生产门禁应同时要求分配有效、质量有界、延迟有界并且存在解释路径。违反政策的快速答案,与错过决策窗口的最优答案,都会让整个系统失败。

FAQ

Meta Rebalancer 解决什么问题?

它描述如何把对象分配到容器,在满足约束的同时优化目标。Meta 把这种问题用于基础设施放置、流量、迁移和其他资源分配任务。

Rebalancer 是一个 MIP 求解器吗?

它是一套更完整的规格与求解框架。它既能把模型转换给外部 MIP 求解器,也能使用自身的局部搜索实现。

局部搜索能找到最优分配吗?

局部搜索可以高效寻找有效的改善动作,但不提供通用的全局最优保证。应在小规模实例上与最优基线比较,并设置生产质量阈值。

硬约束和软目标应该怎样表示?

把它们保留为不同模型概念。硬约束定义可接受集合,目标负责在集合中排序。任何放宽都应显式、获得授权并写入报告。

初始状态无效时,求解器应该返回什么?

同时返回修复后的分配与违例报告,覆盖修复前状态、修复后状态、残余违例和生产可用资格。

先设计合同,再调优求解器

Rebalancer 最值得迁移的是架构。可复用分配系统为领域政策提供稳定语言,为算法提供共享中间表示,也为操作者提供解释界面。团队因此可以更换求解器,同时保持有效结果的语义不被静默改写。

选择一个现有分配服务,把对象、容器、硬约束、优化目标、停止条件和独立验收规则写在一页纸上。任何只存在于算法代码中的项目,都是第一批需要解耦的政策。

参考资料


Comment