機(jī)器 vs 應(yīng)用
傳統(tǒng)的虛擬化技術(shù)是為了模擬硬件設(shè)備而設(shè)計(jì)的。我們今天所熟知的虛擬機(jī)(VM)則是這個(gè)思路的一個(gè)副產(chǎn)品。一個(gè)虛擬機(jī)運(yùn)行了一個(gè)完整的操作系統(tǒng),簡(jiǎn)稱”機(jī)器“。虛擬機(jī)運(yùn)行的方式和物理機(jī)完全一致,保證了應(yīng)用程序,操作系統(tǒng)和硬件三者之間的協(xié)議不變。因此,在一個(gè)虛機(jī)的世界里,工作跟過(guò)去都差不多,應(yīng)用也無(wú)需調(diào)整。
但是 ,這種”完美“的兼容性也帶來(lái)了幾個(gè)嚴(yán)重的代價(jià):
胖:虛機(jī)鏡像的體積往往都在幾十GB
慢:?jiǎn)?dòng)一臺(tái)虛機(jī)一般需要幾十秒
重:一臺(tái)虛機(jī)至少需要百兆內(nèi)存,而一套物理機(jī)上的虛機(jī)密度也不會(huì)太高
易壞:虛機(jī)往往都是不間斷運(yùn)行,因此很容易出現(xiàn)各種各樣的配置參數(shù)錯(cuò)誤
而另一方面,容器化的關(guān)注點(diǎn)在于”應(yīng)用“。一個(gè)Docker Container只關(guān)心如何運(yùn)行其中的應(yīng)用,而一個(gè)Docker鏡像也只包含應(yīng)用有關(guān)的設(shè)計(jì)。這樣做的好處是:
?。阂粋€(gè)Docker鏡像一般只有200-300MB
快: 毫秒級(jí)啟動(dòng)Docker容器
輕:每個(gè)容器只消耗應(yīng)用所需的內(nèi)存,因此單臺(tái)服務(wù)器上的密度得以提高
不可變:由于能夠毫秒級(jí)啟動(dòng),容器的生命周期往往很短,因此容器可以做到運(yùn)行時(shí)狀態(tài)與鏡像一摸一致
下面是Docker官網(wǎng)的一張圖,很清晰的解釋了虛機(jī)和Docker兩者之間的區(qū)別:
需要指出的是,上面提到的所謂”容器化“實(shí)際與各種Container技術(shù)(LXC等等)并沒(méi)有太多關(guān)系。而上面列出的容器化帶來(lái)的所有好處,這些好處來(lái)自于摒棄了完整的操作系統(tǒng),而專注于應(yīng)用的”容器化“思路。
說(shuō)到這,自熱仍然的問(wèn)題是:
能不能實(shí)現(xiàn)一個(gè)面向應(yīng)用的VM,使得VM也可以容器化?
Hyper - a Hypervisor-based Containerization solution
簡(jiǎn)短的說(shuō),
Hyper = Hypervisor + App Container Image
Hyper可以使用任何hypervisor(KVM, Xen等等)運(yùn)行Docker鏡像。Hyper與Docker的核心區(qū)別在于Hyper沒(méi)有使用Container技術(shù),而是通過(guò)VM直接運(yùn)行Docker鏡像:
[root@user ~:]# docker pull nginx:latest
[root@user ~:]# hyper run nginx:latest
[root@user ~:]# docker ps
[root@user ~:]#
[root@user ~:]# hyper list
.......
由于Hyper是一個(gè)完全基于虛擬化的解決方案,因此Hyper并不依賴于物理服務(wù)器上的Linux內(nèi)核。每個(gè)HyperVM都自帶一個(gè)HyperKernel。由于HyperKernel是個(gè)極簡(jiǎn)的內(nèi)核,它可以非??焖俚膯?dòng)。測(cè)試表明HyperVM平均的啟動(dòng)時(shí)間是500-800毫秒,這個(gè)啟動(dòng)性能與Container幾乎沒(méi)有差別。
在啟動(dòng)的時(shí)候,Hyper將Docker鏡像掛在到虛機(jī)里,而HyperKernel通過(guò)一個(gè)叫HyperStart的Init服務(wù)來(lái)啟動(dòng)Docker鏡像里的應(yīng)用。在Hyper的場(chǎng)景里,應(yīng)用被100%的限制在虛機(jī)內(nèi)部,因此也不需要像Container那樣訪問(wèn)物理服務(wù)器上的操作系統(tǒng)。
Combine the best from both worlds
除去上面提到的隔離性之外,Hyper還融合了虛擬化和容器化兩個(gè)思路的一些優(yōu)點(diǎn):
Introducing the secure multi-tenant CaaS
在Docker之前,IaaS是云計(jì)算的標(biāo)準(zhǔn)形式。絕大多數(shù)云平臺(tái)都提供IaaS服務(wù)。隨著Docker的出現(xiàn),微服務(wù)架構(gòu)逐漸流行起來(lái),而與之對(duì)應(yīng)的是CaaS的興起。
雖然CaaS的趨勢(shì)非常有潛力,但目前制約我們的是Container技術(shù)中隔離性的缺乏。畢竟,作為一個(gè)公有,多租戶的CaaS云平臺(tái),安全性是不可或缺的。不同客戶的不同應(yīng)用共享同一Linux內(nèi)核是不可能的。
現(xiàn)在這個(gè)阻礙就不存在了??紤]到VM的攻擊面非常小,因此Hyper可以實(shí)現(xiàn)非常安全的,基于硬件增強(qiáng)的系統(tǒng)離性。
有了Hyper,我們終于可以打造安全的公有CaaS云了!
作者簡(jiǎn)介
王旭:HYPER創(chuàng)始人,CTO,前VisualOps CTO,多年的Debian,Kernel,分布式存儲(chǔ)老兵