☁️ 第四章 构建云服务的技术
📄 一句话概括

Hypervisor 型虚拟化分两类,区别只有一个问题:Hypervisor 是直接踩在硬件上,还是先装了一套主机操作系统——直接踩的(Type 1)性能损耗只有个位数百分比,用于数据中心;先装一套的(Type 2)损耗明显,只用于在自己电脑上试装。

📝 本节和前面几节的关系

前两节讲的是虚拟化【能做什么】(4-3、4-4)。从这一节起,开始讲虚拟化有哪几种做法——教材把它分成两大家族:Hypervisor 型(本节)和容器型(下一节)。

之所以先讲 Hypervisor 型,是因为它是云计算最早、最主流的做法,也是前面所有【虚拟机】三个字的准确含义:一个 Hypervisor + 若干台各自带操作系统的客户机。

一、先把三个名词分清

教材在这一节的副题里点名了三个词,它们是同一件事的三个方面:

名词 是什么 类比
Hypervisor 夹在硬件和虚拟机之间的那层调度软件 大楼的物业
主机操作系统(Host OS) 物理机上先装的那套操作系统 楼里原有的住户
客户机操作系统(Guest OS) 每台虚拟机里跑的那套操作系统 每户人家自己的生活方式

用一句话串起来:Hypervisor 负责把硬件切给各台客户机用;而【主机操作系统】这个名字,只有在【这台物理机上本来就装了一套系统】时才有意义。

这就是两类 Hypervisor 的分界:

二、Type 1 与 Type 2

项目 Type 1(裸金属型) Type 2(宿主型)
谁在硬件之上 Hypervisor 直接管硬件 先有主机 OS,再装 Hypervisor
主机操作系统 不需要 必须有(Windows/macOS/Linux)
客户机操作系统 各自独立,互不影响 各自独立,但共享主机 OS 的调度
性能损耗 很低(约 2~5%) 较高(约 10~20%)
典型产品 VMware ESXi、KVM、Xen VirtualBox、VMware Workstation
用在哪 数据中心、公有云 个人电脑上试装、开发测试

为什么性能差这么多:Type 2 里,客户机的一条磁盘读写要这样走一趟:

客户机 → Hypervisor → 主机操作系统 → 硬件

而 Type 1 只有两跳:

客户机 → Hypervisor → 硬件

多出来的那一跳,就是损耗的来源。 平时感觉不明显,但同样的硬件跑同样的业务,Type 1 能多带 15%~20% 的负载——在按台数计费的数据中心里,这是一个很大的差别。

顺便说清一个容易混的地方:Type 2 里的【主机操作系统】和【客户机操作系统】是两套不同的系统。你可以在 Windows 上装一个 VirtualBox,里面跑一个 Linux——Windows 是主机,Linux 是客户机。而 Type 1 里没有主机这个概念,所有操作系统都是客户机。

三、动手 Demo:一台机器最多能切几台

看到什么算成功:

==================================================================================================
【Demo 5】Hypervisor 型虚拟化:两层软件,主机 OS 在不在
==================================================================================================
  教材把 Hypervisor 型分成两小类,区别只有一句话:
  【Hypervisor 是直接踩在硬件上,还是先装了主机操作系统】。

  项目              Type 1(裸金属型)        Type 2(宿主型)
  --------------------------------------------------------------------------------------------
  谁在硬件之上      Hypervisor 直接管硬件     先有主机 OS,再装 Hypervisor
  主机操作系统      不需要                    必须有(Windows/macOS/Linux)
  客户机操作系统    各自独立,互不影响        各自独立,但共享主机 OS 的调度
  性能损耗          很低(约 2~5%)           较高(约 10~20%)
  典型产品          VMware ESXi、KVM、Xen     VirtualBox、VMware Workstation
  用在哪            数据中心、公有云          个人电脑上试装、开发测试
  --------------------------------------------------------------------------------------------
  教材里的三个词,对上号就清楚了:
    主机操作系统(Host OS)=先装的那套系统,Type 2 才有
    客户机操作系统(Guest OS)=虚拟机里跑的那套系统
    Hypervisor =夹在硬件和客户机之间的那一层调度软件

  最大能切多少台?以 16 核、128 GB 的主机、每台虚拟机 2 核 4 GB 为例:

    按 CPU 上限 = 16 / 2 = 8 台
    按内存上限 = 128 / 4 = 32 台
    实际可开 = 取小者 = 8 台(内存还剩一大截)

  这条算式在真实运维里天天用:先看哪个资源先耗尽,就是那台主机的瓶颈。

读结果:

30 秒实验

在任意一台电脑上,打开任务管理器(Windows)或活动监视器(macOS),做三件事:

  1. 记下 CPU 核数和内存总数。
  2. 按每台虚拟机 2 核 4 GB 算一下能开几台。
  3. 看一眼当前实际的 CPU 与内存占用率。

做完这个你会得到两个数字:理论上能开几台、实际上现在用了多少。这两个数字的差距,就是虚拟化能给你的空间——它也正是第一节 Demo 里 12% 那个利用率数字的来源。

常见误区

  1. 错误:Type 1 和 Type 2 的差别只是【快一点慢一点】。——纠正:差别是【能不能用于生产】。一台物理机通常要跑十几到几十台虚拟机,Type 2 那 10%~20% 的损耗乘上去,相当于白白少了几台机器的容量;更关键的是,主机操作系统本身成了单点——它要打补丁、要重启、会蓝屏,而 Type 1 的 Hypervisor 是一个精简得多的东西,重启时间以秒计。所以两类不是好和更好的关系,是用在不同地方的两样东西。

  2. 错误:客户机操作系统和主机操作系统是同一套系统的不同叫法。——纠正:是两套独立的系统。主机是物理机上先装的那套(只有 Type 2 有),客户机是每台虚拟机里各自装的那套。同一个物理机上,不同的客户机可以装不同的系统——一台 Windows、一台 Linux——这正是虚拟机相比容器的优势之一(下一节会对照)。

  3. 错误:性能损耗只在 CPU 上。——纠正:IO 上的损耗往往更明显。磁盘和网络的每一次读写都要经过 Hypervisor 转换,所以虚拟机的磁盘性能对【存储怎么接】非常敏感(本地盘、iSCSI、光纤通道差别很大)。这也是为什么生产环境要用共享存储并配多路径(4-14)——不只是为了能迁移,也是为了性能稳定。

  4. 错误:Hypervisor 是硬件的一部分,买了一台机器就有。——纠正:它是要安装的软件。同一台机器,装 ESXi 是 Type 1 虚拟化主机,装 Windows 就只是一台普通服务器。虚拟化的能力来自你装了什么,不是来自硬件本身——硬件只提供前提(CPU 的虚拟化指令,见 4-3 的 30 秒实验)。

自测三问(点开对答案) 1. 为什么数据中心几乎只用 Type 1,而个人电脑上试装几乎只用 Type 2? —— 因为**两边的约束正好相反**。数据中心约束的是【每台物理机能带多少负载】,一切损耗都要被放大几十倍,而且**不能让一个可有可无的操作系统成为整台机器的单点**——所以宁可用专门为这活做的 Type 1。个人电脑约束的是【我现在就有 Windows,想在上面顺手试一下】——为此重装一套裸金属系统不现实,**损失的 10% 性能也无所谓**。所以这两类的分工,是由使用场景决定的。 2. 【按核数先耗尽】说明这台机器该配什么业务? —— **配那些【核数需求高、内存需求低】的业务**——比如大量并发的轻量计算、无状态的应用服务器。反过来,如果是内存先耗尽,就适合配【吃内存、不怎么算】的业务,比如缓存、内存数据库。**这条判断的价值在于:同一批机器,配对了业务就能多跑几台,配错了就是资源的一半在闲着。** 3. 为什么说主机操作系统成为单点,是 Type 2 不能用于生产的原因? —— 因为**它把【整个虚拟化平台】的可用性绑在了一个通用操作系统上**。这个系统要打补丁、要重启、会被其他程序影响、可能有驱动冲突——**任何一次重启,上面所有虚拟机一起停**。而 Type 1 的 Hypervisor 是一个功能单一的精简系统,**攻击面小、重启快、不容易被别的东西影响**。所以这条不是性能问题,是**故障模型的问题**。

相关笔记