字節跳動開源 Godel-Rescheduler:適用于云原生系統的全局最優重調度框架
背景
在云原生調度中,一次調度往往無法解決所有問題,需要配合重調度來優化資源分配和任務擺放。傳統的重調度框架主要集中在識別異常節點或任務,并通過遷移或刪除來解決。然而,這些框架往往只能解決局部問題,無法提供全局最優的調度方案,且容易出現多重調度策略沖突,影響整體穩定性。
為了解決這些問題,字節跳動研發了 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 項目地址: