Apache Mesos調(diào)度機(jī)制
1. 前言
調(diào)度器是Mesos的核心部件,主要負(fù)責(zé)將各個(gè)slave上資源分配給各個(gè)framework,常見的調(diào)度機(jī)制有FIFO,F(xiàn)air Scheduler,Capacity Scheduler,Quincy,Condor等。Mesos為了支持多framework接入,采用了雙層調(diào)度機(jī)制,首先,由mesos中的 allocator將資源分配給framework,然后又由framework自己的調(diào)度器將資源分配給任務(wù)。本文重點(diǎn)介紹mesos中的 allocator模塊。
(什么是apache mesos?參考:《統(tǒng)一資源管理與調(diào)度平臺(tái)(系統(tǒng))介紹》,本文分析基于Mesos SVN Revision 1327410)
2. Mesos調(diào)度機(jī)制
Mesos中的調(diào)度機(jī)制被稱為“Resource Offer”,采用了基于資源量的調(diào)度機(jī)制,這不同于Hadoop中的基于slot的機(jī)制。在mesos中,slave直接將資源量(CPU和內(nèi)存)匯報(bào) 給master,由master將資源量按照某種機(jī)制分配給framework,其中,“某種機(jī)制”是“Dominant Resource Fairness(DRF)”
對(duì)于類似mesos采用雙層調(diào)度框架的系統(tǒng),在設(shè)計(jì)時(shí),需要解決以下問題:“Mesos在不知道各個(gè)framework資源需求的情況下,如何滿足 其需求?”,更具體一些,“Mesos在不知道framework中哪些數(shù)據(jù)存放在哪些節(jié)點(diǎn)情況下,如何做到數(shù)據(jù)locality?”為了解決該問 題,mesos提供了“reject offer”機(jī)制,允許framework暫時(shí)拒絕不滿足其資源需求的slave,在此,mesos采用了類似于Hadoop中的“delay scheduling“調(diào)度機(jī)制。
在mesos中,作業(yè)調(diào)度是一個(gè)分布式的過程,當(dāng)出現(xiàn)失敗情況時(shí),需要表現(xiàn)出一定的高效性和魯棒性。為此,mesos提供了以下機(jī)制:
(1)filters機(jī)制。 每次調(diào)度過程,mesos-master需要與framework-scheduler進(jìn)行通信,如果有些framework總是拒絕slave,那么由 于額外的通信開銷會(huì)使得調(diào)度性能低效。為此避免不必要的通信,mesos提供了filters機(jī)制,允許framework只接收“剩余資源量大于L的 slave”或者“只接收node列表中的slave”。
(2)rescinds機(jī)制。如果某個(gè)framework在一定的時(shí)間內(nèi)沒有為分配的資源返回對(duì)應(yīng)的任務(wù),則mesos會(huì)回收其資源量,并將這些資源分配給其他framework。
3. Dominant Resource Fairness(DRF)
DRF是一種支持多資源的max-min fair 資源分配機(jī)制,其中max表示max{CPU,mem},而min表示min{user1,user2,…}=min{max{CPU1,mem1}, max{CPU2,mem2}, …},其中user代表mesos中的framework,算法偽代碼如下圖所示:

舉例說明,假設(shè)系統(tǒng)中共有9 CPUs 和18 GB RAM,有兩個(gè)user(framework)分別運(yùn)行了兩種任務(wù),分別需要的資源量為<1 CPU, 4 GB> 和 <3 CPUs, 1 GB>。對(duì)于用戶A,每個(gè)task要消耗總CPU的1/9和總內(nèi)存的2/9,因而A的支配性資源為內(nèi)存;對(duì)于用戶B,每個(gè)task要消耗總CPU的 1/3和總內(nèi)存的1/18,因而B的支配性資源為CPU。DRF將均衡所有用戶的支配性資源,即:A獲取的資源量為:<3 CPUs,12 GB>,可運(yùn)行3個(gè)task;而B獲取的資源量為<6 CPUs, 2GB>,可運(yùn)行2個(gè)task,這樣分配,每個(gè)用戶獲取了相同比例的支配性資源,即:A獲取了2/3的RAMs,B獲取了2/3的CPUs。
DRF算法的一個(gè)可能的調(diào)度序列如下圖所示:

DRF的好處是可滿足四個(gè)特性,即:Sharing incentive,Strategy-proofness,Envy-freeness和Pareto efficiency,具體含義參考后面給出的“參考資料”。
4. Mesos調(diào)度問題
Mesos中的DRF調(diào)度算法過分的追求公平,沒有考慮到實(shí)際的應(yīng)用需求。在實(shí)際生產(chǎn)線上,往往需要類似于Hadoop中Capacity Scheduler的調(diào)度機(jī)制,將所有資源分成若干個(gè)queue,每個(gè)queue分配一定量的資源,每個(gè)user有一定的資源使用上限;更使用的調(diào)度策略 是應(yīng)該支持每個(gè)queue可單獨(dú)定制自己的調(diào)度器策略,如:FIFO,Priority等。
由于Mesos采用了雙層調(diào)度機(jī)制,在實(shí)際調(diào)度時(shí),將面臨設(shè)計(jì)決策問題:***層和第二層調(diào)度器分別實(shí)現(xiàn)哪幾個(gè)調(diào)度機(jī)制,即:將大部分調(diào)度機(jī)制放到***層調(diào)度器,還是***層調(diào)度器僅支持簡(jiǎn)單的資源分配(分配比例由管理員指定)?
Mesos采用了Resource Offer機(jī)制(不同于Hadoop中的基于slot的調(diào)度機(jī)制),這種調(diào)度機(jī)制面臨著資源碎片問題,即:每個(gè)節(jié)點(diǎn)上的資源不可能全部被分配完,剩下的一點(diǎn)可能不足以讓任何任務(wù)運(yùn)行,這樣,便產(chǎn)生了類似于操作系統(tǒng)中的內(nèi)存碎片問題。
5. 參考資料
(1)Dominant Resource Fairness: Fair Allocation of Multiple Resources Types. A. Ghodsi, M. Zaharia, B. Hindman, A. Konwinski, S. Shenker, and I. Stoica, NSDI 2011, March 2011






























