何震葦,嚴(yán)麗云,李慧云,張 凌,陸 鋼
(中國電信股份有限公司廣州研究院 廣州510630)
高速發(fā)展的互聯(lián)網(wǎng)業(yè)務(wù)平臺面臨用戶需求頻繁變化和用戶規(guī)模快速增長的問題,互聯(lián)網(wǎng)業(yè)務(wù)平臺需要具備快速部署、可靠運(yùn)行和彈性擴(kuò)展的能力。隨著互聯(lián)網(wǎng)業(yè)務(wù)平臺的發(fā)展趨于技術(shù)多樣化、架構(gòu)復(fù)雜化和集群規(guī)模化,其部署管理也變得越來越困難。云計(jì)算IaaS技術(shù)實(shí)現(xiàn)了業(yè)務(wù)平臺硬件資源的池化共享,簡化了業(yè)務(wù)平臺在硬件層面上的部署過程。云計(jì)算PaaS技術(shù)則實(shí)現(xiàn)了中間件數(shù)據(jù)庫等平臺軟件的池化共享,在一定程度上也簡化了業(yè)務(wù)平臺軟件層面的部署過程。然而傳統(tǒng)純IaaS和純PaaS的應(yīng)用部署方式都存在一定的局限性,純IaaS方式基于虛擬機(jī)鏡像模板,缺乏對基礎(chǔ)軟件和應(yīng)用軟件部署層面的支持,需要較多的軟件手工安裝配置操作,部署效率較低,而純PaaS方式則無法自主選擇集群的架構(gòu)和依賴的基礎(chǔ)軟件,部署的靈活性較差。
Docker和Cloudify等新興PaaS平臺的出現(xiàn),為解決上述問題提供了構(gòu)建簡單、靈活、高效、全堆棧、全流程的互聯(lián)網(wǎng)業(yè)務(wù)平臺部署方案的可能。
互聯(lián)網(wǎng)云業(yè)務(wù)平臺通常由若干個(gè)服務(wù)器集群構(gòu)成,每個(gè)服務(wù)器集群又由若干個(gè)服務(wù)器節(jié)點(diǎn)構(gòu)成,每個(gè)服務(wù)器節(jié)點(diǎn)又由硬件資源和包含若干層軟件的軟件棧構(gòu)成,在云環(huán)境中部署的業(yè)務(wù)平臺硬件依賴于底層云資源池的計(jì)算、存儲和網(wǎng)絡(luò)資源?;ヂ?lián)網(wǎng)云業(yè)務(wù)平臺的典型部署架構(gòu)如圖1所示。
互聯(lián)網(wǎng)云業(yè)務(wù)平臺的部署需要處理3種依賴關(guān)系:軟件依賴關(guān)系、拓?fù)湟蕾囮P(guān)系和資源依賴關(guān)系。
(1)軟件依賴關(guān)系
業(yè)務(wù)平臺節(jié)點(diǎn)的軟件通常由多個(gè)層次的軟件堆棧構(gòu)成,上層軟件的安裝依賴于下層軟件的安裝。整個(gè)軟件堆棧從下到上一般可分為4層:操作系統(tǒng)、平臺軟件、技術(shù)框架和應(yīng)用程序。操作系統(tǒng)通常是類Linux操作系統(tǒng),如Ubuntu、CentOS;平臺軟件通常是數(shù)據(jù)庫、Web服務(wù)器等擁有獨(dú)立的進(jìn)程空間和服務(wù)端口的服務(wù)器軟件,如Tomcat、MySQL等;技術(shù)框架是依附在平臺軟件上,提供特定語言相關(guān)的軟件功能的框架或類庫,如SSH(Struts+Spring+Hibernate)、Log4J等;應(yīng)用程序是指實(shí)現(xiàn)業(yè)務(wù)邏輯、提供業(yè)務(wù)相關(guān)功能的程序或軟件分組。
在業(yè)務(wù)平臺的部署環(huán)境中,同一個(gè)集群的節(jié)點(diǎn)、不同集群的節(jié)點(diǎn)甚至不同業(yè)務(wù)平臺的節(jié)點(diǎn)可能采用相同或類似(至少有兩層相同)的軟件棧,例如圖1中負(fù)載均衡集群和Web服務(wù)集群中的負(fù)載均衡器就采用完全相同的Nginx軟件棧。而另一方面,不同的互聯(lián)網(wǎng)業(yè)務(wù)平臺甚至同一個(gè)平臺的類似集群有可能使用不同的技術(shù)框架,例如圖1的Web服務(wù)集群A使用Tomcat+SSH框架實(shí)現(xiàn)Web頁面服務(wù),而Web服務(wù)集群B則使用NodeJS+DozerJS框架實(shí)現(xiàn)Web API服務(wù)。
(2)拓?fù)湟蕾囮P(guān)系
圖1 典型互聯(lián)網(wǎng)云業(yè)務(wù)平臺部署架構(gòu)
大型互聯(lián)網(wǎng)業(yè)務(wù)平臺往往涉及多個(gè)集群,每個(gè)集群又由若干個(gè)節(jié)點(diǎn)或子集群構(gòu)成,節(jié)點(diǎn)與節(jié)點(diǎn)之間通過服務(wù)端口通信,業(yè)務(wù)平臺的部署需要建立業(yè)務(wù)平臺的拓?fù)浣Y(jié)構(gòu),解決節(jié)點(diǎn)與節(jié)點(diǎn)、節(jié)點(diǎn)與集群以及集群與集群之間的關(guān)系。節(jié)點(diǎn)與節(jié)點(diǎn)的關(guān)系一般是通信關(guān)系,源節(jié)點(diǎn)通過服務(wù)端口與目標(biāo)節(jié)點(diǎn)建立通信連接,平臺部署時(shí)需要將目標(biāo)節(jié)點(diǎn)的服務(wù)端口(如IP、端口、URL等)配置到源節(jié)點(diǎn)上,并保證源節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)的3層鏈路可通達(dá)。節(jié)點(diǎn)與集群的關(guān)系通常是從屬關(guān)系,包括網(wǎng)絡(luò)從屬和節(jié)點(diǎn)從屬,網(wǎng)絡(luò)從屬是指集群的節(jié)點(diǎn)與集群屬于同一子網(wǎng),節(jié)點(diǎn)從屬是指集群的節(jié)點(diǎn)由集群的某個(gè)主節(jié)點(diǎn)管理或控制,集群的部署需要根據(jù)從屬關(guān)系對網(wǎng)絡(luò)和集群主節(jié)點(diǎn)進(jìn)行相應(yīng)的配置,同時(shí)通過從屬關(guān)系可對整個(gè)集群的節(jié)點(diǎn)進(jìn)行批量操作,如批量配置、批量重啟。集群與集群的關(guān)系可以是從屬關(guān)系或者通信關(guān)系,集群從屬關(guān)系的建立需要將子集群的子網(wǎng)加入父集群的子網(wǎng)中,將子集群的主節(jié)點(diǎn)服務(wù)端口加入父集群主節(jié)點(diǎn)配置中,集群的通信關(guān)系需要解決不同集群子網(wǎng)之間的路由轉(zhuǎn)發(fā)問題。
(3)資源依賴關(guān)系
互聯(lián)網(wǎng)云業(yè)務(wù)平臺通?;诠蚕淼脑瀑Y源池構(gòu)建,業(yè)務(wù)平臺的部署需要估算業(yè)務(wù)平臺的資源需求,根據(jù)資源需求從云資源池中申請恰當(dāng)規(guī)格和額度的虛擬機(jī)、虛擬存儲和虛擬網(wǎng)絡(luò)資源,將業(yè)務(wù)平臺的節(jié)點(diǎn)和集群與底層的云資源綁定。在大規(guī)模、混合云的部署場景中,業(yè)務(wù)平臺的各個(gè)集群可能會由不同的云資源池甚至不同的云資源平臺提供資源,業(yè)務(wù)平臺部署不僅要適配各種類型的云資源接口,還需要屏蔽不同云資源池的資源接口差異性。
互聯(lián)網(wǎng)業(yè)務(wù)平臺的自動(dòng)部署就是在平臺的部署過程中盡可能自動(dòng)地解決上述的軟件依賴關(guān)系、拓?fù)湟蕾囮P(guān)系和資源依賴關(guān)系,由部署平臺自動(dòng)完成業(yè)務(wù)平臺的各種資源、子集群、節(jié)點(diǎn)和軟件的分配、安裝和配置,并將開發(fā)團(tuán)隊(duì)提交的應(yīng)用包加載到相應(yīng)的應(yīng)用節(jié)點(diǎn)上,最終讓整個(gè)業(yè)務(wù)集群準(zhǔn)確無誤地運(yùn)行。
互聯(lián)網(wǎng)業(yè)務(wù)平臺的自動(dòng)化部署的關(guān)鍵需求如下。
(1)自動(dòng)處理業(yè)務(wù)節(jié)點(diǎn)的軟件依賴關(guān)系
能夠按照軟件堆棧的層次結(jié)構(gòu)自動(dòng)完成業(yè)務(wù)節(jié)點(diǎn)整個(gè)軟件棧的各層軟件的安裝、配置和啟動(dòng),可復(fù)用具有相同或相似層次軟件棧的安裝步驟。
(2)自動(dòng)處理業(yè)務(wù)平臺的拓?fù)湟蕾囮P(guān)系
能夠方便地建立業(yè)務(wù)平臺的拓?fù)淠P?,描述平臺的集群、子集群、節(jié)點(diǎn)之間的從屬關(guān)系、通信關(guān)系和依賴關(guān)系,根據(jù)從屬關(guān)系和依賴關(guān)系遞歸完成整個(gè)集群的部署,根據(jù)通信關(guān)系自動(dòng)完成節(jié)點(diǎn)和網(wǎng)絡(luò)的相關(guān)參數(shù)配置。可復(fù)用具有相同結(jié)構(gòu)的集群拓?fù)浜筒渴鹆鞒獭?/p>
(3)支持主流的云資源平臺
支 持OpenStack、CloudStack、vSphere等 業(yè) 界 主 流 的 云資源平臺,提供一致的計(jì)算、存儲和網(wǎng)絡(luò)資源訪問接口。
(4)支持任意語言/框架/架構(gòu)
支持任意語言、任意技術(shù)框架和任意拓?fù)浼軜?gòu)的互聯(lián)網(wǎng)云業(yè)務(wù)平臺自動(dòng)部署。
(5)提升業(yè)務(wù)平臺的部署密度和部署效率
在相同規(guī)格的服務(wù)器上能夠部署更多的節(jié)點(diǎn),壓縮節(jié)點(diǎn)的軟件棧以提升單個(gè)節(jié)點(diǎn)的部署效率,增加平臺節(jié)點(diǎn)部署的并行度,以提升整個(gè)集群的部署效率。
在諸多開源PaaS平臺中,Docker和Cloudify是兩款熱門的與環(huán)境、語言無關(guān)的PaaS平臺,可用于部署任意語言開發(fā)的互聯(lián)網(wǎng)應(yīng)用,前者側(cè)重于軟件層面的鏡像化部署,后者側(cè)重于全堆棧的標(biāo)準(zhǔn)化部署。
Docker是一個(gè)開源的容器引擎,遵從Apache 2.0開源協(xié)議。Docker像集裝箱一樣將應(yīng)用及其相關(guān)依賴進(jìn)行整體打包,部署到任何支持Docker的環(huán)境中運(yùn)行,讓應(yīng)用的開發(fā)、部署和運(yùn)維都變得簡單。Docker自2013年開源后不久就得到了Google、微軟、IBM、RedHat等業(yè)界巨頭公司的關(guān)注和支持,在2014年已成為關(guān)注程度排名第二的開源軟件,僅次于OpenStack。Docker將各種環(huán)境依賴和應(yīng)用程序一起打包成標(biāo)準(zhǔn)的鏡像文件,利用輕量級的容器虛擬化技術(shù)進(jìn)行資源隔離和應(yīng)用運(yùn)行,多個(gè)容器共享同一個(gè)操作系統(tǒng),從而可以快速進(jìn)行應(yīng)用的部署、啟動(dòng)、銷毀和移植,并降低每個(gè)應(yīng)用實(shí)例的資源開銷。
Docker平臺可以解決互聯(lián)網(wǎng)業(yè)務(wù)平臺部署的軟件依賴關(guān)系和部署效率問題。
(1)簡化業(yè)務(wù)節(jié)點(diǎn)的軟件依賴關(guān)系
Docker可以將業(yè)務(wù)節(jié)點(diǎn)軟件棧上的一層或多層軟件打包成鏡像,記錄鏡像之間的層次依賴關(guān)系,多個(gè)鏡像可以像積木一樣層層疊加,部署軟件時(shí)只需要指定頂層鏡像,Docker就能根據(jù)鏡像的依賴關(guān)系從下往上依次安裝鏡像,從而完成整個(gè)節(jié)點(diǎn)軟件棧的安裝部署。
(2)標(biāo)準(zhǔn)化節(jié)點(diǎn)軟件的管理和部署接口
由于業(yè)務(wù)模塊及其依賴關(guān)系被打包成標(biāo)準(zhǔn)化的鏡像,可以統(tǒng)一各類軟件的打包、存儲、安裝和運(yùn)行接口,降低節(jié)點(diǎn)軟件自動(dòng)化部署難度。
(3)提升業(yè)務(wù)節(jié)點(diǎn)的部署速度
由于不需要部署Guest操作系統(tǒng),Docker鏡像大小通常為MB級,無論是鏡像的打包、傳輸,還是安裝的速度都比傳統(tǒng)的虛擬機(jī)鏡像方式要快得多。同時(shí),Docker將業(yè)務(wù)節(jié)點(diǎn)的軟件棧標(biāo)準(zhǔn)化,將其進(jìn)行整體打包后存儲在Docker鏡像倉庫中,部署時(shí)只需要從Docker鏡像倉庫中獲取需要的鏡像進(jìn)行移植即可。因此,Docker將傳統(tǒng)的應(yīng)用部署流程“安裝—配置—運(yùn)行”轉(zhuǎn)變?yōu)椤皬?fù)制—運(yùn)行”,從而大大提升了業(yè)務(wù)節(jié)點(diǎn)的部署速度。
Cloudify是一個(gè)支持TOSCA(topology and orchestration specification for cloud application)標(biāo)準(zhǔn)的云編排和部署平臺,同樣遵循Apache 2.0開源協(xié)議。TOSCA提供標(biāo)準(zhǔn)化的云應(yīng)用編排模型,由標(biāo)準(zhǔn)化組織OASIS制定,可用于構(gòu)建云環(huán)境下的各類復(fù)雜應(yīng)用集群的全生命周期管理模型,通過結(jié)構(gòu)化的描述語言定義應(yīng)用節(jié)點(diǎn)能力、應(yīng)用軟件堆棧和應(yīng)用節(jié)點(diǎn)關(guān)系,通過基于工作流的管理計(jì)劃支撐云應(yīng)用的部署、調(diào)度、升級自動(dòng)化。
Cloudify是第一個(gè)支持TOSCA 1.1規(guī)范的開源部署平臺,提供基于TOSCA模型的應(yīng)用集群部署全流程支持,包括應(yīng)用集群編排、集群部署、集群監(jiān)控、彈性調(diào)度和應(yīng)用升級等環(huán)節(jié)。同時(shí),Cloudify也是一個(gè)全面支持硬件、網(wǎng)絡(luò)和軟件部署的全堆棧部署平臺,不僅集成了OpenStack、CloudStack等IaaS層的云資源管理平臺,實(shí)現(xiàn)硬件資源、NFV網(wǎng)絡(luò)的分配與配置,還集成了Puppet、Chef等軟件配置平臺,可實(shí)現(xiàn)業(yè)務(wù)平臺軟件的安裝和配置。
Cloudify平臺可以解決互聯(lián)網(wǎng)業(yè)務(wù)平臺集群拓?fù)湟蕾囮P(guān)系和云資源依賴關(guān)系問題。
(1)復(fù)雜業(yè)務(wù)集群的編排與模板化
采用TOSCA的YAML模型對業(yè)務(wù)集群的架構(gòu)、節(jié)點(diǎn)、關(guān)系以及所依賴的硬件、軟件資源和配置腳本進(jìn)行形式化描述,形成應(yīng)用集群模板,將復(fù)雜的業(yè)務(wù)集群變成結(jié)構(gòu)化、可視化、可復(fù)用的模型。
(2)無縫對接主流云資源平臺
Cloudify從3.0版本采用與OpenStack一樣的Python語言重寫,能夠與OpenStack進(jìn)行代碼級的無縫集成,可實(shí)現(xiàn)計(jì)算、存儲、網(wǎng)絡(luò)資源的分配、設(shè)置和調(diào)度,同時(shí)Cloudify也 提 供 了 官 方 的 插 件 與CloudStack、vSphere、AWS、MS Azure等主流IaaS平臺對接。
(3)平臺部署全流程自動(dòng)化
由Cloudify的工作流引擎驅(qū)動(dòng)TOSCA模型中的部署流程,以串行或并行的方式依次調(diào)用各個(gè)節(jié)點(diǎn)的管理操作API,執(zhí)行節(jié)點(diǎn)的安裝、配置和啟動(dòng)的任務(wù),從而完成整個(gè)集群的自動(dòng)化部署。
互聯(lián)網(wǎng)應(yīng)用集群自動(dòng)化部署平臺通過Docker鏡像技術(shù)打包應(yīng)用節(jié)點(diǎn)的軟件依賴關(guān)系,通過TOSCA模型定義應(yīng)用集群的拓?fù)湟蕾囮P(guān)系,通過Cloudify適配底層云資源,并驅(qū)動(dòng)整個(gè)部署流程的執(zhí)行。集群自動(dòng)部署平臺需遵循以下設(shè)計(jì)原則。
·高內(nèi)聚、松耦合:實(shí)現(xiàn)相同職責(zé)的業(yè)務(wù)邏輯聚合在同一個(gè)模塊中,模塊與模塊之間通過接口或消息機(jī)制解耦。
·高可用、高容錯(cuò):部署平臺的核心部件采用集群架構(gòu)部署,以避免單點(diǎn)故障,同時(shí)部署的中間狀態(tài)應(yīng)持久化保存,即使系統(tǒng)宕機(jī)也能快速恢復(fù)部署流程。
·輕量級、易擴(kuò)展:部署平臺由輕量級的內(nèi)核和可擴(kuò)展的插件構(gòu)成,平臺內(nèi)核僅提供核心的部署模型管理和部署流程驅(qū)動(dòng)功能,保持平臺架構(gòu)與核心部件相對穩(wěn)定,云資源適配、資源調(diào)度、資源監(jiān)控等功能通過插件機(jī)制擴(kuò)展。
·開源化、低成本:借鑒互聯(lián)網(wǎng)業(yè)界的最佳技術(shù)實(shí)踐,盡量采用成熟度高、活躍度高、應(yīng)用廣泛開源PaaS平臺框架構(gòu)建部署平臺,避免重復(fù)“造車輪”,以降低平臺的構(gòu)建成本,提高平臺構(gòu)建效率。
互聯(lián)網(wǎng)云應(yīng)用集群自動(dòng)部署平臺基于開源云計(jì)算平臺Docker、Cloudify和OpenStack構(gòu)建,整個(gè)互聯(lián)網(wǎng)應(yīng)用集群部署平臺由門戶、PaaS管理器、IaaS管理器、鏡像倉庫和應(yīng)用集群5部分構(gòu)成,體系架構(gòu)如圖2所示。其中鏡像倉庫存儲了應(yīng)用集群所需的操作系統(tǒng)、基礎(chǔ)軟件、技術(shù)框架和應(yīng)用軟件等鏡像,IaaS管理器以API的形式提供應(yīng)用集群計(jì)算、存儲和網(wǎng)絡(luò)資源的申請、配置、調(diào)度和銷毀服務(wù),PaaS管理器提供TOSCA部署模型解析、部署流程執(zhí)行、資源監(jiān)控和彈性調(diào)度等自動(dòng)部署的核心功能,應(yīng)用集群節(jié)點(diǎn)通過預(yù)裝的虛擬機(jī)監(jiān)視器(VMM)和Docker引擎實(shí)現(xiàn)應(yīng)用軟件棧的加載和運(yùn)行。PaaS管理器通過調(diào)度流程引擎和TOSCA容器,執(zhí)行應(yīng)用集群部署流程,通過管理代理調(diào)用OpenStack和Docker引擎的管理接口,完成整個(gè)應(yīng)用集群的部署。
圖2 互聯(lián)網(wǎng)業(yè)務(wù)自動(dòng)化部署平臺總體架構(gòu)
鏡像倉庫負(fù)責(zé)存儲OVF系統(tǒng)鏡像、基礎(chǔ)軟件鏡像、技術(shù)框架鏡像庫和應(yīng)用工件鏡像,整個(gè)鏡像倉庫由OVF鏡像倉庫和Docker鏡像倉庫構(gòu)成。OVF系統(tǒng)鏡像倉庫存放應(yīng)用節(jié)點(diǎn)的系統(tǒng)級鏡像,其內(nèi)容包括操作系統(tǒng)、Docker引擎和Cloudify節(jié)點(diǎn)代理,該鏡像倉庫由OpenStack的鏡像管理模塊Glance實(shí)現(xiàn);Docker鏡像倉庫存放基礎(chǔ)軟件、技術(shù)框架和應(yīng)用工件等輕量級的Docker層次化鏡像,基于Docker registry模塊實(shí)現(xiàn)。
PaaS管理器是整個(gè)部署平臺的核心模塊,基于最新的Cloudify 3.1穩(wěn)定版構(gòu)建,實(shí)現(xiàn)了基于TOSCA模型的應(yīng)用集群部署、監(jiān)控和調(diào)度服務(wù)。整個(gè)PaaS管理器由REST服務(wù)器、TOSCA容器、工作流引擎、策略引擎、消息總線、管理代理和管理插件構(gòu)成。REST服務(wù)器將PaaS管理器的所有服務(wù)封裝成REST API,向門戶提供輕量級、標(biāo)準(zhǔn)化的服務(wù)調(diào)用接口。TOSCA容器負(fù)責(zé)TOSCA模型的解析、存儲和加載,為流程引擎和上層應(yīng)用提供應(yīng)用集群的靜態(tài)元數(shù)據(jù)和運(yùn)行時(shí)狀態(tài)數(shù)據(jù)。工作流引擎負(fù)責(zé)執(zhí)行TOSCA模型定義的各種管理流程,包括集群部署、彈性調(diào)度和故障恢復(fù)等。策略引擎根據(jù)平臺采集的監(jiān)控指標(biāo)進(jìn)行操作決策,并通過工作流引擎或管理代理執(zhí)行具體的管理操作。管理代理封裝了各類軟硬件資源的管理、配置、激活和調(diào)度接口,平臺的管理能力可通過管理插件擴(kuò)展,通過OpenStack插件無縫對接OpenStack平臺,實(shí)現(xiàn)計(jì)算、存儲、網(wǎng)絡(luò)資源的分配和調(diào)度,通過Docker插件對接Docker引擎,實(shí)現(xiàn)對Docker容器和鏡像的管理。需要指出的是,Cloudify 3.1尚未提供官方的Docker管理插件,需要基于Cloudify的插件機(jī)制開發(fā)Docker插件才能對接Docker平臺,實(shí)現(xiàn)Docker鏡像安裝和應(yīng)用容器運(yùn)行。
Docker引擎是驅(qū)動(dòng)Docker容器加載運(yùn)行應(yīng)用軟件棧的核心模塊,它駐留在應(yīng)用節(jié)點(diǎn)上,負(fù)責(zé)Docker鏡像的上傳下載和Docker容器的啟動(dòng)銷毀。Docker引擎是應(yīng)用節(jié)點(diǎn)上的一個(gè)守護(hù)服務(wù)進(jìn)程,該守護(hù)進(jìn)程在后臺啟動(dòng)了一個(gè)服務(wù)進(jìn)程,接收Docker客戶端(即Docker管理插件)發(fā)送的請求,根據(jù)客戶端的請求類型,通過路由與分發(fā)調(diào)度機(jī)制執(zhí)行相應(yīng)的任務(wù),進(jìn)行鏡像和容器的處理。
通過一個(gè)簡單的示例描述部署平臺在云應(yīng)用集群部署過程中核心部件的協(xié)作關(guān)系。假設(shè)要部署的應(yīng)用集群由一個(gè)負(fù)載均衡器、兩個(gè)Web服務(wù)集群和一個(gè)數(shù)據(jù)庫服務(wù)器構(gòu)成,其中每個(gè)Web服務(wù)器集群由2~4個(gè)Web服務(wù)器構(gòu)成。如圖3所示,應(yīng)用集群的拓?fù)淠P筒捎肨OSCA規(guī)范描述,每個(gè)方框表示一個(gè)邏輯節(jié)點(diǎn)(可以是集群或服務(wù)節(jié)點(diǎn)),每個(gè)箭頭表示節(jié)點(diǎn)的依賴關(guān)系或通信關(guān)系,每個(gè)節(jié)點(diǎn)由名字、屬性和操作構(gòu)成,部分節(jié)點(diǎn)列出了節(jié)點(diǎn)的鏡像、節(jié)點(diǎn)的最小實(shí)例數(shù)、最大實(shí)例數(shù),例如“(服務(wù)A,2:4)”表示該節(jié)點(diǎn)依賴的鏡像名稱為服務(wù)A,最小實(shí)例數(shù)為2,最大實(shí)例數(shù)為4。應(yīng)用集群拓?fù)淠P陀蒚OSCA容器加載,當(dāng)拓?fù)淠P图虞d到內(nèi)存之后,模型節(jié)點(diǎn)的屬性和節(jié)點(diǎn)的操作就可以通過REST API進(jìn)行訪問。應(yīng)用集群的部署流程由基于BPEL(business process execution language)的流程模型描述,流程模型由任務(wù)節(jié)點(diǎn)、控制節(jié)點(diǎn)和有向連接構(gòu)成,任務(wù)節(jié)點(diǎn)通過部署模型的API、其他任務(wù)節(jié)點(diǎn)或者子流程完成若干部署步驟,控制節(jié)點(diǎn)實(shí)現(xiàn)部署過程的分支和循環(huán)控制,有向連接定義了任務(wù)節(jié)點(diǎn)的執(zhí)行次序。應(yīng)用集群部署流程由流程引擎負(fù)責(zé)加載和執(zhí)行。
流程引擎執(zhí)行應(yīng)用集群部署流程,開始進(jìn)行應(yīng)用集群部署,流程引擎順序或并行地執(zhí)行部署任務(wù)節(jié)點(diǎn),部署任務(wù)節(jié)點(diǎn)可以調(diào)用應(yīng)用集群模型相應(yīng)節(jié)點(diǎn)的部署操作API,通知模型節(jié)點(diǎn)執(zhí)行部署操作。模型節(jié)點(diǎn)首先調(diào)用OpenStack的資源管理API創(chuàng)建虛擬機(jī),為每個(gè)節(jié)點(diǎn)安裝操作系統(tǒng)和Docker引擎,然后調(diào)用節(jié)點(diǎn)上Docker引擎的API完成集群節(jié)點(diǎn)軟件鏡像安裝和加載。由于Docker鏡像采用分層結(jié)構(gòu)組織,上層的鏡像可以共享下層的鏡像,多個(gè)容器可以共用同一個(gè)只讀的鏡像,Docker引擎能夠自動(dòng)識別Docker鏡像的依賴關(guān)系,確保每個(gè)服務(wù)器都有所需的軟件鏡像,且每個(gè)軟件鏡像層只下載和安裝一次。
圖3 部署平臺核心部件協(xié)作關(guān)系
從上述分析可以看出,本部署平臺的部署過程具有如下特點(diǎn)。
·支持任意技術(shù)框架:Docker鏡像技術(shù)可以將任意的軟件、類庫、框架及其依賴關(guān)系打包成標(biāo)準(zhǔn)化的Docker鏡像文件,統(tǒng)一了各種軟件的構(gòu)建、存儲、分發(fā)、安裝和運(yùn)行過程。
·支持任意拓?fù)浼軜?gòu):可通過TOSCA模型靈活地編排和復(fù)用業(yè)務(wù)集群的拓?fù)浣Y(jié)構(gòu)。
·支持全堆棧、全流程自動(dòng)部署:通過對接云資源平臺和Docker平臺,實(shí)現(xiàn)從硬件到軟件的全堆棧安裝配置,通過流程引擎和TOSCA容器驅(qū)動(dòng)整個(gè)集群部署流程的自動(dòng)化執(zhí)行。
·部署速度快、效率高:輕量級的Docker鏡像和容器技術(shù)降低了軟件安裝文件的存儲和傳輸開銷,秒級的Docker容器啟動(dòng)時(shí)間讓業(yè)務(wù)平臺快速就緒成為可能。
利用互聯(lián)網(wǎng)應(yīng)用部署平臺進(jìn)行集群部署可分為3個(gè)階段:集群模板設(shè)計(jì)階段,由有經(jīng)驗(yàn)的架構(gòu)師完成集群模板的設(shè)計(jì);集群模板實(shí)例化階段,由團(tuán)隊(duì)的部署工程師將集群模板實(shí)例化為實(shí)際部署的模型;集群模板部署執(zhí)行階段,由部署平臺基于部署模型自動(dòng)完成集群部署。各階段的流程介紹如下。
有經(jīng)驗(yàn)的架構(gòu)師、系統(tǒng)工程師或管理員通過TOSCA模型設(shè)計(jì)器設(shè)計(jì)可復(fù)用的TOSCA應(yīng)用集群模板,并將集群模板發(fā)布在自服務(wù)門戶上。
(1)應(yīng)用集群部署模型配置
開發(fā)者通過自服務(wù)門戶選擇一個(gè)合適的TOSCA應(yīng)用集群模板,調(diào)整模板中的節(jié)點(diǎn)和關(guān)系,使之與要部署的應(yīng)用集群架構(gòu)一致,調(diào)整節(jié)點(diǎn)綁定的系統(tǒng)鏡像和頂層Docker鏡像,使之與要部署的集群節(jié)點(diǎn)一致。
(2)集群部署包打包上傳
通過自服務(wù)門戶的集群打包功能將TOSCA模板文件和新增的本地鏡像文件打包成CSAR(cloud service archive)部署包,通過管理門戶上傳CSAR部署包。
(3)新增鏡像保存與部署服務(wù)調(diào)用
門戶解析CSAR部署包,將新增鏡像保存在Docker鏡像倉庫中,并將TOSCA模型文件發(fā)送給PaaS管理器,調(diào)用PaaS管理器的集群部署服務(wù)。
(4)TOSCA部署模型解釋
將TOSCA的集群拓?fù)淠P徒忉尦赏負(fù)鋵ο竽P停4嬖赥OSCA容器中,將部署管理流程定義加載到工作流引擎中。
PaaS平臺工作流引擎執(zhí)行集群部署流程,調(diào)用管理代理的接口依次執(zhí)行虛擬機(jī)創(chuàng)建、網(wǎng)絡(luò)配置、節(jié)點(diǎn)鏡像安裝、容器運(yùn)行、容器配置等任務(wù),自動(dòng)完成整個(gè)應(yīng)用集群的部署。
部署工程師可通過自服務(wù)門戶手工執(zhí)行完整的集群部署流程、子集群部署流程或者單個(gè)節(jié)點(diǎn)的部署操作。
基于Docker、Cloudify等開源PaaS技術(shù)構(gòu)建的互聯(lián)網(wǎng)業(yè)務(wù)自動(dòng)部署平臺,較好地平衡了部署效率與部署靈活性的問題,通過Docker節(jié)點(diǎn)支持任意的軟件堆棧,通過TOSCA/Cloudify部署模型支持復(fù)雜的集群架構(gòu),實(shí)現(xiàn)了復(fù)雜互聯(lián)網(wǎng)集群全堆棧、全流程的自動(dòng)化部署,支撐互聯(lián)網(wǎng)業(yè)務(wù)平臺更好地應(yīng)對用戶需求的快速變化和用戶規(guī)模的快速增長。
1 Miglierina M.Application deployment and management in the cloud.Proceedings of the 16th International Symposium on Symbolic and Numeric Algorithms for Scientific Computing,Timisoara,Romania,2014
2 孫宏亮.Docker源碼分析(一):Docker架構(gòu).http://www.infoq.com/cn/articles/docker-source-code-analysis-part1,2014 Sun H L.Docker source code analysis(I):Docker architecture.http://www.infoq.com/cn/articles/docker-source-code-analysispart1,2014
3 Cloudify 3.2 architecture overview.http://getcloudify.org/guide/3.2/overview-architecture.html,2014
4 徐鵬,陳思,蘇森.互聯(lián)網(wǎng)應(yīng)用PaaS平臺體系結(jié)構(gòu).北京郵電大學(xué)學(xué)報(bào),2012,35(1):120~124 Xu P,Chen S,Su S.PaaS platform architecture for internet application.Journal of Beijing University of Posts and Telecommunications,2012,35(1):120~124
5 張海瑞.云平臺自動(dòng)化部署模塊的設(shè)計(jì)與實(shí)現(xiàn)(碩士學(xué)位論文).哈爾濱:哈爾濱工業(yè)大學(xué),2013 Zhang H R.Design and implementation of the automatic deployment module for cloud platform(master dissertation).Harbin:Harbin Institute of Technology,2013