武志學(xué)
1.成都五舟漢云科技有限公司,成都 611731; 2.成都信息工程大學(xué) 信息安全工程學(xué)院,成都 610225)(*通信作者電子郵箱zhixue.wu@gmail.com)
云計(jì)算虛擬化技術(shù)的發(fā)展與趨勢(shì)
武志學(xué)1,2*
1.成都五舟漢云科技有限公司,成都 611731; 2.成都信息工程大學(xué) 信息安全工程學(xué)院,成都 610225)(*通信作者電子郵箱zhixue.wu@gmail.com)
云計(jì)算是一種融合了多項(xiàng)計(jì)算機(jī)技術(shù)的以數(shù)據(jù)和處理能力為中心的密集型計(jì)算模式,其中以虛擬化、分布式數(shù)據(jù)存儲(chǔ)、分布式并發(fā)編程模型、大規(guī)模數(shù)據(jù)管理和分布式資源管理技術(shù)最為關(guān)鍵。經(jīng)過十多年的發(fā)展,云計(jì)算技術(shù)已經(jīng)從發(fā)展培育期步入快速成長(zhǎng)期,越來越多的企業(yè)已經(jīng)開始使用云計(jì)算服務(wù)。與此同時(shí),云計(jì)算的核心技術(shù)也在發(fā)生著巨大的變化,新一代的技術(shù)正在改進(jìn)甚至取代前一代技術(shù)。容器虛擬化技術(shù)以其輕便、靈活和快速部署等特性對(duì)傳統(tǒng)的基于虛擬機(jī)的虛擬化技術(shù)帶來了顛覆性的挑戰(zhàn),正在改變著基礎(chǔ)設(shè)施即服務(wù)(IaaS)平臺(tái)和平臺(tái)即服務(wù)(PaaS)平臺(tái)的架構(gòu)和實(shí)現(xiàn)。對(duì)容器虛擬化技術(shù)進(jìn)行深入介紹,并通過分析和比較闡述容器虛擬化技術(shù)和虛擬機(jī)虛擬化技術(shù)各自的優(yōu)勢(shì)、適應(yīng)場(chǎng)景和亟待解決的問題,然后對(duì)云計(jì)算虛擬化技術(shù)的下一步研究方向和發(fā)展趨勢(shì)進(jìn)行展望。
云計(jì)算;虛擬化;Docker;容器;虛擬機(jī)
云計(jì)算是一種融合了多項(xiàng)計(jì)算機(jī)技術(shù)的以數(shù)據(jù)和處理能力為中心的密集型計(jì)算模式。它的發(fā)展是虛擬化、分布式系統(tǒng)、分布式并發(fā)編程模式、面向?qū)ο蟮捏w系架構(gòu)、軟件即服務(wù)和信息安全等各項(xiàng)技術(shù)共同發(fā)展的結(jié)果;同時(shí),托管服務(wù)、后向收費(fèi)、按需交付等商業(yè)模式的出現(xiàn)也加速了云計(jì)算市場(chǎng)的突飛猛進(jìn)。
經(jīng)過十多年的發(fā)展,云計(jì)算技術(shù)已經(jīng)趨于成熟,云計(jì)算平臺(tái)產(chǎn)品也得到了企業(yè)的認(rèn)同和廣泛使用。與此同時(shí),云計(jì)算的核心技術(shù)的發(fā)展并沒有停止。特別是在近兩年里,基于容器技術(shù)的Docker系統(tǒng)[1]、基于糾刪碼技術(shù)[2]的分布式存儲(chǔ)系統(tǒng)和基于內(nèi)存計(jì)算的Spark系統(tǒng)[3]的出現(xiàn)顛覆了原有的虛擬化技術(shù)、基于多副本的分布式數(shù)據(jù)存儲(chǔ)技術(shù),以及基于MapReduce的分布式并發(fā)編程模型。這些新技術(shù)不僅進(jìn)一步提高了資源利用率,提高了云平臺(tái)的計(jì)算速度,并且還為企業(yè)提供了更多的大數(shù)據(jù)應(yīng)用模型,包含批處理、實(shí)時(shí)數(shù)據(jù)處理、流式數(shù)據(jù)處理、隨機(jī)數(shù)據(jù)查詢和數(shù)據(jù)挖掘等。
容器虛擬化技術(shù)以其輕便、靈活和快速部署等特性給傳統(tǒng)的基于虛擬機(jī)的虛擬化技術(shù)帶來了顛覆性的挑戰(zhàn)。容器技術(shù)正在改變著基礎(chǔ)設(shè)施即服務(wù)(Infrastructure as a Service, IaaS)平臺(tái)和平臺(tái)即服務(wù)(Platform as a Service, PaaS)平臺(tái)的架構(gòu)和實(shí)現(xiàn)。本文首先對(duì)容器虛擬化技術(shù)進(jìn)行深入介紹;然后對(duì)容器虛擬化技術(shù)和虛擬機(jī)虛擬化技術(shù)進(jìn)行分析和比較,闡述各自的優(yōu)勢(shì)、適應(yīng)場(chǎng)景和亟待解決的問題;最后對(duì)云計(jì)算虛擬化技術(shù)的下一步研究方向和發(fā)展趨勢(shì)進(jìn)行展望。
云計(jì)算模式最關(guān)鍵的突破就是資源使用方式的改變[4]。通過虛擬化的方式,可以在幾分鐘之內(nèi),虛擬出一個(gè)獨(dú)立的、隨需配置的虛擬機(jī)供用戶使用。虛擬化技術(shù)給資源使用和調(diào)度帶來了極大的方便,系統(tǒng)可以根據(jù)應(yīng)用的實(shí)際負(fù)載情況及時(shí)進(jìn)行資源調(diào)度,從而可以保證既不會(huì)因?yàn)橘Y源得不到充分利用造成系統(tǒng)資源的浪費(fèi),又能夠保證應(yīng)用和服務(wù)不會(huì)因?yàn)橘Y源缺乏而帶來性能的下降。
虛擬化技術(shù)是指計(jì)算元件在虛擬的基礎(chǔ)上而不是真實(shí)的基礎(chǔ)上運(yùn)行,通過軟件的方法重新定義劃分信息技術(shù)(Information Technology, IT)資源,實(shí)現(xiàn)IT資源的動(dòng)態(tài)分配、靈活調(diào)度和跨域共享,從而提高IT資源的利用率,使IT資源真正成為計(jì)算基礎(chǔ)設(shè)施,可以滿足各種應(yīng)用的靈活多變的需求。
受益于虛擬化技術(shù)的發(fā)展,計(jì)算機(jī)整體資源的使用效率和用戶工作的時(shí)間價(jià)值都得到了巨大的提升,同時(shí)也相應(yīng)減少了交付服務(wù)所做的重復(fù)性工作。通過虛擬化技術(shù),云計(jì)算把計(jì)算、存儲(chǔ)、應(yīng)用和服務(wù)都變成了可以動(dòng)態(tài)配置和擴(kuò)展的資源,從而才能夠?qū)崿F(xiàn)在邏輯上以單一整體的服務(wù)形式呈現(xiàn)給用戶。所以,虛擬化技術(shù)是云計(jì)算中最關(guān)鍵、最核心的技術(shù)原動(dòng)力[5]。
1.1 服務(wù)器虛擬化
服務(wù)器虛擬化是指通過虛擬化技術(shù)將一臺(tái)計(jì)算機(jī)虛擬為多臺(tái)邏輯計(jì)算機(jī)。服務(wù)器的虛擬化是通過在硬件和操作系統(tǒng)之間引入虛擬化層實(shí)現(xiàn)硬件與操作系統(tǒng)的解耦而實(shí)現(xiàn)的,如圖1所示。虛擬化層的主要功能就是實(shí)現(xiàn)在一臺(tái)物理服務(wù)器上同時(shí)運(yùn)行多個(gè)操作系統(tǒng)實(shí)例。通過動(dòng)態(tài)分區(qū),虛擬化層使這些操作系統(tǒng)實(shí)例可以共享物理服務(wù)器資源,使每個(gè)虛擬機(jī)得到一套獨(dú)立的模擬出的硬件設(shè)備,包含CPU、內(nèi)存、存儲(chǔ)、主板、顯卡、網(wǎng)卡等硬件資源。然后,再在其上安裝自己的操作系統(tǒng),稱為客戶(Guest)操作系統(tǒng)。最終用戶的應(yīng)用程序,運(yùn)行在Guest操作系統(tǒng)中。
圖1 服務(wù)器虛擬化
服務(wù)器虛擬化有兩種常見的架構(gòu):寄居架構(gòu)(Hosted Architecture)和裸金屬架構(gòu)(“Bare Metal” Architecture)。寄居架構(gòu)將虛擬化層運(yùn)行在操作系統(tǒng)之上,當(dāng)作一個(gè)應(yīng)用來運(yùn)行[6]。寄居架構(gòu)依賴于主機(jī)操作系統(tǒng)對(duì)設(shè)備的支持和物理資源的管理,如圖2(a)所示;裸金屬架構(gòu)直接將虛擬化層運(yùn)行在x86的硬件系統(tǒng)上,再在其上安裝操作系統(tǒng)和應(yīng)用,如圖2(b)所示。因?yàn)槁憬饘偌軜?gòu)可以直接訪問硬件資源,而不需要通過操作系統(tǒng)來實(shí)現(xiàn)對(duì)硬件訪問,因此具有更高的效率。 VMware Server是寄居架構(gòu)虛擬化產(chǎn)品的代表;而Xen[7]、XenServer[8]、VMware ESX Server[8]和KVM[9]都是基于裸金屬架構(gòu)的虛擬化產(chǎn)品。
圖2 服務(wù)器虛擬化架構(gòu)
1.2 Docker容器技術(shù)
通過解除操作系統(tǒng)與物理主機(jī)之間的緊耦合,虛擬機(jī)虛擬化技術(shù)使操作系統(tǒng)的部署更為輕松便捷,工作負(fù)載的移動(dòng)性顯著增強(qiáng)。通過虛擬化的方式,可以很快虛擬出一個(gè)小的、獨(dú)立的、隨需隨用CPU內(nèi)核供用戶使用。但是,當(dāng)用戶僅僅需要使用一小部分資源去運(yùn)行一個(gè)很簡(jiǎn)單的應(yīng)用時(shí),虛擬出一整臺(tái)計(jì)算機(jī)來完成軟件發(fā)布不但會(huì)浪費(fèi)相當(dāng)?shù)南到y(tǒng)資源,并且啟動(dòng)虛擬機(jī)運(yùn)行也需要幾分鐘的時(shí)間。因此,需要一種比虛擬機(jī)更小的資源分配粒度來滿足這類需求。
為了能夠比虛擬機(jī)模式以更快、更少資源的方式發(fā)布軟件,就需要對(duì)資源進(jìn)行比虛擬機(jī)模式更高級(jí)別的抽象,使得服務(wù)可以通過更細(xì)的粒度對(duì)資源進(jìn)行分配和控制。為此,Linux內(nèi)核添加了新的技術(shù),這便是眾所周知的控制組(Control Groups, cgroups)[10]。 通過這一技術(shù)來對(duì)服務(wù)運(yùn)行時(shí)環(huán)境進(jìn)行隔離,這種被隔離起來的運(yùn)行時(shí)環(huán)境就被稱為容器[11]。
通過容器可以為應(yīng)用程序提供一個(gè)隔離的運(yùn)行空間,包括完整用戶環(huán)境空間;一個(gè)容器內(nèi)的變動(dòng)不會(huì)影響其他容器的運(yùn)行環(huán)境。所以,可以使用容器虛擬化技術(shù)將應(yīng)用組件以及依賴打包為一個(gè)標(biāo)準(zhǔn)、獨(dú)立、輕量的環(huán)境,來部署分布式應(yīng)用,從而滿足上述需要比虛擬機(jī)更小粒度來控制資源的需求。
容器技術(shù)使用了一系列的系統(tǒng)級(jí)別的機(jī)制,包括利用Linux namespaces來進(jìn)行空間隔離,通過文件系統(tǒng)的掛載點(diǎn)來決定容器可以訪問文件的權(quán)限,通過cgroups來控制每個(gè)容器可以利用多少資源。此外,多個(gè)容器之間可以共享同一個(gè)操作系統(tǒng)的內(nèi)核,這樣當(dāng)同一個(gè)系統(tǒng)庫被多個(gè)容器使用時(shí),內(nèi)存的使用效率會(huì)得到很大的提升。
Docker是一個(gè)可以簡(jiǎn)化和標(biāo)準(zhǔn)化不同環(huán)境中應(yīng)用部署的容器平臺(tái),目前已經(jīng)有很多的分布式容器管理相關(guān)的生態(tài)圈軟件。近幾年以來,隨著Docker的出現(xiàn),容器技術(shù)對(duì)云計(jì)算發(fā)展產(chǎn)生了巨大的影響。
1.2.1 Docker
Docker誕生于2013年,最初是dotCloud公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目[12]。項(xiàng)目后來加入Linux基金會(huì)以后成為了一個(gè)遵從Apache 2.0協(xié)議的開源項(xiàng)目。Docker自開源后受到廣泛的關(guān)注和討論,dotCloud公司已經(jīng)改名為Docker Inc。Redhat 已經(jīng)在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產(chǎn)品中廣泛使用了Docker技術(shù)。
Docker項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案,基于Google公司推出的Go語言實(shí)現(xiàn)。 Docker以Linux容器(LXC)技術(shù)為基礎(chǔ),它的主要功能是通過實(shí)現(xiàn)對(duì)LXC的進(jìn)一步封裝,使得對(duì)容器的操作變得更為簡(jiǎn)便,并且讓用戶不再需要關(guān)心容器的管理[13]。用戶使用Docker平臺(tái)上的容器就像操作一個(gè)輕量級(jí)的虛擬機(jī)一樣簡(jiǎn)單。正是因?yàn)槭沟貌僮鱈XC變得簡(jiǎn)單和方便使用,Docker帶來了容器虛擬化進(jìn)入云計(jì)算產(chǎn)品的熱潮。
為了讓Docker朝著容器封裝、運(yùn)行的標(biāo)準(zhǔn)化更進(jìn)一步,2016年發(fā)布的Docker 1.10推出了自己的libcontainer,它集成了Linux內(nèi)核中的很多特性,作為一個(gè)獨(dú)特、穩(wěn)定且不受制于Linux的library[14]。
與提供硬件虛擬化機(jī)制的虛擬機(jī)不同,Docker通過命名空間(namespaces)和控制組(cgroups)兩個(gè)核心技術(shù)提供操作系統(tǒng)層級(jí)的虛擬化機(jī)制。Docker利用namespaces進(jìn)行權(quán)限的隔離控制;利用 cgroups進(jìn)行資源的限制隔離。
Docker利用namespaces技術(shù)[13]來提供隔離的工作空間,稱之為容器(Container)。當(dāng)運(yùn)行一個(gè)容器時(shí),Docker為該容器創(chuàng)建了一個(gè)命名空間集合。這樣就給容器提供了一個(gè)隔離層,每一個(gè)應(yīng)用在它們自己的命名空間中運(yùn)行而且不會(huì)訪問到命名空間之外。
Docker利用cgroups技術(shù)對(duì)共享資源進(jìn)行隔離、限制、審計(jì)等,確保Docker容器只使用其必需的資源,并在必要情況下設(shè)置其所能使用的資源上限。另外,cgroups還能夠確保單一容器不至于占用太多資源而導(dǎo)致整體系統(tǒng)陷入癱瘓。
圖3顯示了容器虛擬化的整體架構(gòu),可以看到容器和宿主機(jī)的關(guān)系,容器隔離獨(dú)立的應(yīng)用并使用已經(jīng)被Docker抽象化的操作系統(tǒng)資源。在圖3的右側(cè)視圖中,可以看到容器是用層(layer)來建立的,多個(gè)容器共享基礎(chǔ)層以減少資源的使用。
圖3 容器虛擬化架構(gòu)
1.2.2 Docker的工作原理
Docker的實(shí)現(xiàn)機(jī)制包含大量活動(dòng)組件,其底層的核心技術(shù)包括 Linux 上的命名空間(Namespaces)、控制組(Control Groups)、Union文件系統(tǒng)(Union File Systems)和容器格式(Container Format)。
傳統(tǒng)的虛擬機(jī)是通過在宿主主機(jī)中運(yùn)行Hypervisor來模擬一整套完整的硬件環(huán)境提供給虛擬機(jī)的操作系統(tǒng)使用。虛擬機(jī)系統(tǒng)看到的環(huán)境是可限制的,也是彼此隔離的。這種實(shí)現(xiàn)方法可以對(duì)資源進(jìn)行最完整的封裝,但同時(shí)又意味著對(duì)系統(tǒng)資源的浪費(fèi)。 例如,在宿主機(jī)和虛擬機(jī)系統(tǒng)都為L(zhǎng)inux系統(tǒng)的情況下,虛擬機(jī)中運(yùn)行的應(yīng)用其實(shí)完全可以利用宿主機(jī)系統(tǒng)中的運(yùn)行環(huán)境。
操作系統(tǒng)包括內(nèi)核、文件系統(tǒng)、網(wǎng)絡(luò)、PID(Process ID)、UID(User Identification)、IPC(Inter Process Communication)、內(nèi)存、硬盤、CPU 等資源,所有這些資源都是應(yīng)用進(jìn)程直接共享的。因此,要實(shí)現(xiàn)虛擬化,首先需要實(shí)現(xiàn)對(duì)內(nèi)存、CPU、網(wǎng)絡(luò)IO、硬盤IO、存儲(chǔ)空間等的限制,此外還需要實(shí)現(xiàn)對(duì)文件系統(tǒng)、網(wǎng)絡(luò)、PID、UID、IPC等之間的相互隔離。實(shí)現(xiàn)前者相對(duì)來講要容易一些,而實(shí)現(xiàn)后者則需要宿主機(jī)系統(tǒng)的深入支持。
近年來,隨著Linux系統(tǒng)對(duì)名字空間功能實(shí)現(xiàn)的不斷完善,基本上已經(jīng)可以實(shí)現(xiàn)上面的所有需求,進(jìn)程可以在彼此隔離的命名空間中運(yùn)行。盡管多個(gè)進(jìn)程都在共享同一個(gè)內(nèi)核和部分運(yùn)行時(shí)環(huán)境(例如一些系統(tǒng)命令和系統(tǒng)庫),但是進(jìn)程相互之間是不可見的,都感覺系統(tǒng)中只有自己?jiǎn)为?dú)存在。這種機(jī)制就是容器(Container)技術(shù)。
1)命名空間。
命名空間是 Linux 內(nèi)核一個(gè)強(qiáng)大的特性。Docker使用命名空間來實(shí)現(xiàn)容器之間的隔離。每個(gè)容器都有自己?jiǎn)为?dú)的命名空間,運(yùn)行在其中的應(yīng)用都像是在獨(dú)立的操作系統(tǒng)中運(yùn)行一樣。命名空間為容器提供對(duì)應(yīng)的底層Linux系統(tǒng)視圖,即限制容器的查看與訪問范疇。為了給每個(gè)運(yùn)行的容器提供一個(gè)獨(dú)立的運(yùn)行環(huán)境,Docker會(huì)創(chuàng)建一組命名空間來供特定的容器使用。
Docker會(huì)在內(nèi)核中使用多種不同類型的命名空間,實(shí)現(xiàn)對(duì)不同系統(tǒng)資源的隔離,包含:
pid命名空間:用來進(jìn)行進(jìn)程隔離PID,使兩個(gè)不同命名空間下的進(jìn)程可以有同一個(gè)PID。
net命名空間:用來管理網(wǎng)絡(luò)接口NET(Networking),主要提供對(duì)網(wǎng)絡(luò)資源的隔離,包括網(wǎng)絡(luò)設(shè)備、IPv4和IPv6協(xié)議棧、IP路由表、防火墻、/proc/net目錄、/sys/class/net目錄、端口(socket)等。
ipc命名空間:用來管理進(jìn)程間通信資源IPC,負(fù)責(zé)對(duì)運(yùn)行在每套容器內(nèi)的進(jìn)程進(jìn)行IPC資源隔離。
mnt命名空間:用來管理掛載點(diǎn)MNT(Mount),使不同mount命名空間內(nèi)的進(jìn)程擁有彼此不同的文件系統(tǒng)結(jié)構(gòu)。
uts命名空間:用來隔離內(nèi)核和版本標(biāo)識(shí)UTS(Unix Timesharing System),允許容器擁有不同于其他容器以及主機(jī)系統(tǒng)的主機(jī)名稱與網(wǎng)絡(luò)信息服務(wù)(Network Information Service, NIS)域名。
user命名空間:用來對(duì)每套容器內(nèi)的用戶進(jìn)行隔離,允許各容器擁有不同的uid(UserID)與gid(Group ID)視圖區(qū)間,使得某一進(jìn)程的uid與gid在用戶命名空間之內(nèi)與之外即有所不同,從而使得該進(jìn)程能夠在不影響容器內(nèi)root權(quán)限的情況下,撤銷同一用戶在容器外的權(quán)限。
Docker將這些命名空間結(jié)合起來完成隔離并創(chuàng)建容器。每個(gè)容器都有自己?jiǎn)为?dú)的名字空間,保證了容器之間彼此互不影響。運(yùn)行在名字空間中的應(yīng)用都像是在獨(dú)立的操作系統(tǒng)中運(yùn)行一樣。
2)控制組。
控制組(cgroups)是Linux內(nèi)核提供的一種機(jī)制,主要用來限制、記錄、隔離進(jìn)程組所使用的物理資源(包括:CPU、內(nèi)存、磁盤IO等)。cgroups為容器實(shí)現(xiàn)虛擬化提供了基本保證,是構(gòu)建Docker虛擬化管理工具的基礎(chǔ)。只有能夠?qū)Ψ峙涞饺萜鞯馁Y源進(jìn)行控制,才能夠避免當(dāng)多個(gè)容器同時(shí)運(yùn)行時(shí)對(duì)系統(tǒng)資源的競(jìng)爭(zhēng)。也就是說,cgroups能夠確保Docker容器只能使用分配給它的資源,并在必要情況下設(shè)置其所能使用的資源上限。另外,cgroups還能夠確保不會(huì)因?yàn)閱我蝗萜髡加锰噘Y源而導(dǎo)致整體系統(tǒng)陷入癱瘓。
3)Union文件系統(tǒng)。
Union文件系統(tǒng)(UnionFS)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下[16]。Union 文件系統(tǒng)是Docker鏡像的基礎(chǔ)。鏡像可以通過分層來進(jìn)行繼承,基于基礎(chǔ)鏡像,通過分層疊加制作各種具體的應(yīng)用鏡像。所以,使用Union文件系統(tǒng),不同Docker容器可以共享一些基礎(chǔ)的文件系統(tǒng)層,同時(shí)再加上自己獨(dú)有的改動(dòng)層,從而大大提高了存儲(chǔ)的效率。Docker鏡像層次如圖4所示。
圖4 Docker鏡像層次
容器在外觀上與虛擬機(jī)非常相似,二者皆擁有專有處理空間,能夠作為root執(zhí)行命令,提供專有網(wǎng)絡(luò)接口與IP地址,允許定制化路由及iptable規(guī)則,且可啟動(dòng)文件系統(tǒng)等。但是,容器與虛擬機(jī)之間存在著本質(zhì)的差別:容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,每個(gè)容器擁有自己獨(dú)立的運(yùn)行空間,但是不單獨(dú)擁有操作系統(tǒng),而是直接復(fù)用本地主機(jī)的操作系統(tǒng);而虛擬機(jī)則是在硬件層面實(shí)現(xiàn)虛擬化,每個(gè)虛擬機(jī)擁有自己獨(dú)立的操作系統(tǒng)。架構(gòu)對(duì)比如圖5所示。
圖5 虛擬機(jī)架構(gòu)與Docker架構(gòu)對(duì)比
圖5(a)顯示在服務(wù)器虛擬化技術(shù)下,每個(gè)虛擬機(jī)不但包括應(yīng)用本身和必須的二進(jìn)制文件與代碼庫,并且還需要包括整個(gè)客戶操作系統(tǒng)。一般來講,應(yīng)用代碼只有幾十MB大小。但是,客戶操作系統(tǒng)有時(shí)會(huì)多達(dá)幾十GB大小。
圖5(b)顯示了Docker對(duì)“用戶空間”進(jìn)行打包的方式。與虛擬機(jī)不同,容器唯一需要獨(dú)立構(gòu)建的只有二進(jìn)制文件與代碼庫,而全部操作系統(tǒng)層級(jí)的架構(gòu)都可實(shí)現(xiàn)跨容器共享。由此可見,Docker擁有極為出色的輕量化特性,同時(shí)還享受與虛擬機(jī)一樣的資源隔離與分配的好處。
2.1 Docker的優(yōu)勢(shì)
Docker是一種新興的虛擬化方式,與傳統(tǒng)的虛擬化方式有著本質(zhì)的差別,更具有眾多的優(yōu)勢(shì)。首先,Docker容器的啟動(dòng)速度要比虛擬機(jī)方式快很多,可以在秒級(jí)實(shí)現(xiàn);而虛擬機(jī)的啟動(dòng)時(shí)間一般會(huì)需要幾分鐘時(shí)間。其次,Docker對(duì)系統(tǒng)資源的利用率也要比虛擬機(jī)高很多,一臺(tái)主機(jī)上同時(shí)運(yùn)行Docker容器的數(shù)量可以高達(dá)數(shù)千個(gè);而一臺(tái)主機(jī)上僅能夠運(yùn)行幾十個(gè)虛擬機(jī)。容器運(yùn)行時(shí)基本不消耗額外的系統(tǒng)資源,只需要運(yùn)行其中的應(yīng)用,所以使得系統(tǒng)的開銷很小,應(yīng)用的性能很高。如果用戶需要運(yùn)行10個(gè)不同的應(yīng)用,采用傳統(tǒng)虛擬機(jī)方式,一般來講就需要啟動(dòng)10個(gè)虛擬機(jī);而采用Docker容器只需要啟動(dòng)10個(gè)隔離的應(yīng)用即可。
具體說來,Docker在如下幾個(gè)方面具有較大的優(yōu)勢(shì):
1)簡(jiǎn)化部署。使用Docker技術(shù),開發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來構(gòu)建一套開發(fā)容器。開發(fā)完成之后,運(yùn)維人員就可以直接把這個(gè)容器部署到運(yùn)行環(huán)境而不需要重新安裝。不論需要把服務(wù)部署到哪里,容器都可以通過一行命令就完成部署,從而在根本上簡(jiǎn)化了部署應(yīng)用的工作。
2)快速可用。Docker容器很輕快。容器技術(shù)是對(duì)操作系統(tǒng)的資源進(jìn)行再次抽象,而并非對(duì)整個(gè)物理機(jī)資源進(jìn)行虛擬化。通過這種方式,打包在容器內(nèi)的服務(wù)可以在1/20 s的時(shí)間內(nèi)快速啟動(dòng),而啟動(dòng)一臺(tái)虛擬機(jī)一般可能需要一分鐘的時(shí)間。
3)更高效的虛擬化。Docker 容器是內(nèi)核級(jí)的虛擬化,運(yùn)行時(shí)不需要額外的hypervisor支持。因此,Docker容器可以實(shí)現(xiàn)更高的性能和效率,可以非常接近裸機(jī)的性能。
4)微服務(wù)化。容器允許對(duì)計(jì)算資源進(jìn)行比虛擬機(jī)更小粒度的細(xì)分。如果相對(duì)于服務(wù)運(yùn)行所需要的資源來講,一個(gè)小型的虛擬機(jī)所提供的資源過于龐大,或者對(duì)于用戶的系統(tǒng)而言,一次性地?cái)U(kuò)展出一臺(tái)虛擬機(jī)會(huì)所需要工作量很多,那么容器可以很好地解決這類問題。
5)更輕松的遷移和擴(kuò)展。Docker容器可以在各類平臺(tái)上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。 這種廣泛的兼容性可以讓用戶很方便地把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)平臺(tái),不用擔(dān)心平臺(tái)鎖定問題。
6)更簡(jiǎn)單的管理。使用Docker,可以通過微小的修改替代以往大量的更新工作。這些修改都可用增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)代碼更新自動(dòng)化,大大提高管理的效率。
2.2 Docker的劣勢(shì)
與任何技術(shù)一樣,Docker也不會(huì)是一個(gè)完美無缺的系統(tǒng)。相對(duì)于虛擬機(jī)來講,Docker還存在以下幾個(gè)劣勢(shì)需要作進(jìn)一步改進(jìn):
1)資源隔離問題。
Docker是利用cgroup實(shí)現(xiàn)資源限制的,但是只能限制每個(gè)容器資源消耗的最大值,而不能隔絕其他程序占用自己的資源。也就是說,也許一個(gè)容器不能保證任何時(shí)候都能夠享受分配給它的資源。
比如說,系統(tǒng)給某個(gè)容器分配了4核CPU,但是由于系統(tǒng)負(fù)載在某個(gè)階段過高,該容器也許只能使用3核CPU。對(duì)于有些實(shí)時(shí)性要求不高的應(yīng)用,短時(shí)間的資源短缺可以接受。而對(duì)于一些實(shí)時(shí)在線處理系統(tǒng)需要保證比較高并且一致的吞吐量,如果不能保證分配給它的系統(tǒng)資源的固定可用性,那么就不能滿足其實(shí)時(shí)性保證。
2)安全性問題。
安全性問題是容器技術(shù)的一個(gè)主要弱點(diǎn),其資源隔離性沒有虛擬機(jī)那么徹底,也是阻礙容器技術(shù)在實(shí)際應(yīng)用中普及的主要原因。
近年來,Docker也在不斷地通過技術(shù)來提高容器的安全性。在早期Docker版本中,只有具有root權(quán)限的用戶才能夠運(yùn)行容器,這給容器使用帶來了潛在的安全問題。為了解決這個(gè)問題,Docker1.10引入了用戶命名空間功能。但是,Docker目前還不能分辨具體執(zhí)行指令的用戶,只要一個(gè)用戶擁有執(zhí)行Docker的權(quán)限,就可以對(duì)Docker的容器進(jìn)行所有的操作,即使該容器不是由該用戶創(chuàng)建的,存在一定的安全風(fēng)險(xiǎn)。
總之,盡管當(dāng)前的Docker版本已經(jīng)在安全性方面有了很大的提高,但是相對(duì)于虛擬機(jī)來講,安全性問題仍然是Docker容器技術(shù)的一個(gè)主要弱點(diǎn)。不克服安全性方面的問題,容器技術(shù)就不能適用于實(shí)際行業(yè)應(yīng)用。
3)容器管理需要強(qiáng)化。
因?yàn)槠漭p量快速的特點(diǎn),容器多用于快速應(yīng)用部署。每個(gè)容器往往只運(yùn)行一個(gè)單一的系統(tǒng)軟件或者應(yīng)用程序,所以,相對(duì)于虛擬機(jī)可以部署多個(gè)系統(tǒng)或應(yīng)用的場(chǎng)景來講,容器管理平臺(tái)需要管理的容器的數(shù)量會(huì)遠(yuǎn)遠(yuǎn)多于虛擬機(jī)管理平臺(tái)需要管理虛擬機(jī)的數(shù)量。如何管理在一個(gè)物理服務(wù)器上運(yùn)行的幾千個(gè)容器,而不是幾十臺(tái)虛擬機(jī),具有一定的技術(shù)挑戰(zhàn)。
4)兼容性問題。
Docker目前還在版本的快速更新中,細(xì)節(jié)功能調(diào)整比較大,而一些核心模塊依賴于高版本內(nèi)核,存在版本兼容問題。
5)Windows容器還不成熟。
Docker容器平臺(tái)是基于Linux內(nèi)核技術(shù)開發(fā)的,只能適用于基于Linux系統(tǒng)開發(fā)的應(yīng)用和服務(wù),還不能支持Windows應(yīng)用。
盡管微軟已經(jīng)開始研發(fā)基于Windows操作系統(tǒng)的容器技術(shù),但是與達(dá)到實(shí)用階段還有一定的距離。因此,在Windows系統(tǒng)方面,虛擬機(jī)仍然是解決應(yīng)用快速部署的唯一選擇。
6)容器編排引擎還不成熟。
分布式應(yīng)用部署不僅僅是簡(jiǎn)單地啟動(dòng)一個(gè)個(gè)裝有軟件的容器。應(yīng)用組件之間需要通過網(wǎng)絡(luò)協(xié)議進(jìn)行通信,因此在使用容器部署分布式應(yīng)用時(shí),需要設(shè)置容器之間的網(wǎng)絡(luò)接口。網(wǎng)絡(luò)設(shè)置一方面要保證容器之間能夠完成所需要的通信任務(wù),另一方面還必須確保容器之間只能夠進(jìn)行允許范圍內(nèi)的通信,以便保證應(yīng)用的安全性。
分布式應(yīng)用各個(gè)組件的依賴性并不只限于網(wǎng)絡(luò)連接方面,各個(gè)組件之間還存在有服務(wù)依賴關(guān)系。比如說,一個(gè)Web應(yīng)用系統(tǒng)中的Web服務(wù)器需要連接數(shù)據(jù)庫系統(tǒng)才能正常運(yùn)行,所以,在啟動(dòng)Web服務(wù)器之前,必須首先啟動(dòng)數(shù)據(jù)庫系統(tǒng)。因此,在使用容器部署分布式應(yīng)用時(shí),必須保證裝有各種應(yīng)用組件的容器有序啟動(dòng)。這也需要容器編排引擎來保證。
目前,市場(chǎng)上比較活躍的編排系統(tǒng)有Google的Kubernetes、Mesosphere的Marathon和Docker的Swarm等。 Swarm為Docker容器提供集群功能,可以把多個(gè)容器引擎組成一個(gè)虛擬容器引擎;Kubernetes使Docker容器在Google的云平臺(tái)上運(yùn)行,可以把容器編排成一個(gè)集群,并且可以根據(jù)用戶的需求管理容器的負(fù)載;Marathon是Apache Mesos的容器編排引擎,主要用來編排和管理長(zhǎng)期運(yùn)行的應(yīng)用。這些容器編排引擎各有優(yōu)勢(shì),但是現(xiàn)在還沒有一個(gè)完全成熟能夠達(dá)到企業(yè)應(yīng)用級(jí)。
每一項(xiàng)新技術(shù)的出現(xiàn)都可能會(huì)對(duì)現(xiàn)有局面帶來顛覆性的影響。近兩年多來,以容器技術(shù)為核心的Docker引領(lǐng)了一場(chǎng)影響了整個(gè)IT界的技術(shù)革新,不僅在徹底改變著應(yīng)用開發(fā)和發(fā)布的方式,并且改變著云計(jì)算領(lǐng)域的運(yùn)行規(guī)則。從IaaS到PaaS,乃至大數(shù)據(jù)平臺(tái),Docker已經(jīng)給云計(jì)算技術(shù)實(shí)踐帶來了顛覆性的改變,并深深影響著云計(jì)算技術(shù)的發(fā)展前景。
3.1 容器即服務(wù)
基于虛擬機(jī)虛擬化技術(shù)的IaaS云服務(wù)已經(jīng)進(jìn)入成熟階段,人們可以從多個(gè)提供商的公有云中方便地獲取所需的計(jì)算資源和存儲(chǔ)資源,基本達(dá)到了云計(jì)算的“按需獲取、按量計(jì)費(fèi)、彈性擴(kuò)展”的目標(biāo)。從IT管理角度來看,虛擬機(jī)提供了一流的資源隔離、安全性和穩(wěn)定性。但是,旨在提供完整的操作系統(tǒng)的虛擬機(jī)虛擬化技術(shù),對(duì)資源的分配粒度過大,無法提供最優(yōu)的資源利用解決方案對(duì)外提供服務(wù):一方面,每個(gè)虛擬機(jī)都需要包含完整的操作系統(tǒng),而不能與其他虛擬機(jī)共享,因此浪費(fèi)了大量的系統(tǒng)資源;另一方面,即使用戶只需要運(yùn)行一個(gè)很簡(jiǎn)單的應(yīng)用,也需要使用一個(gè)完整的虛擬機(jī)。
Docker容器通過使用cgroups技術(shù)大大降低了控制系統(tǒng)資源的粒度, 從而大幅度地提高了對(duì)系統(tǒng)資源的利用率。一臺(tái)物理主機(jī)上只能運(yùn)行幾十臺(tái)虛擬機(jī),但是可以同時(shí)運(yùn)行數(shù)千個(gè)Docker 容器。Docker容器從根本上克服了虛擬機(jī)技術(shù)的資源浪費(fèi)問題。其次,Docker 容器的運(yùn)行不需要額外的Hypervisor支持,它是內(nèi)核級(jí)的虛擬化,因此可以實(shí)現(xiàn)更高的性能和效率,非常接近裸機(jī)的性能。此外,Docker容器的啟動(dòng)比虛擬機(jī)要快得多,可以在秒級(jí)完成,而傳統(tǒng)的虛擬機(jī)方式需要幾分鐘時(shí)間才能啟動(dòng)。
現(xiàn)階段的云計(jì)算是以虛擬機(jī)為核心,IaaS以虛擬機(jī)為提供計(jì)算資源的基本單元,PaaS以虛擬機(jī)為部署應(yīng)用的基礎(chǔ)設(shè)施。隨著Docker容器技術(shù)的成熟,以容器為核心的云計(jì)算時(shí)代已經(jīng)開始,容器即服務(wù)(Container as a Service, CaaS)把第一代云計(jì)算的IaaS層與PaaS層合二為一,成為了新一代的云計(jì)算架構(gòu)[17]。基于CaaS的云計(jì)算架構(gòu)賦予了企業(yè)強(qiáng)大的工業(yè)化生產(chǎn)通用軟件的能力,再根據(jù)消費(fèi)者和用戶的個(gè)性化需求,快速組裝通用軟件形成個(gè)性化的解決方案,這就是下一代的云計(jì)算商業(yè)模式[18]。
在第一個(gè)云計(jì)算時(shí)代,企業(yè)主要享受了基于硬件的虛擬化為企業(yè)帶來的益處,企業(yè)可以像使用水、電、煤氣等公共服務(wù)一樣使用IaaS服務(wù)。而Docker的出現(xiàn),使得IaaS服務(wù)提供商能夠以更細(xì)的粒度為企業(yè)提供計(jì)算資源。這不但可以進(jìn)一步提高資源利用率,還可以縮短資源啟動(dòng)時(shí)間,從而為進(jìn)一步降低公有云服務(wù)的成本提供了可能。
現(xiàn)在的公有云提供商,比如Amazon AWS,除了提供虛擬機(jī)和存儲(chǔ)服務(wù)以外,還提供許多通用計(jì)算服務(wù),如負(fù)載均衡、數(shù)據(jù)緩存、消息隊(duì)列和防火墻服務(wù)?,F(xiàn)在公有云服務(wù)提供商完全可以將這些應(yīng)用遷移到容器中,不但可以降低資源開銷,還可以提供更好的可移植性。
混合云是企業(yè)現(xiàn)在使用最多的一種云服務(wù)模式。使用混合云模式,企業(yè)可以根據(jù)實(shí)際需求,把應(yīng)用運(yùn)行在企業(yè)的數(shù)據(jù)中心或者公有云上。因?yàn)镈ocker容器相比傳統(tǒng)的虛擬機(jī)更輕量,所以可以進(jìn)行動(dòng)態(tài)的設(shè)置和遷移。所以,無論是從資源的利用率方面,還是從應(yīng)用的遷移方便性而言,Docker容器都比虛擬機(jī)更適合部署在混合云中。
CaaS模式為企業(yè)帶來的另一個(gè)優(yōu)勢(shì)就是CaaS使企業(yè)可以方便地、動(dòng)態(tài)地在不同公有云平臺(tái)之間遷移服務(wù),而不需要擔(dān)心平臺(tái)鎖定問題。企業(yè)可以很方便地跨IaaS平臺(tái)實(shí)現(xiàn)容器動(dòng)態(tài)調(diào)度和移動(dòng)。就像IaaS的用戶不需要關(guān)心其虛擬機(jī)使用的哪種虛擬化技術(shù)一樣,CaaS的用戶也不需要關(guān)心他們的容器到底是運(yùn)行在哪個(gè)服務(wù)商的云平臺(tái)之上,是Amazon的AWS上、Microsoft的Azure上,還是阿里云上??蛻糁恍枵f明自己期望的應(yīng)用部署的地理位置,以及他們想要的運(yùn)行容器,CaaS服務(wù)提供商將為客戶提供自動(dòng)化的編排程序幫助客戶進(jìn)行資源調(diào)配,選擇最合適的云平臺(tái),為用戶提供最優(yōu)質(zhì)的服務(wù)。
盡管CaaS這種基于IaaS之上提供Docker容器的商業(yè)模式剛出現(xiàn)不久,但Docker已經(jīng)在云計(jì)算行業(yè)產(chǎn)生了巨大的影響力。Amazon的AWS、Microsoft的Azure和Google的云平臺(tái)都已經(jīng)開始提供CaaS服務(wù)。隨著Docker容器技術(shù)和云平臺(tái)技術(shù)的不斷發(fā)展,今后,CaaS會(huì)在更多的企業(yè),特別是企業(yè)的實(shí)際生產(chǎn)環(huán)境中發(fā)揮作用。CaaS會(huì)像IaaS一樣取得成功,并且會(huì)比IaaS使用得更廣泛。
3.2 基于容器的PaaS服務(wù)
相對(duì)于IaaS來講,Docker容器技術(shù)對(duì)于傳統(tǒng)PaaS更具顛覆意義。近年來IaaS技術(shù)取得了長(zhǎng)足的發(fā)展,已經(jīng)進(jìn)入了成熟階段,但是PaaS的發(fā)展很不理想?,F(xiàn)在的PaaS平臺(tái),一類是提供一個(gè)共享的運(yùn)行平臺(tái),包括共享的數(shù)據(jù)庫系統(tǒng)、文件系統(tǒng)、Web服務(wù)器等,托管企業(yè)的應(yīng)用。但是,企業(yè)必須基于PaaS平臺(tái)提供的新的存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫系統(tǒng)重新實(shí)現(xiàn)自己的應(yīng)用,而不能把原有的應(yīng)用遷移到PaaS平臺(tái)。此外,因?yàn)椴煌髽I(yè)的應(yīng)用共享存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫系統(tǒng),如何保證用戶應(yīng)用和數(shù)據(jù)的安全性具有相當(dāng)?shù)奶魬?zhàn),安全性成為用戶使用PaaS平臺(tái)的一個(gè)巨大障礙。GAE(Google App Engine)和Microsoft的Azure和VMware基于開源平臺(tái)Cloud Foundry提供的PaaS服務(wù)都屬于這類PaaS平臺(tái)。
另外一類PaaS平臺(tái)只在云端提供一些常用的標(biāo)準(zhǔn)軟件系統(tǒng)實(shí)例供用戶使用,比如數(shù)據(jù)庫系統(tǒng)、消息隊(duì)列、負(fù)載均衡系統(tǒng)和數(shù)據(jù)緩存系統(tǒng)等。對(duì)于企業(yè)來講,并不能將IT系統(tǒng)整體都遷移到云端,其日常的開發(fā)、測(cè)試、部署、運(yùn)維等,除了服務(wù)器位于云端之外,并沒有得到顯著的改善。Amazon的AWS提供的PaaS服務(wù)是這類PaaS的典型代表。
總之,云計(jì)算在PaaS層面還沒有達(dá)到為用戶提供按需獲取服務(wù)、按負(fù)載進(jìn)行自動(dòng)擴(kuò)展的能力,企業(yè)還不能無需改變地把自己已有的應(yīng)用遷移到云端,更無法動(dòng)態(tài)地在企業(yè)數(shù)據(jù)中心和公有云平臺(tái)之間進(jìn)行應(yīng)用調(diào)度和遷移。
以位于操作系統(tǒng)之上的輕量級(jí)虛擬化方案和類似于軟件版本管理的鏡像管理模式等技術(shù)為核心,Docker的出現(xiàn)為PaaS平臺(tái)的實(shí)現(xiàn)提供了一條完全不同的路徑。不同于現(xiàn)有PaaS平臺(tái)為用戶提供一個(gè)具有新的存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的共享平臺(tái),基于容器的PaaS平臺(tái)把用戶的每個(gè)應(yīng)用部署到一個(gè)單獨(dú)的容器之中,用戶既不需要學(xué)習(xí)新的存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫系統(tǒng)的使用,也不需要重新開發(fā)應(yīng)用,還不需要擔(dān)心與其他用戶共享運(yùn)行環(huán)境帶來的安全問題。
總之,容器可以很好地解決當(dāng)前PaaS平臺(tái)遇到的問題,從而使云服務(wù)的提供者有能力提供真正達(dá)到云計(jì)算標(biāo)準(zhǔn)的PaaS服務(wù)。從這一層面來講,Docker的出現(xiàn)無疑對(duì)現(xiàn)階段云計(jì)算的服務(wù)能力從IaaS向PaaS層級(jí)的提升有著巨大的推動(dòng)作用[18]。
當(dāng)前PaaS服務(wù)的另一個(gè)問題就是平臺(tái)之間的不兼容問題。不同PaaS平臺(tái)都提供了自己的存儲(chǔ)系統(tǒng)和數(shù)據(jù)庫系統(tǒng),用戶的應(yīng)用必須使用這些PaaS平臺(tái)特有的系統(tǒng)才能正常運(yùn)行。這就意味著運(yùn)行在GAE平臺(tái)上的應(yīng)用無法遷移到Azure平臺(tái)上,反之亦然。
造成PaaS平臺(tái)不兼容的主要原因有兩個(gè):
第一個(gè)原因是企業(yè)應(yīng)用從開發(fā)、管理和運(yùn)維上都有各種個(gè)性化的需求,無法通過提供一個(gè)規(guī)范、一致的環(huán)境來滿足各類應(yīng)用的需求。個(gè)性化需求和統(tǒng)一環(huán)境之間這種難以克服的矛盾影響了市場(chǎng)對(duì)PaaS的認(rèn)可和接受。
造成PaaS平臺(tái)不兼容的另一個(gè)原因是因?yàn)槊恳粋€(gè)PaaS服務(wù)提供商都在為應(yīng)用提供各自的服務(wù)和API,從而形成了平臺(tái)特有的運(yùn)行環(huán)境,這就造成了應(yīng)用很難在PaaS服務(wù)平臺(tái)之間進(jìn)行移植。一些組織曾經(jīng)在PaaS的遷移方面作了積極的努力,希望能夠降低企業(yè)向PaaS平臺(tái)遷移應(yīng)用的難度,甚至希望能夠?qū)崿F(xiàn)跨PaaS平臺(tái)的遷移。但是由于沒能得到類似GAE和Azure等主要PaaS服務(wù)提供商的支持,這些工作想成為事實(shí)上的行業(yè)標(biāo)準(zhǔn)很困難。
Docker的出現(xiàn)為PaaS平臺(tái)的實(shí)現(xiàn)提供了一條全新的途徑,也使為開發(fā)者提供更簡(jiǎn)潔的服務(wù)成為了可能。目前,開源PaaS平臺(tái)Cloud Foundry已經(jīng)開始支持并集成Docker容器。以Red Hat為首開發(fā)的OpenShift開源PaaS平臺(tái)就是基于Docker容器和Kubernetes編排引擎開發(fā)的。
基于Docker容器,開發(fā)人員不再需要花費(fèi)大量精力來處理各種開發(fā)、測(cè)試和生產(chǎn)環(huán)境之間的差異,而直接將應(yīng)用從開發(fā)環(huán)境遷移到PaaS平臺(tái)的運(yùn)行環(huán)境,不必?fù)?dān)心各種依賴和配置問題。另外,開發(fā)者也不再需要為了能夠在PaaS平臺(tái)上運(yùn)行自己的應(yīng)用而學(xué)習(xí)額外的編程方式、新的API,他們的應(yīng)用不需進(jìn)行調(diào)整就可運(yùn)行在PaaS平臺(tái)的Docker容器中。
使用Docker容器,開發(fā)者可用微服務(wù)的方式來實(shí)現(xiàn)他們的應(yīng)用,將整個(gè)應(yīng)用解耦為較小的功能組件,而容器將組件更進(jìn)一步從底層的硬件中分離出來,獨(dú)立運(yùn)行在一個(gè)容器中。通過使用微服務(wù),應(yīng)用程序可以得到更快的創(chuàng)建,更易于維護(hù),還可以得到更高的質(zhì)量。所以,Docker容器技術(shù)將會(huì)使PaaS平臺(tái)更容易管理,更快速地提供服務(wù)。
初期的Docker其實(shí)并沒有容器編排功能,不具備部署企業(yè)應(yīng)用的能力。隨著Docker的快速成長(zhǎng),圍繞Docker的生態(tài)系統(tǒng)開始完善,多個(gè)容器編排引擎已經(jīng)出現(xiàn)。由于Docker能夠運(yùn)行在具有Linux內(nèi)核的虛擬機(jī)中,所以它應(yīng)該可用在大部分IaaS平臺(tái)上。2015年6月,Docker公司與Linux基金會(huì)推出的開放容器計(jì)劃(Open Container Initiative, OCI),包括Oracle、Microsoft、EMC、IBM、Cisco和VMware等在內(nèi)的一大批國(guó)際著名軟件廠商的加入,使Docker生態(tài)圈開始迅速膨脹。目前,幾家著名的云服務(wù)提供商都已經(jīng)宣布支持Docker及其生態(tài)系統(tǒng)。所以,Docker容器很有希望成為下一代通用型PaaS平臺(tái)的核心技術(shù)。
總之,Docker的出現(xiàn)已經(jīng)對(duì)還不成熟的PaaS市場(chǎng)產(chǎn)生了巨大影響,顛覆了基于原有技術(shù)的PaaS平臺(tái)的演進(jìn),但同時(shí)卻加速了新一代基于Docker容器技術(shù)的PaaS平臺(tái)的發(fā)展。盡管目前Docker容器及其生態(tài)圈還不成熟,但是Docker容器通過容器虛擬化的方式提供了一個(gè)解決應(yīng)用環(huán)境依賴和可移植性問題的完美方案,為PaaS平臺(tái)的實(shí)驗(yàn)提供了一條全新的路徑。
Docker的出現(xiàn)給傳統(tǒng)的基于虛擬機(jī)的云計(jì)算發(fā)展帶來了強(qiáng)有力的沖擊,那么,是不是虛擬機(jī)技術(shù)就過時(shí)了,要讓容器徹底取代了?容器技術(shù)本身能不能以及如何解決目前仍然存在的問題?基于容器技術(shù)的云計(jì)算的下一步將朝著哪些方面發(fā)展,將會(huì)給云計(jì)算市場(chǎng)帶來哪些根本的變化?本章將針對(duì)這些問題來對(duì)容器的發(fā)展趨勢(shì)作一些預(yù)測(cè)和展望。
4.1 容器和虛擬化技術(shù)將會(huì)共存
容器和虛擬機(jī)的主要差別來源于容器提供了一種虛擬化操作系統(tǒng)的方法使得多個(gè)應(yīng)用可以相互獨(dú)立地運(yùn)行在一個(gè)操作系統(tǒng)實(shí)例上;而虛擬機(jī)則是提供了一種虛擬化硬件的方法使得多個(gè)操作系統(tǒng)可以相互獨(dú)立地運(yùn)行在一個(gè)物理服務(wù)器上。盡管容器技術(shù)比虛擬機(jī)更輕便快速,并具有更好的可遷移性,但是由于容器本身的不完善性以及一些應(yīng)用場(chǎng)合的特性,容器并不能夠完全代替虛擬機(jī)成為唯一的虛擬化技術(shù)。
首先,虛擬機(jī)的安全性要比容器強(qiáng)[19]。其主要原因是因?yàn)樘摂M機(jī)之間是通過硬件實(shí)現(xiàn)隔離的,而容器之間共享操作系統(tǒng)和應(yīng)用庫程序,因此容器可能受到的攻擊面要大于虛擬機(jī)的。第一,容器需要防止宿主操作系統(tǒng)不會(huì)被攻破。如果攻擊者能夠獲取訪問宿主操作系統(tǒng),那么就會(huì)有機(jī)會(huì)攻擊運(yùn)行在其上面的容器。第二,用來隔離容器的命名空間設(shè)施也是一個(gè)潛在的攻擊面。攻擊者可以通過運(yùn)行在一個(gè)容器的應(yīng)用去攻擊運(yùn)行在同一臺(tái)宿主機(jī)上的其他容器。況且目前來講,還不是進(jìn)程的所有屬性都通過命名空間進(jìn)行了隔離,有些屬性還是在容器間共享。第三,操作系統(tǒng)暴露給容器的使用界面要遠(yuǎn)遠(yuǎn)大于虛擬機(jī)監(jiān)控程序(Hypervisor)暴露給虛擬機(jī)的界面。任何系統(tǒng)調(diào)用方面的缺陷都有可能被攻擊者利用來攻擊操作系統(tǒng)。
盡管容器的安全性已經(jīng)得到了一定的改善,但是現(xiàn)在還不能完全保證上述安全問題都得到了解決。對(duì)于安全性要求高的用戶場(chǎng)景來講,虛擬機(jī)仍然是更好的選擇。所以,公有云服務(wù)提供商還不能放棄提供虛擬機(jī)服務(wù),從而導(dǎo)致所提供服務(wù)的適應(yīng)面變窄。
其次,容器的整個(gè)生態(tài)鏈還不完善,用來對(duì)容器進(jìn)行監(jiān)控、管理和維護(hù)的工具還不成熟,而虛擬機(jī)經(jīng)過二十多年的發(fā)展已經(jīng)有了成熟的管理和控制工具生態(tài)圈。不管是容器還是虛擬機(jī)本身都不能夠保證應(yīng)用可以作為產(chǎn)品的正常運(yùn)行,都還需要各種管理工具來管理應(yīng)用的性能、安全和資源。對(duì)于一個(gè)應(yīng)用來講,消耗資源少、啟動(dòng)快和遷移性好是重要的,但這還不夠,一個(gè)成熟的、經(jīng)過企業(yè)級(jí)應(yīng)用驗(yàn)證的應(yīng)用架構(gòu)更為重要。容器目前的生態(tài)圈還不成熟,特別是還缺少經(jīng)過企業(yè)級(jí)應(yīng)用驗(yàn)證的應(yīng)用架構(gòu),容器編排引擎也還在不斷改進(jìn)中,因此還不具備替代虛擬機(jī)的條件。
第三,容器更適合于需要運(yùn)行同一個(gè)應(yīng)用的多個(gè)實(shí)例,或者許多相近應(yīng)用的場(chǎng)景,但是不太適合于多租戶場(chǎng)景。使用容器運(yùn)行一個(gè)應(yīng)用(如MySQL)的多個(gè)實(shí)例,因?yàn)橄鄳?yīng)的容器之間共享同樣的操作系統(tǒng)和代碼,從而可以節(jié)省大量資源;同樣的,使用容器運(yùn)行許多相近的應(yīng)用也可以節(jié)省大量的系統(tǒng)資源。
但是,容器并不太適合于多租戶場(chǎng)景:一方面是因?yàn)椴煌鈶糁g是用的操作系統(tǒng)的版本可能不同,應(yīng)用之間共享的代碼也會(huì)有差別,因此節(jié)省的系統(tǒng)資源量有限;更主要的原因是因?yàn)槿萜鞯陌踩匀觞c(diǎn),可能導(dǎo)致攻擊者使用容器非法入侵其他容器。
總之,因?yàn)槿萜骱吞摂M機(jī)具有各自的優(yōu)勢(shì)和弱點(diǎn),并且具有不同的功能,我們應(yīng)該把容器虛擬化和虛擬機(jī)看成是兩個(gè)互相補(bǔ)充的技術(shù),而不是相互替代的技術(shù)。一個(gè)數(shù)據(jù)中心應(yīng)該同時(shí)支持這兩個(gè)技術(shù)以滿足不同應(yīng)用場(chǎng)景的需求。
如何選擇是使用容器還是虛擬機(jī)取決于應(yīng)用的場(chǎng)景。如果需要在有限的資源上運(yùn)行同一個(gè)應(yīng)用的許多實(shí)例,那么容器是最好的選擇。比如說,在一個(gè)教育云平臺(tái)上,需要為幾百個(gè)學(xué)生每人部署一套實(shí)驗(yàn)環(huán)境,那么容器就是必然的選擇。
如果應(yīng)用需要同時(shí)使用多種不同的操作系統(tǒng),或者版本差別較大的操作系統(tǒng),并且應(yīng)用的安全性也很重要,那么就應(yīng)該使用虛擬機(jī)來運(yùn)行這些應(yīng)用。比如說,需要為某個(gè)政府部門部署一套進(jìn)行數(shù)據(jù)挖掘的大數(shù)據(jù)平臺(tái)。因?yàn)榇髷?shù)據(jù)平臺(tái)需要安裝Hadoop、HBase、Hive、Kafka、MySql、Elastic Search和SQL Server等多個(gè)系統(tǒng),這些應(yīng)用還需要運(yùn)行在不同的操作系統(tǒng)之上,并且這些應(yīng)用啟動(dòng)以后會(huì)長(zhǎng)期運(yùn)行,而且政府機(jī)構(gòu)對(duì)安全性要求都比較高,所以這種場(chǎng)景就需要選擇使用虛擬機(jī)。
4.2 在虛擬機(jī)內(nèi)運(yùn)行容器將會(huì)成為趨勢(shì)
容器和虛擬機(jī)技術(shù)各有優(yōu)勢(shì)和弱點(diǎn),并且各自都有自己的使用場(chǎng)景。如何把容器和虛擬機(jī)技術(shù)結(jié)合,相互取長(zhǎng)補(bǔ)短,利用一個(gè)技術(shù)的優(yōu)勢(shì)克服另一個(gè)技術(shù)的弱點(diǎn)成為了一個(gè)熱門研究課題。
基本的思路是把容器運(yùn)行在虛擬機(jī)的內(nèi)部,利用虛擬機(jī)的硬件隔離來提高容器的安全性,使用虛擬機(jī)豐富成熟的監(jiān)控和管理工具完善容器的運(yùn)行環(huán)境;同時(shí),通過簡(jiǎn)化虛擬機(jī)客戶操作系統(tǒng)本身來盡量保持容器的輕量和快速的優(yōu)勢(shì)。傳統(tǒng)虛擬化技術(shù)的領(lǐng)軍公司Citrix、VMware和Microsoft都在研究在各自的虛擬化產(chǎn)品里運(yùn)行容器。
虛擬機(jī)技術(shù)提供了一個(gè)靈活安全且方便使用的運(yùn)行平臺(tái),可以高效部署和管理各種應(yīng)用;而容器則提供了一種方便地包裝、分發(fā)和部署應(yīng)用的方法。這兩種技術(shù)處于應(yīng)用生命周期的不同階段,如果能夠把它們結(jié)合起來發(fā)揮各自的優(yōu)勢(shì),那么就可以更好地同時(shí)滿足應(yīng)用開發(fā)者和應(yīng)用架構(gòu)管理者的需求。
2015年,Citrix為XenServer虛擬機(jī)技術(shù)引進(jìn)了對(duì)Docker容器技術(shù)的支持,使XenServer可以掌握哪些虛擬機(jī)里運(yùn)行了Docker容器,并把容器的相關(guān)信息展示給系統(tǒng)管理員[20]。這樣就可以使系統(tǒng)管理員比較方便地使用同一套工具監(jiān)控、分析和管理容器;同時(shí)開發(fā)人員還可以使用他們熟悉的工具進(jìn)行容器的部署和管理。Citrix還計(jì)劃在XenServer的管理工具中引入容器編排引擎Kubernetes、Swarm和Mesos以便可以快速完成基于容器的應(yīng)用部署。
VMware的VIC(vSphere Integrated Containers)項(xiàng)目的目的是為使用VMware產(chǎn)品公司的開發(fā)團(tuán)隊(duì)提供一套產(chǎn)品級(jí)容器方案[21]。通過使用vSphere的現(xiàn)有能力,企業(yè)IT管理者可以在同一套系統(tǒng)架構(gòu)上同時(shí)運(yùn)行容器和虛擬機(jī)。在虛擬機(jī)里運(yùn)行容器,開發(fā)人員可以利用vSphere的安全、網(wǎng)絡(luò)、存儲(chǔ)、資源管理等能力來運(yùn)行容器應(yīng)用。VIC包括如下三個(gè)核心組件:容器倉庫、容器引擎和容器管理。容器倉庫用來安全地存儲(chǔ)容器的鏡像;容器引擎提供了啟動(dòng)容器的遠(yuǎn)程API;容器管理給應(yīng)用開發(fā)團(tuán)隊(duì)提供了管理容器鏡像、倉庫和宿主機(jī),以及運(yùn)行容器的界面。
Microsoft與Docker已經(jīng)宣布合伙把Windows服務(wù)器的生態(tài)系統(tǒng)引入到Docker社區(qū)[22]。Windows為容器提供了兩個(gè)運(yùn)行模式:Windows Server容器模式和Hyper-V容器模式。Windows Server容器模式類似于Docker在Linux的模式,容器共享宿主操作系統(tǒng);Hyper-V容器模式是在輕量虛擬機(jī)上運(yùn)行容器,每個(gè)容器擁有自己的操作系統(tǒng)內(nèi)核。
如上所述,在虛擬機(jī)里運(yùn)行容器將會(huì)提高容器的安全性,并且可以利用各種成熟的虛擬機(jī)監(jiān)控和管理工具來為容器服務(wù),但是這種方法是不是會(huì)影響容器的性能?無可置疑,在虛擬機(jī)內(nèi)運(yùn)行容器的性能會(huì)低于直接在物理機(jī)上運(yùn)行容器的性能,但是兩者之間的差距到底有多大?VMware的測(cè)試報(bào)告[23]指出兩點(diǎn):第一點(diǎn),把一個(gè)應(yīng)用運(yùn)行在基于vSphere虛擬機(jī)內(nèi)的容器上與運(yùn)行在直接部署在物理機(jī)上的容器上相比,兩者之間的性能差別不到5%;第二點(diǎn),把一個(gè)應(yīng)用運(yùn)行在vSphere虛擬機(jī)上與運(yùn)行在基于vSphere虛擬機(jī)的容器上相比,兩者之間的性能幾乎沒有任何差別。所以,用不到5%的性能損失換取安全性能的提高和方便的監(jiān)控和管理工具是完全值得的。
在虛擬機(jī)內(nèi)運(yùn)行容器是當(dāng)前研究的一個(gè)熱點(diǎn),特別是傳統(tǒng)的虛擬化公司希望借助于自己多年來在虛擬化領(lǐng)域的技術(shù)沉淀來迎接容器虛擬化帶來的挑戰(zhàn)。從當(dāng)前的初步結(jié)果來看,這種方式是一個(gè)很有潛力的快速解決容器弱點(diǎn)的途徑。相信在傳統(tǒng)虛擬化公司的帶領(lǐng)下,容器和虛擬機(jī)技術(shù)會(huì)更加融合,在虛擬機(jī)內(nèi)運(yùn)行容器將會(huì)成為一種趨勢(shì)。
4.3 以容器為中心的云計(jì)算時(shí)代即將開始
Docker容器技術(shù)的出現(xiàn)給云計(jì)算行業(yè)帶來了顛覆性的改變。過去的幾年中,在以Docker為代表的容器技術(shù)在不斷發(fā)展的同時(shí),云計(jì)算行業(yè)也在研究如何迎接容器技術(shù)給云計(jì)算平臺(tái)帶來的挑戰(zhàn)和機(jī)會(huì)。IaaS平臺(tái)開發(fā)商在研究如何在平臺(tái)上引進(jìn)對(duì)容器的支持,PaaS平臺(tái)開發(fā)商也在研究如何利用容器技術(shù)來改進(jìn)平臺(tái)。隨著容器技術(shù)不斷走向成熟,以容器為核心的云計(jì)算時(shí)代即將開始。通過把第一代云計(jì)算的IaaS層與PaaS層的合二為一,CaaS將會(huì)成為新一代的云計(jì)算架構(gòu)。
Amazon AWS已經(jīng)提供容器管理服務(wù)ECS(Amazon EC2 Container Service)。ECS提供高度可擴(kuò)展的高性能容器管理服務(wù),目前它支持 Docker 容器從而使用戶可以在租用的 Amazon EC2 實(shí)例群集上通過容器輕松地運(yùn)行應(yīng)用程序。Amazon ECS的用戶不需要關(guān)心安裝、運(yùn)維、擴(kuò)展和管理集群基礎(chǔ)設(shè)施,只需簡(jiǎn)單地調(diào)用 API 便可以啟動(dòng)和停止Docker 應(yīng)用程序,查詢集群的整體狀態(tài)。同時(shí),用戶還可以使用Amazon EC2的其他功能,包括安全組、Elastic Load Balancing和EBS 卷等。 Amazon ECS還可以根據(jù)應(yīng)用的資源需求和可用性要求在集群中設(shè)置和安排容器。
Microsoft Azure也引進(jìn)了對(duì)容器的支持,Azure 容器服務(wù)提供了一個(gè)優(yōu)化的容器托管服務(wù)。用戶可以方便地創(chuàng)建、設(shè)置和管理專門用來運(yùn)行容器的虛擬機(jī)集群。用戶可以設(shè)置容器集群的大小,并且可以選擇流行的容器編排引擎Kubernetes、Marathon或者Swarm來部署自己的應(yīng)用。
Google 容器引擎是一個(gè)功能強(qiáng)大的用來運(yùn)行Docker容器的集群管理和編排系統(tǒng)。容器引擎負(fù)責(zé)使用編排和部署用戶的容器到集群中,并且負(fù)責(zé)根據(jù)用戶定義的需求對(duì)容器進(jìn)行管理。Google容器引擎建立在Kubernetes開源編排系統(tǒng)之上。
開源云計(jì)算系統(tǒng)OpenStack從2014年就開始努力添加對(duì)容器的支持,并且在Liberty版本中提供了Swarm和Kubernetes編排引擎功能。OpenStack的最終目標(biāo)是想提供一套兼容的API來統(tǒng)一管理物理機(jī)、虛擬機(jī)和容器。OpenStack的Magnum項(xiàng)目的任務(wù)就是實(shí)現(xiàn)在OpenStack中提供多租戶CaaS服務(wù)。盡管OpenStack當(dāng)前版本對(duì)容器的支持還不理想,相信在后面的版本中會(huì)不斷進(jìn)行完善。
Docker不僅掀起了IaaS服務(wù)提供商對(duì)容器支持的熱潮,同時(shí)也極大地推動(dòng)了PaaS平臺(tái)的發(fā)展。PaaS的目標(biāo)是提供一個(gè)讓開發(fā)者可以快速開發(fā)、部署和全周期管理應(yīng)用的環(huán)境,而容器技術(shù)的優(yōu)勢(shì)就是使應(yīng)用的開發(fā)和管理變得簡(jiǎn)單方便。早期的PaaS平臺(tái)支持許多上傳應(yīng)用及其包裝和依賴的方法,隨著開發(fā)者開始使用Docker容器作為包裝和轉(zhuǎn)移應(yīng)用的方法,支持Docker容器已經(jīng)成為PaaS平臺(tái)的一種新局勢(shì)。三大PaaS公司的產(chǎn)品, Pivotal的Cloud Foundry、Red Had的OpenShift和Apprenda,都開始支持容器。
Red Hat在2015年頒布了OpenShift Enterprise 3,一個(gè)基于Docker容器、Kubernetes容器引擎和Red Hat Enterprise Linux 7的容器應(yīng)用平臺(tái)。
2016年3月Apprenda也宣布在其PaaS平臺(tái)上支持Kubernetes。Apprenda過去以支持傳統(tǒng)的.NET和Java應(yīng)用為主,通過支持Kubernetes,Apprenda希望成為一個(gè)可以管理傳統(tǒng)應(yīng)用、微應(yīng)用和容器應(yīng)用的通用平臺(tái)。
Cloud Foundry從一開始就使用了容器的概念,并引入了容器管理平臺(tái)Warden,但是該容器格式與Docker容器不一樣。隨著Docker容器得到了廣泛采用,Cloud Foundry也計(jì)劃支持Docker。為此,Cloud Foundry重新開發(fā)了其容器管理平臺(tái),改名為Garden。
總之,Docker容器的出現(xiàn)徹底打亂了原來云計(jì)算發(fā)展的進(jìn)程,支持容器成為了IaaS和PaaS平臺(tái)的必要功能,以容器為核心的云計(jì)算時(shí)代即將開始。
Docker的出現(xiàn)使得以容器為單位的云平臺(tái)成為可能。相比傳統(tǒng)系統(tǒng)虛擬化技術(shù),Docker可以讓更多數(shù)量的應(yīng)用程序在同一硬件上運(yùn)行;可以讓開發(fā)人員更容易快速構(gòu)建可隨時(shí)運(yùn)行的容器化應(yīng)用程序;可以大大簡(jiǎn)化管理和部署應(yīng)用程序的任務(wù)。任何后端的服務(wù)程序,都可以封裝在Docker容器中進(jìn)行銷售、分發(fā)和部署,后端開發(fā)者能像Mobile App開發(fā)者那樣去做自己的產(chǎn)品。Docker的分布式特點(diǎn)令其具有大好的發(fā)展前景。
但是,傳統(tǒng)的虛擬技術(shù)并不會(huì)被容器取代。容器技術(shù)和虛擬機(jī)并非簡(jiǎn)單的取舍關(guān)系。舉例來說,如果我們需要在多臺(tái)服務(wù)器上運(yùn)行多款應(yīng)用程序,并且需要多種操作系統(tǒng),那么最理想的方案就是使用虛擬機(jī)。在另一方面,如果需要運(yùn)行同一應(yīng)用程序的多套副本,那么容器則擁有更多成本優(yōu)勢(shì)。另外,盡管容器允許開發(fā)者將應(yīng)用程序拆分成多個(gè)功能組件,但這種分散化趨勢(shì)意味著用戶需要管理更多功能部件,即帶來更為復(fù)雜的控制與協(xié)調(diào)任務(wù)。還有,安全也是Docker容器需要解決的一大難題。由于各容器共享同一套內(nèi)核,因此不同容器之間的屏障相對(duì)薄弱。與只需要調(diào)用主機(jī)虛擬機(jī)管理程序的虛擬機(jī)方案不同,Docker容器需要向主機(jī)內(nèi)核發(fā)出系統(tǒng)調(diào)用,而這會(huì)帶來更龐大的攻擊面。
盡管容器技術(shù)目前還不夠完善,其生態(tài)鏈還不成熟,但已經(jīng)有很多廠商已經(jīng)開始使用。同時(shí)一批圍繞Docker建立起來的初創(chuàng)企業(yè)已經(jīng)形成, 學(xué)習(xí)Docker風(fēng)氣正盛。可以預(yù)見在不遠(yuǎn)的將來,CaaS和基于Docker的PaaS會(huì)獲得更多云計(jì)算服務(wù)提供商的支持,越來越多的企業(yè)會(huì)使用基Docker提供的云服務(wù),以容器為核心的云計(jì)算時(shí)代即將到來。
References)
[1] 楊保華, 戴王劍, 曹亞侖. Docker技術(shù)入門與實(shí)戰(zhàn)[M]. 北京:機(jī)械工業(yè)出版社, 2015:1-15.(YANG B H, DAI W J, CAO Y L. Docker Technology Introduction and Actual Combat[M]. Beijing: China Machine Press, 2015:1-15.)
[2] PLANK J S. Erasure codes for storage systems: a brief primer[J].;login:the magazine of USENIX & SAGE, 2013, 38(6): 44-50.
[3] BELL J. Apache spark[EB/OL]. [2016- 03- 10]. http://onlinelibrary.wiley.com/doi/10.1002/9781119183464.ch11/summary.
[4] 從容器和Kubernetes技術(shù)看現(xiàn)代云計(jì)算的發(fā)展軌跡[EB/OL]. [2016- 10- 16]. http://dockone.io/article/140.(The development track of modern cloud computing from container and Kubernetes Technology[EB/OL]. [2016- 10- 16]. http://dockone.io/article/140.)
[5] 武志學(xué). 云計(jì)算導(dǎo)論:概念 架構(gòu)與應(yīng)用[M]. 北京:人民郵電出版社, 2016:43-52.(WU Z X. Introduction to Cloud Computing: Concepts Frameworks and Applications[M]. Beijing: Posts and Telecom Press, 2016:43-52.)
[6] IBM虛擬化與云計(jì)算小組. 虛擬化與云計(jì)算[M]. 北京:電子工業(yè)出版社, 2010.(IBM virtualization and cloud computing group. Virtualization and Cloud Computing[M]. Beijing: Publishing House of Electronics Industry, 2010.)
[7] PRATT I, FRASER K, HAND S, et al. Xen 3.0 and the art of virtualization[J]. Proceedings of the Ottawa Linux Symposium, 2005, 36(5):164-177.
[8] 馬博峰. VMware、Citrix和Microsoft虛擬化技術(shù)詳解與應(yīng)用實(shí)踐[M]. 北京:機(jī)械工業(yè)出版社, 2013.(MA B F. VMware, Citrix and Microsoft Virtualization Technology Explanation and Application Practice[M]. Beijing: China Machine Press, 2013.)
[9] KIVITY A, KAMAY Y, LAOR D, et al. KVM: the Linux virtual machine monitor[EB/OL]. [2016- 03- 10]. https://www.kernel.org/doc/ols/2007/ols2007v1-pages-225-230.pdf.
[10] ROSEN R. Linux Kernel Networking: Implementation and Theory[M]. Berkeley: Apress, 2014:405-482.
[11] 汪愷, 張功萱, 周秀敏. 基于容器虛擬化技術(shù)研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015, 25(8):138-141.(WANG K, ZHANG G X, ZHOU X M. Research on virtualization technology based on container[J]. Computer Technology and Development, 2015, 25(8):138-141.)
[12] What is docker [EB/OL]. [2016- 10- 15]. https://www.docker.com.
[13] MERKEL D. Docker: lightweight Linux containers for consistent development and deployment[J]. Linux Journal, 2014, 2014(239): Article No. 2.
[14] Docker v1.10 正式版 發(fā)布[Z/OL]. [2016- 03- 10]. https://www.oschina.net/news/70489/docker-1-10-0-final.(Docher v1.10 official version [Z/OL]. [2016- 03- 10]. https://www.oschina.net/news/70489/docker-1-10-0-final.)
[15] BIEDERMAN E W. Multiple instances of the global Linux namespaces[EB/OL]. [2016- 03- 10]. https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf.
[16] WRIGHT C P, ZADOK E. Kernel korner — unionfs: bringing filesystems together[J]. Linux Journal, 2004,2004(128):24-27.
[17] PIRAGHAJ S F, DASTJERDI A V, CALHEIROS R N, et al. Efficient virtual machine sizing for hosting containers as a service (SERVICES 2015)[C]// Proceedings of the 2015 IEEE World Congress on Services. Piscataway, NJ: IEEE, 2015:31-38.
[18] 王亞玲, 李春陽, 崔蔚, 等.基于Docker的PaaS平臺(tái)建設(shè)[J]:計(jì)算機(jī)系統(tǒng)應(yīng)用, 2016, 25(3):72-77.(WANG Y L, LI C Y, CUI W, et al. Construction of PaaS platform based on Docker[J]. Computer Application Systems, 2016, 25(3):72-77.)
[19] FELTER W, FERREIRA A, RAJAMONY R, et al. An updated performance comparison of virtual machines and Linux containers[C]// Proceedings of the 2015 IEEE International Symposium on Performance Analysis of Systems and Software. Washington, DC: IEEE Computer Society, 2015:171-172.
[20] Docker support in XenServer, the ultimate guide[Z/OL]. [2016- 12- 16]. https://xen-orchestra.com/blog/docker-support-in-xenserver-the-ultimate-guide/.
[21] vSphere integrated containers — technology walkthrough[Z/OL]. [2016- 12- 16]. https://blogs.vmware.com/vsphere/2015/10/vsphere-integrated-containers-technology-walkthrough.html.
[22] Docker containers coming to a Microsoft or Linux server near you [Z/OL]. [2014- 10- 15]. https://msopentech.com/blog/2014/10/15/docker-containers-coming-microsoft-linux-server-near/.
[23] Docker containers performance in VMware vSphere[Z/OL]. [2016- 12- 22]. http://blogs.vmware.com/performance/2014/10/docker-containers-performance-vmware-vsphere.html.
WU Zhixue, born in 1960, Ph. D., professor. His research interests include cloud computing, streaming data processing, data mining.
Advances on virtualization technology of cloud computing
WU Zhixue1,2*
(1. Chengdu Wuzhou Handge Technology Limited, Chengdu Sichuan 611731, China;2. School of Information Security Engineering, Chengdu University of Information Technology, Chengdu Sichuan 610225, China)
Cloud computing is a new computing model focused on the capability of data and its processing. It integrates a number of information and communication technologies, including virtualization, distributed data storage, distributed parallel programming model, big data management and distributed resource management. After more than a decade of development, cloud computing has entered a rapid growth period, more and more enterprises have adapted to cloud computing services. At the same time, the key technologies of cloud computing have advanced as well. The new generation technologies are enhancing and even replacing the existing technologies. Container is a new type virtualization technology. With its lightweight, elastic and fast advantages, container challenges the traditional virtual machine technology, and brings changes to the architecture and implementation of both the Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). Container virtualization technology was described in detail, the advantages and disadvantages, the suitable use cases of container and virtual machine technology were compared and analyzed, then the future research directions and development trends of cloud computing virtualization technology were prospected.
cloud computing; virtualization; Docker; container; virtual machine
2016- 10- 18;
2017- 01- 06。
武志學(xué)(1960—),男,山西河津人,教授,博士,主要研究方向:云計(jì)算、流式數(shù)據(jù)處理、數(shù)據(jù)挖掘。
1001- 9081(2017)04- 0915- 09
10.11772/j.issn.1001- 9081.2017.04.0915
TP391
A