5.产品架构,以及虚拟化的产品线:
一般来说在Hyper-V之前Windows平台常见的操作系统虚拟化技术一般分为两种架构。第一种就是下面的Type 2架构,它的特点是:Host物理机的硬件上是操作系统,操作系统上跑着VMM, VMM也就是Virtual Machine Monitor,作为这个架构当中的Virtualization Layer,其主要工作是创建和管理虚机,分配总体资源给各个虚机,并且保持各个虚机的独立性,大家也可以把它看作一个管理层。在VMM上面跑的就是各个Guest虚拟机。就是这样一个架构,这个架构有一个很大的问题,就是Guest虚机要穿越VMM和Host OS这两层来访问硬件资源,这样就损失了很多的性能,效率不高。采用这种架构的典型产品就是Java Virtual Machine以及.NET CLR Virtual Machine。
第二种架构就是Hybrid架构,下面是它的架构图,和Type 2架构不同的是,VMM和Host OS是处于同一个层面上,也就是说VMM和OS同时跑在内核模式交替轮流地使用CPU。这种模式比Type2架构快很多,因为在Type2模式下VMM通常跑在用户模式当中,而Hybrid是跑在内核模式中。这样架构的典型产品就是面向桌面操作系统的VPC 2007和微软上一代面向服务器操作系统的Virtual Server 2005。
而我们推出的Hyper-V没有使用上面所说的两种架构,而是采用了一种全新的架构(下图): Type 1的架构,也就是Hypervisor架构。和以前的架构相比,它直接用VMM代替了Host OS. Host OS从这个架构当中彻底消失,将VMM这层直接做在硬件里面,所以Hyper-V要求CPU必须支持虚拟化了吧。这种做法带来了虚拟机OS访问硬件的性能的直线提升。VMM这层在这个架构中就是我们说的Hypervisor, 它处于硬件和很多虚拟机之间,其主要目的是提供很多孤立的执行环境,这些执行环境被称之为分区(partition),每一个分区都被分配了自己独有的一套硬件资源:内存,CPU, IO设备,并且包含了Guest OS. 以Hyper-V为基础的虚拟化技术拥有最强劲的潜在性能。
大家可以来看一下Hyper-V内部比较详细的结构图:
在底层支持虚拟化的硬件之上,Hypervisor运行着,而在它之上,运行着很多独立的分区,大致可以把分区分成四种类型。
首先来看最左边的,也就是父分区,也就是控制和创建其他分区的root分区。我们来看看它的构成,在这个分区的内核模式下有longhorn server的内核,还有一个叫做VSP的东西,它的全称是Virtualization Service Provider,它负责和device driver直接对话,为每一个需求提供硬件服务,VSP可以将request直接通过驱动程序传入物理设备,也可以把它传给自己本地的服务去处理,比如一些文件系统,VSP在硬件设备如何工作中充当了关键的角色。以前的虚拟化产品都是通过模拟方式来让guest OS访问硬件的,但就像刚才所说的那样这样做在兼容性上是不错的,但是性能不强,而VSP不存在这个问题。而每个分区都有的VM BUS类似于电脑里的总线,用来在虚机之间传输发送的request和data。
在父分区的用户模式下有很多VM Work Processes,每一个process都代表了系统当中一个特定的虚机,它是跑在前面所说的虚拟栈里面的。另外还有VM Service,它提供了一套工具和后台服务,用来管理虚机以及work processes,在它上面就是我们所说的WMI接口,其实它是VM Service暴露的一组接口。我们可以利用它去编写编写自己的管理工具,使虚拟机相关的操作自动化。
然后看左边第二个分区,这个是一种子分区,应用程序跑在用户模式下,而这个分区虚机的内核模式下跑的是Windows 2008。它就是一个被启蒙的Guest OS,也就是说这个系统完全知道自己是跑在hyper-v上面的虚机,它访问硬件不需要用任何的模拟。我们看其内核模式下还有一个VSC,它的全称是virtualization service client。它是一个跑在子分区里面的client组件,它能够通过消费VSP提供的服务来完成实际的工作。对每一个设备类型来说,都有一对VSP/VSC来完成对这种类型硬件的使用。举个例子来说,过程是这样的。首先虚机上面操作系统中的应用程序需要访问某设备中的文件系统,然后相关驱动程序通知VSC要访问硬件,然后VSC把相关的request通过VM BUS传给父分区里面的VSP,然后VSP提供相应硬件供应操作。是这样一个过程。
然后第三个分区,这是一种另外的子分区,在这个子分区里面跑的是没有被启蒙过的操作系统,比如一些早期windows操作系统和DOS, 它必须使用模拟来提供操作系统所能够明白的硬件环境,所以没有VSC组件跑在内核模式下。
最后第四个分区,这也是第三种子分区,它里面跑的根本不是windows的操作系统,而是一些Linux的操作系统。微软同样认识到有些顾客需要在hyper-v上跑其他的OS, 比如Linux,微软没有仅仅让Linux跑在模拟出来的硬件上,而是让一些合作伙伴来 build 面向Linux的VSC,争取有越来越多的Linux虚拟机也能够使用VSP/VSC的方式来更有效的访问硬件。
Hyper-V还有一个优势,就是它背后有一个很庞大的解决方案。微软为虚拟化技术提供了非常丰富和全面的产品线,从服务器虚拟化的Virtual Server, Hyper-V,到应用程序虚拟化的SoftGrid,到桌面虚拟化的VPC,再到用户界面虚拟化的Terminal Services,一应俱全。所以微软能够为用户提供一套完整的虚拟化解决方案。
这里简单的提一下微软的其他虚拟化产品。操作系统的虚拟化包括了面向桌面操作系统的产品,也包括了面向服务器操作系统的产品,前者的代表是Virtual PC 2007,而后者的代表就是Virtual Server 2005以及我们这次推出的Hyper-V。
而应用程序的虚拟化,顾名思义,它虚拟的对象不再是操作系统仅仅是应用程序。在一个物理机器上面跑一个OS,然后在这个共享的操作系统上面跑很多虚拟化的应用程序。其相关产品就是微软的SoftGrid Application Virtualization。SoftGrid用它的流传输体系,将任何的Windows应用程序转换为动态服务,这些服务可以集成到Windows管理的Infrastructure当中,以便于用标准组策略的方法对这些服务进行设置和管理。从这点上看,SoftGrid和Server毫无关系,它只是将应用程序以及用户界面,还有运行应用程序所需要的一些环境设置都打包成了文件,这是一个无法忽视的崭新虚拟化技术。
还有一种虚拟化就是用户界面的虚拟化,它为某一个应用程序提供了多个用户界面,可以被不同用户所使用,其实用户界面下面跑的是同一个应用程序,这种架构一个例子就是Terminal Services。
除此之外,微软还为这些虚拟化技术的产品提供了统一的管理平台:System Center, 不管是物理机,还是Hyper-V,VPC,Virtual Server的虚机,甚至是VMware的虚拟机都可以通过System Center的管理工具进行统一管理,并且彼此兼容。另外System Center还提供了快速迁移的功能,也就是说,你可以通过简单的操作将一个虚拟机在各个物理机上进行快速的迁移,这就使得一些灾难恢复的工作变成更加的简单和快速。