与大多数工作负载相比,高写入量应用对存储的压力更大。日志系统、时序数据库、视频采集和事务型平台都会产生持续的写入流量。NVMe SSD 能够提供这些工作负载所需的原始吞吐量,但其底层的 RAID 层决定了您实际能获得多少性能,以及在发生故障时系统能否安然度过。
本文将介绍写入密集型 NVMe 阵列的 RAID 级别选择、耐久度规划和吞吐量设计。
写入场景下 RAID 级别的取舍
并非所有 RAID 级别都能很好地处理大量写入。基于奇偶校验的 RAID 会引入写入放大(write amplification)和延迟惩罚,可能完全抵消 NVMe 的速度优势。
RAID 1 和 RAID 10
镜像以及镜像加条带化能够提供最佳的写入性能和最简单的恢复过程。RAID 10 是高写入量 OLTP(联机事务处理)、消息队列和缓存的默认选择,因为它没有奇偶校验计算带来的性能惩罚。
RAID 5 和 RAID 6
这两个级别以写入性能为代价换取容量效率。每次写入都需要先读取旧数据和旧校验信息、计算新校验信息,然后再将两者写入。对于高写入量的 NVMe 工作负载,由此产生的延迟和写入放大通常超过了容量节省带来的收益。
RAID 0
不带冗余的条带化可以最大化速度和容量,但不提供任何保护。它仅适用于数据丢失可以接受的临时数据,例如临时暂存空间或可以重建的缓存。
耐久度与写入放大
NVMe SSD 的编程/擦除(P/E)次数是有限的,通常以每日全盘写入次数(DWPD)或总写入字节数(TBW)表示。如果不加以注意,高写入量工作负载会很快耗尽这一预算。
- 估算每日写入量,并使 SSD 的耐久度与工作负载相匹配
- 预留备用容量,以减少垃圾回收引起的写入放大
- 监控磨损均衡指标,并在达到阈值之前规划更换
- 避免磁盘写满;接近容量上限时,性能和耐久度都会下降
对于持续的写入密集型负载,耐久度等级更高的企业级硬盘在整个生命周期内的成本,通常低于提前报废更换的消费级硬盘。
高写入工作负载的 RAID 级别对比
| RAID 级别 | 写入性能 | 容错能力 | 最适用场景 |
|---|---|---|---|
| RAID 1 | 良好 | 一块硬盘 | 小型关键卷 |
| RAID 10 | 极佳 | 每个镜像组一块 | OLTP、缓存、队列 |
| RAID 5 | 中等性能损失 | 一块硬盘 | 读密集型或轻写入工作负载 |
| RAID 6 | 较重性能损失 | 两块硬盘 | 归档或大容量阵列 |
| RAID 0 | 最高 | 无 | 仅限临时暂存数据 |
吞吐量与队列深度
NVMe 硬盘提供大量并行队列,使其能够处理数千个并发操作。要真正实现这一吞吐量,RAID 控制器、驱动程序和应用程序都必须支持深度队列。瓶颈可能隐藏在以下位置:
- 将 I/O 串行化的 RAID 控制器固件
- 使用默认队列设置的文件系统
- 逐条提交写入操作的应用程序线程
- 无法跟上中断频率的 CPU 核心
请使用真实的工作负载和队列深度进行测试。浅队列下的综合基准测试很少能反映生产环境中的实际表现。