如何根據(jù)不同的工作負(fù)載調(diào)整存儲性能
多年來,存儲(尤其是共享存儲陣列)的性能調(diào)優(yōu)工作一直被認(rèn)為需要一定程度的技術(shù)和經(jīng)驗基礎(chǔ)才能做到的藝術(shù)。
但伴隨著市場與技術(shù)的發(fā)展變化,現(xiàn)在人們不禁要問是否可以用更簡化的操作來滿足特定應(yīng)用程序和應(yīng)用負(fù)載的要求。
不過,存儲“調(diào)優(yōu)”仍然是必要的。
本文中,我們會談到這其中所涉及的些許問題,以及可以如何優(yōu)化存儲硬件和主流應(yīng)用程序的需求。
外部存儲通常被用作應(yīng)用程序數(shù)據(jù)的長期存放區(qū)域,其存儲介質(zhì)的速度遠(yuǎn)比主存儲器要慢得多。
硬盤驅(qū)動器的延遲(響應(yīng))時間以毫秒級為單位,并且更適合于順序而非隨機輸入/輸出(I/O)性能。
NAND閃存帶來了更好的隨機I/O處理性能,盡管其犧牲了存儲介質(zhì)的使用壽命。閃存存儲還有另一個問題,其需要執(zhí)行諸如垃圾回收類的后臺任務(wù),從而延長了響應(yīng)時間。
DRAM的性能卓越,正如我們即將提到的,是用以改善系統(tǒng)性能的潛在方式。
最后,我們需要記住的是網(wǎng)絡(luò)是連接著共享陣列、服務(wù)器和存儲,在基于橫向擴展節(jié)點的方案中(如超融合基礎(chǔ)架構(gòu)),網(wǎng)絡(luò)亦是連接各節(jié)點,確保數(shù)據(jù)一致性的關(guān)鍵所在。
上述這些都是我們可以配置、優(yōu)化的可選項。
- 數(shù)據(jù)布局——跨物理介質(zhì)部署分配數(shù)據(jù)可以提高I/O性能。單塊硬盤或閃存驅(qū)動器的I/O性能是有限的,因此跨越多臺設(shè)備的“條帶化”有助于在多并發(fā)讀寫操作時擴展I/O。由于要使用RAID進行數(shù)據(jù)保護,條帶化難以無限擴展,需要在RAID擴展性和RAID組重構(gòu)時間之間做出權(quán)衡。RAID 6犧牲了額外的空間和奇偶校驗量換取擴展性。還有一種方式是使用糾刪碼,但這更適合用于對象類型的數(shù)據(jù)。
- 緩存——閃存或DRAM上的緩存數(shù)據(jù)可以改善I/O延遲,用共享陣列或應(yīng)用程序主機上的緩存來服務(wù)讀取請求。寫入I/O同樣得以加速,不過需要復(fù)制寫入持久性緩存設(shè)備來預(yù)防硬件故障。諸如Nimble的Adaptive Flash或HPE 3PAR的Adaptive Flash Cache之類的現(xiàn)代化緩存方案可以優(yōu)化昂貴資源的使用,并大幅優(yōu)化性能。
- 網(wǎng)絡(luò)調(diào)優(yōu)——在共享存儲環(huán)境中,可以調(diào)整光纖通道和以太網(wǎng)網(wǎng)絡(luò)來改善性能,即光纖通道中的信用閥值(Buffer Credits,又名流量控制機制)和以太網(wǎng)中的數(shù)據(jù)包尺寸(Packet Size)。很顯然,使用非阻塞型交換機可以確保交換機上每個端口點對點的吞吐量。整體網(wǎng)絡(luò)設(shè)計同樣重要。在以前,我們?yōu)榱斯?jié)省成本將光纖通道網(wǎng)絡(luò)設(shè)計為拓?fù)浣Y(jié)構(gòu)。而到了現(xiàn)在,光纖通道和以太網(wǎng)每個端口的速度雖然都并不會趨向飽和,端口共享仍然不是什么大問題,不過假如端口可以專用,那么這將更有助于消除瓶頸。
- 分層——通常而言,分層的使用目的在于節(jié)省成本,但優(yōu)化性能同樣是其目的。根據(jù)所要求的I/O性能和存儲介質(zhì)的成本消息將數(shù)據(jù)部署到最合適的存儲層上。分層算法多年來一直在快速發(fā)展,從LUN轉(zhuǎn)向基于數(shù)據(jù)塊的分層。正確的分層算法和數(shù)據(jù)部署可以在不用額外購置硬件的前提下提升性能。
為了得到最佳調(diào)優(yōu)效果,我們首先要知道應(yīng)用程序的I/O特性。
這在每個具體場景中可能千差萬別,但我們?nèi)钥梢詫⑵錃w納為某幾種類型。
- 結(jié)構(gòu)化數(shù)據(jù)——最有代表性的是SQL(Oracle,SQL Server)和NoSQL(MongoDB,CouchDB)數(shù)據(jù)庫,其具有混合式的I/O屬性。所存儲的數(shù)據(jù)通常具備隨機的I/O屬性(整表掃描除外),而數(shù)據(jù)寫入則多以小型的增量式寫入。傳統(tǒng)的經(jīng)驗中我們將數(shù)據(jù)存放在RAID-5存儲上并以RAID-10作為日志,但實際上僅有少量的I/O緩存才是相關(guān)的。對于現(xiàn)代化的存儲陣列,大多數(shù)數(shù)據(jù)庫加載(除了密集型)都易于管理,無需手動存放數(shù)據(jù);而對于密集型工作負(fù)載,將日志存放在高性能存儲上會是更好的選擇。
- 虛擬服務(wù)器——服務(wù)器虛擬化引入了隨機與連續(xù)I/O工作負(fù)載混合的效應(yīng)。這是因為數(shù)據(jù)通過多個虛擬機分布在LUN或卷上,每個虛擬機都獨立于另一個,生成了隨機工作負(fù)載的特性。提高虛擬服務(wù)器的性能需要部署更快速的存儲介質(zhì)(從而減少每個單獨I/O的延遲)或者引入緩存。vSphere(VMware)和Hyper-V(Microsoft)都允許為單個虛擬機配置緩存。還可以在虛擬機管理程序中集成第三方緩存解決方案來提高I/O性能。對于HCI,VMware的Virtual SAN還提供了一個全閃存的選項,使用高性能和大容量閃存組合來優(yōu)化I/O工作負(fù)載。
- 虛擬桌面——虛擬桌面給I/O性能所帶來的挑戰(zhàn)與虛擬服務(wù)器中的隨機訪問問題相似,但卻具有差異性。首先,大多數(shù)臺式機都是由某一個鏡像制成的,因此在啟動大量桌面時存在著大量重復(fù)的數(shù)據(jù)。其次,虛擬桌面經(jīng)常,甚至每天都會啟動,因此讀取(啟動)和寫入(關(guān)閉)時間會更多。通過在共享陣列中對桌面鏡像使用緩存和重復(fù)數(shù)據(jù)刪除,或者使用第三方軟件,可以大幅提高桌面性能。非永久性的桌面鏡像甚至可以緩存在DRAM中,這樣的解決方案比購買昂貴的全閃存要便宜許多。
- 網(wǎng)絡(luò)服務(wù)器——額外的讀取緩存有助于網(wǎng)絡(luò)和其它讀密集型應(yīng)用程序(如內(nèi)容管理系統(tǒng))。這可以部署在共享陣列中,也可以在虛擬機管理程序中用專用緩存。其中的權(quán)衡之處在于,網(wǎng)絡(luò)服務(wù)器本身有空余緩存時可以避免后端I/O,但緩存容量畢竟有所限制,在某個時刻仍需將數(shù)據(jù)存儲回外部I/O。
- 郵件服務(wù)器——回顧10至15年之前,Microsoft Exchange等平臺上,每個郵箱的I/O需求是相當(dāng)高的。隨著新產(chǎn)品的發(fā)布,單個用戶的I/O需求下降了15至20倍。Exchange 2016對比2003版,只需要大約5%的IOPS。因此,可以用JBOD而非SAN來部署Exchange。話雖如此,像Exchange這樣的電子郵件平臺仍可以從日益興起的緩存和分布式數(shù)據(jù)部署(如寬條帶化)中獲益。
- 分析——許多分析工具在構(gòu)建數(shù)據(jù)配置文件時需要反復(fù)讀取同樣的數(shù)據(jù)。這些工具對延遲相當(dāng)敏感,并且需要并行執(zhí)行查詢操作,例如Hadoop設(shè)計時會分布在多個存儲節(jié)點上,每個節(jié)點配置多塊磁盤。因此,提高分析工作負(fù)載的性能需要減少I/O讀取延遲。我們可以選擇使用閃存介質(zhì),為運行分析軟件的外部存儲或主機添置更多緩存。數(shù)據(jù)的存放并不講究,因為很難準(zhǔn)確預(yù)測運行分析時將使用到哪些數(shù)據(jù)。因此,分析操作中的重點在于平衡好存儲和緩存,并可以根據(jù)需要增加緩存。
在上述所有的場景中,得到詳細(xì)的指標(biāo)來反應(yīng)出性能和資源使用狀況是相當(dāng)重要的。通過正確的指標(biāo)數(shù)據(jù),我們可以綜合考慮購置額外資源的成本,評估、權(quán)衡各種業(yè)務(wù)改變所帶來的影響。