低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

虚拟化导论

2008 年 8 月 19 日

IT 业总是大量的使用潮流词和不断变化的术语来定义自己。有些时候这个行业所使用的最新的命名法是某种特定的技术如 x86 或者某种概念如绿色计算。随着行业的发展,这些术语也是浮浮沉沉。最近几年,虚拟化渐渐成为了行业的新宠。这引来了一个问题——究竟什么是虚拟化?对于一般的从业人员来讲,他们的第一反应会是在一个宿主机上运行一个或多个虚拟(客户)操作系统。然而,再往下发掘一点点就会发现这样的定义太局限了。有大量的服务,硬件,软件可以被“虚拟化”。本文将对各种不同类型的虚拟化技术梳理一遍同时探究其各自的利与弊。

什么是虚拟化?

首先,对虚拟化这个术语进行一个抽象层面的定义,这对进一步细致地讨论各种不同类型的虚拟化技术是有好处的。维基百科对其作出了如下定义: “在计算领域,虚拟化是一个宽泛的术语,指的是对计算机资源的抽象。虚拟化对其用户,不管是应用程序还是终端用户,隐去了计算资源的物理特性。这包括使一个单一的物理资源(比如一个服务器,一个操作系统,一个应用,或是一个存储设备)表现为多个虚拟资源运行;也包括多个物理资源(比如存储设备或多台服务器)表现为一个单一的虚拟资源…”

从通俗的角度来说虚拟化常常意味着:

  1. 由一个物理资源创建多个虚拟资源。
  2. 由一个或多个物理资源创建一个虚拟资源。

在诸如网络,存储,硬件等各种各样的场合,这一术语都被频繁地用于表达上述概念。

历史背景

虚拟化并不是一个新的概念。在这一领域的早期成果有 Christopher Strachey 的论文“大型高速计算机的时分系统”(参见另一篇详尽的虚拟化导论)。IBM 对虚拟化的探索始于其 CP-40 and M44/44X 研究系统。作为回报,这又促成了其商业产品 CP-67/CMS。虚拟机的概念使用户隔离开,并为每个用户单独模拟出一套的完整的系统。

在八十年代以及九十年代初,业界逐渐从利用单一的大型主机过渡到运行更小更便宜的 x86 服务器的组合。虚拟化也因此显得不是那么的突出了。这一切都因为 1999 年 VMware 所推出的 VMware workstation 而发生了改变。VMware 随后推出了 ESX Server,它可以运行在裸机上并且不需要宿主操作系统。

虚拟化的类型

今天,虚拟化这个术语已被广泛的运用于多种概念,其中包括:

  • 服务端虚拟化
  • 客户端 / 桌面 / 应用程序 虚拟化
  • 网络虚拟化
  • 存储虚拟化
  • 服务 / 应用基础结构 虚拟化

在以上的多数场合,将一个物理资源抽象成多个虚拟资源,或者将多个物理资源整合成一个虚拟资源的情况都可能发生。

服务端虚拟化

服务端虚拟化是以已经树立业界地位的 VMware, Microsoft ,以及 Citrix 等公司为代表的虚拟化业界里最活跃的部分。运用服务器虚拟技术,一个物理的机器可以被分成多个虚拟的机器。在这种虚拟化技术的背后,其核心是 hypervisor(虚拟机监视器)的概念。Hypervisor 是很小的一层,它可以拦截操作系统对硬件的调用。Hypervisor 典型的作用是为驻留在其之上的操作系统提供虚拟的 CPU 和内存。这一术语最开始是和 IBM 的 CP-370 一起使用的。

Hypervisor 可以被分成两种类型:

类型 1──这一类 hypervisor 也被称为原生或祼机。它们直接运行在硬件上,虚拟的操作系统又运行在它们之上。这一类的例子包括 VMware ESX Citrix XenServer Microsoft’s Hyper-V
类型 2──这一类 hypervisor 运行在已有的宿主系统之上,而虚拟的操作系统运行在硬件之上的第三层。这一类例子包括 VMware Workstation 以及 SWSoft’s Parallels Desktop
与第一类 hypervisor 相关的概念是泛虚拟化(paravirtualization)。泛虚拟化是这样一种技术,软件接口以与底层硬件相似但并不完全一致的方式得以呈现。操作系统必须移植以运行在泛虚拟的 hypervisor 之上。经修改的操作系统通过泛虚拟的 hypervisor 所支持的“超级调用(hypercalls)”直接与硬件打交道。流行的 Xen 项目就是利用了这一类虚拟技术。从 3.0 版开始 Xen 也开始支持借助硬件的虚拟化技术,如 Intel 的 VT-x 以及 AMD 的 AMD-V。这些扩展使得 Xen 可以支持原生(未经修改)的操作系统,如微软视窗系统。

对于使用服务端虚拟化技术的公司来说,这项技术带给了他们许许多多好处,常常提起的就有:

  • 提升硬件利用率——带来的结果是硬件的节省,减少了管理的开销, 并节约了能源。
  • 安全——干净的镜像可用来重建受损的系统。虚拟机也同样可以提供沙盒和隔离来限制可能的攻击。
  • 开发——调试和性能监控的用例能够以可重复的方式方便的搭建起来。开发者也可以容易的访问平时在他们的桌面系统上不易安装的操作系统。

相应地,也会有一些潜在的不利因素必须去考虑:

  • 安全——如此以来,就有了更多的入口点需要去监测,如 hypervisor 和虚拟网络层。一个损坏的镜像也会随着虚拟技术的运用而传播开去。
  • 管理——虽然需要维护的物理机器少了但机器的总和可能是更多了。维护的活儿对管理员提出了更高的要求,也许是需要一些新的技术或者去熟悉一些之前并不需要的软件。
  • 许可 / 成本会计——许多软件许可模式并没有考虑到虚拟化。比如在一台机器上运行四份 Windows 的拷贝也许会分别需要四份许可证。
  • 性能——虚拟技术将有效地划分一台物理机器上的资源,比如 RAM 和 CPU 等。再加上 hypervisor 的开销,对于追求性能最大化的环境而言可能这并不是最理想的结果。

应用 / 桌面虚拟化

虚拟化并不仅仅是一门服务器领域的技术。在客户端,它也大量的运用于桌面以及应用层面。这种虚拟化技术可以细分为四种类别:

  • 本地应用虚拟化 / 流处理
  • 托管应用虚拟化
  • 托管桌面虚拟化
  • 本地桌面虚拟化

维基百科对应用虚拟化作了如下定义

应用虚拟化是这样一种软件技术的总称词汇:它通过依赖的底层操作系统对应用程序进行打包,可以更好地管理遗留应用程序及其兼容性。一个完全虚拟化的应用程序不是以传统的方式来安装的,尽管它执行的时候好像仍然是这么回事。应用虚拟化与操作系统虚拟所不同的是,后者是虚拟整个操作系统,而不是只针对特定的应用。

有了流处理与本地应用虚拟化,应用程序的安装可以随需应变。如果支持流媒体,那么应用程序启动所需要的部分就可以优先传送,以优化启动时间。本地虚拟化的应用程序也时常借助于虚拟注册与文件系统来保持其与用户物理机器的隔离与自身的纯净。本地应用虚拟化的例子包括 Citrix Presentation Server 和 Microsoft SoftGrid。一些虚拟设备也可以算在这一类里面,就像经常通过 VMware 的 VMware Player 来分发的那些。

托管应用虚拟化允许用户从本地机器上访问物理上运行在网络某处的程序。例如微软的 RemoteApp 等技术包括了将远程应用处理为本地文件类型处理器的功能,使得用户体验到一种相对无缝的集成。

应用虚拟化带来的好处包括:

  • 安全——虚拟应用程序通常运行在用户模式从而与 OS 级别的函数隔离开来。
  • 管理——虚拟程序的管理和修补都可以在集中的位置进行。
  • 遗留支持——通过虚拟技术,遗留应用可以运行于它们初始设计所不支持的现代操作系统之上。
  • 获取——虚拟程序可于集中位置随需而装,并提供故障转移与复制备份的功能。

其劣势在于:

  • 打包——应用在使用之前必须先被打包。
  • 资源——虚拟程序可能会需要更多的资源,诸如存储和 CPU 等。
  • 兼容性——并非所有的应用都是可以容易地虚拟化的。

维基百科对桌面虚拟化作了如下定义

桌面虚拟化(或者虚拟桌面基础结构)是以服务器为中心的计算模型,它借鉴了传统的瘦客户端的模型,但却是为了将这两方面的优点都带给管理员和用户而设计的:拥有在数据中心托管和集中管理桌面虚拟机的能力同时又带给用户完全的 PC 桌面的体验。

托管桌面虚拟化与托管应用虚拟化是类似的,将用户的体验扩展到整个桌面。商业产品包括微软的 Termial Services,Citrix 的 XenDesktop 以及 VMware 的 VDI。

桌面虚拟化带来的好处,大部分也是和应用虚拟化相同的:

  • 高可用性——有了复制与容错的托管配置,宕机时间可以最小化。
  • 扩展的恢复周期——更大容量的服务器以及有限的客户端 PC 需求可以延长其寿命。
  • 多桌面——用户可从同一台客户端 PC 上访问多个桌面套件以进行各种工作。

桌面虚拟的不足之处与服务器虚拟是类似的。在这之上附加的一点就是客户必须要具备网络连接来访问虚拟桌面。对于离线应用这显然成了一个问题,同时也增加了办公室的带宽需求。

最后一部分客户端虚拟化就是本地桌面虚拟。可以这样说,伴随着 VMware 于 90 年代末引入 VMware Workstation,这一领域正是近来虚拟化觉醒的开端。如今,市场上已经多了诸如微软的 Virtual PC 以及 Parallels 的 Desktop 这样的竞争对手。本地桌面虚拟化对于苹果成功转向英特尔的芯片也扮演着十分重要的角色,因为像 VMware Fusion 以及 Parallels 等产品使得获取 Windows 应用程序变得很简单。本地桌面虚拟化的带来的好处包括:

  • 安全——有了本地虚拟技术组织可以仅仅锁住和加密虚拟机 / 虚拟硬盘的有价值的内容。这比加密用户的整个磁盘或操作系统能获得更好的性能。
  • 隔离——与安全相关的是隔离。虚拟机允许公司将其内部资产从他们无法控制的第三方机器隔离出来。这使得雇员可以远程地将个人电脑用于公司用途。
  • 开发 / 遗留支持——Local virtualization allows a users computer to support many configurations and environments it would otherwise not be able to support without different hardware or host operating system. 本地虚拟化使得用户的电脑能够支持原本在缺少不同的硬件或是宿主操作系统的条件下不能支持的多种配置和环境。这类例子包括在 OS X 的虚拟环境之上运行 Windows 或是在主要的 OS 是 Vista 的机器上进行 Windows 98 的遗留测试。

网络虚拟化

到目前为止,我们所谈的虚拟技术类型是以应用或者整个机器为中心的。然而这并不是可进行虚拟化的唯一粒度级别。其它的一些计算概念同样为它们自身增添了可以软件虚拟化的能力。网络虚拟化正是其中之一。维基百科将网络虚拟化定义如下:

在计算领域,网络虚拟化是这样一个过程:将硬件与软件的网络资源与功能组合成一个单一的,基于软件的管理性实体,一个虚拟网络。网络虚拟化涉及到平台虚拟化,常常整合了资源虚拟化。网络虚拟化可分为:外部的,将许多网络,或网络的各部分,组合成一个虚拟单元;内部的,在一个单一的系统上为软件容器提供类似网络的功能…

使用这一术语的内部性定义,桌面和服务器虚拟解决方案提供了宿主与客户机之间,以及多个客户机之间的网络访问。在服务器端,虚拟交换机正逐渐作为虚拟层的一部分被接受。不过,网络虚拟化的外部性定义可能是其被使用得最多的一个版本。虚拟专用网(VPNs)多年来都是网络管理员工具箱中的一个普及的部件,并且有大部分公司都允许 VPN 的使用。虚拟局域网(VLANs)是另一个普遍使用的网络虚拟化概念。利用诸如 10g 以太网等高端网络,网络不再需要纯粹地按地理线来布局。在这一领域拥有产品的包括思科公司以及 3Leaf 公司。

总的来说网络虚拟化带来的好处包括:

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

如服务端虚拟化一样,网络虚拟可能增加复杂性,性能开销,以及对管理员的技能集提出更高的要求。

存储虚拟化

另一个常常虚拟化的计算概念就是存储。不像到目前我们所看到的各种复杂的定义,维基百科对存储虚拟化的定义相当简单:

存储虚拟化指的是将物理存储抽象成逻辑存储的过程。

尽管 RAID 在基础的层面上提供了这一功能,但存储虚拟这一术语典型地包括了更多附加的概念,比如数据迁移以及缓存。由于有着各种各样提供这一功能的方式,对于存储虚拟化难以作出一个定式的解释。典型地,它提供了以下特性:

  • 基于托管并提供特殊设备驱动
  • 数组控制器
  • 网络交换器
  • 独立的网络器件

每个供应商对此有着不同的解决方式。另一种主流的对存储虚拟化分类的办法是,它是可控制的还是非控制的?可控制的(常常称作对称的)虚拟化位于宿主与存储设备之间,并允许缓存。非控制的(常常称作非对称的)虚拟化利用了特别的基于托管的设备驱动,首先查找元数据(表明文件存于什么地方),然后支持宿主直接从存储位置取回文件。对于这种方法,在虚拟层是不支持缓存的。

存储虚拟化的总体好处在于:

  • 迁移——数据可于存储位置间轻易的迁移,并且不会影响以多种方式对虚拟分区的实时访问。
  • 利用率——类似于服务端虚拟化,在超负荷或低效率的时候可以平衡存储设备的利用率。
  • 管理——许多主机可以利用同一个物理设备的存储,因此便于集中式的管理。

其不足点在于:

  • 缺少标准与互操作性——存储虚拟化是一个概念而非一个标准。因此各个供应商之间常常无法进行互操作。
  • 元数据——由于有着逻辑与物理位置之间的映射关系,因此对于一个运行的可靠系统来说存储元数据的管理显得极为关键。
  • 回冲——同样,逻辑与物理位置之间的映射关系使得虚拟技术下的系统回冲不再是微不足道的过程。

服务 / 应用基础结构 虚拟化

企业级应用程序供应商也开始注意到虚拟化的好处并开始提供相应的解决方案:比如提供允许虚拟化诸如 Apache 等普遍使用的应用的功能,以及提供支持容易地从头开始开发带有虚拟化功能的软件的应用组织(fabric)平台。

应用基础结构(applicaation infrastructure)虚拟化(有时称为应用组织——application fabric)使应用从物理的 OS 和硬件分离出来。应用程序开发者可以面向虚拟层来编程。由“组织”来处理部署与伸缩等特性。这一过程的精髓在于网格计算向提供虚拟层特性的组织形式的演变。像 Appistry 以及 DataSynapse 这样的公司提供了这些特性:

  • 虚拟分布
  • 虚拟处理
  • 动态资源发现

IBM 同样从应用基础结构的层面拥抱着虚拟化概念,它重塑了 Websphere XD 这一品牌并推出了其强化版 Websphere Virtual Enterprise 。这一软件能运行在多种 Windows,Unix 以及基于 Linux 的操作系统之上并支持诸如 Websphere,Apache,BEA,JBoss 和 PHP 应用服务器等多种流行的服务器。这使得管理员可以在虚拟层,而不用在机器物理层,部署和迁移应用服务器。

最后总结

概括来看应该很明显,那就是虚拟化不仅仅是一个关于服务端的概念。这一技术可以被应用于广泛的计算领域,包括各种虚拟化:

  • 整个机器,包括服务器和客户端两者
  • 应用程序 / 桌面
  • 存储
  • 网络
  • 应用基础结构

虚拟技术是以多种不同的方式在演化的,然而其中心主题是围绕着既存领域增进的稳定性,以及加速业界中尚未拥抱虚拟化的部分对其的采纳。最近微软以 Hyper-V 进入裸机 hypervisor 领域就是该技术业已成熟的标志。

超出这些核心元素之外,虚拟化的未来也正在被书写。一个中心的分界线就是特性或者产品。对于像红帽以及许多存储供应商等公司,虚拟化正作为其现有供应的补充被推送。而其它的像 VMware 等公司其整个业务都是建立在虚拟化产品之上的。随着这一领域的演化,InfoQ 将继续关注其涉及的技术和公司。

查看英文原文: An Introduction to Virtualization


志愿参与 InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008 年 8 月 19 日 09:161567
用户头像

发布了 133 篇内容, 共 27.1 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

有点干货 | Jdk1.8新特性实战篇(41个案例)

小傅哥

函数式接口 Lambda 小傅哥 jdk8 编码

五个“为什么” —— 读《精益创业》

YoungZY

读书笔记

学计算机你后悔了吗?

陈辰

学习 技术 前端

Kubectl exec 的工作原理解读

米开朗基杨

Kubernetes kubelet

【转载】如何在团队中做好Code Review?

北纬32°

python实现·十大排序算法之希尔排序(Shell Sort)

南风以南

Python 排序算法 希尔排序

写给产品经理的信(2):产品设计能力怎样进阶

夜来妖

产品 个人成长 产品经理 产品设计 进阶

技术工作中的颜值

N维空间的尘埃

一文带你彻底厘清 Kubernetes 中的证书工作机制

首富手记

Kubernetes

翻译敏捷行业专业外文,不只是谷歌翻译

行叔

翻译 Scrum 敏捷开发 Agile

关于问题的问题 —— 读《你的灯亮着吗?》

YoungZY

读书笔记 读书

孩子,我们在睡前一起来阅读 15 分钟的好书,让彼此都带着好的故事入眠。

叶小鍵

正确阅读 托马斯·奥本 Doug Antin 蒂·泰德罗克

Lean UX 教你设计如何驱动产品

Yanel 说敏捷产品

产品 敏捷 设计

实战 Java8-CompletableFuture

lee

Java 多线程 java8 CompletableFuture

怎么控制老板不断加需求?

kimmking

实用贴丨正确的「递归」打开方式:让计算机像计算机一样去计算

博文视点Broadview

Python 递归

Elasticsearch 实战

代码诗人

有价值的产品=设计思维+精益创业+敏捷方法

行叔

Scrum 敏捷开发 Agile 设计思维 精益创业

[Git] Git 可以这么学

猴哥一一 cium

git

[GitHub] 跟我一起白嫖 GitHub Pages 做个人站点 ?

猴哥一一 cium

git GitHub GitHub Pages

Java开发工具与HelloWorld

编号94530

Java eclipse Hello World ! IDEA 开发工具

这个名字,你不能再读错了

小天同学

历史 科普

已发表的技术文章-大数据方面

绝影-大数据

面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

cxuan

mybatis

RabbitMQ 集群

云淡风轻

读书笔记 RabbitMQ

Flutter的staggered GridView详细使用

潘珉

flutter

不要抱怨,也别憋屈

孙苏勇

职场 随笔杂谈

要和竞争对手做比较吗?

邓瑞恒Ryan

创业 战略管理

内容比形式更重要

Winann

内容 生活 工作 形式主义

Zabbix实战指南

橙子冰

技术 运维 监控 运维自动化 zabbix

工厂模式 (一)简单的工厂模式概念以及示例代码

LSJ

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

虚拟化导论-InfoQ