⚠ 转载请注明出处:作者:ZobinHuang,更新日期:Mar.24 2021
本作品由 ZobinHuang 采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可,在进行使用或分享前请查看权限要求。若发现侵权行为,会采取法律手段维护作者正当合法权益,谢谢配合。
1. 动机:虚拟化的历史
虚拟化技术 (Virtualization) 出现的根源是因为当今x86架构服务器是为 在某一特定时间点在单一操作系统下运行单一应用程序 而设计的,这导致数据中心需要部署很多台服务器来满足业务需求,但是每一台的资源利用率都十分寒酸,可能只有30%,这是很严重的成本的浪费。因此虚拟化技术出现了。虚拟化技术使得在一台物理服务器上能够运行多个操作系统和应用。
在这里可以再补充一点历史,其实虚拟化技术的概念在上个世纪60年代就被人提出来了,当下虚拟化技术的技术核心 Hypervisor 在当时就曾被部署,目的是为了使多个用户能同时访问计算机来运行批处理业务。但是后来,其他的 多用户/单操作系统 的方案被提出,这些方案已经被我们所熟知:以UNIX,Linux为代表的多用户分时操作系统成功的实现了在一个操作系统上对多个用户的隔离。此时,虚拟化技术仍是十分小众的。
虚拟化迎来发展和被重视是这么一个故事:90年代前,大多数企业都是购置自己的物理服务器机子和单家供应商的IT堆栈 (i.e. 操作系统等底层支持)。这些企业的 Legacy Application (遗留应用程序,指的是企业已经投资并维护了一段时间的应用程序,这些应用程序最大的挑战就是使用的技术可能随时会过时) 都是在这些IT栈上开发起来的,因此它们并不被允许被运行在其它供应商的IT堆栈下。然后问题来了,随着发展,这些企业会换置更加省钱,效率更高的来自多个厂商的服务器、操作系统和应用程序,此时最大的问题就是每台服务器就只能运行 一个 某一供应商的IT堆栈,因此一台服务器只能运行在一家特定供应商的IT堆栈上开发的应用程序,这将导致服务器的资源利用率严重不足,成本会十分高昂,这其实是两个问题:(a) 企业无法立刻放弃投资已久的 Legacy Application 跑去在新环境下重构;(b) 服务器的资源利用率实在是太低了 (e.g. 30%左右)。虚拟化技术天然地就可以解决这两个问题,它可以帮助将服务器进行分区,允许在服务器上运行多个操作系统,然后在各个操作系统上运行各自的 Legacy Application,从而降低了采购、配置、散热和维护相关的成本。因此自从2000年以来,虚拟化技术就被广泛重视和应用,并为后来云计算的发展奠定了基础。
2. 虚拟化如何工作
虚拟化的原理是利用一个叫 Hypervisor 的软件隔离物理资源和虚拟环境,如上图所示。Hypervisor的实现有两种情况:(a) 可以在 Base OS 的顶层实现,比如在 VMware 下创建多个虚拟机就是这种情况,VMware 其实就是一个 Hypervisor;(b) 可以直接在硬件上实现,即没有 Base OS,这是大多数企业所选择的方案。
在虚拟化的系统中,用户直接与虚拟化环境进行交互,在上面创建应用程序等。当虚拟环境在运行某一程序时需要从物理系统上申请某一系统资源时,它会发出相应的指令,Hypervisor 会将相应的指令转发给物理系统并且将这些变化缓存下来。这样的过程是 native-speed 的,并不会导致过多的额外时延 (Red Hat声称),尤其是使用KVM (Kernel-based Virtual Machine)时。
在 Hypervisor 上运行的虚拟环境是以一个单一的数据文件的格式存在的,这使得他们很容易的能在保持工作内容不变的情况下在多台电脑之间迁移。
3. 广义虚拟化的类型
在平时的阅读中,我们可能会碰到各种各样的虚拟化,我们上面讲述的都是狭义的最基本虚拟化,即下面要讲到的第一类虚拟化。除此之外,在狭义虚拟化出现之后,人们开始发现其他很多资源也都可以进行虚拟化,也可以说是狭义虚拟化催生了其他虚拟化的发展。下面,我们简单理清一下广义虚拟化中的一些重要种类的概念,后面有时间会对必要的部分做拓展整理。
(1) 操作系统虚拟化/硬件虚拟化/服务器虚拟化
这类虚拟化是最常见的虚拟化类型,也就是我们日常所称的虚拟机,即狭义的虚拟化,因此名字在各个厂商提供的文档里也是千奇百怪。基本的工作方式上面已经阐述清楚了,不再进行赘述。
(2) 网络虚拟化
当我们在物理机器上运行多个虚拟机实例后,自然就会遇到这些虚拟机之间如何进行组网和网络通信的问题,这就是网络虚拟化所解决的问题 —— 通过运行某种软件来实现虚拟机之间的网络流量按照管理员设定的规则进行转发,实现在传统的物理机网络中所运行的网络功能。有了网络虚拟化后,还方便了数据中心内部自己定义自己的网络规则,而不需要像传统物理网络一样受限。因此网络虚拟化也是虚拟化数据中心不可缺少的技术之一。
这里还有必要区分三个概念:网络虚拟化 (NV, Network Virtualization),网络功能虚拟化 (NFV, Network Function Virtualization) 和 软件定义网络 (SDN, Software Define Network)。NV我们上面已经解释过了,其本质实际上是基于现有的物理网络连接,通过隧道技术建立虚拟网络域之间的连接,是在干 建立虚拟网络连接 这件事;而 NFV 是在 NF 的基础上,即 在虚拟网络连接的基础上,实现网络中的各种功能,如 IDPS(入侵检测和防御系统),防火墙,负载均衡等,主要是四层到七层的功能。NFV 是以虚拟机的形式存在的,其实很好理解,因为在真实的物理网络中,这些网络功能原本也是使用真实的机器来实现的。而至于 SDN,上文提到的 NV 和 NFV,都是玩 VM 之间的网络,都是在现有的物理网络上的软件,因此可以在现有的网络上运行。但是 SDN 是一种 将 数据面 和 控制面 解耦合以节约网络带宽 的新网络定义,大白话就是在传统的网络中,像是 路由控制、heartbeat等控制面的东西 和 应用数据等数据面的东西 是混在一起传输的,这导致了控制面占用了原本可用于数据面的带宽,对数据中心网络性能影响很大,因此就出现了 SDN 这种新型网络概念,把控制面的东西和数据面的东西分开,把网络分为 SDN交换机 和 SDN控制器 两种东西,前者负责接受来自后者的转发规则以及根据转发规则转发数据面流量,后者负责控制整个网络的转发规则。因此,SDN 是没有办法直接运行在现有网络架构上的。NV,NFV,SDN这三个概念经常容易搞混,在这里进行了说明。
(n) 剩下的用到了再补充
附录:参考源
- https://www.vmware.com/cn/solutions/virtualization.html, VMware: 虚拟化
- VMware:虚拟化背景知识 Slide
- https://www.redhat.com/en/topics/virtualization/what-is-virtualization, Red Hat: What is virtualization?