你好,我是何恺铎。

在上一讲中,我带你了解了云虚拟机的大致构架和组成,实际体验了在云上建立第一台虚拟服务器的完整流程,还介绍了在创建过程中,你所需要注意的若干重要选项及其含义。

而在这些选项之中,最重要的恐怕就是虚拟机的规格了,因为它直接决定了虚拟机的计算能力和特点,同时,也会深刻地影响使用成本,是你在选型时需要考虑的重点问题。

很多同学在实际工作中,都会遇到这样的困惑:公司要上云,或者因为业务发展需要采购新的云服务器,但是在查看某云厂商的官网时,发现可选择的虚拟机型号列表很长,有点儿眼花缭乱。

那么,不同种类的虚拟机到底有什么区别呢?在选择时又应该从哪儿入手呢?

今天,我们就来详细聊聊这个话题。

建立对虚拟机配置的多维认知

完整形容一个虚拟机的核心配置和能力,需要从多个角度来入手和描述。弄懂了这些重要维度的含义,你才能够准确理解一个虚拟机的性能预期和使用场景,从而作出正确的型号选择。这里并非只有决定 CPU 核数和内存大小这么简单。那么,主要是哪几个维度呢?

第一个维度,就是虚拟机的“类型”,或者说“系列”。

这是一个非常重要的概念,它是指具有同一类设计目的或性能特点的虚拟机类别。

一般来讲,云厂商会提供通用均衡型、计算密集型、内存优化型、图形计算型等常见的虚拟机类型。这些类型对应着硬件资源的某种合理配比或针对性强化,方便你在面向不同场景时,选择最合适的那个型号。

而 vCPU 数和内存大小(按 GB 计算)的比例,是决定和区分虚拟机类型的重要指征之一。

通用均衡型的比例通常是 1:4,如 2 核 8G,这是一个经典的搭配,可用于建站、应用服务等各种常见负载,比如作为官网和企业应用程序的后端服务器等。如果你对未来工作负载的特征还没有经验和把握,那你也可以先使用通用型实例,等程序运行一段时间后再根据资源占用情况按需调整。

如果 vCPU 和内存比是 1:2 甚至 1:1,那就是计算密集型的范畴,它可以用于进行科学计算、视频编码、代码编译等计算密集型负载。

比例为 1:8 及以上,一般就会被归入内存优化型了,比如 8 核 64G 的搭配,它在数据库、缓存服务、大数据分析等应用场景较为常见。

图形计算型很好理解,就是带有 GPU 能力的虚拟机,一般用于机器学习和深度学习模型的训练和推理。随着 AI 的火热,这类机器也越来越多地出现在各种研发和生产环境中。

**在主流云计算平台上,常常使用字母缩写来表达虚拟机系列。**比如,AWS 的通用型是 M 系列,阿里云的内存优化型为 R 系列,Azure 的计算优化型为 F 系列等。

不同云平台之间使用的字母可能相同,也可能大相径庭,你在记忆时需要小心,不要混淆。在这里,我根据各家 2020 年的最新情况,简单整理了一个表格供你参考:

需要注意的是,上表中还提到了本地存储型,它是指带有高性能或大容量的本地存储的机型。我们在后续讨论云盘的课程中还会提到,这里你先了解一下就可以了。

第二个重要的维度,是虚拟机的“代”(Generation),用来标识这是该系列下第几代的机型。

我们知道,数据中心硬件和虚拟化技术是在不断发展的,云厂商需要不断地将最新的技术和能力推向市场,让你享受到时代进步带来的技术提升。这和我们个人用的笔记本电脑是非常类似的,笔记本厂商也总是在不断地更新设计和配置,以赢得消费者的青睐。所以即便是同一系列的机型,不同的代别之间也会有不小的区别。

具体来讲呢,同类型虚拟机的更新换代,往往首先会带来相应硬件 CPU 的换代提升。随着一代新机型的推出,云厂商一般都会详细说明背后支撑的硬件详细信息。

比如说,AWS 在 2017 年末,在全球发布的新一代 EC2 实例 M5/C5/R5,它们的背后是升级到了 Skylake 架构的 Intel 至强铂金系列处理器,相比前一代采用的 Broadwell 或 Haswell 架构处理器,进步了不小,还支持了可大幅提升矢量和浮点运算能力的 AVX-512 指令集。

再比如,阿里云在 2019 年的云栖大会上,也盛大发布了第六代 ECS,它全线采用了更新一代的 Intel 至强 Cascade Lake 处理器,相较前一代的 Skylake 实例,又在性能、价格优势等各方面有了进一步提升。你可以参考下面给出的截图:

阿里云的第六代 ECS(内存型)型号选择界面

这里你需要特别注意,正是由于虚拟机所采用的物理 CPU 在不断更新,所以云上虚拟机的单核性能未必相同。有时,虽然两个虚拟机的核数一致,但由于底层芯片的架构和频率原因,性能上可能有较大的差别,我们需要注意在不同机型间做好比较和区分。

像微软 Azure,就引入了 Azure Compute Unit(ACU)的概念,来帮助量化不同 CPU 的单核性能。比如其历史较久的通用型 A 系列,它的单核性能基准为 100 单位,而计算型的 F 系列的单核算力则高达 210~250,是 A 系列的两倍还多。

另外,你还应当看到,云虚拟机的换代更新并不仅仅只在 CPU 等硬件配置层面,很多时候也伴随着底层软硬件架构的更新和提升,尤其是虚拟化技术的改进。

前面我提到的 AWS 第 5 代 EC2 实例,正是全面地构建在 AWS 引以为傲的 Nitro System 新一代虚拟化技术栈之上。

Nitro System 的本质,是将许多原来占用宿主机资源的虚拟化管理工作进行了剥离,并将这部分工作负载,通过 Nitro Card 这样的专用硬件进行了硬件化,达到了最大化计算资源利用率的效果。在这一点上,阿里云的神龙架构也采用了类似的做法,与 AWS Nitro 可谓一时瑜亮,有异曲同工之妙。

总的来说,我们消费电子产品时的“买新不买旧”,在云端同样适用。新一代的型号,往往对应着全新的特制底层物理服务器和虚拟化设施,能够给我们提供更高的性能价格比。

所以,有些云平台在选择虚拟机型号时,会贴心地默认隐藏相对过时的型号。当然在个别情况下,比如数据中心的新机型容量不足,或者老型号有促销活动时,你也可以酌情选用之前的型号。

第三个重要的维度,就到了我们所熟知的实例大小(Size),也就是硬件计算资源的规模。

在选定的机器类型和代别下,我们能够自由选择不同的实例大小,以应对不同的计算负载。

如果你只是个人用来实验,那么也许单核或者双核的机器就足够了;如果是要放在大规模的生产环境当中,则可以按需选取高得多的配置,现代云计算已经能够提供多达 128vCPU 的机型了。

在描述实例大小时,业界常常使用 medium、large、xlarge 等字眼来进行命名区分,这样的描述基本已经成为事实标准,包括 AWS、阿里云、腾讯云在内的多家主流厂商都在使用。

我们可以大致这样记忆:标准 large 对应的是 2vCPU 的配备,xlarge 则代表 4 个 vCPU,而更高的配置一般用 n xlarge 来表达,其中 n 与 xlarge 代表的 4vCPU 是乘法关系。比如,8xlarge 就说明这是一台 8*4=32vCPU 的机器。

注意:这里在进入更严谨的配置表达时,我们更多倾向于使用 vCPU 而非核数(Core)来描述虚拟机处理器的数量。因为超线程(HyperThreading)技术的普遍存在,常常一个核心能够虚拟出两个 vCPU 的算力,但也有些处理器不支持超线程,所以 vCPU 是更合适的表达方式,不容易引起混淆和误解。

在某些场景下,你可能还会看到“metal”或者“bare metal”这样的描述规格的字眼,中文称为“裸金属”。它们就是云服务商尽最大可能将物理裸机以云产品方式暴露出来的实例,主要用于一些追求极致性能,或是需要在非虚拟化环境下运行软件的场景。

理解虚拟机命名规则

经过前面的介绍,我们已经了解了决定虚拟机配置的最重要的三个要素,即类型、代别和实例大小。这样,一个完整的虚拟机型号命名就已经呼之欲出了。我们来看最具代表性的 AWS 命名规则(阿里云采用的也是非常类似的格式):

这其实就是利用上述的各维度,按照某种顺序排列的一个组合。理解了这一点,当你今后看到某个具体型号的时候,就能够很快地明白该型号命名背后的含义了。

比如,对于 r5.4xlarge 这个型号,我们会很快想到,这首先是一个 R 类型的第 5 代的内存型机器,它应该有 4×4=16 个 vCPU,内存大小则是 16×8=128G(内存型机器的 CPU 内存比一般为 1:8)。这样分解下来,原来看上去比较陌生晦涩的一个字符串,是不是就立刻变得清晰起来了?

当然,并非所有的云都一定是采用类似 AWS 的命名规则,像是微软 Azure,就用了一个略有不同的命名体系,大致可以总结为:

比如“E4 v3”,就代表了微软 Azure 上 4 核 32G 的第三代内存型机器。掌握了 Azure 的格式特征后,你同样能够很快地解读标识的具体含义。

不知道你有没有注意到,在前面的命名公式中,还有一个我们称之为“后缀”的可选部分,在许多的型号命名中都能看到它。这个可选部分呢,它一般是作为型号硬件信息的一个重要补充,这种型号与不带此后缀的标准版本相比,会有一些显著的区别或特点,这也是你需要重点关注的地方。

这里我给你举一些型号后缀的例子吧。

比如,AMD 现在凭借 EPYC 霄龙芯片,也开始在服务器硬件市场攻城拔寨,许多云厂商就专门推出了使用 AMD CPU 的云虚拟机,这些虚拟机往往会使用字母 a 作为后缀。AWS 上的 m5a 型号,就是使用 AMD EPYC 7000 系列服务器 CPU 构建的通用型虚拟机。

再比如,AWS 的 C5n 计算型虚拟机,其中“n”这个后缀表达的是,该规格在网络层面进行了增强,会比同型号标准机型拥有更大的带宽和网络吞吐能力。在阿里云上,表达相同“网络增强”含义的后缀则是“ne”。

有时,为了验证机型配置是否与我们的期望相符,在 Linux 环境下,我们可以使用 lscpu 命令,来了解手中虚拟机的 CPU 信息,并与机器的具体型号名称进行对照。下面的信息,是我在一台 AWS 的 m5a.xlarge 机型上运行的结果,你可以看到芯片提供商 AMD 及双核四线程等关键信息,与机型命名的含义相符:

[ec2-user@ip-xx-yy-zz ~]$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 1
Model name: AMD EPYC 7571
Stepping: 2
CPU MHz: 2379.224
BogoMIPS: 4399.39
Hypervisor vendor: KVM
Virtualization type: full

课堂总结与思考

今天,我们主要探讨了云上虚拟机的类型与规格,相关要点可总结如下:

  1. 云虚拟机的配置规格主要取决于类型、代别、实例大小三个最重要的维度。
  2. 实例所属的类型,决定了虚拟机相应的硬件资源配比与专项能力,分别为不同的场景优化设计。你可以根据实际场景来酌情选用,这样既能满足需求又好控制成本。
  3. 云虚拟机的型号名称一般由类型、代别、实例大小这几项的缩写组合而成,有时还会带有补充后缀。了解了某个云的型号格式后,通过拆分对应,你很容易理解具体型号的含义。

最后,作为今天的交流讨论题,你可以回忆一下,在生产或测试环境中,使用过的最强劲的云端机型。你注意过它是什么系列、什么型号的吗?它主要被用于什么业务场景呢?

欢迎在留言区和我互动,我会第一时间给你反馈。如果觉得有收获,也欢迎你把这篇文章分享给你的朋友。我是何恺铎,感谢阅读,我们下期再见。