1. 程式人生 > >談談2018華為精英挑戰賽

談談2018華為精英挑戰賽

    背景介紹雲平臺為了滿足不同租戶的需求,提供了一種可隨時自助獲取、可彈性伸縮的雲伺服器,即彈性雲伺服器(Elastic Cloud Server,ECS)。為容納更多的租戶請求、並儘可能提高資源利用率、降低成本,自動化、智慧化的資源排程管理系統非常關鍵。由於租戶對ECS例項(虛擬機器,VM)請求的行為具有一定規律,可以通過對歷史ECS例項請求的分析,預測到未來一段時間的ECS例項請求,然後對預測的請求分配資源(如圖1所示),這樣可以找到一個接近最優的分配策略,實現資源最大化利用,同時也能參考預測的結果制定雲資料中心的建設計劃。
這裡寫圖片描述
    賽題更加詳細的資訊請參考2018華為軟體精英挑戰賽官網(

http://codecraft.devcloud.huaweicloud.com/home/detail)程式碼介紹比賽賽題主要可以分成兩個步驟:1. 根據歷史虛擬機器請求數量預測接下來幾天的各類虛擬機器請求數量(主要通過機器學習方法)2. 將預測出來的虛擬機器放置進規定規格的物理伺服器中,使得物理伺服器的資源(CPU或者記憶體)利用率最高
1)第一個步驟需要先對資料進行預處理,比如去除節假日期間的異常請求值等等,然後應用機器學習的方法使用歷史資料訓練預測模型,最後使用訓練出來的預測模型進行預測,不知道是測試用例原因還是我們使用的模型的原因,這一步驟做出來效果並不是太好,所以這部分暫時就先不放出來了,以免誤導大家。
2)第二個步驟是尋找最優放置虛擬機器方式,在上一步預測出來各種虛擬機器數量之後,實際資源使用情況就已經確定了(一共多少CPU,多少記憶體),每個伺服器的資源又是確定的,所以最終的資源使用率就只跟伺服器數量有關,於是問題便轉化為了:如何放置虛擬機器可以使得使用的伺服器數量最少?因為每次放置都要考慮虛擬機器的CPU和記憶體兩個維度,所以放置問題可以看作一個二維裝箱問題
(Bin packing),人們對二維裝箱問題的研究一直在進行。第一種最簡單的方法(也是官方文件示例方法)是首次適應法(FFD演算法),即將所有的虛擬機器按次序放入物理伺服器中,對於每個虛擬機器,檢查伺服器資源是否足夠放下該虛擬機器,如果可以放下就將其放在這臺伺服器上,如果伺服器剩餘資源不足以放下該虛擬機器,則新建一臺伺服器,將虛擬機器放入新建的伺服器……直到最後放置完所有的虛擬機器,將每個伺服器放置的虛擬機器輸出即可。首次適應方法有個弊端,可能會造成每個伺服器都有挺多資源剩餘,但是卻無法被後來的虛擬機器利用。由於在採用首次適應法的前提下,虛擬機器放置方式只與虛擬機器初始排列順序有關,所以我們可以用智慧演算法對初始排列順序進行優化,求得接近最優解的解。我們可以採用模擬退火演算法進行最優解的尋找,模擬退火演算法(Simulated Annealing Algorithm)用於優化問題的出發點是基於物理中固體物質的退火過程與一般優化問題的相似性,關於該演算法的詳細介紹,請參考維基百科(
https://zh.wikipedia.org/wiki/%E6%A8%A1%E6%8B%9F%E9%80%80%E7%81%AB
)。使用模擬退火演算法, 每次隨機交換兩個虛擬機器的順序,使用首次適應法將虛擬機器放入伺服器,並計算出伺服器使用數目最少的一組,模擬退火演算法收斂過後,我們即可得到一個最優解或者接近最優解的解,將其作為最終結果輸出即可。
參考文獻