Mesos總體架構(gòu)

董的博客 ? Apache Mesos總體架構(gòu)
http://dongxicheng.org/apache-mesos/meso-architecture/

  1. 前言
    同其他大部分分布式系統(tǒng)一樣,Apache Mesos為了簡(jiǎn)化設(shè)計(jì),也是采用了master/slave結(jié)構(gòu),為了解決master單點(diǎn)故障,將master做得盡可能地輕量級(jí),其上面所有的元數(shù)據(jù)可以通過(guò)各個(gè)slave重新注冊(cè)而進(jìn)行重構(gòu),故很容易通過(guò)zookeeper解決該單點(diǎn)故障問(wèn)題。
    什么是apache mesos?參考:《統(tǒng)一資源管理與調(diào)度平臺(tái)(系統(tǒng))介紹》,本文分析基于Mesos SVN Revision 1327410
  2. Apache mesos中的基本術(shù)語(yǔ)解釋
    (1) Mesos-master:Mesos master,主要負(fù)責(zé)管理各個(gè)framework和slave,并將slave上的資源分配給各個(gè)framework
    (2) Mesos-slave:Mesos slave,負(fù)責(zé)管理本節(jié)點(diǎn)上的各個(gè)mesos-task,比如:為各個(gè)executor分配資源
    (3) Framework:計(jì)算框架,如:Hadoop,Spark等,通過(guò)MesosSchedulerDiver接入Mesos
    (4) Executor:執(zhí)行器,安裝到mesos-slave上,用于啟動(dòng)計(jì)算框架中的task。
    當(dāng)用戶(hù)試圖添加一種新的計(jì)算框架到Mesos中時(shí),需要實(shí)現(xiàn)一個(gè)Framework scheduler和executor以接入Mesos。
  3. 總體架構(gòu)
    Apache Mesos由四個(gè)組件組成,分別是Mesos-master,mesos-slave,framework和executor。
    Mesos-master是整個(gè)系統(tǒng)的核心,負(fù)責(zé)管理接入mesos的各個(gè)framework(由frameworks_manager管理)和slave(由slaves_manager管理),并將slave上的資源按照某種策略分配給framework(由獨(dú)立插拔模塊Allocator管理)。
    Mesos-slave負(fù)責(zé)接收并執(zhí)行來(lái)自mesos-master的命令、管理節(jié)點(diǎn)上的mesos-task,并為各個(gè)task分配資源。mesos-slave將自己的資源量發(fā)送給mesos-master,由mesos-master中的Allocator模塊決定將資源分配給哪個(gè)framework,當(dāng)前考慮的資源有CPU和內(nèi)存兩種,也就是說(shuō),mesos-slave會(huì)將CPU個(gè)數(shù)和內(nèi)存量發(fā)送給mesos-master,而用戶(hù)提交作業(yè)時(shí),需要指定每個(gè)任務(wù)需要的CPU個(gè)數(shù)和內(nèi)存量,這樣,當(dāng)任務(wù)運(yùn)行時(shí),mesos-slave會(huì)將任務(wù)放到包含固定資源的linux container中運(yùn)行,以達(dá)到資源隔離的效果。很明顯,master存在單點(diǎn)故障問(wèn)題,為此,mesos采用了zookeeper解決該問(wèn)題。
    Framework是指外部的計(jì)算框架,如Hadoop,Mesos等,這些計(jì)算框架可通過(guò)注冊(cè)的方式接入mesos,以便mesos進(jìn)行統(tǒng)一管理和資源分配。Mesos要求可接入的框架必須有一個(gè)調(diào)度器模塊,該調(diào)度器負(fù)責(zé)框架內(nèi)部的任務(wù)調(diào)度。當(dāng)一個(gè)framework想要接入mesos時(shí),需要修改自己的調(diào)度器,以便向mesos注冊(cè),并獲取mesos分配給自己的資源, 這樣再由自己的調(diào)度器將這些資源分配給框架中的任務(wù),也就是說(shuō),整個(gè)mesos系統(tǒng)采用了雙層調(diào)度框架:第一層,由mesos將資源分配給框架;第二層,框架自己的調(diào)度器將資源分配給自己內(nèi)部的任務(wù)。當(dāng)前Mesos支持三種語(yǔ)言編寫(xiě)的調(diào)度器,分別是C++,java和python,為了向各種調(diào)度器提供統(tǒng)一的接入方式,Mesos內(nèi)部采用C++實(shí)現(xiàn)了一個(gè)MesosSchedulerDriver(調(diào)度器驅(qū)動(dòng)器),framework的調(diào)度器可調(diào)用該driver中的接口與Mesos-master交互,完成一系列功能(如注冊(cè),資源分配等)。
    Executor主要用于啟動(dòng)框架內(nèi)部的task。由于不同的框架,啟動(dòng)task的接口或者方式不同,當(dāng)一個(gè)新的框架要接入mesos時(shí),需要編寫(xiě)一個(gè)executor,告訴mesos如何啟動(dòng)該框架中的task。為了向各種框架提供統(tǒng)一的執(zhí)行器編寫(xiě)方式,Mesos內(nèi)部采用C++實(shí)現(xiàn)了一個(gè)MesosExecutorDiver(執(zhí)行器驅(qū)動(dòng)器),framework可通過(guò)該驅(qū)動(dòng)器的相關(guān)接口告訴mesos啟動(dòng)task的方法。


    mesos-arch
  4. 參考資料
    (1)Mesos主頁(yè):http://www.mesosproject.org/index.html
    (2)Mesos代碼:https://svn.apache.org/repos/asf/incubator/mesos/trunk/
    (3)Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center. B. Hindman, A. Konwinski, M. Zaharia, A. Ghodsi, A.D. Joseph, R. Katz, S. Shenker and I. Stoica, NSDI 2011, March 2011.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容