一文带你了解虚拟化、虚拟机、Docker及裸金属服务器

本文主要介绍虚拟化、虚拟机、Docker与常见的虚拟化技术的区别,以及什么是裸金属。

什么是虚拟化?

借助虚拟化技术,用户能以单个物理硬件系统为基础创建多个模拟环境或专用资源。称为“Hypervisor” (虚拟机监控程序)的软件可直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,即虚拟机(VM)。虚拟机监控程序能够将计算机资源与硬件分离并适当分配资源,这一功能对虚拟机十分重要。虚拟化可以帮助您充分利用先前所做的投资。

配备了虚拟机监控程序的物理硬件叫做”主机”,而使用其资源的虚拟机则被称为虚拟客户机。这些虚拟客户机将计算资源(如 CPU、内存和存储器)视为一组可进行重新分配的资源。操作员可以控制 CPU、内存、存储器和其他资源的虚拟实例,以便虚拟客户机能在需要时收到所需资源。

通过虚拟化可以实现什么目标?

网络功能虚拟化

可以从一个原始网络创建多个隔离的虚拟网络。

服务器虚拟化

一台服务器可以充当几台甚至几百台服务器的角色。

操作系统虚拟化

一台电脑可以运行多个不同的操作系统。

虚拟机技术

虚拟机技术是虚拟化技术的一种

虚拟机(Virtual Machine)技术,其实就是指在现有硬件的操作系统上,能够模拟一个计算机系统的技术。而模拟一个计算机系统,最简单的办法,其实不能算是虚拟机技术,而是一个模拟器(Emulator)。

解释型虚拟机

要模拟一个计算机系统,最简单的办法,就是兼容这个计算机系统的指令集。我们可以开发一个应用程序,跑在我们的操作系统上。这个应用程序呢,可以识别我们想要模拟的、计算机系统的程序格式和指令,然后一条条去解释执行。

在这个过程中,我们把原先的操作系统叫作宿主机(Host),把能够有能力去模拟指令执行的软件,叫作模拟器(Emulator),而实际运行在模拟器上被“虚拟”出来的系统呢,我们叫客户机(Guest VM)。

这个方式,其实和运行 Java 程序的 Java 虚拟机很像。只不过,Java 虚拟机运行的是 Java 自己定义发明的中间代码,而不是一个特定的计算机系统的指令。

这种解释执行另一个系统的方式,有没有真实的应用案例呢?当然是有的,如果你是一个 Android 开发人员,你在开发机上跑的 Android 模拟器,其实就是这种方式。如果你喜欢玩一些老游戏,可以注意研究一下,很多能在 Windows 下运行的游戏机模拟器,用的也是类似的方式。

这种解释执行方式的最大的优势就是,模拟的系统可以跨硬件。比如,Android 手机用的 CPU 是 ARM 的,而我们的开发机用的是 Intel X86 的,两边的 CPU 指令集都不一样,但是一样可以正常运行。如果你想玩的街机游戏,里面的硬件早就已经停产了,那你自然只能选择 MAME 这样的模拟器。

Type-1 和 Type-2:虚拟机的性能提升

为了在现有的物理服务器的硬件和操作系统上,去跑一个完整的、不需要做任何修改的客户机操作系统(Guest OS),加入了一个中间层。在虚拟机技术里面,这个中间层就叫作虚拟机监视器,英文叫 VMM(Virtual Machine Manager)或者 Hypervisor。


我们先来看 Type-2 类型的虚拟机。在 Type-2 虚拟机里,我们上面说的虚拟机监视器好像一个运行在操作系统上的软件。你的客户机的操作系统呢,把最终到硬件的所有指令,都发送给虚拟机监视器。而虚拟机监视器,又会把这些指令再交给宿主机的操作系统去执行。Type-2 型的虚拟机,更多是用在我们日常的个人电脑里,而不是用在数据中心里。

在数据中心里面用的虚拟机,我们通常叫作 Type-1 型的虚拟机。这个时候,客户机的指令交给虚拟机监视器之后呢,不再需要通过宿主机的操作系统,才能调用硬件,而是可以直接由虚拟机监视器去调用硬件。

另外,在数据中心里面,我们并不需要在 Intel x86 上面去跑一个 ARM 的程序,而是直接在 x86 上虚拟一个 x86 硬件的计算机和操作系统。所以,我们的指令不需要做什么翻译工作,可以直接往下传递执行就好了,所以指令的执行效率也会很高。

所以,在 Type-1 型的虚拟机里,我们的虚拟机监视器其实并不是一个操作系统之上的应用层程序,而是一个嵌入在操作系统内核里面的一部分。无论是 KVM、XEN 还是微软自家的 Hyper-V,其实都是系统级的程序。

Docker

虽然,Type-1 型的虚拟机看起来已经没有什么硬件损耗。但是,这里面还是有一个浪费的资源。在我们实际的物理机上,我们可能同时运行了多个的虚拟机,而这每一个虚拟机,都运行了一个属于自己的单独的操作系统。

多运行一个操作系统,意味着我们要多消耗一些资源在 CPU、内存乃至磁盘空间上。那我们能不能不要多运行的这个操作系统呢?

其实是可以的。因为我们想要的未必是一个完整的、独立的、全虚拟化的虚拟机。我们很多时候想要租用的不是“独立服务器”,而是独立的计算资源。在服务器领域,我们开发的程序都是跑在 Linux 上的。其实我们并不需要一个独立的操作系统,只要一个能够进行资源和环境隔离的“独立空间”就好了。那么,能够满足这个需求的解决方案,就是过去几年特别火热的 Docker 技术。使用 Docker 来搭建微服务,可以说是过去两年大型互联网公司的必经之路了。

图片

不过严格来说,Docker 并不能算是一种虚拟机技术,而只能算是一种资源隔离的技术而已。

裸金属服务器

裸金属全称为裸金属服务器(Bare Metal Server)之所以有这么个奇怪的名字,主要是为了和虚拟化服务器划清界限。云计算的一大特点,就是从买到租,用户向云服务提供商租用计算资源。而这些租用的计算资源,大部分都不是物理资源,而是借助虚拟化技术产生的虚拟资源。

没错,这个“大部分”,就是意味着有特例。而裸金属服务器,就是其中一个典型特例。

那为什么在全面云化的时代背景下,还需要提供物理服务器呢?

虚拟化并不是完美无缺的。它有两个无法回避的缺陷。

首先第一点,是性能损失。这一点可以参考上文的虚拟化技术,就可以知道不管是Type1型还是Type2型虚拟化,都会有一定的性能损耗。对于一些性能要求高的业务(例如高性能运算),虚拟化会带来性能延迟。如果发生密集的I/O(输入/输出)操作,也会存在性能损失。

第二点,就是嘈杂邻居效应。

传统计算是买房子,独栋别墅,自己住很嗨皮,但是价格贵,而且不灵活,不好换房。

云计算(虚拟化)是租房子,一栋大楼,住了很多人(多租户)。虽然每个人是独立的房间,但是,隔壁如果开party,你还是会听到噪音。晚高峰,大家都用水洗澡,你的水肯定还是会变小。

也就是说,虚拟化虽然承诺了资源配额,但当其它租户突发高负荷的时候,你的使用体验还是会受到影响。对于一些对性能和稳定性要求很高的应用,这一点是无法容忍的。

除此之外,虚拟化还有其它一些缺点,例如:有一些硬件设备不支持虚拟化,还有一些硬件新功能(例如CPU的新特性)在虚拟化下面用不了,这些可能都是让用户很不爽的事情。

综上所述,对于“VIP用户”来说,虚拟化并不完美,无法满足其需求。于是,就有了裸金属服务器。

裸金属服务器,又不仅限于物理服务器,它是物理服务器和云服务的结合。

“裸金属”,意味它不包括相应的操作系统和软件,这个是客户后期自选配置的。大部分云服务提供商的裸金属服务器产品,不提供本地硬盘(可以支持),主要提供CPU和内存。

裸金属服务器依然是租。云服务提供商租给你一个专属的物理服务器,你是唯一的租户。

图片

裸金属服务器本身也不是和虚拟化完全水火不容。现在部分云服务提供商的裸金属服务器产品,都兼容各种Hypervisor平台(管理物理资源,构建虚拟化的底层平台。例如VMware、KVM、Xen、Virtual Box,都属于Hypervisor。详情可以看这里:链接),也就是说,也支持虚拟化。

某云服务提供商还搞出了“弹性”裸金属服务器,自研的虚拟化技术,可以解决前面所说的虚拟化性能开销问题,可以具备物理机级别的完整处理器特性,感觉还是蛮厉害的。

参考文章

了解虚拟化

什么是裸金属服务器

深入浅出计算机组成原理–理解虚拟机:你在云上拿到的计算机是什么样的?

如果你觉得本文对你有帮助,欢迎打赏