背景
在云原生调度中,一次调度往往无法解决所有问题,需要配合重调度来优化资源分配和任务摆放。传统的重调度框架主要集中在识别异常节点或任务,并通过迁移或删除来解决。然而,这些框架往往只能解决局部问题,无法提供全局最优的调度方案,且容易出现多重调度策略冲突,影响整体稳定性。
为了解决这些问题,字节跳动研发了 Godel-Rescheduler,一个基于全局最优调度策略的重调度框架。它不仅能识别集群中的异常节点和任务,还能智能推荐任务到最合适的位置,并通过图算法生成详细的迁移步骤,确保集群的整体稳定性,真正实现全局最优调度。
项目简介
Godel-Rescheduler 由两个核心模块组成:Policy Manager 和 Movement Manager。其中,Policy Manager 负责输出重调度决策,而 Movement Manager 则负责拆解并执行这些决策。整个框架的目标是通过重调度,使集群朝向全局最优状态发展。
> 架构概览

> 组件介绍
Policy Manager 作为算法与策略控制中心,Policy Manager 负责配置重调度策略、迁移条件检测和执行相应的算法。它输出全局或局部最优的调度结果,并将决策传递给 Movement Manager。
-
Policy Controller 负责整体调度流程的控制,利用各子模块提供的功能,输出最优的调度决策。
-
Policy Configurator 负责读取并解析配置文件,定义重调度策略的触发条件、参数和作用范围。支持四种触发方式:周期执行、Signal 信号、HTTP 请求和 Cronjob。每个策略都可以根据需要配置不同的触发方式。
-
Detector 用于检测集群、机器和实例的状态,评估是否需要进行局部迁移或全局重调度。不同的策略可以通过定制化 Detector 实现不同的检测逻辑,如热点检测、负载均衡或碎片整理等。
-
Algorithm Provider 根据 Detector 提供的输入,算法插件为每个需要重调度的实例找到最适合的目标节点。为确保调度决策的有效性,算法会进行目标节点的校验,并与其他策略的决策进行冲突检查。
-
Movement Checker 校验一个迁移是否会对集群稳定性造成负面影响,特别是对目标节点的资源消耗、负载情况等进行验证。
-
Validator 在框架层面对每个移动决策进行最终校验,确保未经过校验的错误决策不会被执行。
Movement Manager 负责决策的执行和排序,并将新的调度结果上报,同时清除过期的推荐结果。
-
Movement Generator 算法基于有向图强连通分量分解,依据实例在节点间的转移关系和 PDB(PodDisruptionBudget)限制,生成优化的迁移批次。目标是尽可能减少迁移次数,同时保证集群稳定性。
-
Task Killer 负责按顺序执行每个移动决策,确保每个决策在保证稳定性的前提下逐步实施。
-
Movement Recycler 确保在新策略生成前,及时清除旧的调度决策,避免过期决策影响新的调度计划。
> 字节跳动的实际落地
目前,字节跳动已经成功将 Godel-Rescheduler 应用到多个内部项目中,支持多种重调度策略的协同工作。例如:
-
合并部署重调度:优化上下游应用实例在相同节点上的调度。
-
负载均衡重调度:在负载、内存带宽、网络带宽等方面进行优化。
-
碎片整理重调度:有效减少 CPU、GPU 等资源的碎片率等。
在实际应用中,Godel-Rescheduler 已帮助字节跳动的数万卡 GPU 集群将碎片率控制在 5% 以下,同时在大规模混合部署集群中,热点节点比例控制在 0.1% 以下,取得了显著的效果。
未来发展
未来,Godel-Rescheduler 将持续扩展和优化:
-
更多重调度策略:引入更多实时数据,以丰富调度策略的多样性。
-
稳定性建设:在优化调度效果的同时,持续降低重调度对集群稳定性的影响。
-
扩展性优化:进一步简化策略接入方式,提升插件化能力。
-
通用指标构建:制定通用的重调度评价指标,以全面评估调度效果。
-
优化可解释性:增强重调度算法的可解释性,帮助用户更好地理解调度决策的依据。
相关链接
Godel ReScheduler 项目地址: