閃存緩存可提高應(yīng)用程序性能,但需要進(jìn)行平衡
在完美的世界中,人們能夠?qū)⑺械臄?shù)據(jù)運(yùn)行在速度最快的媒質(zhì)上。不幸的是,對(duì)人們而言,IT世界并不完美。
為了實(shí)用起見(jiàn),人們必須將存儲(chǔ)與應(yīng)用程序的要求相匹配。數(shù)據(jù)配置文件快速變化(即活動(dòng)數(shù)據(jù)不斷變化)可能會(huì)導(dǎo)致這一問(wèn)題,因?yàn)榉謱幽P椭械囊苿?dòng)數(shù)據(jù)一直是一個(gè)反應(yīng)過(guò)程。此外,隨著IT團(tuán)隊(duì)變得越來(lái)越注重云計(jì)算,數(shù)據(jù)和應(yīng)用程序可能不再位于同一位置上,因此人們還需要能夠跨越距離引用數(shù)據(jù)的產(chǎn)品,同時(shí)保持一致性和完整性。
解決這些I/O性能問(wèn)題的一個(gè)方法是實(shí)現(xiàn)存儲(chǔ)緩存。與分層不同,存儲(chǔ)緩存在高性能介質(zhì)層中保存數(shù)據(jù)副本,而數(shù)據(jù)的主要版本保存在數(shù)據(jù)的存儲(chǔ)副本上,通常是更便宜的磁盤(pán)或閃存。
緩存的優(yōu)點(diǎn)
使用副本而不是實(shí)際數(shù)據(jù)的優(yōu)點(diǎn)是緩存的內(nèi)容可以快速更改以匹配活動(dòng)工作負(fù)載。與此同時(shí),緩存中的非活動(dòng)數(shù)據(jù)可以簡(jiǎn)單地失效,也不必在緩存變滿(mǎn)時(shí)移出。
緩存還允許成本有效地使用多種媒體類(lèi)型,因?yàn)橹挥幸恍〔糠謹(jǐn)?shù)據(jù)通常在任何時(shí)候都是活動(dòng)的(大多數(shù)應(yīng)用程序中可能是10%到20%)。相對(duì)較少的緩存,組織可以加速大部分I/O請(qǐng)求,這比將所有數(shù)據(jù)放在快速介質(zhì)上的成本要低得多,從而顯著改進(jìn)應(yīng)用程序的性能。
緩存權(quán)衡
對(duì)于本地部署,存儲(chǔ)緩存是改善整體I/O性能和在昂貴介質(zhì)上放置數(shù)據(jù)的成本之間的折衷。通過(guò)高效的緩存算法,可將高比例的I/O(希望90%至95%或更高)提供給緩存。不可避免地,某些數(shù)據(jù)在需要時(shí)不會(huì)在緩存中,這意味著恢復(fù)到主存儲(chǔ)器中以檢索該數(shù)據(jù),從而導(dǎo)致不良的I/O響應(yīng)。在這種可能是一個(gè)問(wèn)題的情況下,例如使用金融交易系統(tǒng)或在線(xiàn)賭博,將主要數(shù)據(jù)放在更快的存儲(chǔ)層上是可取的。
在云計(jì)算環(huán)境中,企業(yè)可以使用物理和虛擬設(shè)備在本地?cái)?shù)據(jù)中心或云端緩存數(shù)據(jù)。這比直接訪問(wèn)數(shù)據(jù)提供更好的性能,因?yàn)橥ㄟ^(guò)公共互聯(lián)網(wǎng)或甚至專(zhuān)用網(wǎng)絡(luò)檢索數(shù)據(jù)將具有比本地?cái)?shù)據(jù)中心高得多的延遲。然而,將數(shù)據(jù)緩存進(jìn)出公共云的一個(gè)缺點(diǎn)是確保將所有I/O寫(xiě)入活動(dòng)都提交回主存儲(chǔ)的一致性問(wèn)題。
緩存模型
以下是實(shí)現(xiàn)存儲(chǔ)緩存的三個(gè)主要方法:用戶(hù)選擇哪一種方法決定緩存如何處理寫(xiě)I/O請(qǐng)求:
- 直寫(xiě)法。在主機(jī)確認(rèn)之前,寫(xiě)請(qǐng)求將寫(xiě)入高速緩存和主存儲(chǔ)。I/O保證在永久介質(zhì)上,但性能受到主存儲(chǔ)器速度的限制。由于緩存層不需要彈性(例如,RAID保護(hù)),所以直接寫(xiě)入成本更低并且更容易實(shí)現(xiàn)。如果數(shù)據(jù)已經(jīng)存在,或從主存儲(chǔ)器讀取并寫(xiě)入高速緩存,讀請(qǐng)求將直接從緩存中提供。
- 回寫(xiě)法。該過(guò)程將數(shù)據(jù)寫(xiě)入高速緩存,并立即確認(rèn)主機(jī)的I/O完成。I/O寫(xiě)入性能良好,盡管在寫(xiě)入主存儲(chǔ)器之前,數(shù)據(jù)更加暴露。因此,大多數(shù)回寫(xiě)式緩存的實(shí)現(xiàn)通過(guò)鏡像到另一個(gè)主機(jī)或控制器中,或使用電池和UPS備份來(lái)保護(hù)緩存數(shù)據(jù)。
- 繞寫(xiě)法。使用此模式,數(shù)據(jù)直接寫(xiě)入主存儲(chǔ)器,繞過(guò)緩存,然后僅用于讀取請(qǐng)求。使用這種類(lèi)型的,其中工作負(fù)載配置文件包含大量的順序?qū)懭?,否則將以隨后重新讀取的數(shù)據(jù)(如備份或歸檔數(shù)據(jù))來(lái)對(duì)緩存進(jìn)行配置。
緩存的軟件實(shí)現(xiàn)通常至少實(shí)現(xiàn)這樣的一種方法,并且可以通過(guò)檢測(cè)工作負(fù)載類(lèi)型或通過(guò)由卷或LUN配置來(lái)適應(yīng)。
緩存步驟說(shuō)明
緩存方法基于如何處理寫(xiě)入I/O:
- 直寫(xiě)法(寫(xiě)入高速緩存和主存儲(chǔ)同步寫(xiě)入)。
- 回寫(xiě)法(寫(xiě)入高速緩存和主存儲(chǔ)異步寫(xiě)入)。
- 繞寫(xiě)法(寫(xiě)入旁路緩存并直接進(jìn)入主存儲(chǔ))。
緩存可以在I/O堆棧的多個(gè)位置實(shí)現(xiàn):
- 外部陣列(供應(yīng)商特定)。
- 通過(guò)設(shè)備(適用于遠(yuǎn)程訪問(wèn)數(shù)據(jù))。
- 虛擬機(jī)管理程序(加速虛擬機(jī)并從重復(fù)數(shù)據(jù)刪除中受益)。
- 操作系統(tǒng)(擴(kuò)展基本操作系統(tǒng)緩存功能)。
- 應(yīng)用程序(例如數(shù)據(jù)庫(kù),以減少普通數(shù)據(jù)的讀取活動(dòng))。
在哪里緩存?
緩存在多個(gè)地方跨I/O堆棧使用。用戶(hù)可以在應(yīng)用程序,操作系統(tǒng)或管理程序中作為設(shè)備或存儲(chǔ)陣列中緩存。每一種想法都是利用更快的媒質(zhì)-動(dòng)態(tài)RAM,非易失性DRAM(雙列直插式內(nèi)存模塊)或閃存(NAND)來(lái)提高I/O性能。示例包括:
- 外部陣列:陣列中的緩存一直是外部存儲(chǔ)系統(tǒng)的一項(xiàng)功能,因?yàn)镋MC公司在20世紀(jì)90年代早期在Symmetrix品牌下推出了集成的緩存磁盤(pán)陣列。陣列緩存的目的是減少機(jī)械硬盤(pán)中看不到的I/O性能,有效地滿(mǎn)足I/O和重新排序?qū)懭牒妥x取請(qǐng)求,以?xún)?yōu)化(并有效地最小化)磁頭的移動(dòng)。通過(guò)DRAM,NVDRAM和閃存的混合來(lái)實(shí)現(xiàn)對(duì)用戶(hù)來(lái)說(shuō)是透明的磁盤(pán)緩存。存儲(chǔ)陣列供應(yīng)商可以將高速緩存存儲(chǔ)到底層存儲(chǔ),其中高速緩存比率是固定的,或允許客戶(hù)將高速緩存大小指定為陣列設(shè)計(jì)或構(gòu)建的一部分。
- 基于設(shè)備的應(yīng)用程序緩存可以通過(guò)使用擴(kuò)展網(wǎng)絡(luò)上數(shù)據(jù)可見(jiàn)性的設(shè)備實(shí)現(xiàn)。這些產(chǎn)品使用典型的協(xié)議(如iSCSI,SMB和CIFS以及NFS)。在遠(yuǎn)距離訪問(wèn)數(shù)據(jù)的地方,例如跨多個(gè)數(shù)據(jù)中心,或者與公共云之間往往會(huì)使用這些產(chǎn)品。緩存過(guò)程可以在任一方向上運(yùn)行。也就是說(shuō),它可以基于現(xiàn)場(chǎng)更快速地訪問(wèn)云資源,或者在云中更快地訪問(wèn)本地資源。
- 虛擬機(jī)管理程序:虛擬機(jī)管理程序緩存允許閃存和DRAM內(nèi)存用于通過(guò)將虛擬機(jī)的最活躍部分放入更快的存儲(chǔ)空間來(lái)改善虛擬機(jī)性能。在VMware的vSphere上,這意味著使用閃存本身與“閃存讀取緩存”功能,它為每個(gè)虛擬機(jī)分配一定量的閃存。還有第三方工具將緩存基于塊的I/O以及存儲(chǔ)在虛擬機(jī)管理程序中的NFS數(shù)據(jù)存儲(chǔ)上的數(shù)據(jù)。微軟Hyper-V緩存直接在操作系統(tǒng)中實(shí)現(xiàn),或使用Windows Server 2012中引入的CSV(群集共享卷)緩存等新功能。虛擬機(jī)管理程序緩存也可以工作在能夠重復(fù)數(shù)據(jù)刪除數(shù)據(jù)的多個(gè)虛擬機(jī)(如類(lèi)似的虛擬桌面基礎(chǔ)架構(gòu)[VDI]圖像)。
- 操作系統(tǒng):操作系統(tǒng)中的緩存從一開(kāi)始就是操作系統(tǒng)的一個(gè)功能。緩存過(guò)程往往是非?;镜?,簡(jiǎn)單的做到平滑I/O響應(yīng)時(shí)間。盡管在許多情況下,緩存不考慮不同的I/O配置文件。軟件供應(yīng)商已經(jīng)很快將這個(gè)機(jī)會(huì)引入了與存儲(chǔ)媒體捆綁在一起的程序,為Windows和Linux提供了更高效的緩存。
- 應(yīng)用緩存:緩存在應(yīng)用程序中作為數(shù)據(jù)庫(kù)的一部分或使用定制代碼實(shí)現(xiàn)。大多數(shù)數(shù)據(jù)庫(kù)平臺(tái)都實(shí)現(xiàn)某種緩存,例如Oracle SQL Result Cache和Full Database Caching以及MySQL Query Cache。
供應(yīng)商的緩存產(chǎn)品
所有外部存儲(chǔ)陣列幾乎在DRAM或NAND閃存中緩存I/O。盡管使用全閃存陣列,存儲(chǔ)緩存可能是最小的,因?yàn)榭傮w節(jié)省成本較低。以下是供應(yīng)商如何實(shí)施緩存的一些具體示例。
靈活存儲(chǔ)使用NAND閃存來(lái)緩存寫(xiě)入I/O,這基于可以立即重新讀取的假設(shè)。然而,NVRAM用于在提交到磁盤(pán)之前緩存數(shù)據(jù)。HPE3PAR使用閃存作為DRAM的擴(kuò)展,用于具有較少訪問(wèn)數(shù)據(jù)的第二級(jí)層。此功能(稱(chēng)為自適應(yīng)閃存緩存)使閃存能夠擴(kuò)展陣列緩存的功能,而無(wú)需部署額外的DRAM。
Avere系統(tǒng)公司具有基于設(shè)備的緩存產(chǎn)品,可將NAS存儲(chǔ)擴(kuò)展到地理位置分散的數(shù)據(jù)中心或公共云。在公共云空間中,這被實(shí)現(xiàn)為虛擬設(shè)備而不是物理硬件。還有來(lái)自微軟(StorSimple)的云緩存產(chǎn)品可以緩存從Azure編寫(xiě)和讀取的數(shù)據(jù),以及用于本地緩存存儲(chǔ)在公共或私有云中的文件數(shù)據(jù)的Panzura全局文件系統(tǒng)設(shè)備。
在管理程序中,供應(yīng)商為NAS和塊協(xié)議提供I/O加速。例如,將Pernix Data集成到VMwareESXi內(nèi)核中,并允許使用DRAM和NAND閃存來(lái)加速虛擬機(jī)的I/O。在使用DRAM的情況下,在集群中的多個(gè)主機(jī)之間復(fù)制寫(xiě)入I/O以防止硬件故障。Infinio Accelerator軟件緩存了虛擬機(jī)的NAS和基于塊的I/O。這是通過(guò)在虛擬機(jī)中使用DRAM的每個(gè)VMware vSphere主機(jī)上使用虛擬機(jī)來(lái)實(shí)現(xiàn)的。就SanDisk而言,它提供了FlashSoft品牌下的緩存。最新的4.0版本支持vSphere 6和Microsoft Hyper-V(和Server),而舊版本支持Linux和vSphere ESXi 5.x。
在OS(操作系統(tǒng))層,有一些用于加速性能的軟件產(chǎn)品。Enmotus公司提供了一系列產(chǎn)品,用于改進(jìn)傳統(tǒng)的基于磁盤(pán)的性能,例如使用閃存進(jìn)行工作站或服務(wù)器,而英特爾公司的緩存加速軟件與其各種SSD產(chǎn)品配合使用。該軟件支持Windows和Linux操作系統(tǒng),并且可以作為所有常見(jiàn)虛擬機(jī)管理程序下的虛擬機(jī)運(yùn)行。其他基于操作系統(tǒng)的緩存產(chǎn)品包括ION Accelerator(SanDisk),AutoCache(Samsung)和Xtrem Cache(EMC)。
最后,Atlantis計(jì)算公司有兩個(gè)緩存產(chǎn)品,一個(gè)針對(duì)VDI(ILIO),另一個(gè)用于虛擬服務(wù)器環(huán)境(USX)。ILIO使用具有高水平重復(fù)數(shù)據(jù)刪除的DRAM來(lái)支持永久性和非持久性桌面,以提供比使用外部基于閃存的存儲(chǔ)更有效的VDI總體擁有成本。
采用緩存提高性能
緩存可以提高許多地方的應(yīng)用程序性能。然而,決定在何處進(jìn)行緩存需要平衡成本節(jié)約(避免許可證和硬件成本)和實(shí)現(xiàn)的實(shí)用性。雖然高度虛擬化的環(huán)境通常得益于管理程序中的緩存,但一些戰(zhàn)術(shù)實(shí)現(xiàn)(例如直接在虛擬機(jī)中進(jìn)行緩存或?qū)SD分配到數(shù)據(jù)庫(kù))也可能證明是有用的。