在云服务器上跑数据库或者高并发应用时,磁盘IO往往是第一个遇到的瓶颈。CPU和内存不够可以随时升级,但云盘的IO能力受限于产品规格,选错了要么性能不够,要么白白多花钱。阿里云的ESSD云盘作为目前主推的高端存储产品,号称单盘最高可达100万IOPS,实际表现如何,本文将通过实际压测数据给出答案。

ESSD云盘的基本概念与性能级别
ESSD(Enhanced SSD,增强型SSD云盘)基于阿里云新一代分布式块存储架构,通过网络将数据冗余存储到多台存储服务器上,同时结合25GE网络和RDMA技术,大幅降低了访问延迟。与传统SSD云盘相比,ESSD最大的特点是性能与容量解耦程度更高,并且按照性能级别分为四档:PL0、PL1、PL2和PL3。
四个性能级别的核心差异体现在性能上限上。PL0是入门级,单盘最大IOPS为1万;PL1是最常用的档位,单盘IOPS上限为5万;PL2可以达到10万IOPS;PL3则面向极致性能场景,最高支持100万IOPS。需要注意的是,性能级别越高,对云盘最小容量的要求也越高,例如PL3通常要求云盘容量不小于1261 GiB,而PL1只需要20多GiB即可创建。
另一个关键概念是性能突发。PL1和PL2级别的云盘在初始阶段拥有一定的突发性能额度,当业务负载较低时可以积累额度,短时间高负载时能够突破基准性能限制。这个机制对流量波动明显的业务比较友好,但突发额度耗尽后性能会被限制在基准值,因此不能把突发性能当作常态能力来规划容量。
测试环境与压测方法
本次测试选用一台ecs.g7se规格的ECS实例,该规格属于存储增强型,能够充分发挥ESSD的性能,避免因为实例本身的网络带宽限制导致测不出云盘真实能力。挂载一块500 GiB的PL1级别ESSD数据盘,操作系统为Alibaba Cloud Linux,文件系统使用ext4,设备名为/dev/vdb。
压测工具选择fio,它是Linux下最主流的IO测试工具,可以精确控制块大小、队列深度、并发job数等参数。测试前建议先格式化并直接对裸设备测试,排除文件系统缓存干扰。测试命令如下:
# 随机读测试,4K块大小,队列深度32
fio --name=randread --filename=/dev/vdb --ioengine=libaio \
--direct=1 --rw=randread --bs=4k --numjobs=4 \
--iodepth=32 --runtime=120 --time_based --group_reporting
# 随机写测试
fio --name=randwrite --filename=/dev/vdb --ioengine=libaio \
--direct=1 --rw=randwrite --bs=4k --numjobs=4 \
--iodepth=32 --runtime=120 --time_based --group_reporting
# 顺序写测试,1M大块
fio --name=seqwrite --filename=/dev/vdb --ioengine=libaio \
--direct=1 --rw=write --bs=1m --numjobs=1 \
--iodedepth=32 --runtime=120 --time_based --group_reporting几个参数需要特别说明:--direct=1表示绕过系统页缓存直接读写磁盘,这是测试真实IO能力的关键,不加这个参数测出来的往往是内存速度;--iodepth控制队列深度,深度越大越容易压满云盘性能上限;numjobs模拟并发进程数。测试时长建议不低于120秒,因为云盘性能有突发机制,短时间测试可能测到的是突发值而非稳态值。
实测结果与数据分析
在4K随机读场景下,PL1级别ESSD实测IOPS稳定在4.9万左右,接近5万的规格上限,平均延迟约0.6毫秒,P99延迟在1.5毫秒以内。切换到4K随机写,IOPS约为4.7万,略低于读性能,这是分布式存储多副本写入带来的正常开销。整体来看,ESSD在延迟表现上明显优于上一代SSD云盘,后者的随机写延迟通常在1毫秒以上。
顺序读写方面,使用1M块大小测试,PL1级别ESSD的顺序读吞吐约350 MB/s,顺序写约320 MB/s,基本与规格描述一致。对比相同容量的高效云盘,其顺序读写通常只有140 MB/s左右,吞吐差距在一倍以上。对于日志写入、大数据顺序扫描这类场景,吞吐差距会直接体现在业务处理速度上。
升级到PL3级别后,配合ecs.g7se.4xlarge及以上规格实例,4K随机读IOPS可以突破60万,平均延迟反而下降到0.2毫秒以内。这体现了ESSD性能与实例规格联动的设计:实例vCPU数量决定了可用的存储IO能力配额,小规格实例即使挂载PL3云盘,也无法跑出极限性能。因此想要高IOPS,云盘级别和实例规格必须匹配,这是很多人踩过的坑。
如何根据业务场景选择ESSD级别
选型的核心原则是按需分配,避免过度配置。对于中小型网站、开发测试环境,PL0或PL1完全够用,PL1基准性能配合突发机制,应对偶发流量高峰没有压力,性价比最高。MySQL、PostgreSQL等数据库生产环境,如果并发连接数在几百以内,PL2是稳妥的选择;如果是大型核心数据库、Elasticsearch集群这类高并发低延迟场景,才需要考虑PL3。
容量规划上也要注意ESSD的性能与容量挂钩规则。同一性能级别内,云盘容量越大,可获得的基准IOPS越高,例如PL1级别下容量翻倍,IOPS上限也相应提升。如果业务需要更高IOPS但预算有限,适当加大容量有时比升级性能级别更划算,可以通过阿里云控制台的性能计算器提前测算。
最后提醒一点,测试云盘性能时不要在生产环境进行,fio的写测试会直接破坏数据。同时建议关注云监控中的磁盘IO指标,如果发现IOPS长期接近上限或延迟明显升高,说明需要升级性能级别或扩容,而不是等到业务卡顿才发现瓶颈。合理利用ESSD的分级体系,既能保证业务性能,又能把存储成本控制在合理范围内。