什么是 SSD VPS?闪存存储与性能解析
SSD VPS 使用闪存而非机械硬盘,关键差异在 IOPS 和延迟。本文解释 SATA SSD、NVMe 与 HDD 的额定性能,并列出购买前应确认的三项存储信息。
什么是 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:四个术语对应四个不同层次
买家容易混淆这些术语,因为每个术语描述的都是系统的不同部分。
- SSD 是存储介质。它表示数据存储在 NAND 闪存芯片上,而不是磁性盘片上。
- SATA 是一种接口,诞生于机械硬盘时代。其最高速率为 6 Gbit/s,实际吞吐量约为 550 MB/s,命令队列可容纳 32 个待处理命令。
- NVMe(non-volatile memory express)是一种专为闪存设计的协议。它支持多个队列,每个队列可容纳数千个命令,因此多个 CPU 核心可以同时与硬盘通信,而不必共享一个狭窄的队列。
- PCIe(peripheral component interconnect express)是 NVMe 运行其上的总线,与显卡所插入的通道属于同一类。
因此,SATA SSD 和 NVMe SSD 都将数据存储在闪存上。两者的区别在于使用的接口不同。SATA SSD 仍然比任何硬盘快得多,但其 32 个命令的队列限制了可表达的并行工作量,而并行工作正是闪存擅长的场景。是否值得购买哪一种取决于您的工作负载,NVMe 与 SATA SSD 的选择会对此进行详细分析。
本地闪存还是网络附加存储?
这两个完全不同的方案,通常使用同一个名称销售。
本地存储是指闪存盘位于 VPS 所在的同一台物理主机内。请求通过单台机器内部的 PCIe 传输后立即返回,因此延迟可以保持在几十微秒。
网络附加存储是指虚拟磁盘位于独立的存储集群上,通常使用 Ceph 或 SAN(storage area network,存储区域网络),每次读写都必须通过网络访问存储。提供商通常将其称为“云块存储”或“弹性卷”。闪存是真实存在的。网络传输也是真实存在的,并且会增加到每一次操作中,因此延迟通常为几百微秒的高位或几毫秒,而不是几十微秒。
两者都不是错误的选择。网络存储可以在主机故障后继续使用,因为数据从未存储在该主机上:提供商可以在其他硬件上启动您的服务器,磁盘也会随之挂载。Local NVMe 速度更快,但绑定到一台物理机器,因此该机器发生硬件故障时,就必须从备份恢复。请确认方案使用的是哪一种。几乎没人会问。
真实服务器上的实际差异
服务器工作主要是少量随机读写,而不是长距离顺序传输。因此,宣传文案中的 MB/s 数值是页面上参考价值最低的指标。
- 数据库提交。 承诺持久性的数据库在事务提交时调用
fsync,然后等待驱动器确认数据确实已存储。在硬盘上,这个等待时间以毫秒计,会将小型数据库的处理能力限制在每秒数百次提交以内。在闪存上,相同的等待时间只有不到 1 毫秒。无论运行 PostgreSQL、MySQL,还是将 SQLite 用作生产数据库,差距都会在这里最明显。 - 软件包安装。
apt install会解压数千个小文件,并在处理过程中将它们同步到磁盘。这些操作几乎都不是顺序操作,因此性能受 IOPS 限制。 - 容器镜像拉取。
docker pull通过网络获取压缩层,然后将其解压为数千个小文件。下载受网络限制。解压受磁盘限制;在速度较慢的卷上,解压才是需要等待的部分。 - 启动和重启。 启动过程会读取内核和 initramfs,然后读取散布在整个卷上的数百个小型单元文件和共享库。
这些操作都不是大块顺序读取。一个能够以 500 MB/s 传输数据、但只能提供 3,000 IOPS 的卷,在执行 docker compose pull 时仍会感觉很慢,因为等待时间是按文件计算的,而不是按兆字节计算的。
定价页面上的“SSD 云主机”几乎说明不了任何问题
这个词只描述了存储介质,仅此而已。它没有说明硬盘使用的接口,也没有说明硬盘是否与您的服务器位于同一台机器上。此外,它没有说明您的套餐允许达到的性能上限。
这个上限最重要,但提供商通常最少宣传。由于一台主机要服务多个客户,提供商会限制每个卷的 IOPS 和吞吐量,避免不受限制的邻居占用全部资源,使其他客户无法正常使用。在具备数十万 IOPS 能力的硬件上,将每个卷限制为几千 IOPS 很常见,也属于正常且透明的做法,但套餐描述中通常看不到这些信息。两个套餐都可能标注“SSD”,但其中一个使用本地 NVMe 且没有每卷限制,另一个使用共享集群卷,并限制为 3,000 IOPS。
限制通常有两种形式。持续限制是固定上限,性能不会超过该上限。突发限制则提供较低的基准性能,并通过 credits 允许您在一段时间内超过基准;卷处于空闲状态时,credits 会恢复。突发限制在 5 分钟测试中表现可能很好,但在数据库导入或大型恢复任务进行到一半时,性能可能降回基准水平。如果提供商给出一个很大的数值,请询问您可以持续保持该性能多长时间。
检查 VPS 实际提供的资源
在 guest 内部,您只能看到 hypervisor 告知 guest 的信息。
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational将 vda 替换为 lsblk 为磁盘打印出的设备名称。当内核获知该设备为非旋转设备时,ROTA 和 rotational 文件会读取 0;当内核获知情况相反时,会读取 1。虚拟磁盘根据 hypervisor 公布的信息设置此标志,因此它描述的是虚拟设备,而不是底层物理硬件。对于 vda 这类 virtio 磁盘,MODEL 通常为空;对于模拟 SATA 控制器,MODEL 通常是 QEMU HARDDISK 之类的通用字符串。guest 无法查看主机的磁盘阵列,也不应将其视为可见信息。
因此,应将此标志仅作为提示,并对其余指标进行测量。使用 fio 对卷上的文件运行随机 4k 测试,队列深度应设置为应用实际使用的值;测试时间也应足够长,以消耗所有突发性能额度。正确测试 VPS 性能介绍了 fio 命令,以及会产生虚高结果的常见错误。
购买前应向服务提供商询问的 3 个问题
- 存储是本地连接到虚拟机管理程序,还是通过网络连接? 这个答案决定延迟下限,也决定物理主机发生故障时数据会如何处理。能够明确回答这一点的服务提供商,说明其确实考虑过这个问题。
- 我的卷的 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 更差吗?
网络存储的单次操作速度更慢,而且故障方式不同。每次读取和写入都要增加网络往返时间,因此延迟更高,即使两者都使用闪存。作为交换,您的数据不会存放在单台物理主机上,因此主机故障不会连带导致该卷不可用,服务商也更容易执行快照和实时迁移。如果数据库对延迟敏感,请选择本地闪存。如果卷的数据持久可用性比微秒级延迟更重要,请选择网络存储。