近些年,“云计算”“虚拟化”、Amazon EC2、VMware这些字眼充斥在各式各样的介质上,好像技术不和这些字眼沾点边,就不是最新的趋势了。其实虚拟化这个技术早就出现在我们的生活中,而“云端”“EC2”这些新的名词,更是和虚拟化脱不了关系。
虚拟化是对资源的逻辑抽象、隔离、再分配、管理的一个过程,通常,对虚拟化的理解有广义与狭义两种。广义的虚拟化意味着将不存在的事物或现象“虚拟”成为存在的事物或现象的方法,计算机科学中的虚拟化包括平台虚拟化、应用程序虚拟化、存储虚拟化、网络虚拟化、设备虚拟化等。狭义的虚拟化专指在计算机上模拟运行多个操作系统平台。
其实,一直以来,对于虚拟化并没有统一的标准定义,但大多数定义都包含这样几个方面:
(1)虚拟的内容是资源(包括CPU、内存、存储、网络等);
(2)虚拟出的物理资源有着统一的逻辑表示,而且这种逻辑表示能够提供给用户与被虚拟的物理资源大部分相同或完全相同的功能;
(3)经过一系列的虚拟化过程,使得资源不受物理资源限制约束,由此可以带给我们与传统IT相比更多的优势,包括资源整合、提高资源利用率、动态IT等。
如果从计算机的不同层次入手,来给虚拟化做出一个定义,首先来看一下计算机的服务层级结构,如图2-2所示。
图2-2 计算机的服务层级
在硬件部分,硬件厂家虽然可以用各式各样的新科技来制作先进的产品,但还是得考虑到产品的通用性。以CPU为例,虽然各种CPU厂家都以高速低耗电为主要设计原则,但以信息业来说,还是有几个必须遵守的架构,如Intel架构、PowerPC架构等。这也是硬件厂家在设计时的较少制约。
操作系统的功能很复杂,主要是硬件与上层用户的沟通。举例来说,如果你买了一块新的显示适配器想要玩三维游戏,必须要先安装驱动程序才能发挥硬件的功能及效能。这时操作系统的用处,就是提供游戏和硬件之间沟通的管道(驱动程序),因此没有操作系统的话,硬件和用户之间是被隔离的。
对于框架库而言,大家都有使用IE浏览器的经验,如果你在使用IE时,只将“C:\Program Files\Internet Explorer\iexplore.exe”克隆出来,再拿到另一台电脑使用,这个IE是无法运行的。原因是这个IE在运行时,虽然有运行文件了,但还需要底层的框架提供各种功能。这些框架就是所谓的底层架构(Framework)。这么做的好处是让程序开发人员有一个共通的平台,并且也能确保开发出来的软件能在任何安装Framework的计算机上运行。Java Runtime、Microsoft Framework就是常见的例子。
应用程序就是我们看到单独的软件,如Chrome、Word等。当我们要使用软件时,只要运行该软件的可执行文件就可以。计算机中软件的单位都是可执行文件,再大的软件都有一个代表性的可执行文件。而网页上的软件,则由index.html这一类的首页来给定,或是由Web Server来给定软件的入口点。
软件呈现出来的功能称为服务。一般来说,一个现代的软件服务包括了物理数据(放在数据库系统中)、业务逻辑以及界面(Interface)。用户通过界面,以业务逻辑为工具来操作物理数据,就是一个基本的服务模式。(www.xing528.com)
事实上,这些不同的层级之间与当前的架构是紧紧依赖的。没有软件的话,服务就无法提供给用户;没有Framework,软件就无法运行;没有操作系统的话,就无法安装各式各样的软件和Framework;没有硬件当然就什么都没有了。为了避免层次之间的紧密依赖性,在1960年,就有人引入虚拟化的概念,做法很简单,就是将上一层对下一层的依赖撤销;换句话说,就是将本层的依赖从底层中抽离出来,因此我们定义“虚拟化”的正规说法,可以为“虚拟化,就是不断抽离依赖的过程”。
“虚拟”从字面上看就是“假”的,意味着“本来没有这个东西,但要假装让你觉得有,以达到我们使用的目的”。事实上,这个较白话的解释,就是当前虚拟化的真正实践原则。从不同的层级来给出虚拟化的例子:
(1)服务虚拟化的例子
例如,通常在申请网站时,需要一个域名和对应的IP,但IP不够,因此我们可以利用Web Server中的配置,让多个域名指向一个IP。按照前面的解释,就是“让域名能脱离对IP的依赖”,而另一个解释更清楚,就是“原来没有这么多IP来一对一指向域名,我们就假装有这么多IP对到不同的域名”,因此一个IP可以对多个域名,节省IP的目的就达成了。
(2)软件虚拟化的例子
软件虚拟化的例子最常见的就是可携式软件(或称绿色软件,Portable Software)了。有些软件放在USB随身盘中,带到哪里都可以运行,这种软件和下层Framework的依赖被打破,不需要Framework也可以运行。
(3)Framework虚拟化的例子
让Framework不再受制于操作系统,让这个Framework支持的应用软件都能运行在各式各样的操作系统之上。当前做得最好的应该就是Java Runtime。虽然在不同的操作系统上都要安装不同版本的Java,但不同的操作系统都能运行Java的Runtime算是一个较贴近的例子。
(4)操作系统虚拟化的例子
让操作系统不再依赖硬件,直接可以运行在一个统一的“硬件界面”上,VMware vSphere就是最好的例子。VMware vSphere提供了一个“硬件界面”,让一台服务器上能并发运行多个操作系统,让操作系统都以为“自身在一台物理机器上”。
(5)硬件虚拟化的例子
硬件虚拟化最好的例子就是存储设备的虚拟化。可以将多个硬件组合成一个大存储池,并且依照我们的需要将这个存储池再分割。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。