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