调度算法为何被阿里如此重视?
阿里妹導(dǎo)讀:資源管理系統(tǒng)作為將數(shù)據(jù)中心資源向上抽象的關(guān)鍵一層,需要的能力是全面的,從保障應(yīng)用的穩(wěn)定性、性能(保證SLA,Service Level Agreement)到全面提高數(shù)據(jù)中心運(yùn)行的效率,節(jié)約能源等等,今天這篇文章,我們重點(diǎn)講一講調(diào)度算法在資源管理中的作用。
本文作者:臨石,阿里系統(tǒng)軟件事業(yè)部資源調(diào)度與管理系統(tǒng)技術(shù)專家
互聯(lián)網(wǎng)應(yīng)用和現(xiàn)代數(shù)據(jù)中心
云計(jì)算已經(jīng)火了很多年了,早已開始惠及我們每一個(gè)人。今天火熱的大數(shù)據(jù)、機(jī)器學(xué)習(xí)、人工智能、以及你們看到的幾乎所有的大規(guī)模的互聯(lián)網(wǎng)應(yīng)用(淘寶、天貓、優(yōu)酷等),都是運(yùn)行在云上的。而支撐云的,是大型云計(jì)算服務(wù)商部署在世界各地的多個(gè)數(shù)據(jù)中心,每個(gè)數(shù)據(jù)中心都有大量的物理服務(wù)器。為了有效地管理這些服務(wù)器,我們需要集群資源管理系統(tǒng)(Cluster Resource Management System),后面簡稱資源管理系統(tǒng)。資源管理系統(tǒng)的價(jià)值,用一句話說,是Datacenter as a Computer,即讓人們管理和使用數(shù)據(jù)中心,像管理和使用一個(gè)臺電腦一樣簡單。
調(diào)度算法的價(jià)值
調(diào)度算法在是整個(gè)資源管理系統(tǒng)中的一個(gè)重要組成部分,簡單地說,調(diào)度算法的作用是決定一個(gè)計(jì)算任務(wù)需要放在集群中的哪臺機(jī)器上面。
在容器化的今天,集群中調(diào)度器的調(diào)度對象很可能是一個(gè)容器實(shí)例,Docker或者是PouchContainer。為容器選擇合適的宿主機(jī)顯然是一個(gè)值得考慮的問題,這里我們說一說調(diào)度算法能夠幫助我們實(shí)現(xiàn)的價(jià)值,這些價(jià)值可以從單個(gè)容器、到應(yīng)用、再到數(shù)據(jù)中心,這三個(gè)不同的層面展示出來。
1、單個(gè)容器層面:
滿足容器運(yùn)行的資源需求:確保每個(gè)容器在運(yùn)行的時(shí)候擁有足夠的資源,CPU、Memory、Disk、網(wǎng)絡(luò)帶寬等等。除了用數(shù)量衡量的資源,很多容器在運(yùn)行的時(shí)候還需要一些特殊的資源,例如特定的操作系統(tǒng)版本、特定的硬件等等。
讓容器在更“舒適”的環(huán)境下運(yùn)行:容器之間可能發(fā)生資源的搶占現(xiàn)象,例如兩個(gè)對Memory消耗很大的容器部署在同一臺機(jī)器上,很容易造成Memory資源的吃緊。雖然我們可以通過容器和內(nèi)核提供的資源隔離技術(shù)降低這種影響,但是最好的辦法還是在一開始不讓這種“容易吵架的人做鄰居”。
2、應(yīng)用層面,每個(gè)應(yīng)用在提供服務(wù)的時(shí)候往往是多個(gè)容器實(shí)例同時(shí)支持的,調(diào)度器需要考慮應(yīng)用的需求
應(yīng)用的高可用:分布式環(huán)境下宿主機(jī)失敗或者單個(gè)容器的失敗是正?,F(xiàn)象,因此我們要保證每個(gè)應(yīng)用同時(shí)有多個(gè)實(shí)例在運(yùn)行,這樣即使有一個(gè)實(shí)例掛了,整個(gè)應(yīng)用不會(huì)受很大影響。
應(yīng)用的容災(zāi):容災(zāi)其實(shí)也經(jīng)常和高可用放在一起,如果一個(gè)應(yīng)用有多個(gè)應(yīng)用實(shí)例,但是都部署在一個(gè)機(jī)房,如果機(jī)房斷電,那么應(yīng)用也就不能提供服務(wù)了,沒有高可用了。解決這個(gè)問題需要的容災(zāi)部署,也就不同維度地打散。調(diào)度算法需要盡量讓同一個(gè)應(yīng)用的不同實(shí)例部署在不同的宿主機(jī)、不同的機(jī)架、不同的機(jī)房、不同的數(shù)據(jù)中心、不同的城市、真是不同的國家;這種容災(zāi)甚至可以體現(xiàn)在更高一層,幾個(gè)重要應(yīng)用之間的所有實(shí)例,也要盡量打散。
很多應(yīng)用因?yàn)槠涮峁┓?wù)的特性往往需要調(diào)度器做更多的事情,例如:按照一定的順序調(diào)度實(shí)例、將計(jì)算任務(wù)調(diào)度到離數(shù)據(jù)最近的地方,等等,這里不一一列舉了。
3、數(shù)據(jù)中心層面
降低數(shù)據(jù)中心的成本:合理的調(diào)度能夠節(jié)省數(shù)據(jù)中心大量的成本,如果用裝箱問題來表示,就是用更少的服務(wù)器裝下了更多的應(yīng)用。服務(wù)器數(shù)目的減少不僅僅是采購成本的下降,服務(wù)器的占地、用電、冷卻等都是一筆很大的開銷,合理的資源調(diào)度能夠?yàn)閿?shù)據(jù)中心節(jié)省大量成本。
除了以上這些內(nèi)容,實(shí)際中調(diào)度算法要考慮的內(nèi)容還有很多,例如公平性的問題、應(yīng)用間的干擾問題、不同應(yīng)用間資源共享(互相借用)的問題、單機(jī)資源的調(diào)配問題(超線程、內(nèi)存帶框等)等等。例如,實(shí)際管理阿里巴巴集團(tuán)在線服的資源管理系統(tǒng)Sigma的調(diào)度規(guī)則,就十分復(fù)雜。
為了讓更多的學(xué)生、研究者能夠接觸到我們的調(diào)度問題,并鼓勵(lì)他們與我們一起應(yīng)對挑戰(zhàn),我們舉辦了“阿里巴巴全球調(diào)度算法挑戰(zhàn)賽”。這個(gè)算法大賽是怎么回事兒呢?讓我們介紹一下。
調(diào)度算法大賽是什么?
這次算法大賽(初賽)來自我們生產(chǎn)環(huán)境中的一個(gè)真實(shí)的場景,簡化了一些約束條件,方便一些對這個(gè)領(lǐng)域剛剛開始了解(你讀完這篇文章,就算是入了一點(diǎn)門了)的同學(xué)找到一個(gè)求解的方法,但是即使對于在該領(lǐng)域有一定經(jīng)驗(yàn)的同學(xué)、工程師、研究者們,我們也相信這份題目能夠讓你花費(fèi)一些精力才能得到一個(gè)優(yōu)化的解。
在這次算法大賽中,我們提供了大約6K個(gè)宿主機(jī),68K個(gè)實(shí)例(其中一部分已經(jīng)部署,一部分尚未部署),約束類型主要有3類:資源約束、重要應(yīng)用高可用約束和應(yīng)用間反親和約束。
資源約束
資源約束是最容易理解的,每個(gè)屬于不同應(yīng)用的實(shí)例都有不同的計(jì)算資源要求。我們本次比賽的一個(gè)重要特點(diǎn)是,CPU和Mem的數(shù)量約束是以時(shí)間曲線的形式給出的。每個(gè)應(yīng)用的對應(yīng)資源需求的時(shí)間曲線是我們通過對該應(yīng)用下多個(gè)實(shí)例(一個(gè)應(yīng)用由很多實(shí)例組成)的24小時(shí)的歷史數(shù)據(jù)進(jìn)行觀察并整理得到的需求曲線,描述了每個(gè)應(yīng)用下面的實(shí)例在一天當(dāng)中每個(gè)采樣點(diǎn)需要的對應(yīng)資源的數(shù)量。映射的場景是我們假定各個(gè)應(yīng)用的實(shí)例的資源需求的有著24小時(shí)的變化周期(即98個(gè)點(diǎn)的變化周期),第二天、第三天甚至再往后,應(yīng)用的實(shí)例還是按照這個(gè)需求長時(shí)間存在。注意,這里提到的應(yīng)用是長應(yīng)用(Long Running Service),沒有特殊原因是不會(huì)下線的(例如淘寶網(wǎng)站),這種長應(yīng)用與一些分布式計(jì)算中的有限持續(xù)時(shí)間計(jì)算任務(wù)是不一樣。
這樣的時(shí)間曲線比普通的標(biāo)量規(guī)定的資源需求具有更多的優(yōu)化空間,但也帶來了更多的復(fù)雜度。下面這個(gè)圖是兩個(gè)應(yīng)用在不同時(shí)間點(diǎn)的資源需求對于滿足機(jī)器容量的互斥(左)與互補(bǔ)(右)的例子。
重要應(yīng)用高可用約束
除了CPU、Mem、Disk這樣計(jì)算資源的約束,我們還有三類名為P、M、PM的約束,這個(gè)約束名字大家可能會(huì)覺得有些奇怪,但這是我們通過調(diào)度來保障重要應(yīng)用高可用的重要約束。我們把一些重要應(yīng)用標(biāo)記為P類、M類、或者PM類,通過限制每臺機(jī)器上可以承載的P、M、PM類型應(yīng)用實(shí)例的上限來保證在機(jī)器發(fā)生故障的時(shí)候(宕機(jī)、斷網(wǎng)等),重要應(yīng)用受到的影響最小。
應(yīng)用間反親和約束
在上述兩種約束之外,我們提供第三種的約束類型是應(yīng)用之間的反親和,以<App_1, App_2, k>的形式給出,其語義是:如果一臺機(jī)器上已經(jīng)部署了一個(gè)App_1的實(shí)例,那么這臺機(jī)器上最多可以部署k個(gè)來自App_2的實(shí)例。這種約束在實(shí)際中的意義是什么呢?這些約束使我們通過觀測和經(jīng)驗(yàn),確定這兩個(gè)應(yīng)用間可能存在干擾因素,如果有超過一定數(shù)量的兩類應(yīng)用的實(shí)例部署在一起,會(huì)影響彼此的性能,因此,在進(jìn)行調(diào)度決策的時(shí)候盡量不讓這種互相干擾的應(yīng)用的實(shí)例出現(xiàn)“扎堆”的現(xiàn)象。
優(yōu)化的目標(biāo)
我們的優(yōu)化目標(biāo)是在維持每臺機(jī)器的資源使用率在一定水平的基礎(chǔ)上(具體數(shù)字不透露,你好好看一下題目的描述,相信你可以判斷出來的),盡量減少使用的機(jī)器的數(shù)目(即實(shí)際部署了容器的機(jī)器的數(shù)目)。為什么這樣設(shè)計(jì)呢?較少機(jī)器的數(shù)目很容易想到是節(jié)省成本,而維持機(jī)器的資源利用率在一定水平,而不是100%,在實(shí)際生產(chǎn)中是很有意義的。因?yàn)槊總€(gè)應(yīng)用都會(huì)有一定的、不可準(zhǔn)確預(yù)計(jì)的負(fù)載增加,因此,我們需要在每臺機(jī)器上流出一定的“余量”來應(yīng)對每個(gè)實(shí)例可能突然需要的計(jì)算資源。
這些余量的資源在平時(shí)也可以為我們所用,但這并在不在我們初賽的考察范圍內(nèi)。也許復(fù)賽中我們會(huì)涉及到這些內(nèi)容。另外,有經(jīng)驗(yàn)的朋友可能會(huì)發(fā)現(xiàn)我們這里沒有對應(yīng)用的遷移做出限制,沒錯(cuò),我們這樣做的目的是為了降低初賽的難度。實(shí)際生產(chǎn)中,應(yīng)用的遷移,尤其我們這次考慮的在線應(yīng)用的遷移是一件頗有代價(jià)的事情,你能否在設(shè)計(jì)算法的時(shí)候考慮一下應(yīng)用遷移的代價(jià)呢?
期待您的參與
我們誠摯地邀請所有對資源調(diào)度、運(yùn)籌優(yōu)化、資源管理、算法有興趣的同學(xué)、學(xué)者來參加我們的大賽,獎(jiǎng)金豐厚而且有前往美國參加Hackthon的機(jī)會(huì)。
訪問:https://tianchi.aliyun.com/m.html#/competition/231663 即可直接報(bào)名。
每天一篇技術(shù)文章,
看不過癮?
關(guān)注“阿里巴巴機(jī)器智能”微信公眾號
發(fā)現(xiàn)更多AI干貨。
總結(jié)
以上是生活随笔為你收集整理的调度算法为何被阿里如此重视?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SIGMOD回顾:数据库国际大咖组团来阿
- 下一篇: 深度剖析 | 阿里热修复如何精简优化补丁