存储系统设计始终需要在三个参数间进行权衡:容量、吞吐量和IOPS。不幸的是,对于系统工程师而言,存储组件的物理限制不允许独立设置这三个参数-至少不能在硬件中设置。
这种参数关联性迫使设计人员在容量和性能之间进行选择。你需要更多的吞吐量?你可以部署更多的主轴或SSD控制器,但这会导致未使用的容量。
如果工作负载需要为微小数据集提供高I / O吞吐量,则会突显预配置IOPS与容量的难题。作为示例,在Azure反馈门户上的评论说明无法独立于Azure托管磁盘的容量来提供性能。
软件定义存储(SDS)可以解耦这些参数,通过在存储资源和组件之间放置逻辑抽象层。此外,集中式软件控制平面使云存储服务能够细粒度地提高容量,通过在存储节点和驱动器之间分布逻辑块卷和文件共享。
即使超大规模分布式存储系统都可以进行独立优化,如下所述,但由于提供它们的成本高昂且需求稀少,因此只有少数服务可以支持这种选项。
问题的根源和早期解决方案
IOPS与容量之间的关联源于旋转磁盘和硬盘磁头的机械限制,我们只有四种方法可增加IOPS:
- 更快的转速
- 更高密度磁性介质
- 更多读写头
- 更大RAM缓存
尽管SSD消除对吞吐量和I / O的机械限制,但它们还有其他限制,包括:
- 存储单元读取和写入操作的速度
- NAND闪存种大型内存块,这会导致写放大和访问延迟
- 驱动控制器的吞吐量受嵌入式微控制器单元和内存缓冲区、NAND I / O和SATA接口速度的限制
这些对SSD吞吐量和IOPS设置上限,尤其是对于随机写入而言,其延迟可能是顺序写入的10倍。
写入高IOPS工作负载的传统方法是在RAID所需的多个设备之间分配存储卷,并添加更大的RAM缓存作为I / O缓冲区。第一种做法导致未使用的容量,而第二种做法则增加成本。
使用SDS、云服务独立配置IOPS
第一个使存储容量与吞吐量分离的产品应该是来自SoliFire的产品,该公司于2015年被NetApp收购。SolidFire率先推出服务质量(QoS)功能,该功能对吞吐量和IOPS执行最低、最高和突发级别。正如早期描述该架构的文章所述,SolidFire为系统中的每个卷独立分配性能和容量。该公司没有提供内部细节,但是在其横向扩展系统中,每个1U节点都是分布式控制器的一部分,控制器通过专用高速后端网络连接。该软件可以根据需要透明地提高跨多个节点的容量,以满足QoS保证。
虽然云提供商一直对其服务的物理硬件以及配置和管理软件方面保密,但我们知道他们在利用SolidFire的横向扩展阵列方法,将分布式控制器扩展到机架和Pod规模。提供商通常会部署数百个相同的存储服务器,这些服务器被聚合到资源池中,以提供不同类别(例如块、文件和对象)和性能级别的存储服务。例如,Amazon Elastic Block Store(EBS)有多种版本,包括通用SSD(称为gp2和gp3)和预配置IOPS SSD(称为io1和io2)。
通常,云存储产品为IOPS层提供不同的容量限制(最小和最大)。然而,在2020年re:Invent 2020大会上发布的gp3实例却与众不同,它们使用户能够独立增加吞吐量和IOPS,而不必提供更多的块存储容量。
gp2和gp3实例为IOPS性能提供软上限,据Amazon称,在给定年份中,99%的时间提供IOPS性能的10%以内。此外,低于1,000 GB的gp2卷至少在30分钟内具有高达3,000 IOPS的突发性能,而gp3卷提供至少3,000 IOPS,无突发性能功能。相比之下,Amazon表示,预配置的IOPS io1和io2卷,在一年中的99.9%的时间内提供不到10%的预配置IOPS性能,且延迟不到10毫秒。当与基于AMD的r5 Elastic Compute Cloud实例结合时,io2卷可以为小至4 GB的卷提供高达260,000 IOPS。
AWS竞争对手提供类似的灵活性来独立于容量来配置IOPS。这些包括:
- Azure Ultra磁盘,具有几种固定大小,从4吉字节(GiB)到64 TB。用户可以为每个GiB设置最高300 IOPS的限制,每个磁盘最多160,000 IOPS。因此,可以为32 GiB卷配置100到9,600 IOPS。
- IBM Cloud可调节IOPS,它支持在两个服务层级范围内无中断动态地调整IOPS容量。 Endurance卷支持的IOPS设置大于每GB 0.25 IOPS,而Performance(或者说分配的IOPS)卷则支持100到48,000 IOPS之间的任何值。
相比之下,大多数云服务通过卷尺寸线性扩展IOPS性能。例如,根据所连接的vCPU的数量、块大小和其他参数,Google Cloud Platform(GCP)SSD Persistent Disks可提供每千兆字节30个读写IOPS,最大为60,000个读IOPS。同样,Oracle Cloud Infrastructure(OCI)Block Higher Performance Volumes可提供每GB 75 IOPS(4,000块),每卷最多提供35,000 IOPS。因此,如果应用程序仅需要128 GB的卷,则GCP SSD可以提供3,840 IOPS,OCI更高的性能可以提供9,600 IOPS,而Amazon EBS io2可以配置为高达64,000 IOPS。
选择服务
大多数云存储服务和阵列供应商都通过容量扩展IOPS,因为驱动器和控制器技术的技术局限性要求扩展设备,以提供更大的吞吐量和IOPS容量。但是,对于某些应用程序,工作集和I / O吞吐量要求不是线性扩展。
例如,正如AWS在其有关EBS gp3卷的博客中指出的那样,某些应用程序(例如MySQL和Hadoop)需要高性能但不需要高存储容量。同样,可以通过减少存储延迟和增加IOPS来加速基于微服务的应用程序,这些应用程序的工作集可能很小,并且有很多事务处理到共享存储池。在这种情况下,EBS io2或gp3等云服务或NetApp SolidFire等存储产品(不会将更快的IOPS耦合到更大的卷)将为你带来更好的性能。