乾貨:排程演算法的價值與阿里的應用實踐
More Applications in Less Machines,你辦得到嗎?
作者:丁海洋
花名臨石。阿里巴巴系統軟體事業部資源排程與管理系統技術專家。曾在華為從事雲端計算和區塊鏈方面工作,參與了Kubernetes社群早期排程器特性的設計和開發工作,區塊鏈技術的研究、場景分析和專利工作。加入華為之前,在法國格勒諾布林大學獲得分散式控制博士學位,本科、研究生畢業於東南大學。
網際網路應用和現代資料中心
雲端計算已經火了很多年了,早已開始惠及我們每一個人。今天火熱的大資料、機器學習、人工智慧、以及我們看到的像淘寶、天貓、優酷等大規模的網際網路應用都是執行在雲上的。而支撐雲的,是大型雲端計算服務商部署在世界各地的多個資料中心,每個資料中心都有大量的物理伺服器。為了有效的管理這些伺服器,我們需要叢集資源管理系統(Cluster Resource Management System),後面簡稱資源管理系統。資源管理系統的價值,用一句話說,是Datacenter as a Computer,__像管理和使用一個臺電腦一樣簡單地管理和使用資料中心__。
資源管理系統作為將資料中心資源向上抽象的關鍵一層,需要全面的能力。從保障應用的穩定性、效能(保證SLA,Service Level Agreement)到全面提高資料中心執行的效率,節約能源等等,今天這篇文章,我們重點講一講排程演算法在資源管理中的作用。
排程演算法的價值
排程演算法在是整個資源管理系統中的一個重要組成部分,簡單的說,排程演算法的作用是決定一個計算任務需要放在叢集中的哪臺機器上面。
在容器化的今天,叢集中排程器的排程物件很可能是一個容器例項,Docker或者是PouchContainer。為容器選擇合適的宿主機顯然是一個值得考慮的問題,這裡我們說一說排程演算法能夠幫助我們實現的價值,這些價值可以從單個容器、到應用、再到資料中心,這三個不同的層面展示出來。
-
單個容器層面:
- 滿足容器執行的資源需求:確保每個容器在執行的時候擁有足夠的資源,CPU、Memory、Disk、網路頻寬等等。除了用數量衡量的資源,很多容器在執行的時候還需要一些特殊的資源,例如特定的作業系統版本、特定的硬體等等
- 讓容器在更“舒適”的環境下執行:容器之間可能發生資源的搶佔現象,例如兩個對Memory消耗很大的容器部署在同一臺機器上,很容易造成Memory資源的吃緊。雖然我們可以通過容器和核心提供的資源隔離技術降低這種影響,但是最好的辦法還是在一開始不讓這種“容易吵架的人做鄰居”
-
應用層面,每個應用在提供服務的時候往往是多個容器例項同時支援的,排程器需要考慮應用的需求
- 應用的高可用:分散式環境下宿主機失敗或者單個容器的失敗是正常現象,因此我們要保證每個應用同時有多個例項在執行,這樣即使有一個例項掛了,整個應用不會受很大影響
- 應用的容災:容災其實也經常和高可用放在一起,如果一個應用有多個應用例項,但是都部署在一個機房,如果機房斷電,那麼應用也就不能提供服務了,沒有高可用了。解決這個問題需要的容災部署,也就不同維度的打散。排程演算法需要儘量讓同一個應用的不同例項部署在不同的宿主機、不同的機架、不同的機房、不同的資料中心、不同的城市、甚至是不同的國家;這種容災甚至可以體現在更高一層,幾個重要應用之間的所有例項,也要儘量打散
- 很多應用因為其提供服務特性往往需要排程器做更多的事情,例如:按照一定的順序排程例項、將計算任務排程到離資料最近的地方,等等,這裡不一一列舉了
-
資料中心層面
- 降低資料中心的成本:合理的排程能夠節省資料中心大量的成本,如果用裝箱問題來表示,就是用更少的伺服器裝下了更多的應用。伺服器數目的減少不僅僅是採購成本的下降,伺服器的佔地、用電、冷卻等都是一筆很大的開銷,合理的資源排程能夠為資料中心節省大量成本
除了以上這些內容,實際中排程演算法要考慮的內容還有很多,例如公平性的問題、應用間的干擾問題、不同應用間資源共享(互相借用)的問題、單機資源的調配問題(超執行緒、記憶體帶框等)等等。例如,實際管理阿里巴巴集團線上服的資源管理系統Sigma的排程規則,就十分複雜。
為了讓更多的學生、研究者能夠接觸到我們的排程問題,並鼓勵他們與我們一起應對挑戰,我們舉辦了“阿里巴巴全球排程演算法挑戰賽”。這個演算法大賽是怎麼回事兒呢?讓我們介紹一下。
首屆阿里全球排程演算法大賽
大家可以想象下,阿里巴巴擁有如此大規模的資料中心,1%的資源利用率的提升都將為阿里巴巴自身和整個社會帶來可觀的能源節約讓使用者享受更加綠色的計算資源。所以最近我們發起了首屆阿里全球排程演算法大賽,初賽賽題來自我們生產環境中的一個真實的場景,簡化了一些約束條件,方便一些對這個領域剛剛開始瞭解的同學找到一個求解的方法,但是即使對於在該領域有一定經驗的同學、工程師、研究者們,我們也相信這份題目能夠讓你花費一些精力才能得到一個優化的解。
在這次演算法大賽中,我們提供了大約6K個宿主機,68K個例項(其中一部分已經部署,一部分尚未部署),約束型別主要有3類:資源約束、重要應用高可用約束和應用間反親和約束。
資源約束
資源約束是最容易理解的,每個屬於不同應用的例項都有不同的計算資源要求。我們本次比賽的一個重要特點是,CPU和Mem的數量約束是以時間曲線的形式給出的。每個應用的對應資源需求的時間曲線是我們通過對該應用下多個例項(一個應用由很多例項組成)的24小時的歷史資料進行觀察並整理得到的需求曲線,描述了每個應用下面的例項在一天當中每個取樣點需要的對應資源的數量。對映的場景是我們假定各個應用的例項的資源需求的有著24小時的變化週期(即98個點的變化週期),第二天、第三天甚至再往後,應用的例項還是按照這個需求長時間存在。注意,這裡提到的應用是長應用(Long Running Service),沒有特殊原因是不糊下線的(例如淘寶網站),這種長應用與一些分散式計算中的有限持續時間計算任務是不一樣。
這樣的時間曲線比普通的標量規定的資源需求具有更多的優化空間,但也帶來了更多的複雜度。下面這個圖是兩個應用在不同時間點的資源需求對於滿足機器容量的互斥(左)與互補(右)的例子。
重要應用高可用約束
除了CPU、Mem、Disk這樣計算資源的約束,我們還有三類名為P、M、PM的約束,這個約束名字大家可能會覺得有些奇怪,但這是我們通過排程來保障重要應用高可用的重要約束。我們把一些重要應用標記為P類、M類、或者PM類,通過限制每臺機器上可以承載的P、M、PM型別應用例項的上限來保證在機器發生故障的時候(當機、斷網等),重要應用受到的影響最小。
應用間反親和約束
在上述兩種約束之外,我們提供第三種的約束型別是應用之間的反親和,以<App_1, App_2, k>
的形式給出,其語義是:如果一臺機器上已經部署了一個App_1
的例項,那麼這臺機器上最多可以部署k
個來自App_2
的例項。這種約束在實際中的意義是什麼呢?這些約束使我們通過觀測和經驗,確定這兩個應用間可能存在干擾因素,如果有超過一定數量的兩類應用的例項部署在一起,會影響彼此的效能,因此,在進行排程決策的時候儘量不讓這種互相干擾的應用的例項出現“扎堆”的現象。
優化的目標
我們的優化目標是在維持每臺機器的資源使用率在一定水平的基礎上(具體數字不透露,你好好看一下題目的描述,相信你可以判斷出來的),儘量減少使用的機器的數目(即實際部署了容器的機器的數目)。為什麼這樣設計呢?較少機器的數目很容易想到是節省成本,而維持機器的資源利用率在一定水平,而不是100%,在實際生產中是很有意義的。因為每個應用都會有一定的、不可準確預計的負載增加,因此,我們需要在每臺機器上流出一定的“餘量”來應對每個例項可能突然需要的計算資源。
這些餘量的資源在平時也可以為我們所用,但這並在不在我們初賽的考察範圍內。也許複賽中我們會涉及到這些內容。另外,有經驗的朋友可能會發現我們這裡沒有對應用的遷移做出限制,沒錯,我們這樣做的目的是為了降低初賽的難度。實際生產中,應用的遷移,尤其我們這次考慮的線上應用的遷移是一件頗有代價的事情,你能否在設計演算法的時候考慮一下應用遷移的代價呢?
我們誠摯的邀請所有對資源排程、運籌優化、資源管理、演算法有興趣的同學、學者來參加我們的大賽,獎金豐厚而且有前往美國參加Hackathon的機會!
賽題解讀直播
6月27日(下週三)晚8點
阿里系統軟體事業部排程系統技術專家 丁海洋(花名:臨石)將為大家線上直播,深度解讀賽題!
__分享內容__:
1.Datacenter和Warehouse-Scale Computers
2.阿里巴巴需要什麼樣的資源管理系統
3.阿里巴巴的叢集管理和排程系統:Sigma
4.排程演算法與資源管理
5.首屆阿里全球排程演算法賽題解讀
新增大賽小助手微信:alibabass88 即可進入選手群並獲取直播地址
相關文章
- 乾貨|EasyMR 基於 Kubernetes 應用的監控實踐
- 阿里巴巴的雲原生應用開源探索與實踐阿里
- 乾貨 | 知識圖譜的技術與應用
- 阿里巴巴的 Kubernetes 應用管理實踐經驗與教訓阿里
- 聯想基於Apache DolphinScheduler構建統一排程中心的應用實踐Apache
- 乾貨 | CDN搭配OSS最佳實踐 ——搭建動靜態分離的應用架構應用架構
- 雲原生背景下的運維價值思考與實踐運維
- 實戰乾貨|Spark 在袋鼠雲數棧的深度探索與實踐Spark
- 乾貨收藏!Calico的BGP RouteReflector策略實踐
- ScaleFlux CSD 2000 在攜程的應用實踐UX
- 乾貨:PHP與大資料開發實踐PHP大資料
- 深度學習的應用與實踐深度學習
- cpu的排程演算法演算法
- Flink在美團的實踐與應用
- IRITA HUB的跨鏈實踐與應用
- BIGO 的資料管理與應用實踐Go
- 阿里巴巴雲原生應用安全防護實踐與 OpenKruise 的新領域阿里UI
- 基於Azkaban的任務定時排程實踐
- 絕對值碼盤介面卡的廣泛應用與創新實踐
- 前端乾貨之JS最佳實踐前端JS
- 作業系統綜合題之“採用實時排程,可排程的限制條件和可排程的最大X值是是多少ms的CPU時間”作業系統
- 同程旅行吳祥平:同程湖倉一體應用與實踐
- Protobuf協議應用乾貨協議
- 攜程對AIOps場景和演算法的探索與實踐AI演算法
- Embedding技術與應用(3):Embeddings技術的實踐應用
- 《探索Python Requests中的代理應用與實踐》Python
- Flink 在中泰證券的實踐與應用
- Apache Flink 在鬥魚的應用與實踐Apache
- 淺談分散式 ID 的實踐與應用分散式
- 大資料HBase在阿里搜尋中的應用實踐大資料阿里
- 深度解讀!阿里統一應用管理架構升級的教訓與實踐阿里架構
- 鴻蒙案例實踐:影像處理應用中多執行緒任務排程與效能最佳化鴻蒙執行緒
- 生產環境中AI呼叫的最佳化:AI閘道器高價值應用實踐AI
- 美團叢集排程系統的雲原生實踐
- 雲原生架構下複雜工作負載混合排程的思考與實踐架構負載
- 乾貨 | 京東技術中臺的Flutter實踐之路Flutter
- 五礦期貨:NebulaGraph 圖資料庫在金融期貨行業的應用與實踐探索資料庫行業
- kubernetes實踐之三十八:Pod排程