來(lái)源:http://www.infoq.com/cn/articles/analyse-mesos-part-02
在本系列的第一篇文章中,我簡(jiǎn)單介紹了Apache Mesos的背景、架構(gòu),以及它在數(shù)據(jù)中心資源管理中的價(jià)值。本篇文章將深入剖析Mesos的技術(shù)細(xì)節(jié)和組件間的流程,以便大家更好地理解為什么Mesos是數(shù)據(jù)中心操作系統(tǒng)內(nèi)核的重要候選者。文中所述的大部分技術(shù)細(xì)節(jié)都來(lái)自Ben Hindman團(tuán)隊(duì)2010年在加州大學(xué)伯克利分校時(shí)發(fā)表的白皮書。 順便說(shuō)一句,Hindman已經(jīng)離開Twitter去了Mesosphere,著手建設(shè)并商業(yè)化以Mesos為核心的數(shù)據(jù)中心操作系統(tǒng)。在此,我將重點(diǎn)放在提煉白皮書的主要觀點(diǎn)上,然后給出一些我對(duì)相關(guān)技術(shù)所產(chǎn)生的價(jià)值的思考。
接著上一篇文章說(shuō)。并結(jié)合前述的加州大學(xué)伯克利分校的白皮書以及Apache Mesos網(wǎng)站,開始我們的講述:
我們來(lái)研究下上圖的事件流程。上一篇談到,Slave是運(yùn)行在物理或虛擬服務(wù)器上的Mesos守護(hù)進(jìn)程,是Mesos集群的一部分。Framework由調(diào)度器(Scheduler)應(yīng)用程序和任務(wù)執(zhí)行器(Executor)組成,被注冊(cè)到Mesos以使用Mesos集群中的資源。
為了實(shí)現(xiàn)在同一組Slave節(jié)點(diǎn)集合上運(yùn)行多任務(wù)這一目標(biāo),Mesos使用了隔離模塊, 該模塊使用了一些應(yīng)用和進(jìn)程隔離機(jī)制來(lái)運(yùn)行這些任務(wù)。 不足為奇的是,雖然可以使用虛擬機(jī)隔離實(shí)現(xiàn)隔離模塊,但是Mesos當(dāng)前模塊支持的是容器隔離。 Mesos早在2009年就用上了Linux的容器技術(shù),如cgroups和Solaris Zone,時(shí)至今日這些仍然是默認(rèn)的。 然而,Mesos社區(qū)增加了Docker作為運(yùn)行任務(wù)的隔離機(jī)制。 不管使用哪種隔離模塊,為運(yùn)行特定應(yīng)用程序的任務(wù),都需要將執(zhí)行器全部打包,并在已經(jīng)為該任務(wù)分配資源的Slave服務(wù)器上啟動(dòng)。 當(dāng)任務(wù)執(zhí)行完畢后,容器會(huì)被“銷毀”,資源會(huì)被釋放,以便可以執(zhí)行其他任務(wù)。
我們來(lái)更深入地研究一下資源邀約和分配策略,因?yàn)檫@對(duì)Mesos管理跨多個(gè)Framework和應(yīng)用的資源,是不可或缺的。 我們前面提到資源邀約的概念,即由Master向注冊(cè)其上的Framework發(fā)送資源邀約。 每次資源邀約包含一份Slave節(jié)點(diǎn)上可用的CPU、RAM等資源的列表。 Master提供這些資源給它的Framework,是基于分配策略的。分配策略對(duì)所有的Framework普遍適用,同時(shí)適用于特定的Framework。 Framework可以拒絕資源邀約,如果它不滿足要求,若此,資源邀約隨即可以發(fā)給其他Framework。 由Mesos管理的應(yīng)用程序通常運(yùn)行短周期的任務(wù),因此這樣可以快速釋放資源,緩解Framework的資源饑餓; Slave定期向Master報(bào)告其可用資源,以便Master能夠不斷產(chǎn)生新的資源邀約。 另外,還可以使用諸如此類的技術(shù), 每個(gè)Fraamework過(guò)濾不滿足要求的資源邀約、Master主動(dòng)廢除給定周期內(nèi)一直沒有被接受的邀約。
分配策略有助于Mesos Master判斷是否應(yīng)該把當(dāng)前可用資源提供給特定的Framework,以及應(yīng)該提供多少資源。 關(guān)于Mesos中使用資源分配以及可插拔的分配模塊,實(shí)現(xiàn)非常細(xì)粒度的資源共享,會(huì)單獨(dú)寫一篇文章。 言歸正傳,Mesos實(shí)現(xiàn)了公平共享和嚴(yán)格優(yōu)先級(jí)(這兩個(gè)概念我會(huì)在資源分配那篇講)分配模塊, 確保大部分用例的最佳資源共享。已經(jīng)實(shí)現(xiàn)的新分配模塊可以處理大部分之外的用例。
現(xiàn)在來(lái)回答談及Mesos時(shí),“那又怎樣”的問(wèn)題。 對(duì)于我來(lái)說(shuō),令人興奮的是Mesos集四大好處于一身(概述如下),正如我在前一篇文章中所述,我目測(cè)Mesos將為下一代數(shù)據(jù)中心的操作系統(tǒng)內(nèi)核。
效率 - 這是最顯而易見的好處,也是Mesos社區(qū)和Mesosphere經(jīng)常津津樂道的。
上圖來(lái)自Mesosphere網(wǎng)站,描繪出Mesos為效率帶來(lái)的好處。如今,在大多數(shù)數(shù)據(jù)中心中,服務(wù)器的靜態(tài)分區(qū)是常態(tài),即使使用最新的應(yīng)用程序,如Hadoop。這時(shí)常令人擔(dān)憂的是,當(dāng)不同的應(yīng)用程序使用相同的節(jié)點(diǎn)時(shí),調(diào)度相互沖突,可用資源互相爭(zhēng)搶。靜態(tài)分區(qū)本質(zhì)上是低效的,因?yàn)榻?jīng)常會(huì)面臨,其中一個(gè)分區(qū)已經(jīng)資源耗盡,而另一個(gè)分區(qū)的資源卻沒有得到充分利用,而且沒有什么簡(jiǎn)單的方法能跨分區(qū)集群重新分配資源。使用Mesos資源管理器仲裁不同的調(diào)度器,我們將進(jìn)入動(dòng)態(tài)分區(qū)/彈性共享的模式,所有應(yīng)用程序都可以使用節(jié)點(diǎn)的公共池,安全地、最大化地利用資源。 一個(gè)經(jīng)常被引用的例子是Slave節(jié)點(diǎn)通常運(yùn)行Hadoop作業(yè),在Slave空閑階段,動(dòng)態(tài)分配給他們運(yùn)行批處理作業(yè),反之亦然。 值得一提的是,這其中的某些環(huán)節(jié)可以通過(guò)虛擬化技術(shù),如VMware vSphere的分布式資源調(diào)度(DRS)來(lái)完成。 然而,Mesos具有更精細(xì)的粒度,因?yàn)镸esos在應(yīng)用層而不是機(jī)器層分配資源,通過(guò)容器而不是整個(gè)虛擬機(jī)(VM)分配任務(wù)。 前者能夠?yàn)槊總€(gè)應(yīng)用程序的特殊需求做考量,應(yīng)用程序的調(diào)度器知道最有效地利用資源; 后者能夠更好地“裝箱”,運(yùn)行一個(gè)任務(wù),沒有必要實(shí)例化一整個(gè)虛擬機(jī),其所需的進(jìn)程和二進(jìn)制文件足矣。
敏捷 - 與效率和利用率密切相關(guān),這實(shí)際上是我認(rèn)為最重要的好處。 往往,效率解決的是“如何花最少的錢最大化數(shù)據(jù)中心的資源”,而敏捷解決的是“如何快速用上手頭的資源?!?正如我和我的同事Tyler Britten經(jīng)常指出,IT的存在是幫助企業(yè)賺錢和省錢的;那么如何通過(guò)技術(shù)幫助我們迅速創(chuàng)收,是我們要達(dá)到的重要指標(biāo)。 這意味著要確保關(guān)鍵應(yīng)用程序不能耗盡所需資源,因?yàn)槲覀儫o(wú)法為應(yīng)用提供足夠的基礎(chǔ)設(shè)施,特別是在數(shù)據(jù)中心的其他地方都的資源是收費(fèi)情況下。
可擴(kuò)展性 - 為可擴(kuò)展而設(shè)計(jì),這是我真心欣賞Mesos架構(gòu)的地方。 這一重要屬性使數(shù)據(jù)可以指數(shù)級(jí)增長(zhǎng)、分布式應(yīng)用可以水平擴(kuò)展。 我們的發(fā)展已經(jīng)遠(yuǎn)遠(yuǎn)超出了使用巨大的整體調(diào)度器或者限定群集節(jié)點(diǎn)數(shù)量為64的時(shí)代,足矣承載新形式的應(yīng)用擴(kuò)張。
Mesos可擴(kuò)展設(shè)計(jì)的關(guān)鍵之處是采用兩級(jí)調(diào)度架構(gòu)。 使用Framework代理任務(wù)的實(shí)際調(diào)度,Master可以用非常輕量級(jí)的代碼實(shí)現(xiàn),更易于擴(kuò)展集群發(fā)展的規(guī)模。 因?yàn)镸aster不必知道所支持的每種類型的應(yīng)用程序背后復(fù)雜的調(diào)度邏輯。 此外,由于Master不必為每個(gè)任務(wù)做調(diào)度,因此不會(huì)成為容量的性能瓶頸,而這在為每個(gè)任務(wù)或者虛擬機(jī)做調(diào)度的整體調(diào)度器中經(jīng)常發(fā)生。
模塊化 - 對(duì)我來(lái)說(shuō),預(yù)測(cè)任何開源技術(shù)的健康發(fā)展,很大程度上取決于圍繞該項(xiàng)目的生態(tài)系統(tǒng)。 我認(rèn)為Mesos項(xiàng)目前景很好,因?yàn)槠湓O(shè)計(jì)具有包容性,可以將功能插件化,比如分配策略、隔離機(jī)制和Framework。將容器技術(shù),比如Docker和Rocket插件化的好處是顯而易見。但是我想在此強(qiáng)調(diào)的是圍繞Framework建設(shè)的生態(tài)系統(tǒng)。將任務(wù)調(diào)度委托給Framework應(yīng)用程序,以及采用插件架構(gòu),通過(guò)Mesos這樣的設(shè)計(jì),社區(qū)創(chuàng)造了能夠讓Mesos問(wèn)鼎數(shù)據(jù)中心資源管理的生態(tài)系統(tǒng)。因?yàn)槊拷尤胍环N新的Framework,Master無(wú)需為此編碼,Slave模塊可以復(fù)用,使得在Mesos所支持的寬泛領(lǐng)域中,業(yè)務(wù)迅速增長(zhǎng)。相反,開發(fā)者可以專注于他們的應(yīng)用和Framework的選擇。 當(dāng)前而且還在不斷地增長(zhǎng)著的Mesos Framework列表參見此處以及下圖:
在接下來(lái)的文章中,我將更深入到資源分配模塊,并解釋如何在Mesos棧的各級(jí)上實(shí)現(xiàn)容錯(cuò)。 同時(shí),我很期待讀者的反饋,特別是關(guān)于如果我打標(biāo)的地方,如果你發(fā)現(xiàn)哪里不對(duì),請(qǐng)反饋給我。 我也會(huì)在Twitter響應(yīng)你的反饋,請(qǐng)關(guān)注 @hui_kenneth。
下一篇是關(guān)于Mesos的持久性存儲(chǔ)和容錯(cuò)的。
查看英文原文:?DIGGING DEEPER INTO APACHE MESOS
更多建議: