容器與虛擬機(jī)管理程序之戰(zhàn)剛開始打響
譯文Xen項(xiàng)目社區(qū)開發(fā)了一種開源類型1或裸機(jī)虛擬機(jī)管理程序;有了這種虛擬機(jī)管理程序,用戶就可以在單單一個(gè)機(jī)器(或主機(jī))上并行運(yùn)行一個(gè)操作系統(tǒng)的多個(gè)實(shí)例,或者甚至并行運(yùn)行不同的操作系統(tǒng)。
首先允許本人闡明一點(diǎn):我喜歡Docker。我認(rèn)為這是項(xiàng)優(yōu)秀的技術(shù)。我能設(shè)想在各種各樣的場景下,一種輕型、容器化的部署機(jī)制確實(shí)很出色,盡管它沒有虛擬機(jī)管理程序在底層保護(hù)主機(jī)操作系統(tǒng)的優(yōu)點(diǎn)。我覺得它很酷。
不過,少數(shù)幾個(gè)人在大聲宣稱:“戰(zhàn)爭已結(jié)束!容器已勝出!虛擬機(jī)管理程序已過時(shí)了!”
不好意思,這種觀點(diǎn)大錯(cuò)特錯(cuò)了。
這就好比一名捍衛(wèi)冠軍頭銜的拳擊手在第一個(gè)回會(huì)中給對(duì)手幾記重拳后就大喊大叫:“比賽結(jié)束了!我獲勝了!我是衛(wèi)冕冠軍!”
我們都知道事實(shí)不是這樣子。最終,冠軍頭銜落到贏得比賽的那一方。而回到正題,容器與虛擬機(jī)管理程序之戰(zhàn)還沒有結(jié)束,只是剛拉開了帷幕。
為容器正名
Docker及其他Linux容器背后的概念很靠譜:
• 由于從虛擬機(jī)本身去除了冗余或不必要的操作系統(tǒng)要素,非常小的虛擬機(jī)讓用戶可以大大提高服務(wù)器密度。
• 巧妙封裝的虛擬機(jī)規(guī)模很容易轉(zhuǎn)移、復(fù)制和控制,從而確保了很高的可移植性。
• 虛擬機(jī)軟件堆棧很小巧,杜絕了這個(gè)問題:構(gòu)建一大堆的針對(duì)特定版本的操作系統(tǒng)以及復(fù)制和維護(hù)起來需要投入大量精力的工具。
• 極快的啟動(dòng)時(shí)間有助于獲得更靈活的基礎(chǔ)設(shè)施,有更大的活動(dòng)余地迅即滿足當(dāng)下的需求。
不過,面臨的挑戰(zhàn)在于,“共享內(nèi)核”策略的安全攻擊面在這個(gè)“共享內(nèi)核”本身中存在其最薄弱的一環(huán)。要是某個(gè)不懷好意的黑客設(shè)法闖入了這個(gè)共享內(nèi)核,使用該共享內(nèi)核的所有實(shí)例都有可能岌岌可危。
當(dāng)然,傳統(tǒng)虛擬機(jī)管理程序存在類似的問題――要是你能闖入虛擬機(jī)管理程序,就有可能闖入它所運(yùn)行的虛擬機(jī)――但業(yè)界在加固安裝的虛擬機(jī)管理程序方面有著多年的豐富經(jīng)驗(yàn)。雖然這不是懶漢就能完成的任務(wù),但也不是什么高深莫測的任務(wù)。世界上成百上千的成功的虛擬化和云計(jì)算提供商都能證明這項(xiàng)任務(wù)的易管理性:從亞馬遜、Rackspace、韋里遜和華為等巨頭,直到比較小的本地和專業(yè)服務(wù)提供商,后者的知名度要小得多。
堅(jiān)稱容器占有優(yōu)勢的一些人援引谷歌就是個(gè)典例。他們表示,通過設(shè)計(jì)可在容器上安全運(yùn)行的Google Docs應(yīng)用程序架構(gòu),谷歌儼然指明了一條出路。
可是谷歌是個(gè)例外。它有實(shí)力聘得起成千上萬的頂尖人才,完成很少有其他公司能完成的重任。我在這個(gè)行業(yè)摸爬滾打了30年,而且在現(xiàn)場與客戶打了20年的交道,懷疑大多數(shù)企業(yè)很容易做到谷歌所做的事情。
理想的解決方案就是,提供容器的優(yōu)點(diǎn),同時(shí)實(shí)際上減小攻擊面。在云計(jì)算時(shí)代,系統(tǒng)需要比以往任何時(shí)候更高的安全性。共享內(nèi)核場景根本提供不了這種安全性。
實(shí)際上,形勢非常緊迫,以至于多名Docker高級(jí)用戶在芝加哥召開的LinuxCon北美大會(huì)上宣布,他們在傳統(tǒng)的虛擬機(jī)中使用Docker,以增強(qiáng)安全性。連Docker新的合作伙伴VMware最近的宣布也彰顯了在VMware的虛擬機(jī)中運(yùn)行Docker的價(jià)值,“從而將安全功能引入到容器環(huán)境”。突然之間,宣布虛擬機(jī)管理程序已完蛋的結(jié)論似乎完全下得過早了。
單內(nèi)核助力對(duì)安全敏感的云計(jì)算
不過,一項(xiàng)技術(shù)正在冉冉升起,它在需要安全的環(huán)境下帶來了極大的希望,那就是單內(nèi)核(unikernel)。
單內(nèi)核有時(shí)被稱為“云操作系統(tǒng)”,或“庫操作系統(tǒng)”,它將類似Docker的容器系統(tǒng)具有的諸多優(yōu)點(diǎn)與虛擬機(jī)管理程序的安全印跡(security footprint)以及每個(gè)虛擬機(jī)里面小得多的攻擊面結(jié)合起來。
單內(nèi)核系統(tǒng)可構(gòu)建小型的虛擬機(jī)。比如說,來自Xen項(xiàng)目孵化園的Mirage OS已構(gòu)建了幾個(gè)網(wǎng)絡(luò)設(shè)備,它們在運(yùn)行時(shí)只僅占數(shù)千字節(jié)(沒錯(cuò),確實(shí)只有“數(shù)千字節(jié)”――上一次你聽說虛擬機(jī)在不到1兆字節(jié)的環(huán)境下運(yùn)行是啥時(shí)候?)它們能變得這么小巧,就是因?yàn)樘摂M機(jī)本身并不含有一種通用的操作系統(tǒng),而是含有一段專門編寫的代碼,這段代碼只公開了應(yīng)用程序需要的那些操作系統(tǒng)功能。
沒有多用戶操作環(huán)境,沒有外殼腳本,也沒有占用地方的龐大實(shí)用工具庫。只有讓應(yīng)用程序運(yùn)行起來的數(shù)量剛好的代碼,因而壞人沒有多少可趁之機(jī)。而在諸如Mirage OS之類的單內(nèi)核中,所有的現(xiàn)有代碼都是靜態(tài)類型安全的,從應(yīng)用程序堆棧一直到設(shè)備驅(qū)動(dòng)程序本身。它提供的并不是“終極”安全,但無疑在往正確的方向邁進(jìn)。
如今,單內(nèi)核類型的系統(tǒng)數(shù)量仍很小,它們的知名度還不是很大。除了Xen項(xiàng)目的Mirage OS外,還有其他單內(nèi)核系統(tǒng),比如Cloudius Systems的OSv、Galois Systems的HaLVM、NEC的ClickOS和LING(之前名為“Xen上的Erlang”)。它們提供的環(huán)境可以與Java、C、OCaml、Haskell和Erlang等語言綁定起來。它們還大大簡化了單內(nèi)核解決方案堆棧方面的開發(fā)和部署過程。
它們是新生事物,而且剛開始起步。
我非常期望,如果五年后我們回顧2014年的單內(nèi)核,會(huì)覺得它們?yōu)樵絹碓烬嫶蟮膯蝺?nèi)核類型的系統(tǒng)播下了種子。單內(nèi)核在容器化虛擬機(jī)概念方面提高了水準(zhǔn),它符合大肆宣傳的封裝和部署優(yōu)點(diǎn),同時(shí)改善了軟件開發(fā)工作流程、提高了資源效率。另外,可能最重要的是,它在處理這一切的同時(shí),還能通過操作環(huán)境專門化,減小外部攻擊面。坦率地說,我迫不及待地想看看這個(gè)領(lǐng)域會(huì)有什么發(fā)展。
“較量已結(jié)束?”不可能。我們連第一個(gè)回會(huì)都沒有結(jié)束。較量才剛開始,確實(shí)令人拭目以待。