目录

  1. 概述
  2. 虚拟化简史
  3. 虚拟化的工作原理
  4. 虚拟化分类
    1. 服务器虚拟化
      1. 服务器虚拟化特性
      2. 服务器虚拟化实现方法
        1. 完全虚拟化
        2. 半虚拟化
        3. 操作系统层虚拟化
      3. 服务器硬件虚拟化技术
        1. CPU虚拟化
        2. 内存虚拟化
        3. 存储虚拟化
        4. 网络虚拟化
        5. I/O虚拟化

概述

虚拟化是一种技术,可以利用以往局限于硬件的资源来创建有用的IT服务。它让您能够将物理计算机的工作能力分配给多个用户或环境,从而充分利用计算机的所有能力。
虚化技术分类,全虚拟化,部分虚拟化。

虚拟化简史

虽然虚拟化技术可以追溯到上世纪60年代,但它直到21世纪初才得以广泛应用。实现虚拟化的技术,例如Hypervisor虚拟机监控程序),是在几十年前开发的,它让多个用户能够同时访问执行批处理的计算机。

但是,在接下来的几十年内,解决多用户/单计算机问题的其他解决方案变得日益盛行,而虚拟化却裹足不前。其中一种解决方案是分时,在操作系统内部让各个用户按时间分段使用资源,这在无意中催生了UNIX等其他操作系统,最终让位于Linux。与此同时,虚拟化始终没有得到广泛采用,只是一种小众技术。

时间快进至上世纪90年代。大多数企业都使用物理服务器和单家供应商的IT堆栈,不支持在不同供应商的硬件上运行旧有应用。随着公司更新各自的IT环境,开始使用由多家供应商提供的价格相对低廉的商用服务器、操作系统和应用程序,他们必然面临着物理硬件利用率不足的问题–每台服务器只能运行1个供应商特定的任务。

在这个方面,虚拟化正好可以大展身手。它非常顺畅地解决了2个重要问题:公司可对服务器进行分区,并在多种类型和版本的操作系统上运行传统应用。自此,服务器开始得到更高效利用,从而降低与采购、设置、散热和维护相关的成本。

虚拟化的广泛适用性有助于减少对单家供应商的依赖,并为云计算的发展奠定了基础。现在它在很多企业得到了广泛使用,通常需要专业的虚拟化管理软件进行跟踪。

虚拟化的工作原理

在操作系统中加入一个虚拟化层(Hypervisor),这是一种位于物理机和操作系统之间的软件,允许多个操作系统共享一套基础硬件,也叫虚拟机监视器(Virtual Machine Monitor,VMM),该虚拟化层可以对下层的物理硬件资源(包括物理CPU、内存、磁盘、网卡、显卡等)进行封装和隔离,将其抽象为另一种形式的逻辑资源,然后提供给上层虚拟机使用。

本质上,虚拟化层是联系主机和虚拟机的一个中间件。

Hypervisor(虚拟机监控程序)可有效分隔物理资源,并将这些资源分配给不同虚拟环境(也就是需要这些资源的任务)使用。虚拟机监控程序可能位于操作系统的顶层(例如在便携式计算机上),或者直接安装在硬件上(例如服务器),这是大多数企业使用虚拟化的方式。虚拟机监控程序接管物理资源,并对它们进行划分,以便虚拟环境能够对其进行使用。

来自物理环境的资源根据需要进行了分区,分配给了很多虚拟环境使用。用户在虚拟机内部,能够与计算任务交互,并运行计算。虚拟机作为单个数据文件运行。与任何数字文件相同,虚拟机可从一台计算机迁移至另一台计算机,在任何一台计算机上打开,工作方式都是相同的。

当虚拟环境正在运行时,如果用户或程序发出一条指令,请求来自物理环境的更多资源,虚拟机监控程序就会将请求传递到物理系统并缓存更改,所有这些步骤都接近本机速度。

通过虚拟化技术实现的虚拟机一般被称之为GuestOS(客户),而作为GuestOS载体的物理主机称之为HostOS(宿主)。

一个系统要称为虚拟机,需要满足以下条件:

  • 由VMM提供的高效(>80%)、独立的计算机系统。
  • 拥有自己的虚拟硬件(CPU、内存、网络设备、存储设备等)。
  • 上层软件会将该系统识别为真实物理机。
  • 有虚拟机控制台。

虚拟化分类

  • 完全虚拟化
  • 半虚拟化
  • 服务器虚拟化:一台服务器变成多台虚拟服务器。
  • 桌面虚拟化:提供易管理、移动、安全的桌面环境。
  • 存储虚拟化:整合存储,提高性能,提供高级功能。
  • 网络虚拟化:整合不同类型网络,提供虚拟化网络支持。

服务器虚拟化

  • 将单台物理服务器虚拟出多台相互隔离虚拟服务器。
  • 将多台物理服务器资源进行整合,提供资源动态调配。
  • 对所有物理资源进虚拟资源进行统一、集中管理。
  • 提供统一的高可用、系统安全、数据备份解决方案。

服务器虚拟化特性

  • 分区:在单个服务器上同时运行多个虚拟机。
  • 隔离:在同一个服务器上的虚拟机之间相互隔离。
  • 封装:整个虚拟机都保存在文件中,而且可以通过复制和移动这些文件的方式来移动和复制该虚拟机。
  • 相对于硬件独立:无需修改即可在任何服务器上运行虚拟机。

服务器虚拟化实现方法

完全虚拟化

最流行的虚拟化方法,使用hypervisor在虚拟机和底层硬件之间建立一个抽象层。hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们自己不知道自己运行在虚拟化环境下。

在完全虚拟化的环境下,hypervisor运行在裸硬件上,充当主机操作系统;而由hypervisor管理的虚拟服务器运行客户端操作系统(guest OS)。

full-virtualizationfull-virtualization

例如:VMware ESXi,Linux KVM。

完全虚拟化优点是不需要对GuestOS操作系统软件的源代码做任何的修改,就可以运行在这样的VMM中。
缺点是hypervisor给处理器带来额外的开销。

半虚拟化

完全虚拟化是处理器密集型技术,因为它要求hypervisor管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户机操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor协同工作。这种方法就是半虚拟化(para-virtualization)。

para-virtualizationpara-virtualization

例如:Hyper-V,Citrix Xen,IBMPowerVM。

半虚拟化的优点是性能高,经过半虚拟化处理的服务器可与hypervisor协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。
缺点是需要对GuestOS的内核代码做一定的修改,才能够将GuestOS运行在半虚拟化的VMM中。

操作系统层虚拟化

实现服务器虚拟化还有一个方法,那就是在操作系统层面增加虚拟服务器功能。比较有名的操作系统虚报化解决方案有容器(LXC, Solaris containers, Docker),虚拟专用服务器(OpenVZ)等。在普通操作系统上运行的计算机程序可以看到该计算机的所有资源(连接的设备、文件和文件夹、网络共享、CPU),但是,在容器内运行的程序只能看到容器的内容和分配给容器的设备。

就操作系统层的虚拟化而言,没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果操作系统层虚拟化,所有虚拟服务器必须运行在同一操作系统(不过每个实例有各自的应用程序和用户账户)。

虽然操作系统层虚拟化的灵活性差,但本机速度性能比较高。此外,由于架构上在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境还要容易。

在类Unix操作系统上,此功能可以看作是利用chroot机制,更改当前正在运行的进程及其子进程的根文件夹。除了隔离机制,内核通常提供资源管理功能来限制一个容器的活动对其他容器的影响。

implementimplement

服务器硬件虚拟化技术

CPU虚拟化

内存虚拟化

存储虚拟化

网络虚拟化

I/O虚拟化