目前三個最主要的架構類別包括:
? I型:虛擬機直接運行在系統硬件上,創建硬件全仿真實例,被稱為“裸機”。
? II型:虛擬機運行在傳統操作系統上,同樣創建的是硬件全仿真實例,被稱為“托管”hypervisor。
? 容器:虛擬機運行在傳統操作系統上,創建一個獨立的虛擬化實例,指向底層托管操作系統,被稱為“操作系統虛擬化”。
圖 1 三種主要的虛擬化架構類型
上圖顯示了每種架構使用的高層軟件“堆?!?,應當指出,在每種模型中,虛擬層是在不同層實現的,因此成本和效益都會不一樣。
除了上面的架構類別外,知道hypervisor的基本元素也同樣重要,它包括:
? 虛擬機監視器(Virtual Machine Monitor,VMM):它創建、管理和刪除虛擬化硬件。
? 半虛擬化(Paravirtualization):修改軟件,讓它知道它運行在虛擬環境中,對于一個給定的hypervisor,這可能包括下面的一種或兩種:
- 內核半虛擬化:修改操作系統內核,要求客戶機操作系統/hypervisor兼容性。
- 驅動半虛擬化:修改客戶機操作系統I/O驅動(網絡、存儲等),如Vmware Tools,MS Integration Components。
操作系統虛擬化:容器
在容器模型中,虛擬層是通過創建虛擬操作系統實例實現的,它再指向根操作系統的關鍵系統文件,如下圖所示,這些指針駐留在操作系統容器受保護的內存中,提供低內存開銷,因此虛擬化實例的密度很大,密度是容器架構相對于I型和II型架構的關鍵優勢之一,每個虛擬機都要求一個完整的客戶機操作系統實例。
圖 2 容器型虛擬化架構
通過共享系統文件的優點,所有容器可能只基于根操作系統提供客戶機,舉一個簡單的例子,一個基本的Windows Server 2003操作系統也可用于創建Windows Server 2003容器,同樣,任何適用于根操作系統系統文件的補丁和更新,其子容器也會繼承,提供了一個方便的維護方法。
但這也可能會造成損害,根操作系統收到破壞,客戶機也會跟著被破壞。
在容器內,用戶可以使用特定應用程序,熱修復(但不是服務包)和操作系統服務組件自定義客戶機實例,對那些在多數客戶機容器中會使用到的服務或應用程序,它們所需要的功能應該安裝到根操作系統中,在客戶機實例中使用類似于模板的方法自動獲得這些功能。
在大多數情況下,容器的數量僅受宿主操作系統可用資源的限制,每個客戶機可能被配置為根操作系統限制的最大硬件資源,這些可擴展的特性與客戶機管理的易用性,使容器方法成為需要高虛擬機密度的應用程序很有實力的候選者,如虛擬桌面。
Parallels Virtuozzo容器是當今業界領先的操作系統虛擬化產品,除了上述功能外,Virtuozzo提供了高可用和跨物理主機遷移客戶機的功能(假設根操作系統和補丁級別相同),架構上,Virtuozzo實現了一個專有的內核服務抽象層(Kernal Service Abstract Layer,KSAL),保護宿主操作系統文件,在可寫入文件系統上保存一份安全的副本,使單獨修改客戶機成為可能。與混合hypervisor(本文后面會有介紹)中的父分區類似,第一個虛擬實例是一個簡單的管理容器,它提供虛擬機監視功能。
在Parallels Virtuozzo容器的最新版本4.5中,包括在Hyper-V中嵌入Virtuozzo的支持,兩者都在父分區中。
圖 3 Hyper-V中嵌入Virtuozzo容器
這種實現方式雖然復雜,但它展示了Virtuozzo架構的靈活性,提供高虛擬機密度。
II型 hypervisor
II型或托管型hypervisor通過一個軟件層在現有操作系統上實現硬件虛擬化,與容器架構不一樣,II型客戶機提供了一個完整的、獨立的、無依賴的客戶機操作系統副本,通常利用半虛擬化驅動網絡和I/O提高客戶機性能。但由于虛擬化功能必須通過宿主操作系統,客戶機的性能大大低于裸機hypervisor。此外,還有一些高可用和企業管理功能。由于這些原因,II型 hypervisor最常用于開發/測試或桌面類應用程序。
流行的II型 hypervisor包括Vmware Workstation,Sun VirtualBox和Microsoft Virtual Server R2,它們的功能都差不多,因為它們都不能勝任企業級工作量,因為后面我也不打算繼續介紹它們。
I型hypervisor
I型或裸機hypervisor包括當今主流的企業級虛擬化產品,該類hypervisor直接運行在系統硬件上,提供了更好的客戶機性能。通過處理器虛擬化擴展增強,包括英特爾VT和AMD-V技術,I型hypervisor甚至可以超越裸機操作系統性能。使用這一類hypervisor,有幾個子類型有必要詳細介紹:
? 獨立型:VMware vSphere
? 混合型:Microsoft Hyper-V,Citrix XenServer和Sun xVM
? KVM:Linux KVM
I型獨立型:VMware vSphere
在一個獨立型hypervisor中,所有硬件虛擬化和虛擬機監視器(VMM)功能由一個單一的,緊密集成的代碼集提供,這種架構與Vmware vSphere和前幾代ESX hypervisor的結構是相同的。下圖是Vmware vSphere 4.0(也稱為ESX 4)的架構概述圖,與一般看法相反,Vmware不是基于Linux的hypervisor,相反,ESX是由一個高度復雜的操作系統VMKernel組成的,并取得了專利權,提供所有虛擬機監控和硬件虛擬化功能。ESX完整版提供了一個基于Linux的服務控制臺,但ESXi不包含此服務控制臺。
圖 4 VmwarevSphere 4.0架構
通常這種模式被稱為“胖”或“瘦”hypervisor,但這種說法并不準確,雖然ESX架構經過長期發展變得更加復雜了,但Vmware在hypervisor性能和功能方面一直保持領先的行業地位,最近實現了處理器虛擬化擴展進一步鞏固了領導地位。
Vmware在客戶機內需要網絡和I/O驅動半虛擬化,這些驅動通常包含在Vmware Tools中。
I型混合型:Citrix XenServer,Microsoft Hyper-V和OracleVM
混合I型架構包括一個軟件模型,一個“瘦”hypervisor聯合一個父分區提供硬件虛擬化,它提供了虛擬機監視功能,這類模型主要包括微軟的Hyper-V和基于Xen的hypervisor,如Citrix XenServer和OracleVM。
圖 5 I型混合型hypervisor
父分區也叫做Dom0,它通常是一個運行在本地的完整操作系統虛擬機,并具有根權限,例如,開啟Xen在Novell SUSE Linux Enterprise Server(SLES)上執行的Dom0將作為一個完整的SLES實例執行,提供虛擬機(VM)創建、修改、刪除和其它類似配置任務的管理層,系統啟動時,開啟Xen的內核載入父分區,以VMM權限運行,作為VM管理的接口,管理I/O堆棧。
與Vmware類似,所有混合型產品都為客戶機提供了半虛擬化驅動,從而提高網絡和I/O性能,不實現半虛擬化驅動的客戶機必須遍歷父分區的I/O堆棧,因此客戶機的性能會下降。操作系統半虛擬化技術正變得越來越流行,以達到最佳的客戶機性能,并改進跨hypervisor的互操作性。例如,Microsoft Hyper-V/Windows Server 2008 R2為Windows Server 2008和SUSE Enterprise Linux客戶機提供完整的操作系統半虛擬化支持。
雖然操作系統半虛擬化是操作系統發展的一種趨勢,但應當指出的是操作系統半虛擬化目前還不是混合模型的一個要求,部分供應商,如VirtualIron(Sun/Oracle),的目標是SMB級負載,使用全硬件虛擬化實現可接受的客戶機性能?;旌闲图軜嬈鹪从赬en項目,在性價比方面有很多供應商可供選擇,這都得益于開源社區(Xen)的貢獻,它能夠很好地適應半虛擬化操作系統的未來發展。
I型組合型:基于Linux的內核虛擬機(KVM)
基于Linux的內核虛擬機(KVM)hypervisor模型提供了一個獨一無二的I型架構,它不是在裸機上執行hypervisor,KVM利用開源Linux(包括RHEL,SUSE,Ubuntu等)作為基礎操作系統,提供一個集成到內核的模塊(叫做KVM)實現硬件虛擬化,KVM模塊在用戶模式下執行(與獨立型和混合型hypervisor不一樣,它們都運行在內核/根模式下),但可以讓虛擬機在內核級權限使用一個新的指令執行上下文,叫做客戶機模式。
圖 6 I型組合型架構
KVM使用一個經過修改的開源QEMU硬件仿真包提供完整的硬件虛擬化,這意味著客戶機操作系統不需要操作系統半虛擬化,與Vmware類似,Linux KVM充分利用VirtIO作為實現IO半虛擬化的框架,它利用內置在內核/QEMU中的用戶模式VirtIO驅動增強性能。KVM現在已經成為很多Linux發行版的標準模塊,包括但不限于Red Hat Enterprise Linux和SUSE Linux Enterprise Server,以及桌面類Linux,如Ubuntu,KVM現在已經成為一個流行的hypervisor。