SSD VPS 是什么?闪存存储与 IOPS 详解
SSD VPS 使用闪存而非机械硬盘,优势在于更高 IOPS 和更低延迟。本文解释 SATA SSD、NVMe 与 HDD 的差异,并列出购买前应确认的 3 个问题。
什么是 SSD VPS?
SSD VPS 是一种虚拟专用服务器,其磁盘使用闪存,而不是旋转式硬盘。SSD 是固态硬盘(solid state drive)的缩写,指由 NAND 闪存芯片构成、内部没有活动部件的存储设备。VPS 是虚拟专用服务器(virtual private server)的缩写,指物理主机上相互隔离的一个分区,运行自己的操作系统,并以整台服务器的形式提供给您。两者结合后,这个名称表达的含义很简单:服务器读取数据块时,不需要先移动机械部件。
这就是完整定义。下面的内容介绍这个名称没有说明的部分,因为价格页面上的“SSD hosting”几乎无法说明其背后的存储阵列。
如果您还在了解 VPS 与普通虚拟机的区别,建议先阅读VPS、VM 和 VPC 之间的区别。
为什么主机宣传存储速度,而不是存储容量
方案页面会列出 CPU 核心数、内存、磁盘容量和带宽,然后再用一个完全不是容量单位的词来描述磁盘。主机这样做,是因为多年前容量就不再是衡量存储的关键指标。决定服务器使用体验的两个指标是 IOPS(每秒输入/输出操作数)和延迟(一次操作返回所需的时间)。
原因在于两者的机械结构不同。硬盘将数据存储在旋转盘片上,并使用安装在活动臂上的磁头读取数据。要访问盘片上其他位置的块,活动臂必须寻道,然后磁盘还必须旋转,直到目标扇区转到磁头下方。磁盘转速为 7200 转/分钟时,平均半圈约需 4 ms,寻道还会增加数毫秒。闪存没有活动臂和盘片,因此读取是电气查询,可在几十微秒内返回。
The data behind this chart
[
{
"device": "7200 rpm hard disk",
"random_read_iops": "125",
"read_latency_ms": 8
},
{
"device": "SATA SSD",
"random_read_iops": "90,000",
"read_latency_ms": 0.15
},
{
"device": "NVMe SSD",
"random_read_iops": "600,000",
"read_latency_ms": 0.08
}
]7200 rpm 硬盘的额定性能约为每秒 125 次随机 4k 读取,每次读取约需 8 ms 才能返回。NVMe 驱动器的额定性能接近每秒 600,000 次相同的读取,每次约需 0.08 ms。两者之间的 SATA SSD 额定性能接近 90,000。应将这些数值理解为数量级,而不是百分比提升。
关于这些数据,有两点需要注意。这些是各类完整驱动器的公开规格,因此属于制造商规格表中的数据,不是在 VPS 上测得的结果。并且,您永远不会获得完整的驱动器:您的卷只是某个设备的一部分,或某个阵列的一部分,并且同一硬件上还运行着其他客户的卷。
这两列回答的是不同的问题,因此应结合阅读。延迟表示一次操作需要等待多长时间。IOPS 表示驱动器可以同时处理多少次操作。闪存通过并行处理实现较高的 IOPS,因为许多闪存芯片可以同时处理许多请求,而较深的队列会持续为它们提供工作。单线程程序如果每次只发出一次读取请求,等待其完成后再发出下一次请求,就永远无法达到图表中的最高值。它看到的将是延迟列。
SSD、NVMe、SATA 和 PCIe:位于不同层级的 4 个术语
买家容易混淆这些术语,因为每个术语描述的系统部分不同。
- SSD 是存储介质。它表示数据存储在 NAND 闪存芯片上,而不是磁性盘片上。
- SATA 是一种接口,设计于机械磁盘时代。其最高速率为 6 Gbit/s,实际吞吐量约为 550 MB/s,命令队列可容纳 32 个未完成命令。
- NVMe(非易失性内存标准)是专为闪存编写的协议。它支持多个队列,每个队列可容纳数千个命令,因此多个 CPU 核心可以同时与驱动器通信,而不必共享一个狭窄的队列。
- PCIe(外围组件互连高速)是 NVMe 运行所依托的总线,与显卡插入的通道属于同类。
因此,SATA SSD 和 NVMe SSD 都将数据存储在闪存上。两者的区别在于使用的接口不同。SATA SSD 仍然比任何硬盘快得多,但其 32 个命令的队列限制了可表达的并行工作量,而并行工作正是闪存擅长的方面。哪一种产品值得购买取决于您的工作负载,NVMe 与 SATA SSD 的选择会对此进行详细分析。
本地闪存还是网络附加存储?
同一个术语可能指两种完全不同的配置。
本地存储是指闪存驱动器位于 VPS 所在的同一台物理主机内。请求通过一台机器内部的 PCIe 传输后直接返回,因此延迟可以保持在几十微秒。
网络附加存储是指虚拟磁盘位于独立的存储集群上,通常是 Ceph 或 SAN(storage area network),每次读写都必须通过网络访问该存储。提供商通常将其称为“云块存储”或“弹性卷”。闪存本身是真实存在的。网络传输也确实存在,并且会增加到每一次操作中,因此延迟会达到几百微秒的较高范围或几毫秒,而不是几十微秒。
两者都不是错误的选择。网络存储可以在主机故障后继续使用,因为数据从未存储在该主机上:提供商可以在其他硬件上启动您的服务器,磁盘也会随之挂载。本地 NVMe 速度更快,但绑定到一台物理机器,因此该硬件发生故障时,您必须从备份恢复。请确认方案使用哪一种存储。几乎没人会问这个问题。
在真实服务器上的实际差异
服务器工作主要是少量随机读写,而不是长距离顺序传输。因此,宣传材料中的 MB/s 数值是页面上最不实用的指标。
- 数据库提交。 需要保证持久性的数据库在事务提交时调用
fsync,然后等待驱动器确认数据确实已写入。在硬盘上,这个等待时间以毫秒计,会将小型数据库的提交速率限制在每秒几百次以内。在闪存上,同样的等待时间只有不到 1 毫秒。无论运行 PostgreSQL、MySQL,还是将 SQLite 用作生产数据库,差距都在这里最明显。 - 软件包安装。
apt install会解压数千个小文件,并在处理过程中将其同步到磁盘。几乎所有操作都不是顺序操作,因此性能受 IOPS 限制。 - 容器镜像拉取。
docker pull通过网络获取压缩层,然后将其解压为数千个小文件。下载受网络速度限制。解压受磁盘速度限制;在慢速卷上,解压才是需要等待的部分。 - 启动和重启。 启动过程会读取内核和 initramfs,然后读取分散在卷中的数百个小型 unit 文件和共享库。
这些操作都不是大块顺序读取。某个卷即使能以 500 MB/s 的速度传输数据,但只能提供 3,000 IOPS,在执行 docker compose pull 时仍会感觉很慢,因为等待时间按文件计算,而不是按兆字节计算。
为什么定价页面上的“SSD 云托管”几乎说明不了任何问题
这个词只描述存储介质,仅此而已。它没有说明硬盘使用什么接口,也没有说明硬盘是否与服务器位于同一台机器中。它还没有说明您的套餐允许达到的性能上限。
性能上限最重要,但提供商最少宣传。提供商会限制每个卷的 IOPS 和吞吐量,因为一台主机要服务多个客户,不受限制的邻居可能耗尽其他客户的资源。在可达到数十万 IOPS 的硬件上,将每卷限制为几千 IOPS 很常见,也符合实际;但套餐说明中通常不会显示这一点。两个套餐都可能标注“SSD”,但其中一个是没有每卷限制的本地 NVMe,另一个是限制为 3,000 IOPS 的共享集群卷。
限制有两种形式。持续限制是固定上限,不会变化。突发限制会提供较低的基准性能和一定的积分,使您可以在一段时间内超过基准;卷空闲时,积分会补充。突发限制在五分钟测试中表现出色,但在数据库导入或大型还原过程中,性能可能降回基准值。如果提供商报价很高的性能数值,请询问您可以持续使用该数值多长时间。
如何检查 VPS 实际为您提供了什么
在 guest 内部,您只能看到 hypervisor 告知 guest 的信息。
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational将 vda 替换为 lsblk 为磁盘输出的设备名称。当内核获知设备为非旋转设备时,ROTA 和 rotational 文件会读取 0;当内核获知设备为旋转设备时,会读取 1。虚拟磁盘会根据 hypervisor 公布的信息设置该标志,因此它描述的是虚拟设备,而不是下层的物理硬件。对于使用 virtio 的磁盘(例如 vda),MODEL 通常为空;对于仿真的 SATA 控制器,则通常是 QEMU HARDDISK 之类的通用字符串。guest 无法查看主机的磁盘阵列,也不应能查看。
因此,应将该标志视为提示,并测量其余性能。使用 fio 对卷上的文件运行随机 4k 测试,队列深度应与应用实际使用的值一致;测试时间也应足够长,以消耗所有突发性能额度。正确测试 VPS 性能介绍了 fio 命令,以及会产生虚高结果的常见错误。
购买前向提供商询问的三个问题
- 存储是本地连接到 hypervisor,还是通过网络连接? 答案决定延迟下限,也决定物理主机发生故障时数据的处理方式。能够明确回答这一问题的提供商,通常已经认真考虑过相关问题。
- 我的卷的 IOPS 限制是多少? 要求提供具体数值。“无限制”和“企业级”都不是数值。如果确实没有上限,请询问在同一主机上的其他租户进行备份期间,是什么机制阻止其占用整个存储阵列。
- 该限制是持续限制还是突发限制? 如果支持突发,请询问基线值和突发持续时间。您的夜间作业将以基线性能运行,因此规划时应以该数值为依据。
闪存会磨损吗?这是您的问题吗?
闪存单元可承受的写入次数有限,因此存储设备会以 TBW(写入的太字节数)或 DWPD(每日整盘写入次数)公布耐久度评级。存储设备会将写入均匀分散到各个单元,这称为磨损均衡;它还会保留备用块,用于替换失效的单元。在 VPS 上,磨损由服务提供商负责:他们会监控自有存储设备上的 SMART 计数器,并在达到评级上限前更换硬件。真正需要您负责的问题早于闪存就已存在。存储设备不是备份,卷底层的冗余也不是备份,因为它会像复制数据一样完整地复制删除操作。
您实际需要权衡的是每 GB 的价格。闪存的每 GB 成本高于机械硬盘,因此同价位的 SSD 方案通常比硬盘方案提供更小的容量。如果您需要为媒体文件或归档提供大量空间,请保持高速卷较小,并将大容量数据放在更便宜的位置;这也适合将备份保存在服务器之外。如需了解存储成本在整体账单中的位置,请参阅VPS 的实际成本,其中会分解各项费用。
FAQ
SSD VPS 与 NVMe VPS 是同一种产品吗?
所有 NVMe VPS 都是 SSD VPS,因为 NVMe 驱动器使用闪存。反之则不成立。标注为“SSD”的方案可能使用 SATA SSD。SATA SSD 通过为机械磁盘设计的接口连接闪存,具有 32 个命令的队列,速度上限接近 550 MB/s。两者都比硬盘快得多。如果两者之间的差异会影响您的工作负载,请询问提供商该方案使用哪一种,不要仅根据方案名称判断。
SSD VPS 会让我的网站更快吗?
它只会加快磁盘操作。每个请求都执行多次数据库查询的页面会变快,因为这些查询及其提交属于小块随机 I/O。直接从内存或缓存提供的页面在返回过程中不会访问磁盘,因此速度变化很小。在付费升级存储之前,先测量请求的哪个部分较慢。
如何检查我的 VPS 是否确实使用 SSD 存储?
您无法从客户机内部验证物理硬件。lsblk -d -o NAME,ROTA 会显示虚拟设备报告的信息,但该值由 hypervisor 决定,因此其中的 0 只能作为提示,不能作为证明。实际检查方法是进行测量:使用随机 4k 读取负载运行 fio 几分钟,然后查看报告的延迟。个位数毫秒的随机读取延迟通常表示使用了机械磁盘,或网络卷发生拥塞。几十微秒则通常表示使用了本地闪存。
网络附加 SSD 存储比本地 NVMe 更差吗?
它的单次操作速度较慢,故障方式也不同。每次读取和写入都要增加网络往返时间,因此延迟更高,尽管两者都使用闪存。另一方面,您的数据不会存储在单台物理主机上,因此主机故障不会同时导致该卷不可用,提供商也更容易执行快照和实时迁移。对延迟敏感的数据库请选择本地闪存。当卷数据的持续可用性比微秒级延迟更重要时,请选择网络存储。