本發(fā)明涉及云計(jì)算領(lǐng)域,尤其涉及一種基于Agent的多環(huán)境應(yīng)用并行的云平臺(tái)及其工作方法。
背景技術(shù):
伴隨著大數(shù)據(jù)的發(fā)展,大量非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)以指數(shù)級的變化進(jìn)行增長,這些數(shù)據(jù)在下載到關(guān)系型數(shù)據(jù)庫用于分析時(shí)會(huì)花費(fèi)過多時(shí)間和金錢。MRv1作為一種標(biāo)準(zhǔn)的大數(shù)據(jù)資源管理系統(tǒng)廣泛應(yīng)用于各個(gè)大數(shù)據(jù)環(huán)境中,但是當(dāng)集群規(guī)模不斷擴(kuò)大,節(jié)點(diǎn)數(shù)超過4000,就會(huì)表現(xiàn)出一定的不可預(yù)測性。其中一個(gè)最大的問題是級聯(lián)故障,由于要嘗試復(fù)制數(shù)據(jù)和重載活動(dòng)的節(jié)點(diǎn),所以一個(gè)故障會(huì)通過網(wǎng)絡(luò)泛洪形式導(dǎo)致整個(gè)集群嚴(yán)重惡化。最重要的是,它無法支持多租戶,同一時(shí)間無法為多個(gè)用戶安排進(jìn)程,產(chǎn)生了大量時(shí)間冗余。MRv2——Yarn的產(chǎn)生正好解決了這兩個(gè)問題。
Yarn是Hadoop2.0之后的使用的分布式資源管理系統(tǒng),它主要負(fù)責(zé)為MapReduce、Spark等高層應(yīng)用分配管理整個(gè)集群的資源。但是現(xiàn)在很多已存在的工作在Yarn的框架都是在某個(gè)特定的環(huán)境下運(yùn)行的,一旦有新的應(yīng)用加入就必須重新配置環(huán)境,增加了許多額外的工作量,所以如何能夠在任意的復(fù)雜環(huán)境下直接支持用戶的個(gè)性化應(yīng)用成為了一個(gè)難題。
Docker的出現(xiàn)為解決這個(gè)問題指明了方向。Docker是一種很流行的容器虛擬化技術(shù),它提供了一種在容器中運(yùn)行任意應(yīng)用的方法。Docker是一個(gè)用來開發(fā)、移植、運(yùn)行應(yīng)用的開源平臺(tái),基于Docker技術(shù)可以把應(yīng)用作為一個(gè)輕量級的容器虛擬運(yùn)行在任意地方。
但是兩者之間資源管理存在著許多矛盾,這就導(dǎo)致資源利用率無法得到有效的提高。比如一些有Docker容器運(yùn)行的程序脫離了Yarn的管理,破壞了Yarn的統(tǒng)一管理和統(tǒng)一時(shí)序原則,從而造成資源泄漏問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是針對背景技術(shù)中所涉及到的缺陷,提供一種基于Agent的多環(huán)境應(yīng)用并行的云平臺(tái)及其工作方法。
本發(fā)明為解決上述技術(shù)問題采用以下技術(shù)方案:
一種基于Agent的多環(huán)境應(yīng)用并行的云平臺(tái),包含DYbox和Docker;
所述DYbox包含DYbox Client、ResourceManager、DY Master、DYbox Driver、NodeManager、Container、DYbox Proxy、HDFS和State Server;所述Docker包含Docker Registry、Docker Engine和Jenkins;
所述DYbox Client用于接收用戶的任務(wù)、將用戶任務(wù)轉(zhuǎn)化成DAG任務(wù)并將其細(xì)分為各個(gè)子DAG任務(wù),以及向ResourceManager提交和停止子DAG任務(wù);
所述ResourceManager用于接收來自各個(gè)NodeManager的資源匯報(bào)信息,并根據(jù)這些信息將資源分配給各個(gè)子DAG任務(wù)程序;
所述DYbox Master模塊上用于向ResourceManager申請資源,并將資源分配給Container;
所述DYbox Driver用于控制DAG任務(wù)時(shí)序和執(zhí)行用戶代碼;
所述NodeManager用于管理集群中單個(gè)計(jì)算節(jié)點(diǎn),包括計(jì)算節(jié)點(diǎn)與ResourceManger保持通信、監(jiān)督計(jì)算節(jié)點(diǎn)Container的生命周期和資源使用;
所述Container用于采用DYbox Master向ResourceManager申請的集群資源安裝從Docker Engine獲取的Docker鏡像,所述Docker鏡像由DYbox Master與NodeManager通信來進(jìn)行啟動(dòng);
所述DYbox Proxy用于協(xié)調(diào)DYbox和Docker進(jìn)行工作,其所屬Agent單元用于將DYbox的命令傳輸給Docker引擎;
所述HDFS用于接收、存儲(chǔ)和傳送集群數(shù)據(jù);
所述State Server用于維護(hù)Docker引擎的健康狀態(tài)信息,記錄可運(yùn)行任務(wù)的機(jī)器列表;
所述Docker Registry用于存儲(chǔ)Docker鏡像,實(shí)現(xiàn)Docker鏡像內(nèi)部的版本控制;
所述Docker Engine作為Docker容器執(zhí)行引擎,從Docker Registry獲得Docker鏡像并啟動(dòng)Docker容器;
所述Jenkins用于在應(yīng)用代碼更新之后測試、打包、產(chǎn)生Docker鏡像,并將其上傳給Docker Registry,完成應(yīng)用的自動(dòng)發(fā)行。
本發(fā)明還公開了一種該基于Agent的多環(huán)境應(yīng)用并行的云平臺(tái)的工作方法,包含以下步驟:
步驟1),用戶將任務(wù)提交給DYbox Client,DYbox Client將用戶所提交的任務(wù)轉(zhuǎn)化為DAG任務(wù),并切分成各個(gè)子DAG任務(wù);
步驟2),客戶端將子DAG任務(wù)提交給Resource Manager,Resource Manager根據(jù)任務(wù)給DYbox Master分配資源,然后由DYbox Master啟動(dòng)相應(yīng)的DYbox Driver,DYbox Driver負(fù)責(zé)相應(yīng)應(yīng)用的時(shí)序控制;
步驟3),Resource Manager根據(jù)DYbox Master請求啟動(dòng)各個(gè)Node Manager,Node Manager根據(jù)Resource Manager命令為各自的Container進(jìn)行分配資源;
步驟4),Jenkins將根據(jù)系統(tǒng)所需環(huán)境參數(shù)配置相應(yīng)的鏡像,然后傳送到Docker Registry;
步驟5),Docker Registry保存從Jenkins處接收的鏡像,從而實(shí)現(xiàn)對版本控制,再將鏡像傳送到Docker Engine;
步驟6),Docker Engine 從DYbox Proxy獲取Container的資源將鏡像安裝到虛擬機(jī)中;
步驟7),DYbox Proxy將Yarn的命令傳給Docker并將Docker的資源使用情況收集匯報(bào)到DYbox Master;
步驟8),DYbox Master將Docker使用情況在反饋給Resource Manager;
步驟9),State Server接收Docker引擎的健康狀態(tài)信息,記錄可運(yùn)行任務(wù)的機(jī)器列表,為新的任務(wù)安排虛擬機(jī)。
本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果:
1. Docker可以根據(jù)任務(wù)要求自己配置鏡像自動(dòng)安裝虛擬機(jī),無需如Yarn一樣手動(dòng)配置不同環(huán)境下應(yīng)用的環(huán)境變量,節(jié)省了許多冗余操作,方便了分布式應(yīng)用的創(chuàng)建,簡化了虛擬機(jī)的部署;
2. Docker和Yarn通過DYbox Proxy的Agent實(shí)現(xiàn)資源管理協(xié)同,將兩者資源管理器合并,優(yōu)化了資源管理,避免了資源泄露,提高了資源使用率;
3. 用戶可以通過自己調(diào)節(jié)代碼進(jìn)行相應(yīng)應(yīng)用的時(shí)序控制,并可以通過shell命令實(shí)現(xiàn)單一Docker容器操作,節(jié)省資源。
本發(fā)明通過將Docker和Yarn的Container結(jié)合,使得系統(tǒng)可以在任意環(huán)境下直接使用服務(wù)應(yīng)用,提高了集群利用率,無需和Yarn一樣不同平臺(tái)需要配置不同的環(huán)境變量,方便了分布式應(yīng)用的創(chuàng)建,簡化了VM的部署,并且通過DYbox Proxy代理層將Yarn和Docker的資源管理協(xié)同起來,優(yōu)化了資源配置,省去了額外的維護(hù)工作。
附圖說明
圖1是本發(fā)明應(yīng)用平臺(tái)具體實(shí)施的模塊示意圖;
圖2是Yarn-cluster模式運(yùn)行的示意圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說明:
如圖1所示,本發(fā)明公開了一種基于Yarn架構(gòu)的多環(huán)境應(yīng)用平臺(tái),它以Docker和Yarn為基礎(chǔ),構(gòu)建一種DAG計(jì)算框架,包括了兩大部分:DYbox和Docker 。DYbox包含DYbox Client、ResourceManager、DY Master、DYbox Driver、NodeManager、Container、DYbox Proxy、HDFS和State Server;Docker包含Docker Registry、Docker Engine和Jenkins。
所述DYbox包含DYbox Client、ResourceManager、DY Master、DYbox Driver、NodeManager、Container、DYbox Proxy、HDFS和State Server;所述Docker包含Docker Registry、Docker Engine和Jenkins;
所述DYbox Client用于接收用戶的任務(wù),并將用戶任務(wù)轉(zhuǎn)化成DAG任務(wù)并將它細(xì)分為各個(gè)子DAG任務(wù),向ResourceManager提交和停止子DAG任務(wù);
所述ResourceManager負(fù)責(zé)分配資源負(fù)責(zé)集群中所有資源的統(tǒng)一管理和分配,它接收來自各個(gè)NodeManager的資源匯報(bào)信息,并根據(jù)這些信息將資源分配給各個(gè)子DAG任務(wù)程序;
所述DYbox Master模塊上負(fù)責(zé)向ResourceManager申請資源,然后把資源分配給Container;
所述DYbox Driver用于控制DAG任務(wù)時(shí)序和執(zhí)行用戶代碼;
所述NodeManager是DYbox中每個(gè)節(jié)點(diǎn)上的代理,它管理集群中單個(gè)計(jì)算節(jié)點(diǎn),包括與ResourceManger保持通信,監(jiān)督Container的生命周期管理,監(jiān)控每個(gè)Container的資源使用(內(nèi)存、CPU等)情況。
所述Container包含DYbox Master向ResourceManager申請的集群資源,安裝從Docker Engine獲取的Docker鏡像并由DYbox Master與NodeManager通信以啟動(dòng)之。
所述DYbox Proxy是DYbox和Docker引擎之間的橋梁,所屬Agent單元可以將DYbox資源管理和Docker協(xié)同,負(fù)責(zé)把DYbox的各種命令傳輸給Docker引擎;
所述HDFS是集群數(shù)據(jù)存儲(chǔ)單元,負(fù)責(zé)數(shù)據(jù)的接收、存儲(chǔ)和傳送;
所述State Server負(fù)責(zé)維護(hù)Docker引擎的健康狀態(tài)信息,記錄可運(yùn)行任務(wù)的機(jī)器列表。
所述Docker Registry負(fù)責(zé)Docker鏡像存儲(chǔ),實(shí)現(xiàn)Docker鏡像內(nèi)部的版本控制。
所述Docker Engine作為Docker容器執(zhí)行引擎,從Docker Registry獲得特定的Docker鏡像并且啟動(dòng)一個(gè)Docker容器。
所述Jenkins和GitLab進(jìn)行協(xié)作,當(dāng)應(yīng)用代碼更新之后,Jenkins將會(huì)自動(dòng)測試、打包、產(chǎn)生Docker鏡像然后上傳給Docker Registry,完成應(yīng)用的自動(dòng)發(fā)行過程。
在本發(fā)明應(yīng)用平臺(tái)的架構(gòu)中,DYbox負(fù)責(zé)集群的資源管理,Docker是運(yùn)行在操作系統(tǒng)之上的任務(wù)執(zhí)行引擎,與Docker Registry一起協(xié)同工作。DYbox把用戶的編程代碼翻譯成Docker的基于容器的DAG任務(wù),這些任務(wù)根據(jù)所需申請資源并且按照DAG的方式執(zhí)行。
DYbox對Docker運(yùn)行過程中的容器DAG任務(wù)實(shí)現(xiàn)了良好的支持。DYbox還提供了多種方法以實(shí)現(xiàn)在生產(chǎn)環(huán)境和測試環(huán)境下的應(yīng)用提交,而且它還可以和Jenkins,GitLab聯(lián)合使用,利用Docker注冊器來建立起一套開發(fā)、測試、自動(dòng)發(fā)行的機(jī)制。
本發(fā)明還公開了一種該基于Agent的多環(huán)境應(yīng)用并行的云平臺(tái)的工作方法,具體實(shí)現(xiàn)過程為:
步驟1),用戶將任務(wù)提交給DYbox Client,DYbox Client將用戶所提交的任務(wù)轉(zhuǎn)化為DAG任務(wù),并切分成各個(gè)子DAG任務(wù);
步驟2),客戶端將子DAG任務(wù)提交給Resource Manager,Resource Manager根據(jù)任務(wù)給DYbox Master分配資源,然后由DYbox Master啟動(dòng)相應(yīng)的DYbox Driver,DYbox Driver負(fù)責(zé)相應(yīng)應(yīng)用的時(shí)序控制;
步驟3),Resource Manager根據(jù)DYbox Master請求啟動(dòng)各個(gè)Node Manager,Node Manager根據(jù)Resource Manager命令為各自的Container進(jìn)行分配資源;
步驟4),Jenkins將根據(jù)系統(tǒng)所需環(huán)境參數(shù)配置相應(yīng)的鏡像,然后傳送到Docker Registry;
步驟5),Docker Registry保存從Jenkins處接收的鏡像,從而實(shí)現(xiàn)對版本控制,再將鏡像傳送到Docker Engine;
步驟6),Docker Engine 從DYbox Proxy獲取Container的資源將鏡像安裝到虛擬機(jī)中;
步驟7),DYbox Proxy將Yarn的命令傳給Docker并將Docker的資源使用情況收集匯報(bào)到DYbox Master;
步驟8),DYbox Master將Docker使用情況在反饋給Resource Manager,實(shí)現(xiàn)更好的資源二次分配調(diào)度;
步驟9),State Server接收Docker引擎的健康狀態(tài)信息,記錄可運(yùn)行任務(wù)的機(jī)器列表,為新的任務(wù)安排虛擬機(jī)。
本發(fā)明采用Yarn-cluster模式運(yùn)行,在該模式下控制組件和資源管理組件運(yùn)行在Yarn集群上面。如圖2所示,DYbox Master和DYbox Driver都運(yùn)行在集群上,DYbox Driver負(fù)責(zé)控制邏輯,DYbox Master則負(fù)責(zé)資源管理。
提交一個(gè)DYbox應(yīng)用的過程和這個(gè)DYbox應(yīng)用的生命周期如下:
用戶利用DYbox Client將用戶任務(wù)轉(zhuǎn)化成DAG任務(wù),然后提交給Yarn集群;
當(dāng)收到一DYbox應(yīng)用之后,Resource Manager將會(huì)為DYbox Master分配資源,然后啟動(dòng)它。接著DYbox Master啟動(dòng)DYbox Driver,DYbox Driver調(diào)用DYbox Master的接口來啟動(dòng)計(jì)算節(jié)點(diǎn)上的Docker任務(wù);
DYbox Master向Resource Manager請求資源,Resource Manager根據(jù)Yarn集群的狀態(tài)分配資源。DYbox Master啟動(dòng)Yarn容器上的DYbox Proxy,和Docker引擎通信以啟動(dòng)Docker容器,并且通過Agent將Docker資源管理與Yarn資源管理合并,將Docker資源使用情況通過DYbox Maste反饋給Resource Manager;
用戶的Docker任務(wù)是運(yùn)行在Docker容器內(nèi)的,日志輸出在一個(gè)本地文件上。用戶通過Yarn的WEB端可以看到實(shí)時(shí)的應(yīng)用日志;
當(dāng)所有的Docker任務(wù)都完成之后,日志將會(huì)匯總給HDFS,用戶可以通過History Server來查看一個(gè)應(yīng)用的日志信息。
在Yarn中,用戶的任務(wù)只能運(yùn)行在Yarn容器中,Docker容器也只能由Docker引擎管理。這樣造成的結(jié)果就是一些有Docker容器運(yùn)行的程序脫離了Yarn的管理,破壞了Yarn的統(tǒng)一管理和統(tǒng)一時(shí)序原則,從而造成資源泄漏問題。為了使Yarn能夠管理控制Docker容器,我們就需要再Yarn和Docker引擎中間建立一個(gè)代理層。這樣是DYboxProxy產(chǎn)生的緣由,通過DYboxProxy,Yarn可以管理Docker容器的生命周期避免資源泄漏。
關(guān)于應(yīng)用平臺(tái)的具體實(shí)施過程:
一個(gè)DYbox應(yīng)用中有4個(gè)作業(yè)--- Job1、Job2、Job3和Job4,Job1、Job3是CentOS環(huán)境下的作業(yè),Job1、Job3是Ubuntu環(huán)境下的作業(yè)。
在平臺(tái)中每個(gè)作業(yè)可以配置它自己所需的cpu、內(nèi)存、Docker鏡像和并行度等資源。我們設(shè)定Job3要等到Job1和Job2結(jié)束才能執(zhí)行,Job1、Job2、和Job3是分階段執(zhí)行的,用戶可以在階段之間可以插入自己的代碼,最后才開始執(zhí)行Job4.
本發(fā)明還支持單一Docker容器操作,通過shell命令模式提交任務(wù)即可。
本技術(shù)領(lǐng)域技術(shù)人員可以理解的是,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語)具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣定義,不會(huì)用理想化或過于正式的含義來解釋。
以上所述的具體實(shí)施方式,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。