陳清金 陳存香 張 巖
1 中國聯(lián)通云數(shù)據(jù)有限公司 北京 100032
2 中國聯(lián)合網(wǎng)絡(luò)通信有限公司 北京 100033
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,云計算作為一種商業(yè)計算模式在搜索服務(wù)、移動商務(wù)、開放協(xié)作等多樣化需求的推動下迅速發(fā)展起來[1]。云計算以動態(tài)的、易擴展等優(yōu)勢提供了虛擬化資源的計算和存儲方式,并受到Google、IBM、Amazon、Microsoft等IT廠商的大力推廣和應(yīng)用[2]。
云計算包括基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service,IaaS),平臺即服務(wù)(Platform as a Service,PaaS)和軟件即服務(wù)(Software as a Service,SaaS)[3]?;赑aaS平臺,用戶/開發(fā)者可以便捷地開發(fā)和部署應(yīng)用程序,將應(yīng)用程序托管在PaaS管理的云基礎(chǔ)設(shè)施中,從而節(jié)省大量的平臺搭建和維護工作,并達(dá)到縮短開發(fā)周期,降低運維成本的目的[4]。Docker作為輕量級的虛擬化方式,實現(xiàn)了PaaS平臺的高效部署、運行和維護。
PaaS的核心技術(shù)之一就是虛擬化。維基百科將虛擬化定義為:虛擬化技術(shù)是一種資源管理技術(shù),是將計算機的各種實體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來,打破實體結(jié)構(gòu)間的不可切割的障礙,使用戶可以用比原本的組態(tài)更好的方式來應(yīng)用這些資源[5]。
虛擬化主要分為兩大類,即基于硬件的虛擬化和基于軟件的虛擬化?;谲浖奶摂M化分為應(yīng)用虛擬化和平臺虛擬化。虛擬機(Virtual Machine,VM)技術(shù)屬于平臺虛擬化。應(yīng)用虛擬化可細(xì)分為完全虛擬化、硬件輔助虛擬化、部分虛擬化、超虛擬化、操作系統(tǒng)級虛擬化。Docker屬于操作系統(tǒng)級的虛擬化。
Docker是PaaS提供商dotCloud開源的一個基于LXC的高級容器引擎,基于go語言并遵從Apache2.0協(xié)議[6]。目前,已經(jīng)有很多相關(guān)項目,逐漸形成了Docker生態(tài)圈。Docker自2013年發(fā)布以來,就成為了炙手可熱的PaaS項目。Redhat[7]、Google[8]、IBM[9]、百度[10]、阿里巴巴[11]等都相繼集成了對Docker的支持。
Docker的最終目的是實現(xiàn)“build、ship and run any app、anywhere”,即通過對應(yīng)用組件的封裝(Packaging)、分發(fā)、部署、運行等生命周期的管理,達(dá)到應(yīng)用組件級別的“一次封裝,隨處運行”。應(yīng)用組件包括Web應(yīng)用、數(shù)據(jù)庫服務(wù)、操作系統(tǒng)或編譯器。
Docker是一個客戶/服務(wù)器(Client/Server,CS)架構(gòu)(見圖1)。Docker客戶端是遠(yuǎn)程控制器,可通過TCP/REST向Docker Host發(fā)送請求,包括創(chuàng)建容器、運行容器、保存容器、刪除容器等請求。Docker服務(wù)端的Daemon對客戶端的請求進行相應(yīng)的管理,隨后通過driver轉(zhuǎn)發(fā)至容器中的libcontainer執(zhí)行環(huán)境。libcontainer提供與不同Linux內(nèi)核隔離的接口,類似命名空間及控制組。這種架構(gòu)允許多個容器在共享同一個Linux內(nèi)核的情況下完全隔離地運行。由于Docker容器并不需要專用操作系統(tǒng),因此,實現(xiàn)了輕量級的要求。
圖1 Docker體系架構(gòu)
Docker的核心要素有鏡像(Image)、容器(Container)和倉庫(Registry)。鏡像是一個面向Docker引擎的只讀模板,包含文件系統(tǒng),它是構(gòu)建容器的基礎(chǔ)。一個鏡像中可以包含完整的操作系統(tǒng)及相應(yīng)的應(yīng)用軟件。用戶可以根據(jù)需求自己創(chuàng)建或者下載他人創(chuàng)建的鏡像。容器是從鏡像創(chuàng)建的運行實例。鏡像可以理解為構(gòu)建或打包階段,而容器可理解為啟動或執(zhí)行階段。Registry用來保存用戶創(chuàng)建的鏡像。鏡像來源主要有用戶定制和Docker自有兩種,前者稱為私有Registry,后者稱為公共Registry,也叫做Docker Hub。
Docker虛擬化的主要優(yōu)勢有4個方面。1)簡化服務(wù)器遷移帶來的環(huán)境再部署,提高工作效率,并降低部署過程中出現(xiàn)問題的風(fēng)險系數(shù)。2)縮短環(huán)境交付和部署的周期。使用Docker,開發(fā)人員可通過鏡像快速部署開發(fā)環(huán)境,并能在開發(fā)結(jié)束后,平滑移交給運維和測試人員。同時,容器的維護相對簡單快捷,節(jié)約開發(fā)、測試、部署時間,可實現(xiàn)快速迭代。3)提高物理資源的利用率。由于Docker容器所占的存儲空間相對較小,同時刪除容器后,相應(yīng)的文件也會被刪除,這樣可大大提高物理資源的使用率。4)更簡單快捷的迭代策略。Dockersf i le實現(xiàn)了開發(fā)環(huán)境中的配置更新可快速反饋到生產(chǎn)環(huán)境中,實現(xiàn)了自動化的高效管理。
從上述Docker分析中可以發(fā)現(xiàn)VM和Docker存在一定的差異,下面對兩者之間的技術(shù)實現(xiàn)和性能進行對比分析。
Docker中容器停止后,對創(chuàng)建容器時鏡像的初始狀態(tài)所做的操作都會丟失。虛擬機停止后,大部分文件(除去部分臨時文件)不會被刪除。這就使得虛擬機所占的存儲空間遠(yuǎn)遠(yuǎn)大于Docker。
Docker可采用標(biāo)準(zhǔn)的IPC機制進行通信,如隧道、Sockets等,虛擬機只能通過以太網(wǎng)的方式進行通信。
Docker可直接運行于宿主機的內(nèi)核上,不同容器可以共享同一個Linux內(nèi)核,虛擬機則需要運行于Hypervisor之上(見圖2)。
圖2 VM與Docker虛擬化實現(xiàn)方式對比
作為一種輕量級的虛擬化方式,Docker在性能上還是略優(yōu)于VM的,具體的性能分析比較見表1。
表1 Docker與虛擬機性能對比
從表1中的分析比較可以明顯發(fā)現(xiàn),利用Docker技術(shù),物理服務(wù)器可以承載更多的容器,資源的使用率大大提高,這也是云計算需要達(dá)到的真正目的。
OpenStack是一個旨在為公共及私有云的建設(shè)與管理提供軟件的開源項目[12]。該項目得到了AMD、IBM、Intel的青睞。同時,也成為2014年最受關(guān)注的開源項目;因此,Docker與OpenStack的結(jié)合是未來PaaS平臺發(fā)展的一大趨勢。二者的結(jié)合主要基于Heat和Nova兩種,下面分別就這兩種方式進行分析。
1) Docker與Nova集成。通過driver形式實現(xiàn)了Docker與Openstack的集成(見圖3)。Openstack的Nova中,command和dashboard通過API接口與compute連接,compute與Docker的driver通過API連接,由此實現(xiàn)了二者的關(guān)聯(lián)。Docker的registry鏡像以及driver的數(shù)據(jù)都將反饋給Glance。這個過程中Docker容器當(dāng)作虛擬機來使用。
圖3 Docker與Nova集成
2) Docker與Heat集成(見圖4)。Docker與Nova的集成中將Docker以虛擬機的形式使用,無法發(fā)揮出容器的獨有優(yōu)勢;因此,出現(xiàn)了Heat與Docker的集成方案。Heat通過Plugin API與相應(yīng)插件關(guān)聯(lián),進而通過API或者HTTP關(guān)聯(lián)Docker。利用Heat中的插件機制,可實現(xiàn)Openstack部署和管理Docker容器。
圖4 Docker與Heat集成
Docker自發(fā)布以來,一直受到業(yè)界的熱捧。這個開源的容器引擎使得開發(fā)者可以通過鏡像打包自己的應(yīng)用以及運行環(huán)境,實現(xiàn)快速開發(fā)、快速部署、快速迭代。同時,沙箱機制可降低接口之間的數(shù)據(jù)開銷,提高硬件的資源利用率。但是關(guān)于Docker與現(xiàn)有開源架構(gòu)的研究還需進一步完善。
參考文獻
[1]袁璐,李仁發(fā).云環(huán)境下動態(tài)信任模型研究綜述[D/OL].(2010-10-20)[2015-02-02].http://www.paper.edu.cn/html/releasepaper/2010/10/364/
[2]Daniel Nations.What is Cloud Computing?[EB/OL].[2015-01-05].http://webtrends.about.com/od/enterprise20/a/cloud-computing.htm
[3]互動百科.云計算[EB/OL].[2015-02-02].http://www.hudong.com/wiki/%E4%BA%91%E8%AE%A1%E7%AE%97
[4]林琳,滕騰,李偉彬.PaaS的范疇及架構(gòu)標(biāo)準(zhǔn)化研究[J].信息技術(shù)與標(biāo)準(zhǔn)化,2012(10):25-32
[5]虛擬化技術(shù)[EB/OL].[2015-02-02].http://zh.wikipedia.org/wiki/%E8%99%9B%E6%93%AC%E5%8C%96
[6]Dua,Bangalore,Raja.Virtualization vs Containerization to Support PaaS[J].IEEE,2014,41:610-614
[7]Red Hat推出專為Docker定制的Linux發(fā)行版[EB/OL].[2015-02-02].http://www.infoq.com/cn/news/2015/03/redhat-docker-linux.2015
[8]Google擁抱Docker:把互聯(lián)網(wǎng)變成一個巨大的計算機[EB/OL].[2015-2-02].http://www.pingwest.com/google-docker/
[9]IBM和Docker宣布建立戰(zhàn)略伙伴關(guān)系[EB/OL].[2015-02-02].http://www.oschina.net/news/58186/ibm-docker
[10]國內(nèi)“BAT”先鋒企業(yè)百度Baidu App Engine(BAE)平臺[EB/OL].[2015-02-02].http://www.xueliedu.com/a/xinwenzixun/2015/0220/280618.html
[11]Docker周報:阿里云ECS支持Docker[EB/OL].[2015-02-02].http://www.infoq.com/cn/news/2014/10/dockeraliyun-ecs?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
[12]誰在掌管著OpenStack項目[EB/OL].[2015-02-02].http://os.51cto.com/art/201111/304714.htm