虛擬化技術(shù)起源于服務(wù)器,后來在網(wǎng)絡(luò)設(shè)備中也出現(xiàn),雖然都叫虛擬化技術(shù),但是實(shí)現(xiàn)的原理是完全不同的,網(wǎng)絡(luò)設(shè)備中的虛擬化也不能像服務(wù)器中的虛擬化可以虛擬化出數(shù)百或上千的虛擬設(shè)備,實(shí)現(xiàn)的技術(shù)也完全不同。本文著重講述的是服務(wù)器中的虛擬化技術(shù)。服務(wù)器是數(shù)據(jù)中心最為重要的組成部分,所有的應(yīng)用服務(wù)都要安裝在服務(wù)器上,并運(yùn)行,所以服務(wù)器上的虛擬化技術(shù)與應(yīng)用最為密切相關(guān)。從早年的虛擬機(jī)技術(shù)到如今的容器技術(shù),都是虛擬化技術(shù)的典型代表。
虛擬機(jī)技術(shù),很多人可能都不陌生。不少人自己也在PC上安裝過虛擬機(jī),這也是實(shí)現(xiàn)虛擬化的一個(gè)實(shí)踐。虛擬機(jī)技術(shù)可以分為兩大類:硬件虛擬化技術(shù)和指令集虛擬化技術(shù),硬件虛擬化技術(shù)的典型代表是VMware、Xen等,指令集虛擬化技術(shù)的典型代表時(shí)Qemu、Boch等。虛擬機(jī)技術(shù)在數(shù)據(jù)中心早已深入人心,在數(shù)據(jù)中心也已普及應(yīng)用多年,正是應(yīng)用普遍,可以衍生出了不少細(xì)分技術(shù),儼然已經(jīng)成為數(shù)據(jù)中心虛擬化技術(shù)的重要代表之一。通過虛擬機(jī)技術(shù),可以在一臺(tái)物理服務(wù)器上模擬出一臺(tái)或多臺(tái)虛擬的計(jì)算機(jī),這些虛擬機(jī)完全就像真正的計(jì)算機(jī)那樣進(jìn)行工作,例如可以安裝操作系統(tǒng)、安裝應(yīng)用程序、訪問網(wǎng)絡(luò)資源等等。
對(duì)于使用者而言,它只是運(yùn)行在你物理計(jì)算機(jī)上的一個(gè)應(yīng)用程序,但是對(duì)于在虛擬機(jī)中運(yùn)行的應(yīng)用程序而言,它就像是在真正的計(jì)算機(jī)中進(jìn)行工作。因此,當(dāng)在虛擬機(jī)中進(jìn)行軟件評(píng)測(cè)時(shí),可能系統(tǒng)一樣會(huì)崩潰,但是,崩潰的只是虛擬機(jī)上的操作系統(tǒng),而不是物理計(jì)算機(jī)上的操作系統(tǒng),并且使用虛擬機(jī)的恢復(fù)功能,可以馬上恢復(fù)虛擬機(jī)到安裝軟件之前的狀態(tài)。
容器技術(shù)是通過虛擬化操作系統(tǒng)的方式來管理代碼和應(yīng)用程序,是在2013年才開始出現(xiàn)并迅速興起的一種虛擬化技術(shù),容器技術(shù)主要是由一些技術(shù)型創(chuàng)新企業(yè)設(shè)計(jì)開發(fā)的,比如: BlueData、CoreOS、Docker、Kismatic、PortWorx等等,其中最為出名的要屬Docker技術(shù),Docker幾乎成為了容器技術(shù)的代表。容器技術(shù)是讓你可以將更多的計(jì)算工作負(fù)載塞入到單單一臺(tái)服務(wù)器上,并且讓你可以在一瞬間為新的計(jì)算任務(wù)提高增加容量。
從理論上來說,這意味著你可以購買較少的硬件,自建或租賃較少的數(shù)據(jù)中心場(chǎng)地,并且雇用較少的人手來管理這些設(shè)備。每個(gè)容器內(nèi)都包含一個(gè)獨(dú)享的完整用戶環(huán)境空間,并且一個(gè)容器內(nèi)的變動(dòng)不會(huì)影響其他容器的運(yùn)行環(huán)境。為了能達(dá)到這種效果,容器技術(shù)使用了一系列的系統(tǒng)級(jí)別的機(jī)制諸如利用Linux namespaces來進(jìn)行空間隔離,通過文件系統(tǒng)的掛載點(diǎn)來決定容器可以訪問哪些文件,通過cgroups來確定每個(gè)容器可以利用多少資源。此外容器之間共享同一個(gè)系統(tǒng)內(nèi)核,這樣當(dāng)同一個(gè)庫被多個(gè)容器使用時(shí),內(nèi)存的使用效率會(huì)得到提升。
虛擬機(jī)和容器兩大技術(shù),從描述上看目的都是虛擬化,但是技術(shù)熱點(diǎn)和實(shí)現(xiàn)方式則完全不同。虛擬機(jī)提供了專用操作系統(tǒng)的安全性和更牢固的邏輯邊界。如果是虛擬機(jī),虛擬機(jī)管理程序與硬件對(duì)話,就如同虛擬機(jī)的操作系統(tǒng)和應(yīng)用程序構(gòu)成了一個(gè)單獨(dú)的物理機(jī)。虛擬機(jī)中的操作系統(tǒng)可以完全不同于主機(jī)的操作系統(tǒng)。而容器具有輕量級(jí)特性,所需的內(nèi)存空間較少,提供非??斓膯?dòng)速度,創(chuàng)建容器的速度比虛擬機(jī)要快得多,那是由于虛擬機(jī)必須從存儲(chǔ)系統(tǒng)檢索10GB至20GB的操作系統(tǒng)。容器中的工作負(fù)載使用主機(jī)服務(wù)器的操作系統(tǒng)內(nèi)核,避免了這一步,容器可以在二十分之一秒內(nèi)啟動(dòng)完畢。擁有這么快的速度讓開發(fā)團(tuán)隊(duì)可以激活項(xiàng)目代碼,以不同的方式測(cè)試代碼,或者在其網(wǎng)站上推出額外的電子商務(wù)容量――這一切都非???。虛擬機(jī)和容器都具有高度可移植性,但方式不一樣。就虛擬機(jī)而言,可以在運(yùn)行同一虛擬機(jī)管理程序(通常是VMware的ESX、微軟的Hyper-V或者開源Zen或KVM)的多個(gè)系統(tǒng)之間進(jìn)行移植。而容器不需要虛擬機(jī)管理程序,因?yàn)樗c某個(gè)版本的操作系統(tǒng)綁定在一起。
但是容器中的應(yīng)用程序可以移到任何地方,只要那里有一份該操作系統(tǒng)的副本。容器技術(shù)使得應(yīng)用程序以標(biāo)準(zhǔn)方式進(jìn)行了格式化,之后才放到容器中。開發(fā)人員可以使用同樣的工具和工作流程,不管目標(biāo)操作系統(tǒng)是什么。一旦在容器中,每種類型的應(yīng)用程序都以同樣的方式在網(wǎng)絡(luò)上移動(dòng)。這樣一來,容器酷似虛擬機(jī),它們又是程序包文件,可以通過互聯(lián)網(wǎng)或內(nèi)部網(wǎng)絡(luò)來移動(dòng)。當(dāng)然,容器技術(shù)沒有虛擬機(jī)技術(shù)那么成熟。虛擬機(jī)是一項(xiàng)高度發(fā)展、非常成熟的技術(shù),事實(shí)證明可以運(yùn)行在最關(guān)鍵的業(yè)務(wù)工作負(fù)載。容器技術(shù)也開始在谷歌、阿里等互聯(lián)網(wǎng)公司中得到應(yīng)用推廣,隨著技術(shù)的成熟與穩(wěn)定,大有取代虛擬機(jī)技術(shù)之勢(shì)。當(dāng)然不能忽略的是,容器技術(shù)也面臨著一些未解決的問題。比如:安全問題,相鄰的容器共享處理器、內(nèi)存和磁盤等資源,這種行為讓安全專業(yè)人員深為擔(dān)憂。容器技術(shù)在一個(gè)計(jì)算機(jī)上只能運(yùn)行一個(gè)應(yīng)用程序,限制了應(yīng)用程序的處理規(guī)模。所以容器是值得使用的技術(shù),不過要謹(jǐn)慎使用,需深思熟慮,而不是貿(mào)然行動(dòng)。
在數(shù)據(jù)中心的虛擬化進(jìn)程中,到底采用虛擬機(jī)還是容器?這最終還是取決于你的需求。如果你只是希望將應(yīng)用運(yùn)行的實(shí)例進(jìn)行隔離,那么對(duì)于管理應(yīng)用運(yùn)行環(huán)境、啟動(dòng)應(yīng)用實(shí)例以及控制資源 開銷方面容器將是一個(gè)極為高效的工具。如果你從服務(wù)器虛擬化的角度來尋找最好的環(huán)境隔離方案,那么系統(tǒng)級(jí)的虛擬化是更好的方案:和容器相比,鄰居租戶對(duì)系統(tǒng)的影響在虛擬化的方案下將不是一個(gè)問題。盡管現(xiàn)在很多容器都在專注于提高其隔離能力,但是虛擬機(jī)的隔離還是要優(yōu)于容器。從物理服務(wù)器過渡到虛擬服務(wù)器是一個(gè)很自然的過程,并且現(xiàn)在針對(duì)虛擬服務(wù)器的管理的生態(tài)系統(tǒng)也很完善。當(dāng)然兩者并不是對(duì)立的,我們可以在一個(gè)容器中運(yùn)行一個(gè)虛擬機(jī),也可以在一個(gè)虛擬機(jī)中運(yùn)行一個(gè)容器,還可以在一個(gè)虛擬機(jī)中運(yùn)行多個(gè)容器,兩種技術(shù)走向融合,這樣才能讓兩種虛擬化技術(shù)在數(shù)據(jù)中心里發(fā)揮更大的作用。