Apache Mesos:讓你資源利用率更高、擴(kuò)展性更好
Apache Mesos已經(jīng)成為主要企業(yè)一種流行的手段,來(lái)進(jìn)行線性擴(kuò)展的能力、減少浪費(fèi)資源消耗,以及抽象存儲(chǔ)、CPU和內(nèi)存。
由加利福尼亞大學(xué)伯克利分校的開(kāi)發(fā)人員創(chuàng)建,由包括Twitter、Apple和Netflix在內(nèi)的主要企業(yè)所擁護(hù)的Apache Mesos,它是一個(gè)開(kāi)源軟件,可以在一組機(jī)器上抽象出存儲(chǔ)、CPU和內(nèi)存 Apache Mesos的主要吸引力之一是它線性擴(kuò)展,這意味著隨著負(fù)載水平的增加,響應(yīng)時(shí)間可以成比例地增加——基本上是***制的擴(kuò)展。Mesos將自己稱為“分布式系統(tǒng)內(nèi)核”,因?yàn)樗捎昧薒inux內(nèi)核的核心原則,但卻應(yīng)用在不同的抽象級(jí)別。
停止浪費(fèi)虛擬機(jī)資源
數(shù)據(jù)中心管理員頻繁地利用虛擬機(jī)(VM),導(dǎo)致企業(yè)浪費(fèi)大量資金用于沒(méi)有使用的資源上。這個(gè)問(wèn)題通常通過(guò)分區(qū)來(lái)解決,通過(guò)分配一組特定的服務(wù)器來(lái)運(yùn)行特定的功能。在傳統(tǒng)環(huán)境中,你可以使用分區(qū)來(lái)定義需求,例如需要特定數(shù)量的服務(wù)器,然后相應(yīng)地分配VM和存儲(chǔ)。在公有云中—用戶以資源使用為基礎(chǔ)計(jì)費(fèi),無(wú)法訪問(wèn)云操作系統(tǒng)——分區(qū)將更大或更小的模板用于VM配置上。
雖然這種方法足夠有效了,但這對(duì)協(xié)調(diào)服務(wù)(colocate services )更實(shí)際,這一服務(wù)是Apache Mesos輸入圖片的所在地。分區(qū)將機(jī)器用于特定任務(wù),例如數(shù)據(jù)庫(kù)服務(wù)器,另一個(gè)則用于運(yùn)行,例如Web服務(wù)器。協(xié)調(diào)更有效率,因?yàn)樗试S你在VM或服務(wù)器上運(yùn)行多個(gè)服務(wù)。它也降低了成本,因?yàn)樵谕慌_(tái)服務(wù)器上運(yùn)行多個(gè)服務(wù)減少了所需的服務(wù)器數(shù)量。 Mesos不是依靠分區(qū)來(lái)運(yùn)行服務(wù)的,而是使用托管方式來(lái)允許軟件根據(jù)需要獲取資源。就技術(shù)術(shù)語(yǔ)而言,Mesos用自己的框架替代你正在使用的資源管理器,并實(shí)現(xiàn)調(diào)度和執(zhí)行接口的功能。
Mesos與個(gè)人軟件、Docker容器,和配置為使用Mesos作為資源管理器的大型數(shù)據(jù)集群協(xié)同工作。Apache Mesos不是VM的業(yè)務(wù)流程系統(tǒng)。Mesos還使用Linux控制組(也稱為cgroups)來(lái)限制資源,優(yōu)先處理進(jìn)程并進(jìn)行計(jì)算。這在公有云中很有用,因?yàn)樗试S供應(yīng)商根據(jù)使用的資源來(lái)對(duì)客戶收費(fèi)。Cgroups在傳統(tǒng)環(huán)境中也很有用,因?yàn)樗鼈兛梢韵拗七M(jìn)程,從而不會(huì)占用機(jī)器資源。
Mesos和YARN解決分區(qū)問(wèn)題
Apache Hadoop還有另一個(gè)資源協(xié)調(diào)器YARN,它是Apache Hadoop MapReduce的資源管理員,執(zhí)行與Mesos大致相同的功能。事實(shí)上,Myriad是一個(gè)開(kāi)源項(xiàng)目,它可以讓數(shù)據(jù)中心同時(shí)使用這兩種產(chǎn)品。例如,如果你想使用Mesos運(yùn)行容器應(yīng)用,又想使用YARN來(lái)運(yùn)行Hadoop,那么可以一起使用Mesos和YARN。
如果我們仔細(xì)看看雅虎重寫了Hadoop添加了YARN的原因,我們就可以更好地了解Mesos和YARN的功能。
為YARN編寫框架是一項(xiàng)復(fù)雜的任務(wù),這更適合于大型軟件產(chǎn)品的工程師,如Apache Spark,而不是最終用戶。Hadoop的配置使得使用YARN更容易。在集群環(huán)境中,你可以簡(jiǎn)單地編輯名稱節(jié)點(diǎn)上的配置文件,然后把整個(gè)Hadoop安裝復(fù)制到日期節(jié)點(diǎn)上——YARN可以在不需要任何進(jìn)一步更改配置的情況下工作。
Hadoop早期版本的主要問(wèn)題是分區(qū)。通過(guò)分區(qū),你可以指定插槽來(lái)運(yùn)行映射作業(yè)或?qū)⒆鳂I(yè)減少到Hadoop集群中的機(jī)器上。一旦你分配了一個(gè)插槽來(lái)運(yùn)行一個(gè)映射作業(yè),你就不能使用它來(lái)運(yùn)行減少作業(yè),反之亦然。假設(shè)你已經(jīng)分配了10個(gè)插槽來(lái)運(yùn)行映射作業(yè),10個(gè)插槽來(lái)在Hadoop集群的機(jī)器上減少作業(yè)?,F(xiàn)在,我們假設(shè)Hadoop需要運(yùn)行11個(gè)映射 作業(yè),你會(huì)發(fā)現(xiàn)你限制了自己,因?yàn)槟銢](méi)有為映射 作業(yè)分配足夠的插槽,而且你了不能使用任何額外的插槽分配給減少 工作。這個(gè)問(wèn)題清楚地表明,我們需要一個(gè)更好的方式來(lái)共同服務(wù),并取消分區(qū)。對(duì)此,Apache做出了回應(yīng),從而讓YARN和Mesos可以排除服務(wù)。
Apache Mesos架構(gòu)
Apache Mesos架構(gòu)由一個(gè)主守護(hù)進(jìn)程組成,可以管理每個(gè)群集節(jié)點(diǎn)上運(yùn)行的代理守護(hù)程序。代理程序也使用了cgroup來(lái)確保它們?cè)谝逊峙涞膬?nèi)存、CPU和存儲(chǔ)空間中工作。每個(gè)代理使用一個(gè)Mesos框架運(yùn)行任務(wù)。該框架由兩個(gè)組件組成:調(diào)度程序——其向主機(jī)注冊(cè)以接收資源;執(zhí)行器——其從調(diào)度器接收這些資源并使用它們運(yùn)行框架的任務(wù)。實(shí)際上,執(zhí)行器 會(huì)識(shí)別出哪正在運(yùn)行的應(yīng)用程序資源可用。
Mesos和容器編排
像Kubernetes和Docker Swarm一樣,Mesos也執(zhí)行容器編排。Mesos使用三種類型的容器技術(shù):Composing,它允許不同的容器技術(shù)一起運(yùn)行;Docker和Mesos自己的容器化,這是默認(rèn)配置。
Apache Mesosphere
Apache Mesosphere是向原始Apache Mesos框架添加附加功能的軟件; 它包括Aurora 、Chronos和Marathon。
由Twitter開(kāi)發(fā)運(yùn)行無(wú)狀態(tài)服務(wù),如Java VM和Web服務(wù)器,Apache Aurora是為長(zhǎng)期運(yùn)行和cron工作而設(shè)計(jì)的框架。Apache Chronos是一個(gè)彈性分布式系統(tǒng),表示作業(yè)之間的依賴關(guān)系。由Mesosphere撰寫,Apache Marathon是一個(gè)可以擴(kuò)展到數(shù)千個(gè)物理服務(wù)器的容器編排系統(tǒng)。Aurora、Chronos和Marathon都使用JSON和REST API與Mesos接口。
幫助創(chuàng)建Mesos的Twitter工程師之一在DockerCon上表示,他建議Mesos用戶在家庭實(shí)驗(yàn)室中要至少使用三臺(tái)機(jī)器來(lái)運(yùn)行工作中的Mesos原型。Apache為有興趣嘗試Mesos的用戶提供了minimesos實(shí)驗(yàn)和測(cè)試工具。Minimesos包括一個(gè)bash shell,你可以在其中部署Mesos Elasticsearch框架。
主流企業(yè)牛擁抱Mesos
你可以想像,像Uber那樣的企業(yè)有一些重要的數(shù)據(jù)處理需求。Uber使用Apache Cassandra數(shù)據(jù)庫(kù)——一個(gè)NoSQL面向列的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)位置數(shù)據(jù)。面向列的數(shù)據(jù)庫(kù)一次寫入一行/列組合,而不是寫入整行列,因此它不會(huì)在空列中浪費(fèi)空間。面向列的數(shù)據(jù)庫(kù)還將列保持在一起,以便快速檢索。
除了依靠Mesos跟蹤數(shù)據(jù),Uber還定期向Mesos提供代碼。在2016年,Uber寫了一個(gè)名為DC / OS Apache Cassandra的擴(kuò)展,這使得在DC / OS上部署Mesos更容易。DC / OS協(xié)調(diào)主代理關(guān)系中的多個(gè)Mesos代理。像Mesos一樣,DC / OS是分布式操作系統(tǒng),但具有配置管理Marathon和Chronos等其他功能。你可以在DC / OS的頂部運(yùn)行Hadoop、Spark、Cassandra等等,因?yàn)樗强蓴U(kuò)展的。最近,DC / OS Apache Cassandra被集成到了Mesosphere DC / OS中。
Netflix也是Apache Mesos的主要用戶和貢獻(xiàn)者。Netflix表示,它運(yùn)行在亞馬遜彈性云計(jì)算(EC2)上,并使用Mesos提供“細(xì)粒度的資源分配到可以打包到單個(gè)EC2實(shí)例的各種大小的任務(wù)上。2015年,Netflix開(kāi)發(fā)了Fenzo,這是Apache Mesos框架的開(kāi)源調(diào)度程序。Fenzo管理部署的調(diào)度和資源分配,并向Mesos添加集群自動(dòng)縮放功能。