容器虛擬化與傳統(tǒng)虛擬化技術(shù)在數(shù)據(jù)中心里的較量
虛擬化是新一代數(shù)據(jù)中心最為關(guān)鍵的技術(shù)之一,是實(shí)現(xiàn)云計(jì)算的基礎(chǔ)。我們知道云計(jì)算的核心是資源的網(wǎng)絡(luò)化共享與應(yīng)用,實(shí)現(xiàn)人們?cè)L問網(wǎng)絡(luò)資源就像是訪問本地資源一樣,所有應(yīng)用都在虛擬的基礎(chǔ)上而不是真實(shí)的基礎(chǔ)上運(yùn)行,要實(shí)現(xiàn)這些都要依仗虛擬技術(shù)。數(shù)據(jù)中心引入虛擬化技術(shù),可以節(jié)約成本開支,降低部署成本、提高工作效率。其中服務(wù)器虛擬化只需要較少的硬件資源就能運(yùn)行多重應(yīng)用程序和操作系統(tǒng),能允許用戶根據(jù)自身需求快速調(diào)配新的資源。還有存儲(chǔ)虛擬化、內(nèi)存虛擬化、操作系統(tǒng)虛擬化、網(wǎng)絡(luò)虛擬化、數(shù)據(jù)中心虛擬化等等,不同的數(shù)據(jù)中心存在著對(duì)不同虛擬化技術(shù)的需求,才衍生出來(lái)這么多虛擬化技術(shù)。不管怎樣,虛擬化已經(jīng)成為云數(shù)據(jù)中心建設(shè)和發(fā)展不可或缺的技術(shù)。
虛擬化技術(shù)改變了現(xiàn)代計(jì)算方式,它能夠提升系統(tǒng)資源使用效率、消除應(yīng)用程序和底層硬件之間的依賴關(guān)系,同時(shí)加強(qiáng)負(fù)載的可移植性和安全性。虛擬化實(shí)質(zhì)上再現(xiàn)了整個(gè)物理服務(wù)器作為一個(gè)虛擬機(jī)運(yùn)行一個(gè)應(yīng)用,作用是抽象服務(wù)器資源,每臺(tái)虛擬機(jī)都能夠獲取唯一的操作系統(tǒng)和負(fù)載。不過(guò)虛擬機(jī)技術(shù)帶來(lái)的麻煩是每個(gè)實(shí)例都需要運(yùn)行客戶端操作系統(tǒng)的完整副本以及其中包含的大量應(yīng)用程序,由此會(huì)產(chǎn)生沉重的負(fù)載,這將會(huì)影響其工作效率及性能表現(xiàn)。在這樣的需求背景下,容器技術(shù)出現(xiàn)了。容器要比傳統(tǒng)虛擬化技術(shù)更高效,容器并非虛擬化或抽象整個(gè)硬件,而只是抽象應(yīng)用或應(yīng)用的部分,如此粒度的虛擬化意味著資源將不會(huì)浪費(fèi)在冗余的部分,同時(shí)還可以降低CPU、內(nèi)存和存儲(chǔ)需求,所以容器技術(shù)也是一種虛擬化技術(shù)。
容器虛擬化具有輕量級(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)完畢;容器虛擬化實(shí)現(xiàn)應(yīng)用程序以標(biāo)準(zhǔn)方式進(jìn)行格式化,之后才放到容器中。在容器中,每種類型的應(yīng)用程序都以同樣的方式在網(wǎng)絡(luò)上移動(dòng)。這樣一來(lái),容器可以通過(guò)互聯(lián)網(wǎng)或內(nèi)部網(wǎng)絡(luò)來(lái)移動(dòng);容器虛擬化提供了更高級(jí)的隔離機(jī)制,許多應(yīng)用程序在主機(jī)操作系統(tǒng)下運(yùn)行,所有應(yīng)用程序共享某些操作系統(tǒng)庫(kù)和操作系統(tǒng)的內(nèi)核,避免運(yùn)行中的容器彼此沖突;容器虛擬化可以將一個(gè)大型的應(yīng)用程序分解成許多小型應(yīng)用程序,每個(gè)小應(yīng)用程序都在各自的容器里面。比如:打折奢侈品網(wǎng)站Gilt就把七個(gè)大型應(yīng)用程序分解成了300個(gè)微服務(wù),一支小隊(duì)伍維護(hù)每個(gè)服務(wù),如某一個(gè)微服務(wù)出現(xiàn)問題,可以迅速回滾/恢復(fù)。容器虛擬化技術(shù)安全度更高,容器之間可以彼此獨(dú)立地訪問。修改一層的代碼更改可以在不影響其他層的情況下執(zhí)行。這樣一來(lái),代碼更改起來(lái)比在典型的整體式應(yīng)用程序中來(lái)得安全。
數(shù)據(jù)中心引入容器虛擬化技術(shù)也有其固有弊端,就是單個(gè)操作系統(tǒng)有可能引起影響所有相關(guān)實(shí)例的單點(diǎn)事故。比如,惡意軟件或者主機(jī)操作系統(tǒng)崩潰可能禁用或者影響所有容器,還有容器更容易完成遷移,但卻只能被遷移到具有兼容操作系統(tǒng)內(nèi)核的其他服務(wù)器當(dāng)中,這樣會(huì)無(wú)形中減少遷移選擇;彼此鄰近的容器共享處理器、內(nèi)存和磁盤等資源,這種行為讓安全專業(yè)人員深為擔(dān)憂,與傳統(tǒng)虛擬化相比,面臨更為嚴(yán)峻的安全隱患。比如若允許兩個(gè)容器彼此對(duì)話,其中一個(gè)容器被裝入了惡意代碼,窺視被允許查看的數(shù)據(jù)當(dāng)中的加密密鑰,各種機(jī)密數(shù)據(jù)可能會(huì)落到惡意軟件的手中;還有容器虛擬化技術(shù)的代表當(dāng)屬Docker,Docker也不過(guò)才出現(xiàn)三年,在2014年Docker剛剛出來(lái),所以到現(xiàn)在技術(shù)仍在不斷完善之中,而傳統(tǒng)虛擬機(jī)技術(shù)是一項(xiàng)高度發(fā)展、非常成熟的技術(shù),早已在成千上萬(wàn)的數(shù)據(jù)中心里使用著,數(shù)據(jù)中心在引入容器技術(shù)時(shí)都會(huì)有所顧忌?,F(xiàn)在,只有在一些技術(shù)積累雄厚的大型互聯(lián)網(wǎng)公司才愿意嘗鮮容器技術(shù),并不具有普遍意義;正是因?yàn)槭切录夹g(shù),所以用于監(jiān)控和管理容器的工具種類也十分缺乏,目前只有谷歌開源Docker管理工具Kubernetes,很多時(shí)候還有借助于傳統(tǒng)虛擬化技術(shù)的工具,缺少容器專業(yè)管理工具。
容器技術(shù)為應(yīng)用程序提供了隔離的運(yùn)行空間,每個(gè)容器內(nèi)都包含一個(gè)獨(dú)享的完整用戶環(huán)境空間,并且一個(gè)容器內(nèi)的變動(dòng)不會(huì)影響其他容器的運(yùn)行環(huán)境。一個(gè)數(shù)據(jù)中心是采用傳統(tǒng)虛擬化技術(shù)還是容器技術(shù),要考慮數(shù)據(jù)中心現(xiàn)實(shí)情況。如果從數(shù)據(jù)中心更關(guān)注服務(wù)器虛擬化的角度來(lái)尋找最好的環(huán)境隔離方案,那么傳統(tǒng)的系統(tǒng)級(jí)虛擬化是更好的選擇;如果數(shù)據(jù)中心需要將應(yīng)用運(yùn)行的實(shí)例進(jìn)行隔離,那么對(duì)于管理應(yīng)用運(yùn)行環(huán)境、啟動(dòng)應(yīng)用實(shí)例以及控制資源開銷方面容器將是一個(gè)極為高效的工具,應(yīng)該大膽選擇容器技術(shù)。不過(guò)雖然容器技術(shù)擁有很強(qiáng)的兼容性,但仍然不能完全取代現(xiàn)有的虛擬機(jī)環(huán)境,容器并不是一種能夠滿足所有虛擬化任務(wù)的解決方案,只是虛擬化工具箱提供的另外一種工具。所以數(shù)據(jù)中心要采用哪種虛擬化技術(shù),一定要權(quán)衡利弊,找最適合自己的技術(shù)。當(dāng)然,在一個(gè)數(shù)據(jù)中心,也可以兩種技術(shù)共存,這兩種技術(shù)并不是互斥的,只是適用的場(chǎng)合有所差異,各有利弊。如此便可以在不同的服務(wù)器中去部署兩種技術(shù),以此來(lái)滿足不同的應(yīng)用需要,通常容器虛擬化可以和傳統(tǒng)虛擬機(jī)很好地協(xié)同工作。