摘要:
2018 年「雙 11」的交易額又達到了一個歷史新高度 2135 億。相比十年前,咱們的交易額增加了 360 多倍,而交易峯值增加了 1200 多倍。相對應的,系統數呈現爆發式增加。系統在支撐「雙 11」過程當中的複雜度和難度呈現指數級形式上升趨勢。算法
做爲阿里巴巴全集團範圍的容器調度系統,Sigma 在「雙11」期間成功支撐了全集團全部容器(交易線中間件、數據庫、廣告等 20 多個業務)的調配,是阿⾥巴巴運維繫統重要的底層基礎設施。Sigma 已是阿里全網全部機房在線服務管控的核心角色,管控的宿主機資源達到百萬級,重要程度不言而喻,其算法的優劣程度影響了集團總體的業務穩定性,資源利用率。數據庫
當用戶向調度系統申請容器所需的計算資源(如 CPU 、 內存、磁盤)時,調度器負責挑選出知足各項規格要求的物理機來部署這些容器。在相同的資源需求下,調度策略的優劣決定着集羣計算資源利用的水平。本文將簡要介紹羣體加強學習算法在調度策略優化中的應用。負載均衡
做者:
王孟昌 達摩院機器智能技術算法專家
韓堂 阿里巴巴集團技術專家框架
當用戶向 Sigma 申請容器所需的計算資源(如 CPU、Memory、磁盤等)時,調度器負責挑選出知足各項規格要求的物理機來部署這些容器。一般,知足各項要求的物理機並不是惟一,且水位各不相同,不一樣的分配方式最終獲得的分配率存在差別,所以,調度器的一項核心任務就是按照某一策略從衆多候選機器中挑出最合適的物理機。運維
在文獻中,計算資源調度通常被表述爲矢量裝箱問題(vector bin packing problem),若是各應用的容器數量事先已知(如大促場景),調度器可一次性爲全部容器生成優化的排布方案,此時問題能夠表述爲整數規劃,可以使用通用求解器或專門開發的算法來求解;若是各應用的請求陸續到達 Sigma (如平常場景),調度器須要在每次請求到達時即時(在線)生成部署決策,此時問題可表述爲馬爾可夫決策過程 (Markov Decision Process, MDP),原則上能夠經過值迭代或策略迭代求得最優策略。函數
最經常使用的調度策略包括 First-Fit (FF) 和 Best-Fit (BF)。若是使用 First-Fit算法,調度器會將容器部署到遍歷中碰到的第一個知足全部要求的物理機上;而Best-Fit算法則會在知足要求的物理機中挑選分配水位最高的機器來部署容器。對於經典的 bin packing 問題(即一維矢量裝箱問題),First-Fit 和 Best-Fit 的近似比均爲1.7,即兩者均可保證所使用的機器數不超出最優方案的170%;對於2維及以上的矢量裝箱問題,理論上不存在有着明確近似比保證的多項式算法。當物理機的某個資源維度明顯爲瓶頸而致使其它資源維度廣泛有剩餘時,其有效維度可視爲1,使用 First-Fit 或 Best-Fit 通常能夠取得不錯的分配率;而一旦瓶頸並未集中體如今同一維度,兩種策略的效果就要大打問號了。性能
除了資源維度上的要求,實際調度中還有容災和干擾隔離上的考慮:好比同一應用的容器不容許所有部署到同一臺物理機上,不少應用甚至每臺機器上只容許有一個實例;某些應用之間還存在互斥關係(如資源爭搶),嚴重影響應用的性能,所以也不容許它們被部署到同一物理機上。這些限制條件的引入,使得經常使用策略愈加水土不服了。經過人肉反覆試錯,勉強扛住了屢次大促建站的壓力。然而,隨着各業務的擴張,線上容器的規模愈來愈大,資源變得愈來愈緊張,人肉調參的效率漸漸力不從心。學習
爲了把調度同窗從調參中解放出來,讓有限的資源扛住更大的壓力,達摩院機器智能技術實驗室(M.I.T.)的決策智能算法團隊和Sigma調度團隊展開了緊密合做,對在線調度策略問題進行了研究,並開發了基於羣體加強學習(SwarmRL)的算法。優化
記當前待部署容器的規格爲向量 p∈P,爲其分配資源時集羣狀態爲向量 s∈S , 候選物理機的集合爲 A⊆A,策略可表示爲函數 π:S×P→A(π∈Π)。當按策略 π 選擇物理機 a=π(s,p)來部署該容器時,該選擇的即時成本爲 r(a),集羣的新狀態 s′ 由狀態量 s 、p 以及動做 a 共同決定,記爲 s′=L(s,p,a) ;記後續到達的容器規格 p′, 對於在線調度,p′ 爲隨機量。引入折扣係數 γ∈[0,1],系統的 Bellman 方程爲:spa
最優調度策略可表示爲:
理論上,經過隨機梯度降低,咱們能夠在策略空間 Π 中搜索較優的策略,但相要更進一步的優化,甚至獲得全局最優策略,則須要藉助其它方法,特別是當最優策略多是 multi-modal 形式。
爲防止策略的優化陷入較差的局部最優解,同時擁有較快的收斂速度,咱們基於羣體增長學習的框架來設計算法。與傳統的加強學習方法相比,算法使用多個 agent 來探索問題的策略空間,且多個 agent 之間存在互相學習機制,這使得算法有了跳出局部陷阱的能力。爲獲取各狀態值(V^π^)的估計,一個準確的 Sigma 模擬器必不可少,團隊內部同窗基於 Sigma 的調度器開發了「徹底保真」的模擬器 Cerebro 。
算法首先隨機初始化一羣 agent 的策略,針對每一個策略,經過模擬器獲取相應的的狀態值估計,記錄當前全局最佳策略。在後續的每次迭代中,各個 agent 不斷更新自身的局部最佳策略,並參照局部最佳策略與羣體當前全局最佳策略,對 agent 自身的當前策略進行更新,再進行模擬,獲取新策略的狀態值估計,更新全局最佳策略。如此循環,直到知足收斂條件。
在各個 agent 狀態值的估計中,樣本(多個隨機抽取的集羣快照和擴容請求序列)和各 agent 的當前策略被輸入模擬器 Cerebro,追蹤模擬時集羣狀態的軌跡,便可獲得該軌跡的總成本;基於多個樣本的軌跡總成本求平均,即獲得相應策略下的狀態估計值。
在 SwarmRL 中,策略的演進方向與步長用「速度」 (v) 來表示,速度的變化涉及局部最佳策略 (πL) 和羣體全局最佳策略 (πG ) 與 agent 當前策略 (π) 的差別,並受策略慣性因子 w、本地學習因子C~1~(self-learning)、羣體學習因子 C~2~ (social-learning) 等參數的調控:
其中 ξ1,ξ2∈[0,1] 爲隨機量,Φ爲可行性保持映射,用於將逸出可行域的 agent 從新「拉回」可行域。在迭代中,局部最佳策略 (πL) 和羣體全局最佳策略 (πG ) 不斷更新:
下面咱們先用一個隨機生成的小算例來對比一下算法的效果。算例中涉及 30 個應用(見下表),其容器規格主要爲 4c8g 與 8c16g,所用宿主機的規格均爲 96c512g。
若在調度時,請求的順序和數量均爲已知(「上帝視角」),即進行過後排布,使用整數規劃求得的最優解對應的分配率爲 94.44 % (這也是全部調度策略在該算例上所得分配率的上界),共啓用 15 臺宿主機,具體排布方案爲:
現實場景中,每一個請求所處順序和容器數量僅在其到達 Sigma 時才揭曉,若採用 Best-Fit 進行動態調度,所得分配率爲 70.83%,共啓用 20 臺宿主機,具體排布以下:
若採用 SwarmRL 學習所得策略進行動態分配,分配率爲 94.44%,共啓用 15 臺宿主機,最終容器排布以下:
在該算例中,SwarmRL 學習所得策略的表現(94.44%)與「上帝視角」下最優排布的表現(上界)一致,明顯優於 Best-Fit 的表現(70.83%),改進幅度達 23.61%.
咱們再隨機生成規模較大的請求數據:共計 3K 個請求,5K 個容器,其規格分佈以下圖,
因爲該場景下整數規劃模型的變量規模太大,已經沒法在短期內直接求取「上帝視角」的最優解。對比 Best-Fit (以及人肉策略),算法所得新策略的效果以下:
相對於 Best-Fit,新策略節約宿主機 13 臺(4.48%),分配率提高 4.30%;相對於人肉策略,新策略節約 7 臺(2.46%)宿主機,分配率改進 2.36%.
考慮到實際場景中應用請求到達順序的隨機性,咱們隨機打亂請求生成多個不一樣的請求順序,再分別應用三個策略按不一樣的請求順序進行動態分配:
Best-Fit 在不一樣請求順序下宿主機數量的極差爲 39 臺,相對人肉策略的 84 臺而言,表現相對穩定,其波動幅度約爲人肉策略的一半;人肉策略的平均分配率低至 81.85%,對比原順序下的 93.44%,可見人肉策略的性能並不穩定,表現出較劇烈的波動。而學習所得新策略的表現則至關穩定,其宿主機數量的極差僅爲 3 臺,波動幅度約爲人肉策略的 30 分之一;新策略的分配率平均比人肉策略的分配率高 13.78%,比 Best-Fit 的高 3.02%.
從提高分配率、節省資源的角度來看,SwarmRL 算法能夠產生出優於經常使用(以及人肉)的策略,而且有着較爲穩定的表現。算法部署到線上環境後,公共資源池的分配率峯值與以前相比有了明顯的提高。
隨着 CPU share 和混部的鋪開,除分配率外,新的場景將涉及更多目標,好比打散、負載均衡等,這些目標甚至還有互相矛盾的地方,而 SwarmRL 的運行機制自然適合具備多個目標的策略優化問題,能夠十分方便地在策略空間中構造 Pareto Front,於是,後續咱們將繼續研究新場景下的在線調度策略問題,充分挖掘 SwarmRL 的潛力,進一步提高 Sigma 的調度能力。