WRITING / 2018.08.20

工程日志:任务调度器如何兼顾复用率与公平性

从数据局部性、执行槽位、任务组和失败租约出发,整理计算任务调度器的核心权衡。

计算型任务调度不仅要找到一台空闲机器,还要在缓存复用、任务公平和故障恢复之间作出选择。

两个相反目标

优先把相关任务派到已有输入数据的执行节点,可以降低下载成本;但如果始终追求局部性,热门任务组可能长期占用少数节点,其他任务得不到调度。

一种实用策略是分层选择:先在满足资源条件的节点中寻找局部性候选,等待超过阈值后逐步放宽,最终允许任何健康节点执行。

用租约管理执行状态

任务派发后不应永久标记为运行中。执行节点持有有期限的租约并持续续期;租约过期后,调度器才允许重新派发。完成通知必须携带执行代次,避免旧执行覆盖新结果。

批量下发

调度器与执行节点之间采用批量领取可以减少控制面请求,但批次过大会造成节点间不公平,也会放大故障重派。批次应根据任务耗时、节点槽位和队列水位动态调整。

好的调度器不是追求某一个瞬时最优,而是在不断变化的资源状态中维持可解释的退让规则。