虚拟化技术发展与虚拟化体系结构

1、虚拟化技术发展历程

1. 虚拟化技术诞生

虚拟化技术萌芽于上世纪 50 年代末,1959 年 6 月,牛津大学的计算机教授,克里斯·托弗(Christopher Strachey)在国际信息处理大会(International Conference on Information Processing)上发表了一篇名为《大型高速计算机中的时间共享》(Time Sharing in Large Fast Computer)的学术报告,他在文中首次提出了 “虚拟化” 的基本概念,还论述了什么是虚拟化技术。这篇文章被认为是最早的虚拟化技术论述,从此拉开了虚拟化发展的帷幕。

克里斯·托弗还同时提出了 Multi-Processing(多道程序)这一超前的概念,Multi-Processing 解决了应用程序因等待外部设备而导致处理器空转问题,同时也解决了用户如何调试(Debug)代码的问题。即便在现在看来,多道程序的理念仍是操作系统在 “并发” 领域中的隗宝。

最初虚拟化技术的应用和发展源于大型机对分时系统的需求。这种通过硬件的方式来生成多个可以运行独立操作系统软件的虚拟机实例,解决了早期大型计算机只能单任务处理而不能分时多任务处理的问题。

由于这种虚拟化技术是基于硬件设备来实现的,故被称为硬件虚拟化(Hardware virtualization)。但需要注意的是,这一说法在后来被进一步细分为了狭义的硬件虚拟化技术,现今更加为人多熟知的硬件虚拟化是指:一种对计算机或操作系统的虚拟化,能够对用户隐藏真实的计算机硬件,表现出另一个抽象的计算平台。

虚拟化技术发展历程:

1974 年,Gerald J. Popek(杰拉尔德·J·波佩克)和 Robert P. Goldberg(罗伯特·P·戈德堡)在合作论文《可虚拟第三代架构的规范化条件》(Formal Requirements for Virtualizable Third Generation Architectures)中提出了一组称为虚拟化准则的充分条件,又称波佩克与戈德堡虚拟化需求(Popek and Goldberg virtualization requirements)即:虚拟化系统结构的三个基本条件。

满足这些条件的控制程序才可以被称为虚拟机监控器(Virtual Machine Monitor,简称 VMM):

  • 资源控制(Resource Control)。控制程序必须能够管理所有的系统资源。
  • 等价性(Equivalence)。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
  • 效率性(Efficiency)。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。

该论文尽管基于简化的假设,但上述条件仍为评判一个计算机体系结构是否能够有效支持虚拟化提供了一个便利方法,也为设计可虚拟化计算机架构给出了指导原则。同时,Gerald J. Popek 和 Robert P. Goldberg 还在论文中介绍了两种 Hypervisor 类型,分别是类型 I 和 类型 II。

类型 II(寄居或托管 Hypervisor):VMM 运行在传统的操作系统上,就像其他计算机程序那样运行。 

特点:

  • VMM 作为应用程序运行在主操作系统环境内;
  • 运行效率一般较类型 I 低;

实现案例:

  • VMware 5.5 以前版本;
  • Xen 3.0 以前版本;
  • Virtual PC 2004;

类型 I(原生或裸机 Hypervisor):这些虚拟机管理程序直接运行在宿主机的硬件上来控制硬件和管理客户机操作系统。

特点:

  • 需要硬件支持;
  • VMM 作为主操作系统;
  • 运行效率高;

实现案例:

  • VMware 5.5 及以后版本;
  • Xen 3.0 及以后版本;
  • Virtual PC 2005;
  • KVM;

1979 年,Unix 的第 7 个版本引入了 chroot 机制,意味着第一个 操作系统虚拟化(OS-level virtualization) 诞生了。chroot 是直到现在我们依然在使用的一个系统调用,这个系统调用会让一个进程把指定的目录作为根目录,它的所有文件系统操作都只能在这个指定目录中进行,本质是一种文件系统层的隔离。 

在上世纪 60~80 年代,因为虚拟化技术使得大型机和小型机获得了空前的成功。并且在相当长的一段时间里,虚拟化技术只在大型机和小型机上得到了应用,而在 x86 平台上的应用仍然进展缓慢。不过也可以理解,以当时 x86 平台的处理能力,应付一两个应用程序已然捉襟见肘,还怎么能够将资源分给更多的虚拟应用呢?

而后随着 x86 的流行,大型机和小型机在新兴的服务器市场中也逐渐失去了竞争力。

2. x86 架构的虚拟化

直到上世纪 80~90 年代,Intel 公司(戈登·摩尔)提出了摩尔定律,Windows、Mac 等 PC(Personal Computer)电脑被广泛使用,Wintel 联盟势如破竹,还出现了神一般的 Linux 服务器操作系统。种种原因,到底是 x86 赢得了时代的青睐,成为了服务器的行业标准。

随着 x86 服务器和桌面部署的增长也为企业 IT 基础架构带来了新的难题:

  • 基础架构利用率低;
  • 基础架构成本高;
  • IT 运维成本高;
  • 故障切换和灾难保护不足;
  • 最终用户桌面的维护成本高昂;

而解决这些难题就是新时代赋予虚拟化技术的历史任务,整个 80~90 年代,虚拟化技术及公司如同雨后春笋般涌现。

1990 年,Keir Fraser 和 Ian Pratt 创建了 XenServer 的初始代码工程(项目)。

1997 年,苹果开发了 Virtual PC,后来又卖给了 Connectix 公司。

1998 年,著名的 x86 仿真模拟器 Bochs 发布。

1999 年,VMware 公司率先推出针对 x86 平台推出了可以流畅运行的商业虚拟化软件 VMaware Workstation。

2000 年,FreeBSD jail,真正意义上的第一个功能完整的操作系统虚拟化技术。利用这个技术,FreeBSD 的系统管理者,可以创造出几个小型的软件系统,这些软件系统被称为 jails(监狱,即容器。ps:不禁感慨,取名真的很重要)。

2001 年,VMWare 发布 ESX 和 GSX,是 ESXi 的前身。同年,Fabrice Bellard 也发布了目前最流行的,采用了动态二进制翻译(Binary Translation)技术的开源虚拟化软件 QEMU(Quick EMUlator)的第一个版本。

此时,虚拟化技术的共同目标就是将 x86 架构转变为通用的共享硬件基础架构,使应用程序运行环境在隔离性、移动性和操作系统类型方面都有选择的空间。

3. 全虚拟化

x86 架构的 CPU 中有 17 条指令成为了虚拟化最大的障碍,错误执行这些指令会导致操作系统显示警告、终止应用程序甚至完全崩溃。当时 VMware 提出了解决这个问题的思路:在虚拟机生成这些特殊的指令时将它们 “困住”,然后将它们转换成可虚拟化的安全指令,同时保证其他所有的指令不受到干扰地执行。

这样就产生了一种与主机硬件匹配并保持软件完全兼容性的高性能虚拟机。这就是全虚拟化(Full virtualization) 技术诞生的背景 —— 必须使用纯软件实现的方式构造 VMM。VMware 首创了这项技术,一举稳坐虚拟化龙头老大。

全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。客户机操作系统(Guest OS)与真实硬件之间的交互,可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。

全虚拟化的工作原理:虚拟机是对真实计算环境的抽象和模拟,VMM 需要为每个虚拟机分配一套数据结构来管理它们状态,包括 vCPU 的全套寄存器,物理内存的使用情况,虚拟设备的状态等等。

VMM 调度虚拟机时,会将其部分状态恢复到 Host OS 中。但并非所有的状态都需要恢复,例如主机 CR3 寄存器中存放的是 VMM 设置的页表物理地址,而不是 Guest OS 设置的值。

pCPU 直接运行 Guest OS 的机器指令时,由于 Guest OS 运行在低特权级别(Ring 1),如果 Guest OS 直接访问 Host OS 的特权状态(如写 GDT 寄存器),就会因为权限不足导致 pCPU 产生异常,然后将运行权主动交还给 VMM。

此外,外部中断的到来也会影响 VMM 的运行。VMM 可能需要先将该虚拟机的当前状态写回到状态数据结构中,分析虚拟机被挂起的原因,然后代表 Guest OS 执行相应的特权操作。最简单的情况,如 Guest OS 对 CR3 寄存器的修改,只需要更新虚拟机的状态数据结构即可。

一般而言,大部分情况下,VMM 需要经过复杂的流程才能完成原本简单的操作。最后 VMM 将运行权还给 Guest OS,Guest OS 从上次被中断的地方继续执行,或处理 VMM “塞”入的虚拟中断和异常。

这种经典的虚拟机运行方式被称为 Trap-And-Emulate(捕获-模拟),虚拟机对于 Guest OS 完全透明,Guest OS 不需要任何修改,但是 VMM 的设计会比较复杂,系统整体性能受到明显的损害。

4. 半虚拟化

半虚拟化是一种通过修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给 Guest OS,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。

例如:Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,半虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。

2003 年,英国剑桥大学的一位讲师发布了开源虚拟化项目 Xen,并成立 XenSource 公司,通过半虚拟化技术为 x86-64 提供虚拟化支持。同年,Intel 正式公布将在 x86 平台的 CPU 上支持虚拟化技术 VT。同年 VMWare 也被 EMC 收购,成为 EMC 迄今最成功的一笔收购。同年,微软收购 Connectix 公司获得 Virtual PC 虚拟化技术。 

相较于全虚拟化,半虚拟化 VMM 只需要模拟部分底层硬件,因此 Guest OS 不做修改是无法在虚拟机中运行的,甚至运行在虚拟机中的其它程序也需要进行修改,如此代价,换来的就是接近于物理机的虚拟机性能。

有意思的是,半虚拟化其实也很尴尬,对于 Linux 而言自然是改了就改了,但 Windows 你要怎么改?人家可是闭源的。写到这里,不禁会想起自己写过的代码,拆东墙补西墙可不值得提倡,要从根源上解决问题。而这个根源自然就是 —— CPU。

既然全虚拟化性能低的主要原因是花费了太多的精力去捕获 CPU 异常并模拟 CPU 行为,那么如果 CPU 本身就为 VMM 提供了便利,那岂不是从根本上解决了这个问题?

这就是硬件辅助虚拟化(Hardware-assisted virtualization) 。

5. 基于硬件辅助的全虚拟化

Intel-VT(Intel Virtualization Technology)和 AMD-V 是目前 x86 平台上可用的两种硬件辅助虚拟化技术。

需要注意的是,我们提到了全虚拟化、半虚拟化和硬件辅助的全虚拟化,但这种分类实际上并不绝对,一个优秀的 VMM 往往融合了多项技术。

例如: VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译(Binary Translation)的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap-And-Emulate 的处理方式,这与半虚拟化相似,只不过半虚拟化是静态地修改程序代码。

看得出硬件辅助虚拟化技术必然是未来的方向,Intel-VT 的处理器级虚拟化技术还需要进行以下优化:

(1)提高操作模式间的转换速度

两种操作模式间的转换发生之如此频繁,如果不能有效减少其转换速度,即使充分利用硬件特性,虚拟机的整体性能也会大打折扣。早期的支持硬件辅助虚拟化技术的 Pentium 4 处理器需要花费 2409 个时钟周期处理 VM entry,花费 508 个时钟周期处理由缺页异常触发的 VM exit,代价相当高。

随着 Intel 技术的不断完善,在新的 Core 架构上,相应时间已经减少到 937 和 446 个时钟周期。未来硬件厂商还需要进一步提高模式的转换速度,并提供更多的硬件特性来减少不必要的转换。

(2)优化翻译后援缓冲器(TLB)的性能

每次 VM entry 和 VM exit 发生时,由于需要重新加载 CR3 寄存器,因此 TLB(Translation Lookaside Buffer)被完全清空。虚拟化系统中操作模式的转换发生频率相当高,因此系统的整体性能受到明显损害。一种可行的方案是为 VMM 和每个虚拟机分配一个全局唯一 ID,TLB 的每一项附加该 ID 信息来索引线性地址的翻译。

(3)提供内存管理单元(MMU)虚拟化的硬件支持

即使使用 Intel-VT 技术,VMM 还是得用老办法来处理 Guest OS 中发生的缺页异常以及Guest OS 的客户机物理地址到主机物理地址的翻译,本质原因是 VMM 完全控制主机物理内存,因此 Guest OS 中的线性地址的翻译同时牵涉到 VMM 和 Guest OS 的地址空间,而硬件只能看到其中的一个。

Intel 和 AMD 提出了各自的解决方案,分别叫做 EPT(Extended Page Table)和 Nested Paging。这两种技术的基本思想是,无论何时遇到客户机物理地址,硬件自动搜索 VMM 提供的关于该 Guest OS 的一个页表,翻译成主机物理地址,或产生缺页异常来触发 VM exit。

(4)支持高效的 I/O 虚拟化

I/O 虚拟化需要考虑性能、可用性、可扩展性、可靠性和成本等多种因素。最简单的方式是 VMM 为虚拟机模拟一个常见的 I/O 设备,该设备的功能由 VMM 用软件或复用主机 I/O 设备的方法实现。

2004 年,微软发布 Virtual Server 2005 计划,象征着虚拟化技术正式进入主流市场。

2005 年,OpenVZ 发布,这是 Linux 操作系统的容器化技术实现,同时也是 LXC 的核心实现。

2006 年,Intel 和 AMD 等厂商相继将对虚拟化技术的支持加入到 x86 体系结构的中央处理器中(AMD-V,Intel VT-x),使原来纯软件实现的各项功能可以用借助硬件的力量实现提速。同年,红帽将 Xen 作为 RHEL 的默认特性。同年,Amazon Web Services(AWS)开始以 Web 服务的形式向企业提供 IT 基础设施服务,现在通常称为云计算。

虚拟化和云计算不解的渊源自此开始了。

2007 年 1 月,Sun 公司发布了开源虚拟化软件 VirtualBox。同年 Xen 被 Citrix(思杰)收购。

2007 年 2 月,Linux Kernel 2.6.20 合入了由以色列公司 Qumranet 开发的虚拟化内核模块 KVM(Kernel-based Virtual Machine,基于内核的虚拟机),支持 KVM 的前提是 CPU 必须要支持虚拟化技术。

2008 年第一季度,微软同时发布了 Windows Server 2008 R2 及虚拟化产品 Hyper-V。

2008 年 6 月,Linux Container(LXC) 发布 0.1.0 版本,其可以提供轻量级的虚拟化,用来隔离进程和资源。是 Docker 最初使用的容器技术支撑。

2008 年 9 月 4 日,Red Hat 收购以色列公司 Qumranet,并着手使用 KVM 替换在 Red Hat 中的使用的 Xen。

2009 年 9 月,红帽发布 RHEL 5.4,在原先的 Xen 虚拟化机制之上,将 KVM 添加了进来。同年,阿里云写下第一行代码。

2010年11月,红帽发布 RHEL 6.0,这个版本将默认安装的 Xen 虚拟化机制彻底去除,仅提供 KVM 虚拟化机制。

当年,Xen 虽然作为一项广泛应用于 Linux 发行版中的虚拟化技术,但却迟迟没有集成到 Linux 内核中,红帽也许是出于对这种脱离内核的维护方式感到不爽,加之当时思杰和微软表现的很非常亲密,导致红帽萌生了放弃 Xen 的想法,并在正式采用 KVM 的一年后,就宣布彻底放弃 Xen。硬件辅助虚拟化的到来,Xen 引以为傲的半虚拟化技术也随之在主流 Linux 发行厂商中衰落了。

2010 年 10 月 21 日,NASA 发布了可以 IaaS(基础设施即服务)云操作系统 OpenStack,第一个版本便是众所周知 Austin(奥斯丁)。OpenStack 挽手自主可控的口号,推动了云计算在国内的全面爆发。

2011 年初,IBM 找上老搭档红帽,表示 KVM 这个东西值得加大力度去做。于是到了 5 月,IBM 和红帽,联合惠普和英特尔一起,成立了开放虚拟化联盟(Open Virtualization Alliance),加速 KVM 投入市场的速度,由此避免 VMware 一家独大的情况出现。

联盟成立之时,红帽的发言人表示:“大家都希望除 VMware 之外还有一种开源选择。未来的云基础设施一定会基于开源。我们想要营造一个小厂商们可以轻松加入的生态环境。”

现在回头再看,企业之所以能够长盛不衰,长远的洞察力至关重要。

6. 操作系统虚拟化(容器)

2013 年 3 月 15 日,在加利福尼亚州圣克拉拉召开的 Python 开发者大会上,DotCloud 的创始人兼首席执行官 Solomon Hvkes 在一场仅五分钟的微型演讲中,首次提出了 Docker 这一概念,并于会后将其源码开源并托管到 Github。

最初的 Docker 就是使用了 LXC 再封装了其他的一些功能。可以看出,Docker 的成功,与其说是技术的创新,还不如说是一次组合式的创新。

2014 年 6 月,Docker 发布了第一个正式版本 v1.0。同年,Redhat 和 AWS 就宣布了为 Docker 提供官方支持。

在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统虚拟化(OS-level virtualization) 是一种在服务器操作系统中使用的、没有 VMM 层的轻量级虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程(容器),不同实例中的进程完全不了解对方的存在。

操作系统虚拟化看似与上述提到过的几种硬件虚拟化方式一样,都是产生多个操作系统,但操作系统虚拟化与硬件虚拟化之间还是有很多不同之处,其中最核心的区别就是:操作系统虚拟化是操作系统的虚拟化,而硬件虚拟化是计算机的虚拟化。前者隔离操作系统资源,而后者隔离计算机硬件资源。

容器技术之所以火热,是因为容器隔离性封装的特性,为运维能力引入了 “可编程性”,开发人员借助容器得以 Software Define Operation。

2015 年 7 月 21 日:Kubernetes v1.0 发布!进入云原生时代。

2018 年,IBM 正式收购 Redhat 以弥补在云计算市场的战略失败。同年,微软收购 Github。开源的历史会铭记这一天。

2019 年,全球最大的开源盛会 KubeCon + CloudNativeCon + Open Source Summit、Open Infrastructure Summit 相继在上海举办。中国的开源会铭记这一天。

2、虚拟化技术分类

虚拟化技术形式种类繁多,实现的应用也有一个体系。但其分类一般的介绍比较含糊,分类属性不一。

这里按照不同实现层次、不同应用的领域、不同资源、不同技术和不同抽象对象对虚拟化分类。

1. 从实现层次分类

以实现层次可划分为硬件虚拟化、操作系统虚拟化和应用程序虚拟化。

1)硬件虚拟化

硬件虚拟化就是用软件来虚拟一台标准计算机的硬件配置,如CPU、内存、硬盘、声卡、显卡和光驱等。使其成为一台虚拟的裸机,然后就可以在其中安装操作系统。

使用时先在操作系统中安装一个硬件虚拟化软件,用其虚拟出一台计算机。然后安装系统,做到在系统中运行系统,并可虚拟出多台计算机,并安装多个相同或不同的系统。

其代表产品为VMware,其余知名的有Microsoft的Virtual PC和开源免费的VirtualBox。

为虚拟机分配的硬件资源要占用实际硬件的资源,对性能损耗也较大。因为是在系统中安装虚拟化软件,然后在虚拟的计算机上装系统,所以就有原系统和虚拟化软件两层消耗。为了提高性能,出现了另外一种硬件虚拟化形式。即直接在裸机上安装虚拟化软件,然后安装多个系统并同时运行。从而跳过原系统这一环节,性能大大提高,这种虚拟化又叫作“准虚拟化”。VMware推出的相关产品名为“VMware ESXi”;Microsoft的该类产品为Hyper-V,主要应用于服务器领域。

2)基于操作系统的虚拟化

操作系统虚拟化就是以一个系统为母体克隆出多个系统,它比硬件虚拟化要灵活方便。因为只需在系统中安装一个虚拟化软件就能以原系统为样本很快克隆出系统,克隆出的系统与原系统除一些标示符(Identifier,ID)标示外,其余都一样。

这种虚拟化看似与硬件虚拟化一样都是虚拟多个操作系统出来,但其实与硬件虚拟化仍有很多不同之处。

  1. 操作系统虚拟化是以原系统为样本虚拟出一个近乎一模一样的系统;硬件虚拟化是虚拟硬件环境,然后真实地安装系统,二者虚拟的内容不一样。
  2. 操作系统虚拟化虚拟的系统都只能为同样的系统;硬件虚拟化虚拟的系统可以为不同的系统,如Linux、Mac和Windows家族。
  3. 操作系统虚拟化虚拟的多个系统有较强的联系,一是可以为多个虚拟系统同时进行配置,更改了原系统就改了所有;二是如果原系统损坏,会殃及所有虚拟拟系统。硬件虚拟化虚拟的多个系统是相互独立的,与原系统无联系,原系统的损坏不会殃及虚拟的系统。
  4. 操作系统虚拟化的性能损耗低,它们都是虚拟的系统,而非硬件虚拟化那样真实安装的实体,没有硬件虚拟化的虚拟硬件层大大降低了性能损耗。

3)基于应用程序的虚拟化

前两种虚拟化技术大多应用于企业、服务器和一些IT专业工作领域。随着虚拟化技术的发展,逐渐从企业往个人向大众应用的趋势发展,于是出现了应用程序虚拟化技术,它是近年虚拟化的新贵和热门领域。

前两种虚拟化的目的是虚拟完整的真实的操作系统,应用虚拟化的目的也是虚拟操作系统。但只是为保证应用程序的正常运行虚拟系统的某些关键部分,如注册表和C盘环境等,所以较为轻量和小巧。

应用虚拟化技术的兴起最早也从企业市场而来,一个软件被打包后通过局域网很方便地分发到企业的几千台计算机上。不用安装直接使用,大大降低了企业的IT成本。

应用虚拟化技术应用到个人领域可以实现很多非绿色软件的移动使用,如计算机辅助设计、3ds Max和Office等。并且可以让软件免去重装烦恼,不担心系统重装。很有绿色软件的优点,但又在应用范围和体验上超越绿色软件。

使用方法大体为首先安装虚拟化软件,此时已经搭建了一个虚拟化环境。然后接收来自网络的应用软件或安装应用软件到虚拟化环境中,最后使用应用软件。

应用虚拟化领域比较可喜的是也有国产产品参与其中,如 Microsoft Application Virtualization(App-V)、VMware ThinApp、Symantec Software Virtualization Solution(SVS)、Installfree、SandboxIE和云端软件平台(Softcloud)。

其最大特色一是让软件使用变得更方便快捷;二是让软件使用不影响系统,保持系统干净和稳定,实现真正的绿色。

云端与其他应用虚拟化软件不同,它自带了打包好的软件资源。使用时无须安装,一点就用,不写注册表和系统。无用软件可以一键删除,快速干净不残留。而且最省事的一点莫过于重装系统后,所有软件不用重装。

因为在云端使用的软件都在云端的缓存目录中,所以重装系统后只要安装云端并再次指定这个目录,所有软件就可以立即恢复使用。并且无须重配置,与重装前的安全相同。

2. 按应用领域分类

以被应用的领域虚拟化可划分为服务器虚拟化、存储虚拟化、应用虚拟化、平台虚拟化、桌面虚拟化、网络虚拟化、管理虚拟化和文件虚拟化。

1)服务器虚拟化

服务器虚拟化就是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台,甚至上百台相互隔离的虚拟服务器。从而不再受限于物理上的界限,而是让CPU、内存、磁盘和I/O等硬件变成可以动态管理的资源池。

服务器虚拟化是一种方法,能够通过区分资源的优先次序并随时随地能将服务器资源分配给最需要它们的工作负载来简化管理和提高效率,减少为单个工作负载峰值而储备的资源。服务器虚拟化的实现通常使用两类虚拟化技术,一类是硬件辅助虚拟化技术;另一类是软件虚拟化技术,它是基础设施即服务(Infrastructure as a Service,IaaS)的基础。

服务器虚拟化需要具备的功能和技术包括多实例、隔离性、CPU虚拟化、内存虚拟化、设备与I/O虚拟化、无知觉故障恢复、负载均衡、统一管理和快速部署。

2)存储虚拟化

存储虚拟化的方式是将多个存储介质模块(如硬盘和RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池中得到统一管理。从主机和工作站的角度看不是多个硬盘,而是一个分区或者卷,如同是一个超大容量(如1T以上)的硬盘。

存储虚拟化技术向服务层屏蔽存储设备硬件的特殊性,而只保留其统一的逻辑特性。实时地在后台从一个平台向另一个存储平台迁移,而不对主机造成任何中断或影响。这种可以将多种和多个存储设备统一管理起来,为使用者提供大容量和高数据传输性能的存储系统称为“虚拟存储”。

存储虚拟化可以在3个不同层面上实现,包括基于专用卷管理软件在主机服务器上实现、利用阵列控制器的固件在磁盘阵列上实现,以及利用专用的虚拟化引擎在存储网络上实现。

存储虚拟化具有的功能和特点是集中存储、分布式扩展、绿色环保、虚拟本地硬盘、安全认证、数据加密和层级管理。

3)应用虚拟化

应用虚拟化通过依赖的底层操作系统对应用程序进行打包,以更好地管理遗留应用程序及其兼容性。它把应用对底层系统和硬件的依赖抽象出来,从而解除应用与操作系统和硬件的耦合关系。应用程序运行在本地应用虚拟化环境中时,这个环境为应用程序屏蔽了底层可能与其他应用产生的冲突,应用虚拟化是软件即服务(Software as a Service,SaaS)的基础。

应用虚拟化需要具备的功能和特点是解耦合、共享性、虚拟环境、兼容性、快速升级更新和用户自定义。

4)平台虚拟化

平台虚拟化是集成各种开发资源虚拟出的一个面向开发人员的统一接口,软件开发人员可以方便地在这个虚拟平台中开发各种应用并嵌入到云计算系统中,使其成为新的云服务供用户使用。平台虚拟化主要通过CPU虚拟化、内存虚拟化和I/O接口虚拟化来实现。

平台虚拟化具备的功能和特点是通用接口、内容审核、测试环境、服务计费、排名打分、升级更新和管理监控。

5)桌面虚拟化

桌面虚拟化顾名思义就是将桌面的计算机和软件进行虚拟化改造的技术,它依靠虚拟机来提供桌面系统,将用户的桌面环境与其使用的终端设备解耦。服务器中存放的是每个用户的完整桌面环境,用户可以使用具有足够处理和显示功能的不同终端设备通过网络访问该桌面环境。

桌面虚拟化专注于桌面应用及其运行环境的模拟与分发,是对现有桌面管理自动化体系的完善和补充。采用桌面虚拟化技术之后将不需要在每个用户的桌面上部署和管理多个软件客户端系统,所有应用客户端系统都将一次性地部署在数据中心的一台专用服务器上,这台服务器就放在应用服务器的前面。

当前桌面虚拟化主要有如下几种主流技术:

  1. 通过远程登录的方式使用服务器上的桌面。
  2. 通过网络服务器的方式运行改写过的桌面。
  3. 通过应用层虚拟化的方式提供桌面虚拟化。

桌面虚拟化具有的功能和接入标准是集中管理维护、使用连续性、故障恢复和用户自定义。

6)网络虚拟化

网络虚拟化是将一条网络带宽分割成若干条相互独立的通道,以此来控制可用带宽,将可用带宽分配给特定的资源。网络虚拟化的过程是将硬件与软件的网络资源与功能组合成一个单一且基于软件的管理性实体,即一个虚拟网络。

网络虚拟化一是外部的,即将许多网络或网络的各部分组合成一个虚拟单元;二是内部的,即在一个单一的系统中为软件容器提供类似网络的功能。比较常见的就是VLAN,即在物理局域网内创建逻辑网络,而这两种网络互不影响。

在一台服务器上放置一个外围的网络而不影响网络或者虚拟机之间的通信的情况称为“内外网隔离”,VPN和云虚拟网也是网络虚拟化的典型代表。

总的来说,网络虚拟化带来的好处如下:

  1. 定制的访问:管理员可以快速地定制访问和网络选项,如带宽节流及服务质量。
  2. 合并:物理网络可以被组合成一个单一的虚拟网络来整体简化管理。

网络虚拟可能增加复杂性和性能开销,并对管理员的技能提出更高的要求。

7)管理虚拟化

管理虚拟化关注管理整个数据中心的物理机和虚拟机的技术,为提供的服务提供一个单一且统一的基础架构。管

理虚拟化不一定是通过单一界面执行,如在大型的数据中心会将不同的服务交付划分到不同的层次中并分离其之间的操作;在较小的数据中心可能没有进行工作人员的职责划分,但当他们使用用户的体系结构的各个层次时用户应至少确保管理员具备相关的技能。实际上,应该确保资源池(主机服务器、机架、机箱、存储及网络硬件)和虚拟服务(或产品)两个关键层在任何时候都是隔离的。

8)文件虚拟化

文件虚拟化技术把物理上分散存储的众多文件整合为一个统一的逻辑视图,使物理文件服务器的基本细节和网络附加存储(Network Attached Storage,NAS)设备抽象化并跨那些物理设备创建一个统一命名空间。命名空间指的是目录和文件及其相应的数据结构,通过把多文件系统和设备都统一到一个单独的命名空间下。文件虚拟化提供了一个单一的文件和目录,并为管理员提供了一个更易于管理数据的单控制点。

文件虚拟化可让用户根据各种不同的限制条件来分离文件数据,并掩饰用户读取文件的方式,这样用户就可以在客户不受影响的前提下放心地移动和管理自己的数据文件。文件虚拟化同样适用于那些存储架构增长较快并且数据读取较为频繁的用户,还可以使迁移存储系统变得更为简单,这就是现在市场上有种类繁多的文件虚拟化软件的原因。

3. 按照可虚拟化的资源不同分类

可虚拟化的资源有多种多样,总的来讲可以分为3类,即基础设施虚拟化、系统虚拟化和软件虚拟化。

1)基础设施虚拟化

由于网络、存储和文件系统同为支撑数据中心运行的重要基础设施,因此将网络虚拟化和存储虚拟化归类为基础设施虚拟化。

网络虚拟化是指将网络的硬件和软件资源整合,为用户提供虚拟网络连接的虚拟化技术。它可以分为局域网络和广域网络虚拟化两种形式,在局域网络虚拟化中多个本地网络被组合成为一个逻辑网络,或者一个本地网络被分割为多个逻辑网络并用这样的方法来提高大型企业自用网络或者数据中心内部网络的使用效率,该技术的典型代表是VLAN。

广域网络虚拟化目前最普遍的应用是虚拟专用网(Virtual Private Network,VPN),它抽象化了网络连接,使得远程用户可以随时随地访问公司的内部网络并且感觉不到物理连接和虚拟连接的差异性,并且保证这种外部网络连接的安全性与私密性。

存储虚拟化是指把物理上分散存储的众多文件整合为一个统一的逻辑视图,方便用户访问并提高文件管理的效率。存储设备和系统通过网络连接,用户在访问数据时并不知道其真实的物理位置,还可使管理员能够在一个控制台上管理分散在不同位置的异构设备中的数据。

它主要有基于存储设备和基于网络的存储虚拟化两种主要形式,RAID 是基于存储设备的存储虚拟化的典型代表。该技术通过将多块物理磁盘组合成为磁盘阵列,用廉价的磁盘设备实现了一个统一和高性能的容错存储空间;NAS和存储区域网(Storage Area Network,SAN)则是基于网络的存储虚拟化技术的典型代表。

2)系统虚拟化

在一台物理计算机中可以同时安装和运行一个或多个虚拟的操作系统即所谓的系统虚拟化,其核心思想是使用虚拟化软件在一台物理机上虚拟出一台或多台虚拟机(VM)。在系统虚拟化中多个操作系统可以互不影响地在同一台物理机上同时运行复用物理机资源,还能实现操作系统与物理计算机的分离。在操作系统内部的应用程序看来,与使用直接安装在物理计算机上的操作系统没有显著差异。

有各种各样不同的系统虚拟化技术,如应用于IBM z系列大型机的系统虚拟化、应用于基于Power架构的IBM p系列服务器的系统虚拟化和应用于x86架构的个人计算机的系统虚拟化。对于这些不同类型的系统虚拟化,虚拟机运行环境的设计和实现不尽相同。

但是在系统虚拟化中虚拟运行环境都需要为在其上运行的虚拟机提供一套虚拟的硬件环境,包括虚拟的处理器、内存、设备与 I/O 及网络接口等,如下图所示。

同时,虚拟运行环境也为这些操作系统提供了诸多特性,如硬件共享、统一管理和系统隔离等。

系统虚拟化的更大价值在于服务器虚拟化,由于服务器通常具有很强的硬件能力,如果在同一台物理服务器上虚拟出多台虚拟服务器且每台虚拟服务器运行不同的服务,这样便可提高服务器的利用率。即减少机器数量、降低运营成本并节省物理存储空间及电能,从而达到既经济又环保的目的。

除了在个人电脑和服务器上采用虚拟机进行系统虚拟化以外,桌面虚拟化同样可以达到在同一个终端环境运行多个不同系统的目的。当用户在其桌面环境上工作时,所有的程序与数据都运行和最终被保存在这个远程的服务器中。用户可以使用任何具有足够显示能力的兼容设备来访问和使用自己的桌面环境,如个人电脑和智能手机等。

3)软件虚拟化

除了针对基础设施和系统的虚拟化技术,还有另一种针对软件的虚拟化环境,目前业界公认的这类虚拟化技术主要包括应用和高级语言虚拟化。

应用虚拟化将应用程序与操作系统解耦合,为应用程序提供了一个虚拟的运行环境。当用户需要使用某款软件时,应用虚拟化服务器可以实时地将用户所需的程序组件推送到客户端的应用虚拟化运行环境。当用户完成操作关闭应用程序后,所做的更改和数据将被上传到服务器集中管理。这样用户将不再局限于单一的客户端,可以在不同终端上使用自己的应用。

高级语言虚拟化解决的是可执行程序在不同体系结构计算机间迁移的问题。在高级语言虚拟化中由高级语言编写的程序被编译为标准的中间指令,这些中间指令在解释执行或动态翻译环境中被执行,因而可以运行在不同的体系结构之上。例如,被广泛应用的Java虚拟机技术解除下层的系统平台(包括硬件与操作系统)与上层的可执行代码之间的耦合来实现代码的跨平台执行。

4. 按系统虚拟机采用的技术不同分类

按系统虚拟机采用的技术不同进行分类,可以将系统虚拟化分为如下7大类。

1)硬件仿真(Emulation)

硬件仿真属于Hosted 模式,即在物理机的操作系统中创建一个模拟硬件的程序(Hardware VM)来仿真所想要的硬件并在此程序上运行虚拟机。而且虚拟机内部的客户操作系统(Guest OS)无须修改,如图所示。

知名的产品有Bochs、QEMU和Microsoft的Virtual PC。

其优点是Guest OS无须修改,而且非常适合用于操作系统,以及固件和硬件的协作开发。固件开发人员可以使用目标硬件VM在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用时。

其缺点是速度非常慢,有时速度比物理情况慢100倍以上。未来因为速度的问题而渐趋颓势,但是还应该有一席之地。

2)完全虚拟化(Full Virtulization)

完全虚拟化也称为“原始虚拟化”,它使用一台虚拟机并在客户操作系统和原始硬件之间使用 Hypervisor(系统管理程序)共享低层硬件和进行协调,如图所示。

以捕捉和处理那些对虚拟化敏感的特权指令,主要是在客户操作系统和硬件之间使客户操作系统无须修改就能运行。速度会根据不同的实现而不同,但大致能满足用户的需求。

这种方式是业界现今最成熟和最常见,知名的产品有IBM CP/CMS、VirtualBox、KVM、VMware Workstation和VMware ESX(其4.0版改名为“VMware vSphere”)。

其优点是完全虚拟化比硬件仿真的速度要快,完全隔离每台虚拟机和 VMM。大多数操作系统可以直接安装且Guest OS无需修改。并且使用非常简单,不论是 VMware的产品,还是Sun(Oracle)的VirtualBox。

其缺点是要求硬件和软件元素的正确组合,在纯粹的x86架构上不太可能实现,因为有些特权指令不能被捕获;此外基于Hosted模式的完全虚拟产品性能方面不是特别优异,特别是I/O方面。
未来因为使用这种模式不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,所以在未来完全虚拟化还是属于主流。

3)超虚拟化(Para virtualization)

超虚拟化与完全虚拟化有一些类似,也利用Hypervisor来实现对底层硬件的共享访问。但是由于在Hypervisor上面运行的Guest OS已经集成与超虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化,如图所示。

使用这种方法无须重新编译或捕获特权指令,使性能非常接近物理机。其最经典的产品就是 Xen,而且因为 Microsoft 的 Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于超虚拟化。

其优点是这种模式和完全虚拟化相比架构更精简,而且在整体速度上有一定的优势,可同时支持多个不同的操作系统。

其缺点是需要对 Guest OS 进行修改,所以在用户体验方面比较麻烦。

未来超虚拟化和现在的情况比较类似,在公有云(如 Amazon EC2)平台上继续占有一席之地。但是很难在其他方面和类似 VMware vSphere 这样的完全虚拟化产品竞争,并且它也将会利用硬件辅助虚拟化技术来提高速度,并简化架构。

4)硬件辅助虚拟化(Hardware Assisted Virtualization)

硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的完全虚拟化,是一种对计算机或操作系统的虚拟。它对用户隐蔽了真实的计算机硬件,表现出另一个抽象计算平台。Intel和AMD等硬件厂商通过对部分完全虚拟化和超虚拟化使用到的软件技术进行硬件化来提高性能,如有了Intel-VT技术的支持,Guest OS和VMM的执行环境自动地完全隔离开来。

Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。硬件辅助虚拟化技术常用于优化完全虚拟化和超虚拟化产品,而不是独创一派。最出名的例子莫过于VMware Workstation,它虽然属于完全虚拟化,但是在其6.0版本中引入了硬件辅助虚拟化技术,如Intel的VT-x和AMD的AMD-V。现在市面上的主流完全虚拟化和超虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox、KVM、VMware ESX和Xen。

其优点是硬件辅助虚拟化具有 100%的隔离度和安全性,不占用任何系统资源,通过引入硬件技术将使虚拟化技术更接近物理机的速度。

其缺点是操作相对复杂,最小操作粒度是一个 CPU。而且在变更分区资源时移出 CPU的分区需要重启操作系统,现有的硬件实现不够优化,还有进一步提高的空间。
未来因为通过使用硬件技术不仅能提高速度,而且能简化虚拟化技术的架构,所以预见硬件技术将会被大多数虚拟化产品所采用。

5)操作系统级虚拟化(Operating System Level Virtualization)

操作系统级是指处于传统操作系统和用户应用程序之间的抽象层,其虚拟化在操作系统本身之上实现服务器的虚拟化,如图所示。

利用数据中心中的软硬件在一台单一物理服务器中创建隔离的容器和操作系统统实例,这些容器像真实服务器一样运行。它通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在,主要的技术有 Parallels Virtuozzo Containers、Unix-like系统中的chroot和Solaris上的Zone等。

其优点是操作系统级虚拟化的资源很有限而效率很高,只需要管理和更新一个操作系统并以本地的速度运行。并且支持所有物理主机配置支持的硬件和操作系统特征,因为它直接修改操作系统,所以实现成本低且性能不错。

其缺点是操作系统级虚拟化不支持同时运行不同序列的操作系统,在资源隔离方面表现不佳,而且对Guest OS的型号和版本有限定。

这类虚拟化未来不明朗,除非有革命性技术诞生;否则还应该属于小众,如视频播放系统。

6)半虚拟化(Partial Virtualization)

半虚拟化(部分虚拟化)只模拟部分底层硬件,因此客户机操作系统不做修改无法在虚拟机中运行,其他程序可能也需要修改。

半虚拟化虚拟机在用户程序中提供了特殊的 API,要求真正修改操作系统。其关键的特征是地址空间的虚拟化,从而保证为虚拟机提供自己的地址空间。虚拟化层可以插入机器软件堆栈的不同位置,性能下降是虚拟化系统的一个典型问题,然而半虚拟化通过只修改客户操作系统内核来尝试降低虚拟化开销及改进性能。

在历史上,半虚拟化是通往完全虚拟化道路上的重要里程碑,最早出现在第1代的分时系统CTSS和IBM M44/44X实验性的分页系统中。

下图展示了半虚拟化体系结构的概念,其中客户操作系统被半虚拟化。

半虚拟化的虚拟机体系结构,其中包括为执行虚拟化进程而修改客户操作系统内核,将不可虚拟化的指令转换为对Hypervisor或VMM的超级调用 

下图所示为一种智能编译器将不可虚拟化的操作系统指令替换为使用超级调用的情况。

半虚拟化的客户操作系统,由智能编译器辅助将不可虚拟化的操作系统指令替换为超级调用。 

传统x86处理器提供4个指令执行环,即环0、1、2和3。环越低,被执行指令的优先级越高。操作系统负责管理硬件,特权指令在环0执行,而用户态应用程序则执行在环3。

当x86处理器被虚拟化时,一个虚拟化层插入在硬件和操作系统之间。按照x86环的定义,虚拟化层仍应被安装在环 0。处于环 0 的不同指令会导致一些问题。

在图中我们看到半虚拟化将不可虚拟化的指令替换为可与Hypervisor或VMM直接通信的超级调用,然而当客户操作系统内核为虚拟化而修改时,不再能直接运行在硬件之上。

其优点是比完全虚拟化更加容易实现,在没有硬件辅助的基础上半虚拟化的子操作系统在网络和磁盘 I/O 方面是最高性能的虚拟机。完全虚拟化的主要问题是二进制翻译的性能较低,而加速二进制翻译则较为困难。因此许多虚拟化产品利用了半虚拟化体系结构,流行的Xen、KVM和VMware ESX是很好的例子。

其缺点是如果在半虚拟化虚拟机中运行的操作系统不做大量修改,则无法运行。虚拟机向下兼容的能力较弱,也不是非常便携。尽管半虚拟化会降低开销,但也会引入其他问题。首先,兼容性和可移植性会受到影响,因为它必须也支持未修改的操作系统;其次,维护半虚拟化的操作系统的开销较高,因为它们可能需要大量地修改操作系统内核;最后,半虚拟化的性能优势会随负载大幅变化。

7)本地虚拟化(Local Virtualization)

本地虚拟化是x86架构虚拟化技术中的最新技术,经常被称为“混合虚拟化”,这种类型的虚拟化是完全虚拟化或半虚拟化与 I/O 加速技术的结合。与完全虚拟化相同,子操作系统不需要修改就可以直接安装。它利用了x86架构的CPU技术,即Intel VT和AMD-V。

其优点是本地虚拟化用硬件而不是用软件中的捕获模拟技术来处理不可虚拟的指令,并有选择地应用了内存和I/O加速技术。它支持x64(64位x86扩展)的目标操作系统,拥有各种类型的x86虚拟机中最高的CPU、内存和I/O性能。

其缺点是本地虚拟化要求具备支持硬件辅助加速的CPU架构,还需要对一些半虚拟化的操作系统进行修改,虽然比纯粹的半虚拟化少一些。

5. 按抽象对象的不同分类

虚拟化技术包含的范围很广,从VMware到Java虚拟机都属于虚拟化技术的分支,根据抽象对象的不同可以分为如下5种类型。

1)指令集虚拟化

指令集虚拟化是以软件的方式通过指令模拟来实现,要模拟的指令运算包括CPU运算和 I/O 访问。这层的虚拟机需要模拟所有可能的指令行为,包括数据运算、内存访问和设备访问等。在指令集虚拟化中应用程序所执行的指令都被翻译成实际物理平台可以使用的指令,也就是使用本地指令集架构(Instruction Set Architecture,ISA)模拟应用程序运行需要的ISA,所有指令集虚拟化又可以称为“指令集架构级虚拟化”。

其优点是通过指令的模拟可以实现对多个平台的抽象,如在 x86 平台上模拟 ARM、SPARC、MIPS 或者 Alpha平台的指令集可以使得在一个平台上面编译程序能够在另外一个平台上执行,但是这种方便是以损失计算性能为代价的。通过二进制翻译技术来代替指令解释可以有效地提升效率,二进制解释技术通过每次翻译一个基本块的方式来减少上下文切换,并且通过翻译代码缓存、执行路径动态预测等方式来提高执行效率。有代表性的指令集虚拟化系统有 Fabrice Bellard开发的QEMU等。

2)硬件虚拟化

硬件虚拟化技术是指有硬件支持的虚拟化技术,在芯片级别实现。它使得一个硬件平台表现为多个独立并与实际硬件有相同指令集体系结构的硬件平台,在每个虚拟的硬件平台上可以分别运行不同的操作系统,并且每个操作系统都为自己独自占有整个硬件平台。硬件级虚拟化又称为“系统级虚拟化”,其实质是多台虚拟机复用一台物理主机。

由虚拟机管理器实现对物理主机资源的划分和共享,因此向上表现出多台虚拟机,其上能同时运行独立的操作系统。各虚拟机相互隔离,这种隔离不仅表现在客户机之间,也表现在客户机和宿主机之间。和指令集虚拟化相比,硬件虚拟化不完全在不同ISA之间翻译,而是只考虑应用程序和主机使用同一个指令集的情况。

例如,在x86平台上为使用x86 指令集的程序提供虚拟化环境。在这种情况下,应用程序使用的多数指令都可以由物理环境直接执行。硬件虚拟化正是使用了这一特性大大提高了系统的运行效率,多数指令直接运行不意味着所有指令都直接运行。

目前 Intel 和 AMD 都分别发布了针对 x86 架构的硬件虚拟化技术,即 Virtualization Technology(VT)和Secure Virtual Machine(SVM);另外,Xen、KVM和VMWare公司的虚拟化产品Virtual PC及UML都利用这种硬件虚拟化技术提升了性能。

3)操作系统虚拟化

操作系统虚拟化重用操作系统的功能来管理和分配底层的硬件资源给虚拟机,而不需要在硬件的基础上重新实现操作系统已经提供的某些功能。操作系统虚拟化的目标就是通过建立一个虚拟层为每个程序建立一个操作系统的副本,即为每个程序提供一个安全和隔离的运行环境,从而和物理环境分离。这种虚拟化将每台虚拟机视为一个独立的上下文,通过操作系统层面的设计来实现不同的上下文切换和隔离。

虚拟机实质是应用软件的虚拟运行环境,虚拟运行环境的操作系统实质是虚拟层软件根据应用的要求而生成的物理机器操作系统的副本。虚拟层软件实现了虚拟运行环境与其下物理机器操作系统,以及各虚拟运行环境间的隔离。操作系统虚拟化和硬件虚拟化的主要区别在于系统安全和资源隔离的实现上,硬件虚拟化的主要隔离在硬件抽象层来实现,如虚拟地址空间、总线地址、设备和特权指令等;操作系统虚拟化则通过操作系统层面的对象来控制,如进程ID和用户ID等。

此虚拟化的典型例子如Virtuozzo的OpenVZ和Free BSD的Jail,其中Jail是基于FreeBSD的具有划分虚拟执行环境的虚拟软件,划分后的虚拟执行环境又被称为“Jail”。每个 Jail 都包含典型的操作系统资源,如进程、文件系统和网络资源等,并且各Jail间具有较好的隔离性。

4)应用程序虚拟化

应用程序虚拟化又称为“高级语言虚拟化”,传统的应用程序执行方式是高级语言被编译为机器指令,通过ISA的支持来运行这些指令。但是由于存在各种不同的ISA,因此导致各个平台上程序的不兼容。而应用程序虚拟化的本质是在现有的操作系统的架构上建立一种公共的中间编程语言,从而隐藏了与特定操作系统有关的内容,这样程序只需要解释成该编程语言就可以在多种平台上流畅地执行。

举例来讲,随着Java虚拟机(Java Virtual Machine,JVM)的出现,这种新的虚拟化方式引起了人们的注意。这种虚拟化引入一种中间语言层,增加了一种新的指令集隐藏与底层平台有关的特性。这样应用程序只需要执行这套指令,不关心底层如何实现,实现了良好的隔离性和可移植性。

5)库函数虚拟化

应用程序的运行都需要对应的函数库,函数库是程序和操作系统的中间层。通过屏蔽底层实现,可以使一些函数库在不同的平台中使用。

几乎在所有的系统中应用程序都是通过调用底层的应用编程接口(Application Programming Interface,API)来实现的,这些API隐藏了底层的具体实现细节,而呈现给应用程序一个抽象的接口。库函数层的虚拟化的本质是在底层操作系统(宿主操作系统)上实现运行另一个操作系统(客户操作系统)应用程序(客户应用程序)所依赖的API,完成客户操作系统API的仿真工作。

这种虚拟化技术的特点是应用程序源代码跨操作系统的移植,即客户应用程序源代码无须修改,但必须在宿主操作系统中与仿真API重新编译生成本地应用后才可运行。这方面最著名的例子是Wine和Cygwin,Wine用来在Linux环境下运行Windows程序,在运行过程中需要用到Windows下的dll动态链接库。它不对CPU指令集进行模拟,并且不能在Wine中安装操作系统或者设备驱动程序,它只是在Linux上面模拟了全套的Windows API/ABI;Cygwin的实现方式与Wine类似,只不过它在Windows上面模拟出Linux的API。

各个层次的虚拟化技术各有特点,可以针对不同的应用需求实施。但随着虚拟化技术发展,各个层次的虚拟化技术也可以相互配合共同工作,各自之间的界限逐渐模糊。

3、虚拟化体系结构

1. 虚拟化实现的抽象层次架构

虚拟化是一种计算机体系结构技术,其中多台虚拟机共享同一台物理硬件机器。引入虚拟机的目的是在多用户之间共享资源并提高资源利用效率和应用程序灵活度,硬件资源或软件资源可以在不同的功能层进行虚拟化。

传统计算机运行与其硬件体系结构相适合的操作系统,引入虚拟化后不同用户应用程序由自身的操作系统(即客户操作系统)管理,并且用户操作系统可以独立于主机操作系统同时运行在同一个硬件上。这通常通过新添加一个称为“虚拟化层”的软件来完成,该虚拟化层即hypervisor或VMM。

虚拟化软件层的主要功能是将一台主机的物理硬件虚拟化为可被各虚拟机互斥使用的虚拟资源,这可以在不同的操作层实现。虚拟化软件通过在计算机系统的不同层插入虚拟化层来创建虚拟机抽象,通常的虚拟化层包括ISA级、硬件抽象级、操作系统级、库支持级和应用程序级,如图所示。

1)指令集架构级

该级虚拟化通过使用物理主机的ISA模拟一个给定的ISA完成,如每秒百万指令(MIPS)二进制代码在ISA模拟的帮助下可以运行在一台基于x86的物理主机上。通过这种方法就可以在任何新的物理硬件主机上运行大量遗留并为不同处理器所写的二进制代码,指令集仿真使得我们可以在任何硬件机器上创建虚拟的ISA。

基本的仿真方式是代码解释,解释程序将源指令逐条解释为目标指令。一条源指令可能需要数10条,甚至上百条本地目标指令来完成其功能,显然该过程相对较慢。为了获得更好的性能,出现了动态二进制转换。该方法将动态源指令的基本块转换为目标指令,基本块也可以扩充为程序踪迹或超级块来增加转换的有效性。

指令集仿真需要进行二进制转换和优化,因此一个虚拟的指令集架构(Virtual Instruction Set Architecture,V-ISA)需要在编译器层增加一个处理器特定的软件转换层。

2)硬件抽象级

硬件级虚拟化直接在原始硬件之上进行,一方面该方法为一台虚拟机产生一个虚拟硬件环境;另一方面虚拟化进程通过虚拟化来管理下面的硬件。该方法就是虚拟化一种计算机资源,如处理器、内存和 I/O 设备,目的是通过多个并行用户来改进硬件的资源利用率。

该方法在20世纪60年代已在IBM VM/370中实现,近些年来,Xen hypervisor通过虚拟化基于x86的机器来运行Linux或其他客户操作系统应用程序。

3)操作系统级

操作系统级是指处于传统操作系统和用户应用程序之间的抽象层,操作系统级虚拟化利用数据中心中的软硬件在一台单一物理服务器上创建隔离的容器和操作系统实例,这些容器像真实服务器一样运行。

操作系统级虚拟化常被用来创建虚拟主机环境,在大量互斥且不信任用户之间分配硬件资源。在较小程度上,也可以通过将独立主机中的服务移动到一台服务器的容器或虚拟机中来进行服务器硬件合并。

4)库支持级

大部分应用程序使用用户级库提供的 API,而非操作系统提供的冗长的系统调用。

由于大部分系统提供文档完备的 API,因此这样的接口就成为虚拟化的另外一个候选。通过 API钩子控制应用程序和其他系统部分之间的通信连接,使得带有库接口的虚拟化成为可能。

软件工具WINE实现了这种方法,它支持在UNIX主机上运行Windows程序;另一个例子是虚拟统一计算设备架构(Virtual Compute Unified Device Architecture,vCUDA),它允许应用程序在虚拟机中执行时利用CPU的硬件加速功能。

5)应用程序级

应用程序级虚拟化将一个应用程序虚拟化为一台虚拟机,在传统操作系统中应用程序常以进程方式运行,因此应用程序级虚拟化也称为“进程级虚拟化”。最流行的方法是部署高级语言(High Level Language,HLL)虚拟机,在这种情况下虚拟化层作为一个应用程序处于操作系统之上,并且这一层抽象出一台虚拟机。该虚拟机可以运行为一个特定抽象的机器定义所编写和编译的程序,任何用 HLL 编写并为这台虚拟机编译的程序都可以在其上运行,Microsoft的.NET公共语言运行库(Common Language Runtime,CLR)和Java虚拟机是该类型虚拟机的典型例子。

其他形式的应用程序级虚拟化也称为“应用程序隔离”、“应用程序沙盒”或“应用程序流”。虚拟化进程将应用程序包装在与主机操作系统和其他应用程序相隔离的一个层中,这时应用程序更易于发布或从用户工作站移除。这方面的一个例子是 LANDesk 应用程序虚拟化平台,它将应用程序软件部署为隔离环境中的自包含和可执行文件,并且无须安装、修改系统或提高安全级别。

6)不同方法的技术指标

下表比较了在不同级别实现虚拟化的技术指标,其中“实现复杂度”是指在特定级别实现虚拟化的开销;“应用程序隔离性”是指隔离分配给不同虚拟机的资源的难度。

表中X的数目反映了每个实现级别的优势,5个X代表最好情况;1个X代表最坏情况。总体来讲,硬件和操作系统支持的性能最好。然而硬件和应用程序级也最难实现,获得用户级隔离最难;ISA级的虚拟化可以提供最好的应用程序灵活度。 

2. 虚拟化群集的层次架构

如果想让Web服务器实现高可用性,就需要为其建立网络负载平衡群集。在虚拟层中设置群集不仅是好的做法,而且往往是必需的。因为设置群集的机器更易于维护,这是因为可以把工作负载转移到群集中的另一台机器。在虚拟层设置群集几乎是免费的,因为不需要定制硬件以支持它。

但是当在一个群集中建立群集时可能会令人感到困惑;另一个可能让人感到困惑的例子来自创建虚拟服务器为虚拟桌面提供服务,并在虚拟网络中依靠虚拟存储来运行虚拟应用程序,在这种情况下哪一层没有虚拟化很难回答。

这正是可视化体系结构可以处理之处,如图所示。

在此体系结构中构建了7个不同的虚拟化层,并以特定的构造来处理每一层。

  1. 物理层:将每个组件都包含在资源池中。
  2. 存储层:将依靠存储虚拟化技术来调配,正如需要为物理和虚拟资源提供许多LUN一样。
  3. 分配层:由于虚拟存储优化器(Virtual Storage Optimizer,VSO)只不过是在某个位置文件夹中的一组文件而已,因此当需要额外的资源或者特定主机中需要进行管理操作时,它们可以并且应该从一台物理主机动态地迁移到另一台。正是这个分配层或VSO定位追踪,将数据中心由静态转变为动态,也正是在这一层内基于 hypervisor 的功能来创建和分配虚拟网络。
  4. 虚拟层:决定将被虚拟化的对象,并且最终成为包含服务器和工作站的工作负载。
  5. 处理物理和虚拟两者的管理层:这两个资源级别依靠不同的安全上下文;此外,可以使用不同的工具来管理这两个基础架构级别。
  6. PC层:虽然很多用户将会迁移到虚拟桌面基础架构,以减少管理分布式系统的成本;另一些用户将发现通过迁移到虚拟化应用程序,整个分布式桌面管理的业务模型发生了积极的改变。即非常多的改变,实际上它们将永远不会回到应用程序安装的年代。
  7. 业务连续性层:由于虚拟服务产品只不过是在某个位置文件夹中的文件,因此让业务连续性的实现变得更简单。只需将构成每台虚拟机的文件复制到异地,并在任何时候有一个整个数据中心的可用副本;此外,远程数据中心内的物理资源不需要与生产数据中心内的相同。毕竟在一场灾难中只需启动和运行的关键服务,这比起运行整个生产系统需要相当少的资源。

7 层虚拟化体系结构的每一层都是构建在另一层之上,支持新的动态数据中心。

现在已经了解每一个层及其中所包含的内容,可以开始建立基础架构并运行它。而且一切已准备就绪就可以把物理工作负载转换为虚拟服务产品,一劳永逸地彻底改变数据中心,在迁移生产系统之前首先做好一切充分的测试。

3. Microsoft的Hyper-V虚拟化架构

Microsoft进入虚拟化领域已经很有一段时间(它在2003年收购了推出Virtual PC软件的Connectix公司,并在其后推出了Virtual Server虚拟化软件)。Hyper-V是一个Hypervisor(系统管理程序),开发代号为Viridian。

其主要作用就是管理及调度虚拟机的创建和运行,并提供硬件资源的虚拟化。Hyper-V是Microsoft伴随Windows Server 2008最新推出的服务器虚拟化解决方案,与Microsoft自家的Virtual PC、Virtual Server等产品相比有显著的区别;与竞争对手VMware Server/ESX Server也有很大不同,它在构架上是一个突破性的进展。

Microsoft的虚拟基础架构,如图所示。

虚拟基础架构通过在计算、存储器和网络硬件,以及在其上运行的软件之间提供一个抽象层而简化了IT计算体系结构,可以控制成本并提高响应速度。

由于采用 Hyperisor 内核架构,因此 Hyper-V 可以提供高效的分区间通信机制并在此基础上创建高性能的虚拟I/O架构和充分利用Windows驱动模型。以提供广泛的硬件支持,因为Hypervisor可以把单台服务器分割为多个CPU和内存的容器。

目前,大多数潜在的子操作系统都还没有意识到虚拟化。它们认为是直接在服务器硬件上运行,因此需要使用hypervisor提供的硬件模拟。Microsoft和Hyper-V的体系架构,如图所示。

在Hyper-V虚拟化架构中每一个子分区,即虚拟服务客户端(Virtual Service Client,VSC)中都可以拥有一个自己的操作系统,它们可以是 32 位或 64 位的 Windows Server 2003、Windows Server 2008,甚至可以是 Linux。在不同的操作系统中可以实施Microsoft的虚拟服务应用,以及目前还不能迁移到Windows平台的其他应用,这为企业打造了一个强大的信息应用和开发平台。 

在 IT 部门虚拟化软件可将单台服务器转变成动态数据中心,并支持实时添加应用程序。从而可带来更高灵活性,实现资源的更有效利用。

通过升级到下一代Microsoft服务器虚拟化与管理虚拟化技术可以显著提高硬件利用率,帮助创建出一个更灵活的 IT 基础设施;同时下一代 System Center Virtual Machine Manager 可以优化使用和控制这些资源的方法。通过Microsoft虚拟化产品能够将生产级虚拟机在物理设备中的利用率提高至少20%,而且管理和维护成本也将大幅降低。

运行Hyper-V的服务器可以利用Windows对硬件设备的支持和Windows管理测试设备(Windows Management Instrumentation,WMI)的提供,这是因为管理程序可将系统分成多个VM并将Windows Server 2008的引导实例作为主分区,以使其可直接访问各种硬件设备如网络适配器等。
Hyper-V 管理程序要求主分区执行电源管理并响应硬件的即插即用事件,这种架构将业界标准服务器与其连接的网络和存储器聚合到统一的资源池中。

虚拟栈可以实现模拟的 I/O 设备,然而模拟这些设备的代价很高。发送单个 I/O 请求有可能导致虚拟栈和子分区之间的多次切换,Hyper-V的解决方案,如图所示。

Hyper-V支持4个CPU的WinServer08虚拟机,以及两个CPU的WinServer03虚拟机。只有当工作负载确实需要时才应该使用多处理器虚拟机,因为拥有更多的处理器会带来一些额外的开销。
不过 Hyper-V 提供了专门为虚拟机环境所设计的虚拟 I/O 设备,这些虚拟设备连接到VMBus并使用共享内存可以有效地进行分区间通信。

Hyper-V 中的虚拟 I/O 采用客户端/服务器架构,在根分区中包含虚拟服务提供程序(Virtual Service Provider,VSP);在子分区中包含VSC,如图所示。

该架构极大地减少发送 I/O 请求所需的开销。如果 Virtual Server 用户把虚拟机迁移到Hyper-V中,那么一定能体会到高I/O的工作负载的CPU开销大大降低。 

4. IBM Power虚拟化体系架构

IBM 在Power平台上实现了一种企业级的虚拟化架构,即PowerVM,它是IBM UNIX服务器取得成功的重要因素。

逻辑分区(Logical Partition)是PowerVM的最基本概念,Power Hypervisor直接管理硬件并根据需求将系统划分成若干逻辑分区,如图所示。

每个逻辑分区相当于一台独立的机器,不同分区独立运行,互不干扰。

PowerVM 实现了如下完善的虚拟化特性,为各种资源提供了专用和共享模式,实现了性能、资源共享和灵活性的统一。

  1. 处理器虚拟化特性:专用处理器、微分区(Micro-partitioning)、共享处理器池和同时多线程(Simultaneous Multi-threading,SMT)。
  2. 内存虚拟化特性:专用内存和动态内存共享(Active Memory Sharing,AMS)。
  3. 网络设备虚拟化特性:专用网卡、虚拟以太网和主机以太网适配器(Host Ethernet Adapter,HEA)。
  4. 存储设备虚拟化特性:专用小型计算机系统接口(Small Computer System Interface,SCSI)适配器、虚拟 SCSI 适配器和虚拟光纤通道适配器。
  5. 动态虚拟化特性:动态逻辑分区(Dynamic Logical Partitioning,DLPAR)和动态分区迁移(Live Partition Mobility)。
  6. AIX专有特性:工作负载分区(Workload Partition)和动态应用迁移(Live Application Mobility)。
  7. Linux专有特性:Lx86实现了 POWER 架构对 x86 体系下的 Linux 应用程序的二进制兼容。
  8. 这些特性可以用于 Power 服务器的各种机型,降低了学习和管理的成本。PowerVM 可以通过硬件管理控制台(Hardware Management Console)、集成虚拟化管理器(Integrated Virtualization Manager)或者更加高级的 VMControl 管理。VMControl 是 IBM Systems Director 中的插件,可以帮助用户方便地创建需要部署的安装映像;同时便捷地进行部署、调整及管理,从而极大地降低了相应的工作量和需要的时间。

PowerVM虚拟化架构助力绿色计算得益于PowerVM所支持的强大的整合能力、广泛的资源共享功能和灵活的动态资源管理等。

1)强大的整合能力

在最新的POWER7中每个处理器核最多支持4个SMT,每个处理器芯片最多支持32个SMT,每台服务器最多支持1 024个SMT;每个处理器最多分配给10个分区进行共享,每台服务器最多支持1 000个逻辑分区(是POWER6系统的 4 倍)。强大的芯片提供更高的计算能力和逻辑分区数量,允许把更多的应用整合到同一台服务器。

PowerVM支持AIX、IBM i和Linux,能够支持这些类型的Power系统及系统中超过15 000个应用软件的整合;Lx86使得 Power 服务器还可以整合基于x86的大量Linux应用。工作负载分区能够进一步整合 AIX 上的各种应用,使用更少的 AIX 操作系统映像以减少资源浪费,从而提供更多的资源供其他应用的整合来使用。

2)广泛的资源共享功能

PowerVM 的资源共享涵盖了处理器(微分区和处理器池)、内存(代理管理系统(Agent Management System,AMS)和内存池)、网络设备(虚拟网络和 HEA)和存储设备(虚拟SCSI),并使用了软件实现或者硬件实现的方式,资源共享的调度由PowerVM自动完成。

资源共享使得用户无须为每个分区分配峰值负载所需的处理器和内存资源,以及专用的物理设备,从而节省昂贵的硬件开销,以及维持硬件运转和冷却所需的能源。当峰值到来时,所需的额外资源从负载较轻的分区暂时借用。

假设某台 Power 服务器中有 10 个逻辑分区,分区之间需要大量的通信协作,与外部网络仅有少量的网络通信。如果使用专用网络,那么至少需要10块物理网卡才能满足要求;如果使用虚拟网络,只需要装配1块物理网卡并分配给虚拟I/O服务器(VIOS)并做成共享以太网适配器即可满足外部通信需求。而分区的直接通信通过虚拟以太网即可满足,由此可见资源共享的确可以节省不少硬件投资。

广泛资源共享从另外一个侧面反映了强大的整合功能。对于一台服务器,由于资源共享而剩余出来的系统资源可以用于整合更多的应用,从而降低能耗并实现绿色计算。

3)灵活的动态资源管理

动态逻辑分区 DLPAR 是一种动态资源管理方式,也是一种资源共享的方式,因此也是一种绿色计算方式。当某些分区资源(尤其是专用的处理器、内存和 I/O 设备)不足时,可以通过 DLPAR 从空闲资源池或者资源过剩的分区中获取;当不需要使用时,仍然可以通过DLPAR从分区中删除。

动态分区迁移和动态应用迁移可用于不宕机的服务器整合,使得业务在整合过程中仍然处于服务状态,实现不间断的绿色计算。当服务器负载较低时还可以使用这些特性把应用迁移到少量的服务器中,然后关闭空闲的服务器。从而达到节能减排的目的,实现动态的绿色计算。

4、虚拟化软件

虚拟化软件可让一台主体电脑建立与执行一个或多个虚拟化环境,有的在既有操作系统中执行(如QEMU和Virtual PC),有的则比操作系统更先安装至电脑中,比操作系统更具主体性。即Hypervisor(Supervisor)型,如VMWare ESX和Virtual Server。

当然最理想的虚拟化软件不需要修改现有的软件和硬件,但不得已的情形下依然需要调试过的新版软件或特定的硬件系统才能使用或全效发挥运用,如Xen(需改版调试操作系统)、传统虚拟机VM2000(需要或只适合特定的电脑硬件系统)和新型虚拟机ShadoWin等。

从20世纪90年代发展至今,虚拟化软件已经取得了长足的进步,呈现出一派百花齐放的繁荣景象。

下表列出了一些著名的虚拟化软件及相关信息:

这里我们着重介绍一下VMware虚拟化软件。

VMware 是云计算和软件定义数据中心(SDDC)的领导者,在 VMware 的 SDDC 解决方案中,有很多基础架构,如 vSphere(计算虚拟化)、VSAN(存储虚拟化)、NSX(网络虚拟化)、vRA(自动化运维)、Horizon(虚拟桌面和应用的交付平台)等方面的能力。

1. VMware vSphere

VMware vSphere是业界领先的虚拟化平台,能够通过虚拟化纵向扩展和横向扩展应用、重新定义可用性和简化虚拟数据中心,最终可实现高可用、恢复能力强的按需基础架构,这是任何云计算环境的理想基础。同时可以降低数据中心成本,增加系统和应用正常运行时间,以及显著简化IT运行数据中心的方式。

下图显示了VMware vSphere通过一整套应用和基础架构提供一个完整的虚拟化平台。

接下来简要地对VMware vSphere的主要功能特性和组件进行介绍。

1)VMware vSphere Hypervisor

VMware vSphere Hypervisor体系结构可提供可靠、经过生产验证的高性能虚拟化层。它支持多个虚拟机共享硬件资源,性能可以达到(在某些情况下甚至超过)本机吞吐量。

2)VMware vSphere Virtual Symmetric Multiprocessing

支持使用拥有多达128个虚拟CPU的超强虚拟机。

3)VMware vSphere Virtual Machine File System

使虚拟机可以访问共享存储设备(光纤通道、iSCSI等),并且是VMware vSphere Storage vMotion等其他VMware vSphere组件的关键促成技术。

4)VMware vSphere Storage API

支持的第三方数据保护、多路径和磁盘阵列解决方案进行集成。

5)VMware vSphere Thin Provisioning

提供动态分配共享存储容量的功能,使IT部门可以实施分层存储策略,同时削减多达50%的存储开销。

6)VMware vSphere vMotion

支持在不影响用户使用或中断服务的情况下,在服务器之间和跨虚拟交换机实时迁移虚拟机,从而无需为进行计划内服务器维护而安排应用中断。

7)VMware vSphere Storage vMotion

支持在不影响用户使用的情况下实时迁移虚拟机磁盘,从而无需为计划内存储维护或存储迁移安排应用中断。

8)VMware vSphere High Availability

可提供经济高效的自动化重启,当硬件或操作系统发生故障时,几分钟内即可自动重启所有应用。

9)VMware vSphere Fault Tolerance

可在发生硬件故障的情况下,为所有应用提供连续可用性,不会发生任何数据丢失或停机。针对最多4个虚拟CPU的工作负载。

10)VMware vSphere Data Protection

VMware vSphere Data Protection是一款由EMC Avamar提供支持的VMware备份和复制解决方案。它通过获得专利的可变长度重复数据消除功能提供高效利用存储的备份,以及快速恢复和针对WAN进行了优化的复制功能,来实现灾难恢复。

其VMware vSphere集成和简单用户界面使其成为vSphere的简单高效的备份工具,它还能够为关键业务应用(例如Exchange、SQL Server)提供免代理、映像级虚拟机备份至磁盘和可识别应用的保护,以及跨站点提供高效利用WAN的加密备份数据复制功能。

11)VMware vShield Endpoint

借助能进行负载分流的防病毒和防恶意软件解决方案,无需在虚拟机内安装代理,即可保护虚拟机。

12)VMware vSphere Virtual Volumes

可对外部存储(SAN和NAS)设备进行抽象化处理,使其能够识别虚拟机。

13)VMware vSphere基于存储策略的管理

通过策略驱动的控制层,跨存储层实现通用管理,以及动态存储类服务自动化。

14)VMware vSphere Distributed Resource Scheduler

可为整个群集中的虚拟机提供独立于硬件的动态负载平衡和资源分配,使用策略驱动的自动化降低管理复杂性,同时满足SLA。

15)VMware vSphere Distributed Power Management

可持续地优化每个群集中的服务器能耗,从而自动管理VMware vSphere Distributed Resource Scheduler群集中的能效。

16)VMware vSphere Reliable Memory

将关键的VMware vSphere组件(如虚拟化管理程序)放入在受支持硬件上确定为“可靠”的内存区域中。这可以进一步保护组件,避免其受到不可更正的内存错误的影响。

17)VMware vSphere Big Data Extensions

可在VMware vSphere上运行Hadoop,以便提高利用率、可靠性和敏捷性。VMware vSphere BigData Extensions支持多种Hadoop发行版,因此IT部门能够在一个通用平台上无缝地部署、运行和管理Hadoop工作负载。

18)VMware vSphere Distributed Switch

可简化和增强VMware vSphere环境中的虚拟机网络连接,并使这些环境能够使用第三方分布式虚拟交换机。

19)VMware vSphere Storage I/O Control和VMware vSphereNetwork I/O Control

可设定存储和网络服务质量优先级,确保对资源的访问。

20)VMware vSphere Auto Deploy

可对添加的VMware vSphere主机快速进行按需部署。VMware vSphere Auto Deploy运行时可以推送更新映像,从而无需进行修补,以及专门安排修补时间。

21)VMware vSphere主机配置文件

可帮助IT管理员简化主机部署及满足合规性要求。

2. VMware SAN介绍

VMware Virtual SAN是一种专为虚拟机设计的融合了虚拟化管理程序的软件定义存储。它可为虚拟化的应用(包括关键业务应用)提供企业级高性能存储。此横向扩展体系结构利用x86服务器和服务器端闪存大幅降低总体存储TCO。它与VMware vSphere和整个VMware体系无缝集成,因而成为适合虚拟机的最简单的存储平台。

下图显示了VMware Virtual SAN存储架构,接下来简要对VMware Virtual SAN的主要功能特性和组件进行介绍。

1)融合了虚拟化管理程序的体系结构

VMware Virtual SAN构建在VMware vSphere内核中,从而优化数据I/O路径,以提供最高级别的性能,以及最小化对CPU的影响。

2)全闪存或混合式体系结构

VMware Virtual SAN可用于全闪存体系结构中,在这样的体系结构中,服务器连接的闪存设备提供缓存和数据持久性,以实现始终如一的超高性能级别。

同时,VMware Virtual SAN可用于混合式配置中,在这样的配置中,服务器端闪存设备进行池化以提供读/ 写缓存,而服务器连接的HDD提供数据持久性。

3)以虚拟机为中心的基于策略的管理

以存储策略的形式将存储需求与各个虚拟机或虚拟磁盘关联起来。VMware Virtual SAN使用这些存储策略来自动执行存储资源的调配和平衡,以确保每个虚拟机获得指定的存储资源。

4)使用VMware vSphere进行单一窗口管理

利用VMware Virtual SAN,不再需要进行有关专门存储界面的培训,也可省去操作这些界面的开销。现在只需两次单击,即可轻松完成调配。

5)服务器端读/写缓存

VMware Virtual SAN可利用基于服务器端闪存设备的内置缓存来加快磁盘读/写和I/O流量传输,从而最大限度地缩短存储延迟。

6)精确的无中断纵向扩展或横向扩展

通过向群集添加主机(横向扩展)以扩展容量和性能,或向主机添加磁盘(纵向扩展)以扩展容量或性能,实现无中断地扩展VMware Virtual SAN数据存储的容量。

7)内置的容错能力

VMware Virtual SAN可利用分布式RAID和缓存镜像来确保在发生磁盘、主机、网络或机架故障时绝不丢失数据。

8)VMware Virtual SAN快照和克隆

全新的VMware Virtual SAN磁盘格式可实现超高效且可扩展的以虚拟机为中心的快照和克隆,支持每个虚拟机多达32个快照和克隆。

9)独立于硬件

可以在任何服务器制造商提供的硬件上部署VMware Virtual SAN,这样能够灵活地在异构硬件环境中构建自定义的存储系统。

10)与VMware体系进行互操作

VMware Virtual SAN可以利用VMware vSphere Data Protection和vSphere Replication来实现数据保护、备份、复制和灾难恢复。VMware Virtual SAN与vRealize Automation集成,在VDI环境中可与VMware Horizon View一起部署,在灾难恢复环境中可与VMware vCenter Site Recovery Manager一起部署。

11)支持直接连接JBOD

VMware Virtual SAN可用于刀片环境中以便管理外部连接的磁盘存储模块。

3. VMware NSX介绍

VMware NSX是提供虚拟机网络操作模式的网络虚拟化平台。与虚拟机的计算模式相似,虚拟网络以编程方式进行调配和管理,与底层硬件无关。

NSX可以在软件中重现整个网络模型,使任何网络拓扑(从简单的网络到复杂的多层网络),都可以在数秒钟内创建和调配。它支持一系列逻辑网络元素和服务,例如逻辑交换机、路由器、防火墙、负载平衡器、VPN和工作负载安全性。用户可以通过这些功能的自定义组合来创建隔离的虚拟网络。

下图显示了VMware NSX网络架构,接下来简要对VMware NSX的主要功能特性和组件进行介绍。

1)逻辑交换

在虚拟环境中重现完整的L2和L3交换功能,摆脱底层硬件的约束。

2)NSX网关

L2网关适用于无缝连接至物理工作负载和旧式VLAN。

3)逻辑路由

在逻辑交换机之间路由,在不同的虚拟网络中提供动态路由。

4)逻辑防火墙

分布式防火墙,具有启用内核的线速性能、虚拟化和可识别身份功能,并且可以监视活动状况。

5)逻辑负载平衡器

功能全面的负载平衡器,具有SSL端接功能。

6)逻辑VPN

以软件形式进行站点间和远程访问VPN。

7)NSX API 

基于REST的API,用于集成到任意云计算管理平台。

4. VMware vCloud介绍

VMware vCloud Suite帮助企业通过虚拟化和优化基础架构、自动执行服务交付,以及为传统应用和新应用类型(例如大数据)提供高可用性,从而更快地进入市场。这意味着运行vCloud Suite的企业可以更快地响应客户需求,将更多时间用于创新,以及为新一代应用做好准备。

下图显示了VMware vCloud架构,接下来简要对VMware vCloud的主要功能特性和组件进行介绍。

1)VMware vRealize Operations

针对VMware vSphere环境的性能、容量和配置进行智能管理。 

2)VMware vRealize Automation

针对VMware vSphere环境进行基于策略的自助式基础架构及应用调配。

3)VMware vRealize Business

对VMware vSphere环境自动进行虚拟化基础架构成本核算、使用情况计量和服务定价。

4)VMware Integrated OpenStack

与OpenStack API的集成,使开发人员能够连接至VMware的一流组件(VMware vSphere、VMware NSX),以部署、管理和运行OpenStack基础架构。

5、虚拟化技术应用

虚拟技术的应用涉及如下领域:

  1. 传统计算领域:包括数据中心、云计算、分布式计算、虚拟服务器、服务器整合、虚拟设计、自动化管理和应用部署等对硬件平台需求高的项目。
  2. 物理学领域:也是虚拟化技术用得最多的领域之一,原子核内部的复杂运动情况通过各种宏观物理设备,如拉曼谱、正电子谱和核磁共振等表现出来。虽然我们不能看到原子核的形态,但是能通过对这些物理量的分析得到原子核的结构,那么这些物理设备就实现了对原子核内部结构的虚拟化工作。
  3. 企业管理软件:包括基于虚拟机的可信桌面、软件测试、方便有效地管理和支持员工桌面电脑。
  4. 个人用户:包括基于虚拟机的杀毒技术、程序的开发和调试、操作系统内核学习,以及个人隐私攸关的应用。

随着虚拟技术的进一步发展,其广泛的应用空间必将进一步被扩展,有前景的应用包括服务器整合、虚拟化应用、云计算和数据中心、虚拟执行环境、沙箱,以及系统调试和测试与质量评价等。

在通信网络与安全保密领域,可以预料的应用如下。

  1. 多级安全:在同一物理机上通过VMM之上运行且隔离多个不同安全等级的Guest OS满足多级安全的需求,如Guest OS分别用于普通办公、家庭娱乐和网上银行。从比多级安全更普适的角度来看,不同的Guest OS还可以是满足不同目的的OS,以解除物理硬件的约束,最大限度地满足多样化的应用需求。例如,用于车载计算机的虚拟机上可以同时运行一个实时操作系统(Real Time Operating System,RTOS)和一个通用OS,RTOS提供用于汽车自动防抱死系统(ABS)控制;通用OS用于人机交互。
  2. 移动用户体验提升:斯坦福大学的 Openflow 项目描述了这样一种应用,即利用Openflow控制器控制服务器中虚拟机的迁移。使移动用户始终离服务器最近且时延最小,以提升移动用户的用户体验。
  3. 蜜罐与蜜网:虚拟机连同虚拟机连成的网络作为蜜罐和蜜网可以用于研究黑客的行为,而不会给物理计算机和物理网络带来损坏。
  4. 嵌入式虚拟化:继传统的服务器和桌面计算机,嵌入式设备成为虚拟化技术应用的新兴领域。例如,Cisco在其CRS-1路由器中使用了两个Guest OS用于控制平面功能的备份。而在嵌入式的手机及平板电脑终端中系统虚拟化技术也大有前景,OKLab 公司与Citrix公司合作的Nirvana概念手机利用虚拟化技术增强了手机的安全性。使手机能够应用多种操作系统,并通过类似于桌面虚拟化的技术使手机终端作为移动用户在任何地点的工作环境下工作。

在国内虚拟化已从概念推广逐步进入到应用阶段,其应用范围日渐宽泛。

总的来说,国内应用较好的行业及用户特点如下:

  • 银行:银行的应用态度最积极,得到的技术支持最多。而且较为熟悉虚拟化,期待程度和应用评价最高。特点是对成本敏感度低,对虚拟技术的安全性和使用效率关注度高。
  • 政府部门:政府部门的应用不如银行用户熟练,但通过技术人员的努力仍能以最低的总体拥有成本获得最多的计算性能,特点是对预算较敏感并对系统效率提高感兴趣。
  • 科研单位:随着数据计算量的加大,科研单位需要使用虚拟化技术来提高系统使用效率。这类用户对预算敏感度高,对虚拟化不是特别了解。
  • 计算中心:计算中心大多采用高性能计算机集群,特点是对计算性能和系统稳定性要求很高,对系统管理控制要求较多且对预算敏感度低。

从调查中也可以看出,除上述行业外,国内虚拟化技术的应用与欧洲和北美等地区相比,不论从深度还是广度上均存在较大差距,主要表现在如下方面。

  1. 大多数用户(接近70%)对虚拟化的了解和认知程度较肤浅。
  2. 成熟方案和成功案例较少且集中在较少的几个行业,不具有广泛的指导意义和示范作用。
  3. 人才短缺,用户实施虚拟化的信心不足。
  4. 可投入部署和实施虚拟化的预算资金有限。
  5. 中小企业基本上没有虚拟化的规划或设想。
  6. 出于安全和保密的需求,相当一部分用户无法实施虚拟化。

总之,虚拟化技术在实际应用的过程中受限于国情、政策、资金和技术等诸多方面因素的影响,其发展可以说是任重而道远。

6、虚拟化技术发展方向

虚拟化技术发展到今天,未来可能会有哪些变化?

从整体的虚拟化技术应用及发展来看,以下几点可能会成为未来的发展趋势。

1.虚拟架构扩展化

随着虚拟化的广泛使用,虚拟化架构开始凌驾于服务器硬件之上。与数据中心中的其他硬件系统,如网络及存储等开始出现矛盾。为了更好地实现虚拟化,虚拟架构需要重复其他硬件系统的功能,对虚拟化本身及这些物理系统的功能扩展做得很少,开始影响整个架构的性能。

因此可扩展及更高级别的应用架构将会不断涌现,以此极大地简化开发者构建种类日益丰富且功能日趋强大的的任务流程。

2. 虚拟平台开放化

作为基础平台,封闭架构带来的不兼容性无法支持异构虚拟机系统,也难以支撑开放合作的产业链需求。随着云计算时代的来临,虚拟化管理平台逐步走向开放平台,多种厂家的虚拟机可以在开放的平台下共存,不同的应用厂商可以基于开放平台不断地丰富云应用。

例如,VMware 有一个移动虚拟化平台的计划。即通过为手机安装一个手机虚拟化平台和管理软件,下载手机游戏或者其他应用程序将不再受限于其安装的操作系统。如果在手机中同时安装Android和Windows CE,可把一部手机变成几部使用。

3. 虚拟连接协议标准化

桌面虚拟化连接协议目前有VMware的PcoIP、Citrix的ICA和Microsoft的RDP等,特别值得一提的是国内虚拟化软件公司——方物软件的FAP。多种连接协议在公有桌面云情况下将带来终端兼容性的复杂化,终端将需要支持多种虚拟化客户端软件。嵌入式的云终端限制了客户采购的选择性和替代性,未来桌面连接协议标准化之后将解决终端和云平台之间的广泛兼容性,形成良性的产业链结构。

4. 虚拟客户端硬件化

当前的桌面虚拟化和应用虚拟化技术对于富媒体的客户体验和传统的 PC 终端相比还有一定差距,主要原因是对于2D、3D、视频和Flash等富媒体缺少硬件辅助虚拟化支持。

随着虚拟化技术越来越成熟及广泛应用,终端芯片将逐步加强对于虚拟化的支持,从而通过硬件辅助处理来和内存管理单元虚拟化的硬件支持提升富媒体的用户体验。特别是对于智能手机等移动终端设备,如果对虚拟化指令有较好的硬件辅助支持,将加大虚拟化技术在移动终端的使用。

5. 公有云私有化

在公有云场景(如产业园区)中政府/企业整体 IT 架构构建在公有云上,对于数据的安全性有非常高的要求。可以说,如果不能解决公有云的安全性,就难以推进企业IT架构向公有云模式的转变。动态数据中心铺平了私有云的道路,用虚拟化来创建私有云是最迫近和非常重要的虚拟化趋势。

私有云不仅仅只是虚拟化,虚拟化及在主机之间动态移动虚拟机和资源主机的能力为私有云提供了基础。然而私有云增加了很多功能,如从虚拟资产创建资源池,以单一设备或服务管理多台虚拟机并基于资源计量来提供自助服务功能和使用。私有云增加了IT的灵活性,使其能够更迅速地响应用户请求。目前实施私有云是一个微小,但不断增长的趋势,很可能成为未来IT基础设施的建设标准。

业界如今已经形成广泛共识,即云计算将是下一代计算模式演变的方向,而虚拟化则是实现这种转变最为重要的基石。

6. 虚拟数据中心模块化

随着服务器、存储和网络厂商持续拓展合作伙伴关系,虚拟数据中心模块化发展趋势将越发明显。EMC和思科发布的vBlock基础架构捆绑包,以及惠普推出的“融合式基础架构”(converged infrastructure)清晰地表明越来越多厂商意识到客户需要一个简单、易用和单一的支持渠道,以便更好地利用资源。

7. 下一波浪潮——高度集成

我们把下一波带来转变的技术浪潮称为“高度集成”,这是第1次通过一种方式把数据中心需要的所有功能整合到一种设备中,在块的模式中可以把它们连接起来形成一个完整的架构。

高度集成与现在的整合完全不同,后者只是把已存在的技术打包,仅仅是为了减少消耗;同时可以使用户购买更少的部件,但是这个解决方案还是让IT的管理与各项功能处于分离状态。高度集成实现完全的整合将会逐渐代替传统方式,成为以后的主流模式。

8. 迁移工具更加完善

虚拟化环境具有要求快速、可备份、恢复和自动化实现要求高等特点,尤其是在迁移过程中需要管理员经常执行任务。因此对一些特定迁移工具的完善,也将是虚拟化厂商要完成的重点工作之一。

9. 虚拟化发展空间广阔

虚拟化发展的最大特点是其市场仍将快速增长,虚拟化发展道路远未到穷途末路的地步,因为还有很多企业并没有享受到虚拟化带来的高效快捷、低成本和高环保的种种益处。据英特尔集团的市场预测,在2011年~2016年间虚拟化行业全球市场累计将达到2 900亿美元市值,而云计算市场规模将为3 000亿美元。

对于经济低迷的当前形势来说,这一预测无疑是个重大利好消息。它将有力推动虚拟化技术的更普遍应用,也有助于企业节省成本。

10. 虚拟机自动化呈上升趋势

随着虚拟机的不断增多,迫切需要实现对虚拟化高效和简化管理,手动维护和管理成百上千台主机将是一件费时费力的工作。在这种情况下自然也就催生了企业对可靠自动化解决方案的需要,未来虚拟机实现自动化将是一个重要趋势。

11. 未来虚拟化的发展将会无所不在

未来虚拟化将会在大型企业的IT基础设施和日常运营中发挥主导作用,给企业的IT基础设施安装、运营和管理都带来巨大的变革。

未来虚拟化不仅会为企业用户节约IT硬件开支,也将使个人计算更易于管理,安全性能也大幅提高。从宏观方面来看,虚拟化将使操作系统的应用目的发生重大转变,单一且通用目的的操作系统今后将不复存在。

总体来看,虚拟化技术使得有竞争力的选择方案趋于成熟。可供选择的厂商多了起来,定价模式在不断变化之中,普及率和饱和度在增长。云服务提供商在下赌注,单位对资源的利用更加高效,管理手段更加灵活。数据中心更加智能和强壮,桌面更加安全和灵活。而且降低了总拥有成本,带来了投资收益最大化。

综上所述,可以想像未来虚拟化技术的发展将会是多元化的,可以设想一下在不久的将来,被虚拟化的不仅是服务器、存储和网络,更多元素被虚拟化的概念所淹没。你将无法分辨哪些是虚,哪些是实,这就是最终要达到的虚拟一切。

全球的网络真正变成了一个整体,互联网络中的所有资源会全面地连接在一起,仿佛一台巨型的电脑。你根本不需要关注应用系统本身存在于何处,反正它就在互联网络中。而你只需要关心自己的应用系统结构是否完善、计算能力是否足够和数据是否安全,而这才是虚拟化技术发展的终极目标。

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/127781982