虚拟化技术概念及分类

虚拟化是一种让人着迷的技术,其知识背景贯穿底层硬件到上层应用,也是目前云计算服务的基础。本文及后续文章,期望通过“虚拟化简介”这一系列,管中窥豹,将虚拟化技术的魅力阐述一二,也算是对自己多年工作的一个总结。

在展开描述虚拟化之前,有必要对虚拟化的概念和技术分类做通盘的介绍:


什么是虚拟化?

虚拟化,即是创建真实事物的虚拟版本,在计算机世界里,这些真实事物可以是计算机硬件平台、存储设备和网络资源等。


虚拟化技术分类

应用程序的执行环境可以抽象出如下层次:
硬件层:提供硬件抽象,包括指令集架构、硬件设备及硬件访问接口
操作系统层 :提供系统调用接口,管理硬件资源
程序库层:提供数据结构定义及函数调用接口

举一个实际的例子
下述Rust 代码通过调用库函数实现文件写入,库函数最终调用系统调用写入硬件设备

虚拟化可以在上述程序的每个调用层实现,因此,也有了如下的分类:
硬件虚拟化: 是对计算机硬件环境的虚拟,其上可运行不同操作系统,典型应用如VMware、Xen、KVM等
操作系统级虚拟化: 是对系统调用等操作系统接口的虚拟,其上运行的应用程序互相隔离,典型应用是容器。
程序库级虚拟化: 是对程序库接口的虚拟化,兼容应用程序的程序库调用,典型应用如rCUDA、Wine等


为什么要做虚拟化?

诸多场景下,应用虚拟化技术都很有作用,例如:
服务器整合:将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低IT支出和运维管理成本。
资源弹性伸缩:根据业务情况,动态调整计算、存储、网络等硬件及软件资源。
混合部署:同时提供多套差异化的执行环境,限制环境使用资源并保障其上应用的QoS。
环境标准化:一次构建,随处执行。实现执行环境的标准化发布,部署和运维。
环境兼容:部分应用程序依赖特殊的软件或硬件环境,使用虚拟化技术可以满足其运行要求。
沙盒:为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。
虚拟硬件:创建现实中并不存在的硬件设备,比如底层使用分布式块存储的虚拟磁盘、使用SDN网络的虚拟网卡等。


参考资料:
[1] https://en.wikipedia.org/wiki/Virtualization
[2] Smith J E, Nair R. Virtual Machines: Versatile Platforms for Systems and Processes.
[3] Chiueh T C. A Survey on Virtualization Technologies[J]. rpe report, 2005. [4] Barham P, Dragovic B, Fraser K, et al. Virtual machine monitors: Xen and the art of virtualization[J]. Symposium on Operating System Principles, 2003, 36(August):164--177.
[5] http://rcuda.net/index.php/what-s-rcuda.html
[6] https://www.winehq.org