目錄
Mesos最早是UC Berkeley的一個研究項目,用以解決編程模型和計算框架多樣化環境下,不同框架之間的資源隔離和共享問題。儘管它的直接設計動機與YARN有所不同,但它的架構和實現策略與YARN類似,得到了一定範圍內的認可,例如Twitter就在使用。
(一)Mesos基本架構
Mesos由四個組件構成,如下圖所示:
1. Mesos Master
Mesos Master是整個系統的核心,負責管理整個系統中的資源和接入的各種框架,並將Mesos Slave上的資源按照某種策略分配給框架。爲了防止Mesos Master出現故障後導致集羣不可用,Mesos允許用戶配置多個Mesos Master,並通過ZooKeeper進行管理,當主Mesos Master出現故障後,ZooKeeper可馬上從備用Master中選擇一個提升爲新的主Mesos Master。
2. Mesos Slave
Mesos Slave負責接收並執行來自Mesos Maser的命令,並定時將任務執行狀態彙報給Mesos Master。Mesos Slave將節點上的資源使用情況發送給Mesos Master,由Mesos Master中的Allocator模塊決定將資源分配給哪個Framework。值得注意的是,當前Mesos僅考慮了CPU和內存兩種資源,爲了避免任務之間相互干擾,同YARN一樣,Mesos Slave採用了輕量級資源隔離機制Cgroups。
3. Framework Scheduler
Framework是指外部的框架,如MPI、MapReduce、Spark等,這些框架可以通過註冊的方式接入Mesos,以便Mesos進行統一管理和資源分配。Mesos要求接入的框架必須有一個調度器模塊Framework Scheduler,該調度器負責框架內部的任務調度。一個Framework在Mesos上的工作流程爲:首先通過自己的調度器向Mesos註冊,並獲取Mesos分配給自己的資源,然後再由自己的調度器將這些資源分配給框架中的任務。也就是說,同YARN一樣,Mesos系統採用了雙層調度框架:第一層,由Mesos將資源分配給框架;第二層,框架自己的調度器將資源分配給內部的各個任務。當前Mesos支持三種語言編寫的調度器,分別是C++、Java和Python,爲了向各調度器提供統一的接入方式,Mesos內部採用了C++實現了一個MesosSchedulerDriver(調度器驅動器),Framework的調度器可調用該Driver中的接口與Mesos Master交互,完成一些列功能(如註冊、資源分配等)。
4. Framework Executor
Framework Executor主要用於啓動框架內部的任務。由於不同的框架,啓動任務的接口或者方式不同,當一個新的框架要接入Mesos時,通常需要指定專有的Executor,以告訴Mesos如何啓動該框架中的任務。
(二)Mesos資源分配策略
Mesos中最核心的問題是如何構建一個兼具良好擴展性和性能的調度模型,以支持各種計算框架。由於不同框架可能有不同的調度需求,因此,爲Mesos設計一個好的調度模型是一個極具挑戰性的工作。
一種可能的解決方案時候構建一個具有豐富表達能力的中央調度器,該調度器接收來自不同框架的詳細需求描述,比如資源需求、任務調度順序和組織關係等,然後爲這些任務構建一個全局的調度序列。但是,在真實的系統中,由於每種計算框架具有不同的調度需求,且有些框架的調度需求非常複雜,因此,提供一個具有豐富表達能力的API以捕獲所有框架的需求是不太可能的,也就是說,該方案過於理想化,在真實系統中很難實現。
Mesos提供了一種簡化的方案:將資源調度的控制授權給各個框架。Mesos負責按照一些簡單的策略(如FIFO、Fair等)將資源進一步分配給各個作業。考慮到Mesos缺少對各個框架的實際資源需求的瞭解,爲保證框架能高效地獲取到自己需要的資源,它提供了三種機制:
1.資源拒絕
如果Mesos爲某個框架分配的資源不符合它的要求,則框架可以拒絕接受該資源直到出現滿足自己需求的資源。該機制使得框架在複雜的資源約束條件下,還能夠保證Mesos設計簡單和具有良好的擴展性。
2.資源過濾
每次發生資源調度時,Mesos Master均需要與Framework Scheduler進行通信,如果有些框架總是拒絕某些節點上的資源,那麼由於額外的通信開銷會使得調度性能變得低效。爲避免不必要的通信,Mesos提供了資源過濾機制,允許框架只接收來自“剩餘資源量大於L的Mesos Slave”或者“位於特定列表中的Mesos Slave”上的資源。
3.資源回收
如果某個框架在一定的時間內沒有爲分配的資源返回對應的任務,則Mesos將回收爲其分配資源,並將這些資源重新分配給其他框架。爲了支持多維資源調度,Mesos採用了主資源公平調度算法(DRF),該算法擴展了最大最小公平算法(max-min fairness),使其能夠支持多維資源的調度。
(三)Mesos與YARN的對比
儘管YARN和Mesos誕生於不同的公司和研究機構,但它們的架構卻大同小異。總體來說,YARN起源於大數據領域,目前已經形成了良好的生態系統,與其他大數據系統結合緊密;Mesos源自於集羣化服務部署,因而更加適合服務器部署與管理。下圖爲兩者組件的對應關係與相關指標對比: