Hyper-V架構(gòu)與VMware ESXi的差異
微軟的Hyper-V與VMware的ESXi在架構(gòu)上有眾多不同,然而很多虛擬化管理員并未意識(shí)到這些差異。而且很多管理員同樣對(duì)Hyper-V是在主機(jī)操作系統(tǒng)上運(yùn)行感到困惑。
有關(guān)微軟Hyper-V的一個(gè)常見的誤解就是安裝Hyper-V需要使用Windows操作系統(tǒng),Hyper-V運(yùn)行在主機(jī)操作系統(tǒng)之上而不是直接安裝在裸機(jī)上。有必要指出一旦Hyper-V角色通過Server Manager啟用,hypervisor代碼實(shí)際上是被配置為在Windows 內(nèi)核空間內(nèi)啟動(dòng)。運(yùn)行在內(nèi)核空間的組件能夠直接訪問硬件,這同樣適用于Hyper-V。另一方面,VMware的ESXi采用了完全不同的方式,ESXi hypervisor被封裝為一個(gè)單獨(dú)的ISO文件,它實(shí)際上是一個(gè)Linux內(nèi)核操作系統(tǒng)。
Hyper-V和ESXi都是 Type 1 hypervisor。 Type 1 hypervisor直接運(yùn)行在硬件之上,從設(shè)計(jì)上能夠?qū)ype 1 hypervisor進(jìn)一步劃分為兩類:microkernelized和monolithic。microkernelized設(shè)計(jì)與monolithic設(shè)計(jì)有一些細(xì)微的差異。兩類設(shè)計(jì)唯一的差異就是設(shè)備驅(qū)動(dòng)的位置以及控制功能。

正如上圖所示,在monolithic設(shè)計(jì)中,驅(qū)動(dòng)被作為hypervisor的一部分包括在內(nèi)。VMware ESXi使用monolithic設(shè)計(jì)實(shí)現(xiàn)所有的虛擬化功能,包括虛擬化設(shè)備驅(qū)動(dòng)。自從***推出虛擬化產(chǎn)品起,VMware一直在使用monolithic設(shè)計(jì)。由于設(shè)備驅(qū)動(dòng)包含在了hypervisor中,在hypervisor代碼的幫助下,運(yùn)行ESXi主機(jī)之上的虛擬機(jī)能夠與物理硬件直接通信,不再依賴中間設(shè)備。
微軟Hyper-V 架構(gòu)使用了microkernelized設(shè)計(jì),hypervisor代碼運(yùn)行時(shí)沒有包括設(shè)備驅(qū)動(dòng)。

如上圖所示,設(shè)備驅(qū)動(dòng)安裝在主機(jī)操作系統(tǒng)內(nèi),虛擬機(jī)訪問硬件設(shè)備的請(qǐng)求交由操作系統(tǒng)處理。換句話說由主機(jī)操作系統(tǒng)控制對(duì)硬件的訪問。有兩種類型的設(shè)備驅(qū)動(dòng)運(yùn)行在主機(jī)操作系統(tǒng)內(nèi):合成的與模擬的。合成的設(shè)備驅(qū)動(dòng)要比模擬的更快。只有在虛擬機(jī)上安裝了Hyper-V集成服務(wù)時(shí)虛擬機(jī)才能夠訪問合成設(shè)備驅(qū)動(dòng)。集成服務(wù)在虛擬機(jī)內(nèi)實(shí)現(xiàn)了VMBus/VSC設(shè)計(jì),使直接訪問硬件成為了可能。例如,為訪問物理網(wǎng)卡,運(yùn)行在虛擬機(jī)內(nèi)的網(wǎng)絡(luò)VSC驅(qū)動(dòng)會(huì)與運(yùn)行在主機(jī)操作系統(tǒng)內(nèi)的網(wǎng)絡(luò)VSP驅(qū)動(dòng)進(jìn)行通信。網(wǎng)絡(luò)VSC與網(wǎng)絡(luò)VSP之間的通信發(fā)生在VMBus之上。網(wǎng)絡(luò)VSP驅(qū)動(dòng)使用虛擬合成設(shè)備驅(qū)動(dòng)庫直接與物理網(wǎng)卡通信。運(yùn)行在主機(jī)操作系統(tǒng)內(nèi)的VMBus,實(shí)際是在內(nèi)核空間內(nèi)運(yùn)轉(zhuǎn)以改進(jìn)虛擬機(jī)與硬件之間的通信。如果虛擬機(jī)沒有實(shí)現(xiàn)VMBus/VSC設(shè)計(jì),那么只能依賴于設(shè)備模擬。
無論虛擬化廠商選擇哪種設(shè)計(jì),必須要有一個(gè)控制功能對(duì)hypervisor進(jìn)行全方位的控制??刂乒δ苡兄趧?chuàng)建虛擬環(huán)境。微軟Hyper-V架構(gòu)在其Windows操作系統(tǒng)內(nèi)實(shí)現(xiàn)了控制功能。換句話說,主機(jī)操作系統(tǒng)控制直接運(yùn)行在硬件之上的hypervisor。在VMware ESXi中,控制功能在ESXi內(nèi)核中實(shí)現(xiàn),被Linux核心shell所控制。
很難說哪種設(shè)計(jì)更好。然而,每種設(shè)計(jì)都有各自的優(yōu)勢(shì)與不足之處。由于設(shè)備驅(qū)動(dòng)被編碼為ESXi內(nèi)核的一部分,所以只能夠在受支持的硬件上安裝ESXi。而微軟Hyper-V架構(gòu)不存在這種限制,能夠在任何硬件上運(yùn)行hypervisor代碼。這降低了維護(hù)設(shè)備驅(qū)動(dòng)庫的開銷。使用microkernelized設(shè)計(jì)的另一個(gè)優(yōu)勢(shì)在于不需要在每臺(tái)虛擬機(jī)上安裝單個(gè)設(shè)備驅(qū)動(dòng)。毫無疑問ESXi也部署了直接訪問硬件的虛擬化組件,但你無法增加其他角色或服務(wù)。盡管不建議在hypervisor上安裝任何其他角色及功能,但運(yùn)行Hyper-V的主機(jī)還可以被配置為具有其他角色,比如DNS以及故障轉(zhuǎn)移集群。