云计算中虚拟化实现的层级

Levels of Virtualization

谈及云计算中虚拟化实现的层级,首先需要理解为何虚拟化会存在不同的层级。
为此,我们可以对比传统的计算机系统与虚拟化计算机系统。只要了解这两种模式的主要区别,就能轻松理解云计算中定义的虚拟化层级。
在传统系统中,首先配置硬件,随后在该系统上安装操作系统,进而提供各类供用户访问的服务。
由此可见,操作系统充当了硬件与应用程序之间的接口。
而在虚拟化系统中,宿主机(物理机)之上安装了一层虚拟化层,该层以虚拟化的形式向用户(即客户操作系统)提供服务。
因此,虚拟化计算系统中用户请求的所有硬件资源,都会通过虚拟化层转换为虚拟形式,而这一转换过程涉及具体的实现机制。

究竟什么是虚拟化?

简而言之,虚拟化是一种计算机架构技术,允许在同一台物理硬件设备上运行多个虚拟机(VM)。
虚拟机的基本理念最早可追溯至 20 世纪 60 年代。该技术旨在促进多用户间的资源共享,并提升计算机在资源利用率及应用适应性方面的性能。
如今,虚拟化已成为企业 IT 架构中的常规做法,也是推动云计算经济效益的关键技术。它使云服务提供商能够利用现有的物理计算机硬件为用户提供服务。
此外,它还允许云用户按需获取计算资源,并随着工作负载的增加以经济高效的方式扩展这些资源。

实现虚拟化的三种方式有哪些?

构建虚拟服务器有三种方式:完全虚拟化、半虚拟化和操作系统级虚拟化。

它们都具有一些共同特征。物理服务器被称为主机,虚拟服务器被称为客户机。

因此,虚拟服务器的行为类似于物理机。具体的系统采用不同的方法来分配物理服务器资源以满足虚拟服务器的需求。

完全虚拟化
  • 全虚拟化(Full virtualization)使用一种称为“hypervisor”(虚拟机监控程序)的特定软件。Hypervisor 直接与物理服务器的 CPU 和磁盘空间进行交互,并充当虚拟服务器的操作系统层。
  • 因此,hypervisor 确保每台虚拟服务器完全独立,且彼此互不感知(即各虚拟服务器不知道物理机上还运行着其他虚拟服务器)。
  • Hypervisor 监控物理服务器的资源;当虚拟服务器运行应用程序时,hypervisor 会将物理机的资源分配给相应的虚拟服务器。
半虚拟化(Para-virtualization)
  • 半虚拟化(para-virtualization)方案略有不同。与全虚拟化技术不同,半虚拟化系统中的客户机(guest servers)彼此之间是相互感知的。
  • 因此,半虚拟化环境下的 Hypervisor(虚拟机监控程序)在控制各客户操作系统时,所需的处理能力相对较少。
  • 每个操作系统都能感知其他操作系统对物理服务器提出的资源需求,整个系统作为一个有机整体协同运作。
操作系统级虚拟化
  • 操作系统级虚拟化程序完全不使用虚拟机监视器(hypervisor)。相反,虚拟化功能是宿主机操作系统的一部分,由其承担全虚拟化虚拟机监视器的所有职能。
  • 这种方法的一个独特局限性在于,所有客户服务器(guest servers)必须运行在相同的操作系统上。因此,尽管各虚拟服务器之间相互独立,但无法在它们之间混用不同的操作系统。
  • 由于所有客户操作系统必须保持一致,这种环境被称为同构环境。
  • 接下来,让我们探讨云计算中不同层级的虚拟化。

不同层级的虚拟化实现

搭建虚拟化环境并非易事。计算机运行的操作系统通常是针对特定硬件进行配置的。

因此,直接利用底层硬件运行另一种操作系统既不可行,也不简单。

要实现这一点,就需要用到“虚拟机监控程序”(Hypervisor)。Hypervisor 的作用是在硬件与虚拟操作系统之间架起桥梁,从而确保系统的顺畅运行。

在云计算领域,虚拟化通常有五个实现层级。接下来,我们将深入探讨云计算中虚拟化实现的每一个层级。

指令集架构层(ISA)
  • 在指令集架构(ISA)层面,虚拟化可以通过由宿主机 ISA 模拟特定 ISA 的方式来实现。例如,借助 ISA 模拟技术,MIPS 二进制代码可以在基于 x86 架构的宿主机上运行。
  • 因此,该策略使得原本为多种不同处理器编写的大量遗留二进制代码,能够在各种不同的硬件宿主机上运行。
  • 第一种模拟方法是代码解释。在这种方式下,解释器程序逐条将源指令转换为目标指令。
  • 指令集架构(ISA)层面发生的活动:

指令集

  • 云计算中物理服务器上的硬件拥有自己的指令集,用于处理各种指令。
  • 因此,这些指令充当了硬件和软件之间的接口。硬件通过指令集,直接向其上层提供服务。

模拟器

  • 模拟器充当解释器的角色,其基本功能是在云计算环境中建立虚拟化层与硬件层之间的通信。

指令映射

  • 模拟器从虚拟机获取资源所需的指令可以映射到主机上的硬件指令。
  • 因此,模拟器在从主机获取处理结果后,会借助虚拟机将服务发送给用户。

硬件抽象层 (HAL)

硬件抽象层虚拟化直接构建于裸机硬件之上。一方面,这种方法为虚拟机(VM)构建了一个虚拟硬件环境;另一方面,该过程通过虚拟化技术来控制底层硬件。
因此,其目的是对处理器、内存和 I/O 设备等计算机资源进行虚拟化,并提高多用户并发使用时的硬件利用率。
硬件抽象层(HAL)内的运作机制如下:
利用虚拟化层,将宿主机(Host)的硬件资源映射为客户操作系统(Guest OS)中的虚拟资源,从而构建出虚拟机。
由此,虚拟化计算系统涉及海量资源,而对这些资源进行处理指令调度并非易事。为了确保处理过程顺畅高效,相关指令被归类为两大主要形式:

  • 非特权指令(Non-privileged instruction)——此类指令可直接执行,且不会干扰其他任务。
  • 特权指令(Privileged instruction)——此类指令在执行前需要进行某种形式的修改或处理。

操作系统层

虚拟化模型可以在操作系统与用户应用程序之间创建一个抽象层。
它是在操作系统和物理服务器之上构建的隔离容器,利用底层的软硬件资源运行;因此,每一个这样的容器都表现得像是一台独立的服务器。
当存在大量用户且无人愿意共享硬件资源时,虚拟化技术便能发挥作用。
每位用户都会获得一个使用专用虚拟硬件资源的虚拟环境,从而避免了资源冲突问题。
操作系统层面的运行活动:

  • 位于虚拟化环境中的任何硬件都将在此操作系统内进行处理。
  • 操作系统层面的基本要求是,虚拟化环境中的所有用户系统必须运行同一系列的操作系统;否则,我们将无法向用户交付服务。

库支持级别

绝大多数应用程序使用的是由用户级库提供的 API,而不是直接调用操作系统提供的繁琐系统调用。
鉴于大多数系统都提供文档详尽的 API,此类接口便成为了虚拟化的又一理想对象。
因此,通过利用 API 挂钩(API hooks)监控应用程序与系统之间的通信链路,可以实现基于库接口的虚拟化。
库支持层(Library Support Level)内的活动:

  • 使用应用程序编程接口 (API)。
  • 在这个层面上,模拟器的概念是作为一种工具发挥作用,它为客户操作系统提供所需的资源。简而言之,用户使用模拟器来运行其他操作系统的各种应用程序。

用户应用层

应用级虚拟化适用于仅需虚拟化单个应用程序的场景,是云计算虚拟化实现层级中的最高层级。
这种方式无需虚拟化整个平台环境。
因此,它通常适用于运行基于高级语言开发的程序;此外,它允许将编译后的高级语言程序在应用级虚拟机中无缝运行。
库/用户应用层内的活动:

  • 虚拟机作为一种应用程序,在虚拟化层的支持下于用户系统上运行。
  • 此外,即使在用户环境与宿主环境类型不同的情况下,用户仍可访问相关服务。

在各种虚拟化实现层级中,哪一种的实现复杂度更高?

总体而言,硬件与操作系统层面的支持能带来最高的性能,但这两个层面的实现成本也最高。因此,实现用户隔离最具挑战性;而 ISA 级别的实现则提供了最佳的应用程序灵活性。

结论

云计算中的虚拟化实施共分为五个层级。然而,并非每家企业都会采用云计算中所有不同层级的虚拟化实施方案。
因此,具体采用哪个层级完全取决于企业的业务需求及其对虚拟化层级的偏好。企业会利用虚拟机在多个平台上进行开发与测试。
随着云端应用日益普及,虚拟化已成为全球企业不可或缺的技术。