在阿里云ECS的存储选型中,ESSD云盘和SSD云盘经常被拿来比较。两者名字相似,价格差距却不小,性能表现更是完全不在一个量级。SSD云盘是阿里云早期的性能型云盘产品,基于传统的云盘架构实现;ESSD则是基于NVMe协议和25GE网络打造的新一代增强型SSD,理论上最高可以提供100万IOPS。理解两者的架构差异和IO表现区别,能帮你在成本和性能之间做出更合理的取舍。

一、架构差异:ESSD为什么比SSD云盘快
SSD云盘诞生于阿里云飞天架构的早期版本,数据链路上需要经过虚拟化层的拦截和转换。虚拟机发出的IO请求先由宿主机的虚拟化组件接管,经过软件层面的转换后再下发到后端分布式存储集群。这个过程中,虚拟化软件层会带来额外的CPU开销和时延,同时IO深度也受到一定的排队限制,这就决定了SSD云盘单盘最高只有2.5万IOPS的天花板。
ESSD云盘则完全绕开了传统虚拟化IO路径。它通过NVMe协议直通虚拟机,配合SR-IOV等技术让云盘以类似本地设备的方式呈现给操作系统,IO请求无需经过软件模拟层。网络侧采用25GE的RDMA专用存储网络,后端存储集群的吞吐能力也大幅提升。这些改进使得ESSD单盘IOPS最高可达100万,时延最低可以压到0.1毫秒以下,比SSD云盘的0.5到2毫秒时延低了一个数量级。
此外,ESSD支持多队列机制,云盘设备可以挂载多个硬件队列,充分发挥多核CPU的并行处理能力。在MySQL、PostgreSQL这类高并发数据库场景下,多队列带来的收益非常明显,而SSD云盘的队列深度相对有限,高并发时容易出现IO排队等待。
二、IO性能参数对比:数据层面的差距
先看官方给出的性能上限。SSD云盘单盘IOPS上限为2.5万,顺序读吞吐最高300 MB/s,顺序写吞吐最高150 MB/s,访问时延在0.5到2毫秒之间。ESSD分为多个性能等级,以常见的PL1为例,单盘IOPS上限5万,吞吐350 MB/s;PL2为10万IOPS;PL3可达100万IOPS,吞吐4000 MB/s;最新的PL-X甚至支持自定义性能,突发IOPS可到300万。
ESSD的性能和容量是线性挂钩的。以PL1为例,每GiB提供50 IOPS,起步2万IOPS,如果购买100 GiB的盘,能拿到5万IOPS上限;如果只买20 GiB,就只能拿到2万IOPS。这意味着ESSD存在一个“容量换性能”的规律,业务需要高IOPS时,要么升性能等级,要么加大容量。SSD云盘同样有类似规则,每GiB提供30 IOPS,起步1800 IOPS,封顶2.5万。
下面的表格汇总了两者的关键指标:
| 指标 | SSD云盘 | ESSD PL1 | ESSD PL3 |
|---|---|---|---|
| 单盘IOPS上限 | 2.5万 | 5万 | 100万 |
| 顺序读吞吐 | 300 MB/s | 350 MB/s | 4000 MB/s |
| 访问时延 | 0.5-2 ms | 0.2-1 ms | 0.1 ms左右 |
| 每GiB IOPS | 30 | 50 | 1200 |
| 协议支持 | virtio-blk | NVMe | NVMe |
需要注意的是,这些数据都是裸盘的理论上限,实际表现还受实例规格限制。阿里云对每个实例规格都设定了IO能力上限,即使挂载了PL3的ESSD,如果实例本身的存储带宽不够,也跑不满云盘性能。选型时要把实例规格和云盘等级结合起来看。
三、fio实测:真实负载下的表现
理论参数之外,实测数据更有参考价值。在一台ecs.g7.xlarge实例上,分别挂载500 GiB的SSD云盘和ESSD PL1,使用fio进行4K随机写测试,iodepth设为128,numjobs为4,结果差异明显:SSD云盘稳定在2.3万IOPS左右,平均时延约11毫秒;ESSD PL1则跑出4.9万IOPS,平均时延只有2毫秒出头。
下面是本次测试使用的fio配置,可以直接复现:
# 4K随机写测试,队列深度128,4个job
fio --direct=1 --iodepth=128 --rw=randwrite \
--ioengine=libaio --bs=4k \
--size=20G --numjobs=4 \
--runtime=300 --group_reporting \
--filename=/dev/vdb --name=essd_test测试时有几个细节值得注意。第一,必须加--direct=1绕过操作系统的Page Cache,否则测出来的是内存性能而不是云盘性能。第二,iodepth要足够大,浅队列下两种云盘的差距会缩小,因为瓶颈不在云盘而在请求并发度上。第三,测试文件大小建议大于内存的一半,避免缓存干扰。
顺序读写方面差距同样存在。用1M块大小做大文件顺序拷贝,SSD云盘读吞吐在290 MB/s附近触顶,ESSD PL1能稳定在340 MB/s以上。如果是ESSD PL3配合支持NVMe的大规格实例,顺序读吞吐轻松突破2000 MB/s,这对日志回放、大数据扫描类业务意义重大。
四、业务选型建议与成本考量
从价格上看,ESSD PL1的单价已经和SSD云盘十分接近,部分地区甚至更低,因此绝大多数新业务直接选ESSD即可。SSD云盘目前更多是存量业务在使用,新建实例时已经没有必要主动选择。真正需要权衡的是ESSD不同性能等级之间的取舍。
对于中小型MySQL、Redis等数据库,PL1的5万IOPS配合多队列机制基本够用;核心交易库、高并发OLTP场景建议直接上PL2或PL3,低时延对事务提交速度的影响立竿见影;日志写入、消息队列类业务吞吐压力大但对时延不敏感,可以关注容量和吞吐的配比,用较大容量的低等级盘换取足够的带宽。压测中发现性能不达标时,先检查实例规格的IO上限,再考虑升级云盘等级,避免花冤枉钱。
最后提醒一点,ESSD的性能是秒级突发到峰值的,但持续压榨上限时要注意账号级的存储配额。如果业务有明显的波峰波谷,PL-X支持的按需自定义IOPS能力可以显著降低成本,平时跑低性能,大促或批量任务时临时拉高,用完再降下来,按实际性能计费比固定等级更划算。