About the virtualization
虚拟化是当前的一个热门话题,但它并不是一个新名词,虚拟化的历史由来已久。 举一个简单的例子,比如说操作系统。操作系统是做什么的哪?操作系统是管理 设备的,是为进程提供一个虚拟的执行环境,使得每个进程都感觉自己拥有整个 系统。操作系统至少为进程提供了以下假象: 1) CPU是自己独占的,可以随便用 2) 32bits或者64bits的内存空间,基本上可以认为是没有限制 3) 文件系统,以及设备操作等 4) 网络,没有限制的缓存以及连接等 可以想象,操作系统提供了进程执行的虚拟环境,简化了进程编写的工作。但是, 在这个虚拟执行环境里面,操作系统还要保证: 1) 公平,由于不是一个进程在执行,所以不能厚此薄彼,操作系统要调度 2) 保护,为进程提供保护,使得一个进程崩溃,不会影响到其他进程 3) 资源管理,虽然资源表面上是无限的,但需要操作系统来管理,分配,调度,映射 从上面的例子,我们可以看出虚拟化的几个重要的特性 1) 资源的管理和映射。虚拟化提供了虚拟的执行环境,好像资源是无限的。但是 真正的物理硬件是有限的,只不过大家轮流使用而已;或者是把大块的物理资 源分割成多个小块,然后分配给虚拟系统。 从这个角度来说,虚拟化最重要的工作就是资源的调度和向上层提供虚拟接口。 具体怎么实施,参考操作系统的实现就可以。资源管理应该由提供虚拟 环境的实体来施行。一个简单的例子,preemptive和cooperative的多任务。 显然cooperative是不能很好地支持多任务的,而preemptive就可以。 2) 空间隔离和保护。虚拟环境是给多个虚拟系统使用的。要在多个虚拟系统之间 提供隔离和保护的功能,使得各虚拟系统之间不要相互影响。最简单的,比如 数据的保护。还有就是一个系统崩溃不能影响其他系统。从这一点来看,很多 虚拟环境是不合格的,比如基于web server的虚拟主机,虚拟ftp服务器等等。 3) QoS。之所以要把这个单拿出来说,是因为如果虚拟环境不能提供与非虚拟环境 同等质量的服务的话,那虚拟环境就没有什么竞争力。这里有很多例子,比如以 太网里面的VLAN或者是路由器里面的MPLS。网络里面有很多虚拟化的例子,虽 然它们的初衷是为了资源共享,但是在实现的时候,特别强调QoS。与QoS 相关的资源预留或者资源调度等等,都是为了保证虚拟系统的服务质量。这里面有 很多门道。 虚拟化可以简单这样分类 1) 1:1,虚拟系统切分物理系统,多个虚拟系统加起来,正好等于物理系统,或者 物理系统提供一定的冗余量以保证QoS。这样的系统有多大的价值?这里只有资源 的分割,有可能不提供虚拟接口,也不提供空间保护。 2) 1:N,虚拟系统的能力加起来要比物理系统大,如果只有一个虚拟系统,那就是1:1,但通常是不会这样用。 虚拟化至少应该提供以下好处: 1) 虚拟化可以有效的利用资源,一个假设就是用户不会同时都在peak点上,所以可 以把多余的资源拿出来分享。或者某个通道容量特别大,可以承载多个用户。 2) 提供虚拟执行环境,用起来就像是一个系统。比如常见的cluster,把多个机器统 一管理,向上提供一致的虚拟执行环境;或者像vmware这种,可以在一台机器上, 提供多个虚拟机,使用虚拟机就像使用物理机一样。 3) 节约成本。如果不能做到这一点,虚拟化就没有必要。 思路有点乱,希望能有点启发。