云原生架构:从技术演进到最佳实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 虚拟化

2.1 虚拟化概述

在虚拟化诞生之前,操作系统中常见的资源可概括为以下几种。

计算资源:服务器CPU(核数、线程数、主频)、内存容量等。

存储资源:服务器磁盘空间等。

网络资源:服务器的网卡、服务器所接入的网络类型、路由器、负载均衡、网关等。

2.1.1 直接使用物理设备

直接使用物理设备时,必须面对由物理设备本身带来的不足,具体来说,有以下几个方面。

1.缺乏灵活性

缺乏时间灵活性:时间灵活性一般表现为处理相关资源时的时限,即生产或销毁资源是否足够快。当系统中资源匮乏,需要扩容资源时,物理设备的供给流程很长,设备到货后安装、部署设置烦琐,从而导致时间灵活性差。

缺乏空间灵活性:空间灵活性表现为可获取到的资源规模大小是否足够灵活。比如用户可能需要很小规格(如 1U1G)的计算资源,为此购置一台服务器则会造成资金的浪费。再如为了应对计算资源的峰值,购置了性能足够的资源,然而大多数时候资源开销远远低于峰值,导致资源利用率低下。

缺乏操作灵活性:操作灵活性体现在设备运维等操作的简便程度上,直接使用物理设备时,设备上架、安装、配置等都需要人工完成大量的工作,或者针对网络配置,需要对许多不同的网络设备进行统一管理。可见,大规模物理设备群的运维是一个非常复杂、烦琐的过程。

2.隔离性差

为了提高资源利用率,可能会将多个服务部署到同一个物理设备上,这可能会导致多个服务之间相互干扰、隔离性差,严重时甚至会造成安全问题。

3.不可复制

当一个物理设备上的应用需要扩展时,只能在增加物理设备后,再做一遍物理资源配置、应用发布、网络配置等工作,无法快捷地实现对应用的复制和粘贴。

2.1.2 虚拟化原理

在计算机历史上,虚拟化技术最早出现于1961年,IBM 709计算机首次将CPU占用切分为多个极短的时间片(1/100s),每一个时间片都用来执行不同的任务。通过对这些时间片的轮询,就可以将一个CPU虚拟化或者伪装成多个CPU,并且让这些虚拟CPU看起来同时在运行。在之前探讨的分层架构中,人为地创造了“CPU指令集”和“系统调用”两个抽象层,使得上层软件可以直接运行在新的虚拟环境中。简单来说,虚拟化就是通过模仿下层原有的功能模块创造接口来“欺骗”上层的机制。

虚拟化可以通过资源管理技术,将物理存在的实体资源以虚拟机(Virtual Machine,VM)的形式抽象成一种逻辑表示。通常的做法是在整个系统架构中增加一个抽象层,负责分割下层的物理资源,然后组合成逻辑资源供上层使用。

1.广义虚拟化

如图2-1所示,广义虚拟化存在于计算机系统的方方面面,具体解释如下。

硬件虚拟化:硬件抽象层虚拟化为上层虚拟一个相同的或者相似的硬件,这样就可以将一个操作系统及操作系统层以上的层嫁接到硬件上,实现和真实物理机几乎一样的功能。

内存虚拟化:虚拟内存是对整个存储空间的虚拟化,使得应用程序可以突破物理存储的限制。

系统虚拟化:操作系统层虚拟化为上层模拟一个完备的操作系统,实现对应用进行独立封装,提供隔离的环境。

应用虚拟化:在应用层及函数层之上建立抽象层,提供逻辑隔离功能,即允许在一个应用上同时支撑多个用户应用,也就是云计算中提及的多租户。在Web服务器领域,这称为虚拟主机(Virtual Host),一台Web服务器可以基于域名为多个网站提供服务。在数据库领域,单个数据库服务可以提供完全隔离的多个逻辑数据库。在编程语言领域,比如JVM是提供Java运行环境的一种虚拟化。

图 2-1

2.狭义虚拟化

狭义虚拟化特指操作系统虚拟化,它使用虚拟化技术在一台物理机上模拟出多台虚拟机,每台虚拟机都拥有独立的资源(计算资源、存储资源、网络资源)。从逻辑形态上看,每台虚拟机都拥有独立的硬件设备(CPU、内存、硬盘、网卡等),上面运行着一个独立的操作系统,我们通常称之为“GuestOS”,每个 GuestOS 中都运行着各自的应用程序。虚拟化的资源以虚拟机的形式提供给用户,用户在使用虚拟机时可以选定不同的资源规格,包括CPU、内存和存储资源等。同时虚拟机可以挂载不同的存储,被配置在不同的网络中。美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)对虚拟化的定义为:虚拟化为应用程序的运行提供了包含软、硬件资源的仿真环境。这一组仿真环境被称为虚拟机。所以说虚拟机是为其他应用软件提供虚拟化环境的最小单元。

一方面,虚拟化可以提供与底层硬件设备系统不同的虚拟机;另一方面,虚拟化可以虚拟多台虚拟机资源。虚拟化的具体实现是通过在操作系统与硬件之间加入一个虚拟化层,并通过空间上的分割、时间上的分时及仿真模拟,将服务器物理资源抽象成逻辑资源。虚拟化层可以将单个CPU模拟为多个CPU,并且这些CPU之间相互独立、互不影响,也就是虚拟化层实现了计算单元的模拟及隔离。它向上层操作系统提供与原先物理服务器一致的环境,使得上层操作系统可以直接运行在虚拟环境中,并允许具有不同操作系统的多台虚拟机相互隔离,并发地运行在同一台物理服务器上,这台物理服务器被称为“宿主机”。虚拟化层模拟出来的主要逻辑功能为虚拟机,在虚拟机中运行的操作系统被称为“GuestOS”。

虚拟化场景包括三个部分:硬件资源、虚拟机监视器(VMM)和虚拟机(VM),如图2-2所示。系统虚拟化可以将一台物理机(Host)虚拟化为多台虚拟机,并通过虚拟化层(即虚拟机监视器)使每台虚拟机都拥有自己的虚拟硬件,并拥有一个独立的虚拟机运行环境,进而拥有一个独立运行的操作系统。

图 2-2

虚拟化具有如下特征。

分区:对物理机分区,可实现在单一物理机上同时运行多台虚拟机。

隔离:在同一台物理机上多台虚拟机相互隔离。

封装:整个虚拟机执行环境,包括硬件、操作系统和应用等,都被封装在独立文件中。

独立:不依赖产生该虚拟机的服务器,它可以不加修改地直接迁移到其他服务器上运行。