虚拟化技术介绍
概述
在计算机技术中,虚拟化 是一种资源管理技术,它将计算机的各种实体资源进行抽象转换,并呈现出来,从而打破实体结构间不可分割的障碍,使得用户可更高效地使用这些资源。
虚拟化技术比较复杂,本文仅介绍其中两个点 —— 硬件层的虚拟化 和 操作系统层的虚拟化。
硬件层的虚拟化
硬件层的虚拟化 借助于 Hypervisor 抽象管理硬件资源,并为上层提供虚拟硬件以构建虚拟机,从而实现虚拟化。此种虚拟化技术比较简单、常见,代表性产品有 VMware、VirtualBox。
下图所示为物理机与虚拟机的结构分层图。
对于物理机而言,操作系统所发指令直接作用于硬件之上。对于虚拟机而言,操作系统所发指令作用于虚拟机 (虚拟硬件) 之上,随后虚拟机将指令传递给 Hypervisor,最终指令作用于硬件之上。
据此可以得知:由于虚拟机指令的执行涉及若干次传递,因此其性能劣于物理机 (实际情况是,虚拟机性能相当劣于物理机性能)。
就 硬件层的虚拟化 而言,Hypervisor 属于核心点。对于下层,它负责抽象并管理物理资源;对于上层,它负责分配虚拟资源并管理虚拟机。
根据 Hypervisor 的所处位置,可具体分为如下两种 (Type-1 和 Type-2):
对于 Type-1 而言,Hypervisor 直接位于硬件之上;对于 Type-2 而言,Hypervisor 位于操作系统之上或之内。
在此两种类型之上,又可具体分为如下几种:
寄居虚拟化
属于 Type-2。它是最为常见的虚拟化架构,VMware Workstation 即是此种。
优点:简单、易于实现。
缺点:依赖于物理机操作系统、性能开销大。
裸金属虚拟化
属于 Type-1。
优点:不依赖于具体操作系统。
缺点:虚拟层内核开发难度很大。
操作系统虚拟化 (容器化)
既不属于 Type-1,也不属于 Type-2。对于该种架构而言,其中并不存在 Hypervisor,即不存在对硬件资源的抽象化。它对操作系统内核进行虚拟化,从而实现用户应用隔离。因为用户应用之外需要添加额外的模板库文件,因此其整体称为容器。
优点:简单、易于实现、管理开销十分低。
缺点:隔离性差,多应用共享同一操作系统。
混合虚拟化
属于 Type-2,其虚拟化层直接嵌于操作系统之内。
优点:相比于寄居虚拟化而言,指令所需传递次数较少,因而具有更高性能。
缺点:底层硬件需支持扩展功能。
操作系统层的虚拟化
操作系统层的虚拟化 借助于操作系统提供的若干特性,为应用提供相互隔离的资源以构建不同的虚拟环境,从而实现虚拟化。此种虚拟化技术比较流行,代表性产品有 Docker。
下图所示为此种虚拟化技术的结构分层图。
从中可以看到:应用与必须的系统模板库共同构建成为虚拟容器,该虚拟容器作为一个 单独应用 运行于操作系统之上 (正因如此,操作系统层的虚拟化 也称为 容器化)。相比于物理机运行应用而言,该种虚拟化技术仅在应用之上添加了一个外层,因此其性能略差于物理机性能。
两种虚拟化的比较
对于 硬件层的虚拟化 和 操作系统层的虚拟化 而言,二者区别如下:
容器化与 Docker
容器化基于操作系统提供的若干特性以构建容器。基于操作系统直接构建容器比较麻烦,因此众多容器技术出现以简化此过程,例如 Docker、Rocket。
Docker 是一个开源引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。在此基础之上,它为应用的开发和部署提供一站式解决方案。
下图所示为 Docker 的结构分层图,其中 Docker Engine 仅负责管理容器,指令运行不涉及 Docker Engine 的传递。