微软和VMware可算是服务器虚拟化的两大巨头,VMware在此领域已经超过了10年,而微软凭借Windows Server产品,也开始在服务器虚拟化领域崭露头角。本文,我们将向IT组织者或企业介绍微软Hyper-V和VMwarevSphere之间的架构差异,以及两者之间的优势和劣势。
无论选择哪种产品,VMware vSphere或是Hyper-V,我们都需要考虑很多因素,但从架构的角度来看,想要选择合适的服务器虚拟化产品,我们需要重点考虑以下组件:
1.设备驱动程序的架构位置;
2.控制层组件;
3.hypervisor层组件。
一般情况下,有三种类型的虚拟化技术架构:
• Type 2 VMM
• Type 1 VMM
• Hybrid VMM
本文并不会详细介绍以上所有的技术架构,我们将会着重介绍Type 1 VMM,因为微软和VMware的服务器虚拟化技术都使用的是Type 1 VMM架构。Type 1 VMM又可以分为两个子类,分别是Monolithic Hypervisor和Microkernelized Hypervisor。
通常我们把最底层称为”硬件层“,虚拟化“Hypervisor层”运行在”硬件层“之上。最上层是“控制层”,其作用是控制该层中运行的组件,以及为虚拟机提供必要的组件,以用来与“Hypervisor层”进行通信。
注:“Hypervisor层”有时也称为”VMM层“或者”VM Kernel层“。
Microkernelized Hypervisor架构
Microkernelized Hypervisor架构被使用于微软的Hyper-V中。在这种设计中,设备驱动程序并不是hypervisor层的一部分,设备驱动程序是独立运行的, 其运行在“控制层”。
Microkernelized Hypervisor架构的优点如下:
• 设备驱动程序并不需要为每个设备纳入Hypervisor层或VMM内核;
• 由于微软并没有提供用来访问“hypervisor层”的API,这种做法将被攻击的面减到最小,因为没有人可以在“hypervisor层”注入外部代码;
• 由于设备驱动程序不需要被hypervisor感知,所以该架构所支持的硬件设备非常广;
• 无需关闭“hypervisor层”来加载设备驱动程序。设备驱动程序可以安装在运行于“控制层”的操作系统之中。(包括Windows Server 2008 R2以及Windows Server 2012),用于虚拟机访问“硬件层”中的硬件。
• 在维护和管理设备驱动程序方面,“hypervisor层”的成本更低;
• Microkernelized Hypervisor架构允许你在“控制层”中安装任何服务器角色,当然,除了服务器虚拟化角色(Hyper-V)外;
• 初始化时间更少。微软hypervisor的代码仅有600KB左右,所以,“hypervisor层”无需使用更多的时间来初始化组件。
与此同时,Microkernelized Hypervisor架构也有一些缺点,具体内容如下:
• Microkernelized Hypervisor架构需要在“控制层”安装操作系统,“hypervisor层”才可以进行操作,这是该架构本身最大的缺点;
• 如果在“控制层”运行的操作系统无故崩溃,那么其他所有的虚拟机也都将崩溃;
• 运行在“控制层”的操作系统需要更多的资源(或者说是开销),以用来管理虚拟机和“hypervisor层”之间的通信;
• 为了保证Windows系统的安全,在“控制层”运行的操作系统必须及时应用微软官方的安全更新。作为安全更新的一部分,操作系统将会被重启,同时,这需要所有虚拟机离线;如果你希望没有停机时间,可以借助Hyper-V实时迁移功能解决。
Monolithic Hypervisor架构
VMware vSphere所使用的就是MonolithicHypervisor架构,这需要hypervisor能够感知和管理设备驱动程序。
管理程序的设备驱动程序必须开发并包含在 “hypervisor层”,然后才可以开始使用vSphere虚拟化产品。您不能在硬件上运行VMware vSphere,这是不支持的。
VMware vSphere在“hypervisor层”管理其组件,包括资源调度,分布式文件系统等等。用于部署VMware网络的网络协议栈组件,同样由“hypervisor层”管理。存储堆栈组件允许“控制层”组件访问存储设备。
Monolithic Hypervisor架构的优点:
• 控制虚拟化产品的所有组件不需要操作系统支持;
• 在“控制层”运行的组件,不需要安全更新。
Monolithic Hypervisor架构的缺点:
• VMware vSphere不支持运行在硬件上。然而,目前VMware已经提供出了一系列的兼容硬件列表,这份名单可以在这里看到:http://www.vmware.com/resources/compatibility/search.php
• 需要更多的初始化时间。其所取的初始化时间,取决于其包含的的设备驱动程序的大小;
• 由于设备驱动程序初始化作为“hypervisor层”初始化的一部分,任何损坏的外部代码注入到“hypervisor层”,都可能延迟启动/初始化,或在某些情况下会导致服务器挂起。