乾貨 排程演算法的價值與阿里的應用實踐

2022-06-08 05:15:13 字數 2766 閱讀 7260

網際網路應用和現代資料中心

雲計算已經火了很多年了,早已開始惠及我們每乙個人。今天火熱的大資料、機器學習、人工智慧、以及我們看到的像**、天貓、優酷等大規模的網際網路應用都是執行在雲上的。而支撐雲的,是大型雲計算服務商部署在世界各地的多個資料中心,每個資料中心都有大量的物理伺服器。為了有效的管理這些伺服器,我們需要集群資源管理系統(cluster resource management system),後面簡稱資源管理系統。資源管理系統的價值,用一句話說,是datacenter as a computer,像管理和使用乙個臺電腦一樣簡單地管理和使用資料中心。

資源管理系統作為將資料中心資源向上抽象的關鍵一層,需要全面的能力。從保障應用的穩定性、效能(保證sla,service level agreement)到全面提高資料中心執行的效率,節約能源等等,今天這篇文章,我們重點講一講排程演算法在資源管理中的作用。

排程演算法的價值

排程演算法在是整個資源管理系統中的乙個重要組成部分,簡單的說,排程演算法的作用是決定乙個計算任務需要放在集群中的哪台機器上面。

在容器化的今天,集群中排程器的排程物件很可能是乙個容器例項,docker或者是pouchcontainer。為容器選擇合適的宿主機顯然是乙個值得考慮的問題,這裡我們說一說排程演算法能夠幫助我們實現的價值,這些價值可以從單個容器、到應用、再到資料中心,這三個不同的層面展示出來。

單個容器層面

滿足容器執行的資源需求:確保每個容器在執行的時候擁有足夠的資源,cpu、memory、disk、網路頻寬等等。除了用數量衡量的資源,很多容器在執行的時候還需要一些特殊的資源,例如特定的作業系統版本、特定的硬體等等。

讓容器在更「舒適」的環境下執行:容器之間可能發生資源的搶占現象,例如兩個對memory消耗很大的容器部署在同一臺機器上,很容易造成memory資源的吃緊。雖然我們可以通過容器和核心提供的資源隔離技術降低這種影響,但是最好的辦法還是在一開始不讓這種「容易吵架的人做鄰居」。

應用層面

每個應用在提供服務的時候往往是多個容器例項同時支援的,排程器需要考慮應用的需求。

應用的高可用:分布式環境下宿主機失敗或者單個容器的失敗是正常現象,因此我們要保證每個應用同時有多個例項在執行,這樣即使有乙個例項掛了,整個應用不會受很大影響。

應用的容災:容災其實也經常和高可用放在一起,如果乙個應用有多個應用例項,但是都部署在乙個機房,如果機房斷電,那麼應用也就不能提供服務了,沒有高可用了。解決這個問題需要的容災部署,也就不同維度的打散。排程演算法需要盡量讓同乙個應用的不同例項部署在不同的宿主機、不同的機架、不同的機房、不同的資料中心、不同的城市、甚至是不同的國家;這種容災甚至可以體現在更高一層,幾個重要應用之間的所有例項,也要盡量打散。

資料中心層面

降低資料中心的成本:合理的排程能夠節省資料中心大量的成本,如果用裝箱問題來表示,就是用更少的伺服器裝下了更多的應用。伺服器數目的減少不僅僅是採購成本的下降,伺服器的占地、用電、冷卻等都是一筆很大的開銷,合理的資源排程能夠為資料中心節省大量成本。

為了讓更多的學生、研究者能夠接觸到我們的排程問題,並鼓勵他們與我們一起應對挑戰,我們舉辦了「阿里巴巴全球排程演算法挑戰賽」。這個演算法大賽是怎麼回事兒呢?讓我們介紹一下。

首屆阿里全球排程演算法大賽

大家可以想象下,阿里巴巴擁有如此大規模的資料中心,1%的資源利用率的提公升都將為阿里巴巴自身和整個社會帶來可觀的能源節約讓使用者享受更加綠色的計算資源。所以最近我們發起了首屆阿里全球排程演算法大賽,初賽賽題來自我們生產環境中的乙個真實的場景,簡化了一些約束條件,方便一些對這個領域剛剛開始了解的同學找到乙個求解的方法,但是即使對於在該領域有一定經驗的同學、工程師、研究者們,我們也相信這份題目能夠讓你花費一些精力才能得到乙個優化的解。

在這次演算法大賽中,我們提供了大約6k個宿主機,68k個例項(其中一部分已經部署,一部分尚未部署),約束型別主要有3類:資源約束、重要應用高可用約束和應用間反親和約束。

資源約束

資源約束是最容易理解的,每個屬於不同應用的例項都有不同的計算資源要求。我們本次比賽的乙個重要特點是,cpu和mem的數量約束是以時間曲線的形式給出的。每個應用的對應資源需求的時間曲線是我們通過對該應用下多個例項(乙個應用由很多例項組成)的24小時的歷史資料進行觀察並整理得到的需求曲線,描述了每個應用下面的例項在一天當中每個取樣點需要的對應資源的數量。對映的場景是我們假定各個應用的例項的資源需求的有著24小時的變化週期(即98個點的變化週期),第二天、第三天甚至再往後,應用的例項還是按照這個需求長時間存在。注意,這裡提到的應用是長應用(long running service),沒有特殊原因是不會下線的(例如**網),這種長應用與一些分布式計算中的有限持續時間計算任務是不一樣。

這樣的時間曲線比普通的標量規定的資源需求具有更多的優化空間,但也帶來了更多的複雜度。下面這個圖是兩個應用在不同時間點的資源需求對於滿足機器容量的互斥(左)與互補(右)的例子。

重要應用高可用約束

除了cpu、mem、disk這樣計算資源的約束,我們還有三類名為p、m、pm的約束,這個約束名字大家可能會覺得有些奇怪,但這是我們通過排程來保障重要應用高可用的重要約束。我們把一些重要應用標記為p類、m類、或者pm類,通過限制每台機器上可以承載的p、m、pm型別應用例項的上限來保證在機器發生故障的時候(宕機、斷網等),重要應用受到的影響最小。

應用間反親和約束

優化的目標

我們的優化目標是在維持每台機器的資源使用率在一定水平的基礎上(具體數字不透露,你好好看一下題目的描述,相信你可以判斷出來的),儘量減少使用的機器的數目(即實際部署了容器的機器的數目)。為什麼這樣設計呢?較少機器的數目很容易想到是節省成本,而維持機器的資源利用率在一定水平,而不是100%,在實際生產中是很有意義的。因為每個應用都會有一定的、不可準確預計的負載增加,因此,我們需要在每台機器上流出一定的「餘量」來應對每個例項可能突然需要的計算資源。

排程演算法的定義與使用價值

網際網路應用和現代資料中心 雲計算已經火了很多年了,早已開始惠及我們每乙個人。今天火熱的大資料 機器學習 人工智慧 以及你們看到的幾乎所有的大規模的網際網路應用 天貓 優酷等 都是執行在雲上的。而支撐雲的,是大型雲計算服務商部署在世界各地的多個資料中心,每個資料中心都有大量的物理伺服器。為了有效地管...

乾貨 DevOps的演進與落地價值

devops是當前it領域最熱門的話題之一,了解 掌握 應用devops對於提公升軟體交付與管控具有重要的意義。然而時至今日devops尚無統一的定義。本文主要從業務及it的發展對devops的誕生背景 定義演進以及落地價值等方面進行了分析和闡述,以期對devops的內涵進行 devops在2009...

MG動畫的應用價值

mg動畫在當下的多 領域無處不在,其簡潔 生動 有趣且具備的包容性和互動性,比平面設計中的靜態文字 影象和圖形的表現形式更具優勢。與枯燥的文字和敘事相比,mg動畫色彩豐富的生動畫面 動態的特效和生動的解說,非常適合產品特性和功能的表現,這也幫助觀眾更好地去理解產品。在商業活動中,動態 以豐富的圖形動...