了解預配置IOPS存儲的挑戰與好處
存儲系統設計始終需要在三個參數間進行權衡:容量、吞吐量和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耦合到更大的卷)將為你帶來更好的性能。