当你深入研究那些所谓的“一夜成名”的成功故事时,你经常会发现它们实际上已经酝酿多年。虚拟化已经存在了30多年——自从你们中的一些人还在向非常物理的机器中投入成堆的穿孔卡片的时代开始——然而在2007年,它“引爆”了。VMware是当年首次公开募股的轰动事件;2007年11月,不少于四家主要的操作系统供应商(微软、Oracle、红帽和Sun)宣布了重要的新虚拟化功能;在时尚的技术专家中,虚拟似乎已成为新的潮流。
虚拟化是在用户和物理资源之间提供一种抽象,以一种为用户保留一种错觉的方式,即他或她实际上可以直接与物理资源交互。虽然你可以想象虚拟化任何物理资源,但本期《Queue》的重点是当前流行的计算机器虚拟化。用户获得了一个看起来像是完整计算机系统的高保真副本,而他或她实际上是在与一个名为VMM(虚拟机监视器)的抽象层打交道,该抽象层运行在真实机器上,并代表用户映射资源。
回顾1974年Gerald Popek和Robert Goldberg的著作很有意思,从模型的角度来看,几乎没有什么变化:“虚拟机被认为是真实机器的高效、隔离的副本,”他们写道,通过VMM的概念解释了这个概念:“作为一种软件,VMM具有三个基本特征。首先,VMM为程序提供了一个与原始机器基本相同的环境;其次,程序在这个环境中运行,速度最多只会略有下降;最后,VMM完全控制系统资源。”1
图1是Popek和Goldberg 1974年论文中的插图,与VMware白皮书2中的现代插图并排比较。
1882年,J.P.摩根在纽约麦迪逊大街的住宅成为第一个安装白炽灯的私人住宅。3 由于缺乏对发电/输电的复杂性和不可预测性的抽象,以及他与发电源(他后花园里的蒸汽机、锅炉和一对发电机)之间的距离太近,给摩根和他的邻居带来了相当大的不便。
抽象是有用的,特别是当它们简单而高效时。任何抽象的主要好处是它促进的解耦。通过虚拟化,用户可以不必关心硬件以及它的实际行为方式。只要性能特征得到满足,用户也可以不必关心谁操作硬件、硬件位于何处以及硬件上有什么标志(如果有的话)。这最终的延伸是由虚拟化计算服务提供的实用计算模型——例如,Amazon EC2(弹性计算云)。
从两个角度看待虚拟化的好处是值得的:从VMM之上的用户的角度,以及从VMM之下的基础设施提供商的角度。
对于应用程序开发人员或服务运营商来说,虚拟化可能非常有用。你可以访问(虚拟的)大量资源,这些资源以在物理世界中不切实际或不划算的方式组合在一起。你可以实现拥有无法获得的硬件组件或你负担不起的系统集群的错觉。你可以将应用程序隔离到不同的环境中,以方便业务连续性、破坏性测试、更密切的观察或仅崩溃操作等需求。你可以减少升级操作系统和验证硬件的时间。你可以将你不信任的应用程序隔离在监狱中,或者如果你不被他人信任,实际上你自己也会被监禁。最后,重要的是要记住,具有截然不同要求的各种虚拟机环境可以同时在一组物理硬件资源上运行。
在某些组织中,采购政策和供应商交付周期的压力迫使应用程序开发人员在他们的应用程序甚至还没有设计出来之前就指定生产系统。猜测随之而来。虚拟化有可能降低错误猜测的成本,除此之外,它还可以促进自扩展和适当大小的应用程序,使猜测成为过去。
在单个物理机器上运行多个虚拟机,可能使用不同的操作系统,这是从硬件基础设施提供商的角度来看最广泛讨论的优势。这种服务器整合有助于更有效地利用物理基础设施资产。
从基础设施提供商的角度来看,还有其他有趣的好处。你可以更改物理基础设施以扩展容量、维修设备或修改设备和子系统的配置,而无需用户参与,只要他们抽象的保真度得到保留并且他们的性能期望得到满足。你可以使用户能够继续运行旧应用程序,即使它期望的操作系统无法在现代硬件上运行。你可以在物理基础设施和主机操作系统中保持同质性,并且仍然为用户提供选择,并且在需要时可能在客户操作系统级别提供异构性。当然,你也可以使用虚拟化来保护硬件免受用户侵害,并进行检查和策略执行。
为什么虚拟化这样的技术会“引爆”,并在短时间内获得如此大的势头?一个转折点是1997年Mendel Rosenblum及其斯坦福大学的同事在Disco工作中,使用虚拟机在单个可扩展的多处理器上运行多个商用操作系统。4 他们在1998年的突破,在创立VMware之后,允许用户在单个商用PC上运行多个x86兼容操作系统的实例。
随着商用硬件上开源操作系统的采用势头增强,2003年,剑桥的研究人员发布了Xen,这是一个开源VMM,允许多个商用操作系统非常高效地共享传统硬件。5 用于商用硬件的商业和开源VMM的可用性,以及现代PC和服务器的过度(对于许多应用程序而言)容量,共同导致了近年来虚拟化的快速普及。
VMM提供了硬件抽象,它封装和隔离了给定虚拟机与物理机器上的其他虚拟机。客户虚拟机可能具有需要运行的特权和非特权指令。为了提高效率,非特权指令可以直接执行,而无需VMM的参与。特权指令被VMM捕获,在其中可以模拟或映射到物理资源。
在Xen实现中,VMM可以在比虚拟机中客户操作系统的监管代码更高的特权级别上运行,因此它被称为虚拟机监控程序。在x86架构上,来自客户VM中操作系统的监管代码通常在未使用的环级别1中运行,因此与将在环3中运行的客户虚拟机中的应用程序隔离。
本期Queue的特别关注点是机器或平台虚拟化,但是还有其他级别的虚拟化可以提供,以促进有用的抽象。
应用程序虚拟机提供了与同一操作系统内的其他应用程序的抽象,而不是在操作系统之下的抽象。除了抽象和隔离之外,它们的目的是允许应用程序无需修改即可移植到不同的计算机体系结构或操作系统。示例包括Java虚拟机和Microsoft .Net CLR(公共语言运行时)。
在为个人计算机或终端用户提供托管桌面和应用程序移动性的各种方法中,可以明显看到不同级别的抽象。其中,斯坦福大学6完成的Collective架构研究以及Sun Microsystems用于桌面虚拟化的Sun Ray虚拟瘦客户端。
此外,正在进行各种努力,通过在浏览器的范围内创建桌面环境来提供更高级别的抽象。一个例子是WebShaka的YouOS。
如前所述,性能是Popek和Goldberg对VMM的基本特征之一。7 在介绍虚拟化对软件开发人员的影响时,Uli Drepper在本期其他地方(“虚拟化的成本”)广泛涵盖了性能主题,而Scott Rixner专门讨论了网络I/O领域的性能影响(“网络虚拟化:打破性能障碍”)。
虚拟化本身对可用性几乎没有直接影响。在某些情况下,用户从物理硬件抽象出来可能会产生积极影响。此外,将应用程序的多个实例分散到许多小型虚拟机上可能会迫使应用程序所有者考虑如何横向扩展而不是向上扩展。Mendel Rosenblum等人已经研究了封装正在运行的虚拟机的完整状态(包括其操作系统、应用程序、数据和进程)的可能性。8
这导致了现在被广泛称为实时迁移的技术,即暂停正在运行的虚拟机,然后在不同的物理系统上恢复它。这样做不仅是出于可用性原因(例如解决计划内的停机),而且在某些情况下是为了可以在更合适大小的虚拟机上恢复系统。但是,某些应用程序无法优雅地处理时间暂停。作为一种容错方法,通过实时迁移来保持实例存活的尝试与斯坦福大学和加州大学伯克利分校之间的ROC(面向恢复的计算)联合项目提出的模型形成鲜明对比。9 ROC小组不关注MTTF(平均故障间隔时间)。这种关注可能假设故障通常是可以提前知道的问题,应该避免(或者如果可能,应该绕过或迁移)。相反,他们采用了一种仅崩溃的方法,更侧重于MTTR(平均恢复时间)。ROC模型似乎正在主要互联网服务中获得吸引力。
虚拟化的一个好处是打破了应用程序、操作系统和物理硬件之间的耦合。当用户与他们使用的硬件之间的关系在虚拟化环境中被抽象出来时,只要保真度特性得到保持,就会出现一些有趣的可能性。其中最重要的可能性是大大提高资源利用率,尤其是在实用计算环境中,正如Werner Vogels在本期其他地方(“超越服务器整合”)讨论的那样。
另一个业务考虑因素是虚拟化可能对软件许可产生的影响。尽管尚未出现明确的模式,但一种可能的模型是将虚拟处理器视为等同于真实的许可处理器或核心。另一种可能性是基于虚拟机运行时间的长短的计量许可。
虚拟化看起来将变得更加广泛地采用。该技术的功能在最近几年中得到了显著发展,现在它提供了一种有用的抽象,既有利于虚拟机用户,也有利于物理基础设施提供商。
TOM KILLALEA自1998年以来一直在Amazon.com工作,现任技术副总裁,负责基础设施和分布式系统工程。
最初发表于Queue vol. 6, no. 1—
在数字图书馆中评论本文
Mendel Rosenblum, Carl Waldspurger - I/O 虚拟化
“虚拟”一词被严重滥用,从云中运行的虚拟机到跨虚拟世界运行的化身,无所不包。即使在计算机 I/O 的狭窄语境中,虚拟化也具有悠久而多样的历史,逻辑设备是刻意与其物理实例化分离的例证。
Scot Rixner - 网络虚拟化:打破性能障碍
虚拟化最近的重新流行导致其在越来越多的环境中使用,其中许多环境需要高性能网络。例如,考虑服务器整合。网络虚拟化的效率直接影响可以有效地整合到单个物理机器上的网络服务器数量。不幸的是,现代网络虚拟化技术会产生显著的开销,这限制了可实现的网络性能。我们需要新的网络虚拟化技术,以实现网络密集型领域中虚拟化的全部好处。
Ulrich Drepper - 虚拟化的成本
虚拟化可以通过许多不同的方式实现。它可以有硬件支持,也可以没有硬件支持。可以期望虚拟化操作系统为了虚拟化而进行更改,也可以期望它在不更改的情况下工作。无论如何,软件开发人员都必须努力实现 Gerald Popek 和 Robert Goldberg 阐述的虚拟化的三个目标:保真度、性能和安全性。
Werner Vogels - 超越服务器整合
虚拟化技术是在 1960 年代后期开发的,目的是更有效地利用硬件。硬件很昂贵,而且没有那么多可用。处理主要外包给少数拥有计算机的地方。在一台 IBM System/360 上,可以并行运行多个环境,这些环境保持完全隔离,并让每个客户都产生拥有硬件的错觉。虚拟化是以粗粒度级别实现的分时,隔离是该技术的关键成就。