專利名稱:適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng)的制作方法
技術(shù)領域:
本發(fā)明屬于計算機存儲技術(shù)領域,具體涉及一種適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng)。
背景技術(shù):
下一代互聯(lián)網(wǎng)速度更快、規(guī)模更大、安全性與服務質(zhì)量更高,從而要求基于下一代互聯(lián)網(wǎng)的網(wǎng)絡存儲系統(tǒng)具有與之適應的高效性、可擴展性、安全性和高服務質(zhì)量。傳統(tǒng)的以塊和文件為基礎構(gòu)建的存儲系統(tǒng)(如NAS、SAN等)已經(jīng)不能滿足上述要求。美國加州大學Berkeley分校的Paterson教授、卡內(nèi)基梅隆大學等多所大學及研究機構(gòu)提出了一種基于對象(Object-Based)的網(wǎng)絡存儲接口協(xié)議,以此方便構(gòu)建高效的大型網(wǎng)絡存儲系統(tǒng)。
中國發(fā)明專利公開號為CN 1728665A的發(fā)明公開了一種組建基于對象的存儲系統(tǒng)的方法。該發(fā)明所述基于對象的網(wǎng)絡存儲系統(tǒng),包括由計算機網(wǎng)絡連接的I個元數(shù)據(jù)服務器、N個對象存儲節(jié)點和M個客戶端,其對象文件系統(tǒng)是基于標準Linux的ext2文件系統(tǒng),帶有日志文件系統(tǒng)特性。
大型網(wǎng)絡存儲系統(tǒng)需要設計一個高效的并行文件系統(tǒng)與之相匹配,才能實現(xiàn)存儲系統(tǒng)的高帶寬、高擴展性、高安全性、智能化等。文件系統(tǒng)作為系統(tǒng)的I/O子系統(tǒng),在很多情況下會成為系統(tǒng)性能進一步提高的瓶頸。設計一個高性能的并行文件系統(tǒng)需要從兩個方面進行考慮一方面盡可能減少對磁盤的訪問次數(shù),另一方面盡可能簡化網(wǎng)絡訪問協(xié)議,減少網(wǎng)絡協(xié)議開銷。文件系統(tǒng)緩存技術(shù)是一種盡量減少文件系統(tǒng)訪問磁盤次數(shù)的機制,用提高文件系統(tǒng)性能的方法來彌補磁盤性能的不足;同時,好的緩存系統(tǒng)設計還可以簡化網(wǎng)絡訪問協(xié)議。
目前,基于對象存儲文件系統(tǒng)已成為高性能網(wǎng)絡存儲文件系統(tǒng)的研究熱點,產(chǎn)生了如Cluster File Systems公司的Lustre、Panasas公司的ActiveScale文件系統(tǒng)、加州大學圣克魯茲分校開發(fā)的面向?qū)ο蟮奈募到y(tǒng)OBFS等。這些文件系統(tǒng)都各有特點,在文件系統(tǒng)緩存方面也都有所提及,但主要集中在某個方面緩存策略的研究,緩存系統(tǒng)缺乏整體性,造成緩存系統(tǒng)訪問控制協(xié)議復雜、訪問請求響應時間較大等不足。還有一種實現(xiàn)緩存的方法是把緩存作為一個獨立的設備運行,此種方案對緩存進行集中管理,方便實現(xiàn)某些替換、查找策略,但獨立的設備增加了成本,同時也是系統(tǒng)的單一故障點。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng),該系統(tǒng)克服了現(xiàn)有緩存系統(tǒng)訪問控制協(xié)議復雜、訪問請求延遲較大的不足,在客戶端、對象存儲節(jié)點設立三級緩存提供完整的緩存系統(tǒng)及其緩存策略,簡化節(jié)點間網(wǎng)絡訪問協(xié)議、降低元數(shù)據(jù)服務器負載、減少數(shù)據(jù)訪問請求響應時間、提高系統(tǒng)I/O處理能力、降低系統(tǒng)構(gòu)建成本。
本發(fā)明提供的一種適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng),其特征在于該系統(tǒng)包括位于客戶端中的零級緩存和一級緩存,以及位于對象存儲節(jié)點中的二級緩存;零級緩存用于對源自元數(shù)據(jù)服務器中元數(shù)據(jù)的緩存,一級緩存為直接服務于應用進程的數(shù)據(jù)緩存,二級緩存為直接服務于客戶端的數(shù)據(jù)緩存;零級緩存管理模塊負責零級緩存中元數(shù)據(jù)的查找、替換以及按照網(wǎng)絡訪問控制協(xié)議進行元數(shù)據(jù)的訪問;一級緩存管理模塊用于控制一級緩存,負責共享內(nèi)存空間的申請、分配、回收以及緩存單元的置換;二級緩存管理模塊負責對對象存儲節(jié)點間二級緩存進行多隊列統(tǒng)一置換。
本發(fā)明具有如下特點
(1)零級元數(shù)據(jù)緩存設在客戶端,在緩存命中情況下比采用PVFS結(jié)構(gòu)并行文件系統(tǒng)減少一次元數(shù)據(jù)服務器的訪問,降低了網(wǎng)絡通信量;設計了一種簡化的元數(shù)據(jù)訪問協(xié)議,解決了多個客戶端元數(shù)據(jù)緩存一致性問題;加快了元數(shù)據(jù)的訪問速度,降低了服務請求響應時間;提高了整個文件系統(tǒng)的I/O吞吐量;(2)一級數(shù)據(jù)緩存采用共享內(nèi)存方式實現(xiàn),減少了進程通信時內(nèi)存拷貝次數(shù),實現(xiàn)應用進程間數(shù)據(jù)共享;一級緩存采用基于hash的LFU-DA算法,保留了LFU-DA算法命中率高的特點,同時極大降低了緩存對象的平均查找時間;(3)對象存儲節(jié)點中的二級緩存能推遲并減少對磁盤的直接訪問,根據(jù)對象存儲節(jié)點對象訪問特性,提出了訪問組的概念,同時設計的多隊列統(tǒng)一置換算法,綜合考慮了訪問時間和訪問頻率,使各對象存儲節(jié)點緩存命中率趨于均勻,提高存儲節(jié)點緩存整體命中率;(4)三級緩存共同組成適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng),極大的提高了存儲系統(tǒng)的效率,減少了系統(tǒng)延遲,提高了系統(tǒng)數(shù)據(jù)傳輸率。
圖1是本發(fā)明適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng)示意圖;圖2.1是改進前文件系統(tǒng)讀文件過程示意圖;圖2.2是本發(fā)明在客戶端設立元數(shù)據(jù)緩存后讀文件過程示意圖;圖3.1是本發(fā)明在客戶端設立一級緩存后緩存塊分配前緩存狀態(tài)示意圖;圖3.2是本發(fā)明在客戶端設立一級緩存后緩存塊分配后緩存狀態(tài)示意圖;圖3.3是本發(fā)明在客戶端設立一級緩存后緩存塊釋放前緩存狀態(tài)示意圖;圖3.4是本發(fā)明在客戶端設立一級緩存后緩存塊釋放后緩存狀態(tài)示意圖;圖4是本發(fā)明數(shù)據(jù)訪問控制流程圖。
具體實施例方式
如圖1所示,基于對象網(wǎng)絡存儲系統(tǒng)中,元數(shù)據(jù)服務器1、對象存儲節(jié)點2和客戶端3由計算機網(wǎng)絡連接在一起。數(shù)據(jù)訪問過程如下由客戶端3向元數(shù)據(jù)服務器1發(fā)送訪問請求;元數(shù)據(jù)服務器1驗證客戶身份,確認后查詢本地元數(shù)據(jù),如果存在,則元數(shù)據(jù)服務器1給相應對象存儲節(jié)點2發(fā)送訪問請求測試包,對象存儲節(jié)點2確認對象打開后向元數(shù)據(jù)服務器1返回授權(quán)及客戶所請求的存儲對象映射表;客戶端3收到元數(shù)據(jù)服務器1的信息后與對象存儲節(jié)點建立連接,進行數(shù)據(jù)傳輸。
本發(fā)明的分布式多級緩存系統(tǒng)包括客戶端3中的零級緩存6、一級緩存8和對象存儲節(jié)點2中的二級緩存4。三級緩存均在主存中實現(xiàn)。零級緩存6設立在客戶端3中,是對來源于元數(shù)據(jù)服務器1的元數(shù)據(jù)緩存,在緩存命中情況下能夠減少一次元數(shù)據(jù)服務器1的訪問,元數(shù)據(jù)緩存的高命中率極大地降低了網(wǎng)絡通訊量;一級緩存8是直接服務于應用進程的數(shù)據(jù)緩存,它的命中直接消除了客戶端3到對象存儲節(jié)點2的網(wǎng)絡消耗,提高了系統(tǒng)性能;二級緩存4設立在對象存儲節(jié)點2,直接服務于客戶端3,緩存命中情況下可以避免訪問低速物理存儲設備,加快了數(shù)據(jù)訪問速度。
本發(fā)明三級緩存分別由各自緩存管理模塊控制。零級緩存管理模塊7負責零級緩存6中元數(shù)據(jù)的查找、替換以及零級緩存未命中情況下按照網(wǎng)絡訪問控制協(xié)議進行元數(shù)據(jù)服務器的訪問。元數(shù)據(jù)查找采用由元數(shù)據(jù)項對應的全局路徑名作為hash參數(shù)建立的緩存hash表,以加快查找速度;元數(shù)據(jù)緩存替換策略采用FIFO(First In First Out)隊列;元數(shù)據(jù)訪問控制協(xié)議首先訪問零級緩存6,命中則直接向元數(shù)據(jù)服務器1發(fā)送服務請求,未命中則發(fā)送元數(shù)據(jù)查詢請求,得到確認后再發(fā)送服務請求。一級緩存管理模塊9負責共享內(nèi)存空間的申請、分配、回收以及緩存單元的置換。一級緩存8用共享內(nèi)存方式實現(xiàn),系統(tǒng)通過一級緩存管理模塊9管理緩存空間的申請、分配和回收;一級緩存8中緩存單元置換采用基于hash的LFU-DA(LFU with Dynamic Aging)算法。二級緩存管理模塊5負責對象存儲節(jié)點2之間二級緩存4的統(tǒng)一置換,采用多隊列統(tǒng)一置換算法——MQU(Multi-Queue United)算法。
零級緩存6是元數(shù)據(jù)緩存,在基于對象的存儲系統(tǒng)中元數(shù)據(jù)包括文件與對象的映射信息、對象存儲節(jié)點信息和存儲對象的屬性信息等。雖然基于對象的存儲系統(tǒng)中對象元數(shù)據(jù)(屬性)很豐富,但在元數(shù)據(jù)服務器1上只保存與用戶相關的對象屬性(如文件名與對象ID映射,對象存儲節(jié)點位置信息),這部分屬性占用的空間并不大,通常只需一百個字節(jié)到兩百個字節(jié)。零級緩存是供客戶端查詢文件是否存在,只需保留文件名與對象ID映射即可。因此在主存中一個容量為1MB的零級緩存空間可以容納近萬條供查詢的存儲對象元數(shù)據(jù),對越來越大的主存空間來說這點花費是值得的,這保證了元數(shù)據(jù)緩存具有相當高的緩存命中率。如此規(guī)模的緩存元數(shù)據(jù)使元數(shù)據(jù)被置換不經(jīng)常發(fā)生,因此置換算法采用FIFO隊列,特點是實現(xiàn)簡單。但是較多的元數(shù)據(jù)又使查找變的困難,查找算法的性能決定零級緩存6的效率,本發(fā)明采用查找效率最高的hash表,用元數(shù)據(jù)項對應的全局路徑名作為hash參數(shù)建立緩存hash表,加快查找速度。客戶端啟動時零級緩存為空,零級緩存在客戶端第一次訪問異地數(shù)據(jù)的同時從元數(shù)據(jù)服務器獲得所需元數(shù)據(jù)的備份。
基于對象網(wǎng)絡存儲系統(tǒng)中客戶端應用進程數(shù)據(jù)訪問首先對要訪問的文件(從應用程序呈現(xiàn)的數(shù)據(jù)訪問形式仍為文件)做路徑檢查,如果是本地文件則調(diào)用本地操作函數(shù)對文件進行處理;否則,把要訪問文件的路徑轉(zhuǎn)化為全局文件系統(tǒng)唯一路徑名,隨后與元數(shù)據(jù)服務器建立連接。基于對象網(wǎng)絡存儲系統(tǒng)中數(shù)據(jù)集中存放在對象存儲節(jié)點,因此整個對象文件系統(tǒng)中對元數(shù)據(jù)的操作是非常頻繁的。本發(fā)明涉及的用于對象網(wǎng)絡存儲系統(tǒng)的分布式文件系統(tǒng)參照PVFS設計,其訪問過程清晰、實現(xiàn)簡單,但PVFS對每一次元數(shù)據(jù)操作需要訪問兩次元數(shù)據(jù)服務器,一次查詢,一次獲取真正元數(shù)據(jù),會帶來大量的網(wǎng)絡通訊開銷,不能滿足對象文件系統(tǒng)要求,必須對數(shù)據(jù)訪問協(xié)議進行改進,改進的方法是在客戶端設立零級緩存。
沒有設立零級緩存情況下的對象存儲節(jié)點數(shù)據(jù)訪問過程如圖2.1所示。從客戶端看,主要分為以下步驟A1客戶端把要訪問文件的路徑轉(zhuǎn)化為全局文件系統(tǒng)唯一路徑名,與元數(shù)據(jù)服務器建立連接,發(fā)出查詢請求;A2元數(shù)據(jù)服務器對客戶端訪問進行身份驗證,合法則查詢元數(shù)據(jù),確認所訪問的文件是否存在,發(fā)送應答信息到客戶端;否則客戶端訪問非法,過程結(jié)束;
A3客戶端收到應答信息,如果要訪問的數(shù)據(jù)存在,則向元數(shù)據(jù)服務器發(fā)出讀對象請求,否則向應用進程報錯,過程結(jié)束;A4元數(shù)據(jù)服務器收到客戶讀對象請求后,發(fā)送對象ID到相關對象存儲節(jié)點;A5對象存儲節(jié)點驗證元數(shù)據(jù)服務器訪問請求后,打開對象,發(fā)送應答信息到元數(shù)據(jù)服務器;A6元數(shù)據(jù)服務器收到應答后,把對客戶端的授權(quán)、文件與存儲對象ID映射表以及存儲對象節(jié)點位置信息應答給客戶端;A7客戶端收到元數(shù)據(jù)服務器的應答信息后,向所收到元數(shù)據(jù)對應的對象存儲節(jié)點發(fā)讀對象請求命令包,與相應對象存儲節(jié)點建立連接;A8對象存儲節(jié)點驗證用戶請求,確認后發(fā)送數(shù)據(jù)對象給客戶端,直到數(shù)據(jù)傳輸結(jié)束。
可以看出上述數(shù)據(jù)訪問控制協(xié)議總共涉及到兩次客戶端與元數(shù)據(jù)服務器的網(wǎng)絡通信,一次與各相關對象存儲節(jié)點的網(wǎng)絡通信,還包括一次元數(shù)據(jù)服務器與各存儲節(jié)點的網(wǎng)絡通信,所引起的網(wǎng)絡通信開銷是很大的,嚴重限制了系統(tǒng)性能的提高。
詳細分析上述協(xié)議,發(fā)現(xiàn)該協(xié)議可以簡化。本發(fā)明在客戶端構(gòu)建零級元數(shù)據(jù)緩存就是一種簡化上述網(wǎng)絡訪問控制協(xié)議的方法。簡化后的網(wǎng)絡訪問控制協(xié)議如圖2.2所示,主要分如下幾個步驟B1客戶端把要訪問文件的路徑轉(zhuǎn)化為全局文件系統(tǒng)唯一路徑名,應用進程查詢零級緩存,判斷緩存是否命中,命中進入步驟B4;B2零級緩存未命中則客戶端與元數(shù)據(jù)服務器建立連接,發(fā)送元數(shù)據(jù)查詢請求;B3元數(shù)據(jù)服務器對客戶端訪問進行身份驗證,合法則查詢元數(shù)據(jù),確認所訪問的文件是否存在,發(fā)送應答信息到客戶端,進入步驟B5;B4客戶端零級緩存命中則應答應用進程;B5客戶端應用進程收到應答信息后,訪問對象存在則發(fā)送讀對象請求到元數(shù)據(jù)服務器,否則報錯,過程結(jié)束;B6元數(shù)據(jù)服務器收到客戶讀對象請求后,發(fā)送對象ID到相關對象存儲節(jié)點;B7對象存儲節(jié)點驗證元數(shù)據(jù)服務器訪問請求后,打開對象,發(fā)送應答信息到元數(shù)據(jù)服務器;B8元數(shù)據(jù)服務器收到應答后,把對客戶端的授權(quán)、文件與存儲對象ID映射表以及存儲對象節(jié)點位置信息應答給客戶端,同時更新零級緩存;B9客戶端收到元數(shù)據(jù)服務器的應答信息后,向所收到元數(shù)據(jù)對應的對象存儲節(jié)點發(fā)讀對象請求命令包,與相應對象存儲節(jié)點建立連接;B10對象存儲節(jié)點驗證用戶請求,確認后發(fā)送數(shù)據(jù)對象給客戶端,直到數(shù)據(jù)傳輸結(jié)束。
從以上數(shù)據(jù)網(wǎng)絡訪問控制協(xié)議可以看出,零級緩存在命中情況下可以省略一次元數(shù)據(jù)服務器的訪問,極高的零級緩存命中率大大降低了元數(shù)據(jù)訪問的網(wǎng)絡開銷。
一般設立緩存后會帶來緩存一致性問題,因為每個客戶端都有零級緩存,必然造成緩存的不一致。如果不解決好緩存一致性問題特別是元數(shù)據(jù)緩存將給系統(tǒng)帶來災難性后果。本發(fā)明簡化后的網(wǎng)絡訪問控制協(xié)議很好的解決了元數(shù)據(jù)緩存不一致性問題。對數(shù)據(jù)對象的任何操作所引起的元數(shù)據(jù)變化都必須記錄在元數(shù)據(jù)服務器或者對象存儲節(jié)點中。對象元數(shù)據(jù)一致性是由客戶端第二次元數(shù)據(jù)訪問B5-B8來保證,因為所有操作的真正元數(shù)據(jù)都是操作B8從元數(shù)據(jù)服務器返回的,并沒有直接從本地的零級緩存中讀取??蛻舳舜蜷_一個對象或做其它元數(shù)據(jù)相關操作時,至少需要訪問一次元數(shù)據(jù)服務器,用戶對對象的任何操作都必須通知元數(shù)據(jù)服務器,時刻保證對象元數(shù)據(jù)的正確性;對象存儲節(jié)點只接收來自元數(shù)據(jù)服務器的打開請求。以上兩條保證了元數(shù)據(jù)的一致性,因此即使多個零級緩存中元數(shù)據(jù)存在不一致,也不會帶來任何問題。假設某一客戶端在零級緩存中持有一個對象的元數(shù)據(jù)期間,元數(shù)據(jù)因其它客戶端操作而發(fā)生了改變,導致了元數(shù)據(jù)出現(xiàn)不一致情況。第一次元數(shù)據(jù)訪問請求B1-B4的目的只是為了檢查目標文件是否存在,第二次元數(shù)據(jù)訪問請求B5-B8并沒有從發(fā)生不一致的零級緩存中獲取元數(shù)據(jù),相反,第二次元數(shù)據(jù)訪問B5-B8所獲得的元數(shù)據(jù)還將更新零級緩存,由此避免了零級緩存不一致給系統(tǒng)可能造成的后果。
本發(fā)明所述客戶端中一級緩存采用共享內(nèi)存方式實現(xiàn)。一級緩存管理模塊中的守護進程負責共享內(nèi)存空間的申請、分配和回收,但并不負責處理其它進程的讀寫請求。應用進程將共享內(nèi)存映射到自己的虛擬內(nèi)存空間,在需要讀寫數(shù)據(jù)時,應用進程就可以直接訪問共享內(nèi)存形式的緩存,從而避免了進程間的大量通信和內(nèi)存的多次拷貝。守護進程在客戶端初啟時一次性的向系統(tǒng)申請一塊共享內(nèi)存空間,按照緩存塊大小把該空間分成很多物理上連續(xù)的小數(shù)據(jù)塊,用一個緩存塊數(shù)組管理。系統(tǒng)另外維護了一個與緩存塊數(shù)組同樣大小的可分配緩存塊數(shù)組,指示當前可分配的緩存塊數(shù)組項。可分配緩存塊數(shù)組項的值代表可分配的緩存塊數(shù)組的下標。當可分配緩存塊數(shù)組項的值為-1時,表示其所代表的塊已分配;可分配緩存塊數(shù)組項的值為s時,表示緩存塊s將被分配。系統(tǒng)初始化時,所有緩存塊都是空閑的,第i個可分配緩存塊數(shù)組項的值為i。為了方便管理,采用兩個數(shù)值——可分配號和空閑號,指示可分配緩存塊數(shù)組中可供分配的空閑項可分配號指示第一個可供分配數(shù)據(jù)塊,空閑號指示最后一個空閑數(shù)據(jù)塊,也代表塊回收時將被插入到可分配緩存塊數(shù)組中的位置,如果可分配號與空閑號相等,表示已無空閑緩存空間,需要通過置換來騰出空間。
一級緩存管理模塊守護進程按如下步驟申請、分配和回收緩存空間(1)向系統(tǒng)申請一塊緩存空間,并按照指定緩存塊大小將緩存空間分塊,用一個緩存塊數(shù)組表示緩存空間,數(shù)組大小為所申請緩存空間的總塊數(shù);(2)守護進程維護一個可分配緩存塊數(shù)組,大小與緩存塊數(shù)組相同,并用可分配號、空閑號分別指示可分配緩存塊數(shù)組中空閑項的首部和尾部;(3)當應用進程訪問共享緩存空間時,進入步驟(4);當應用進程釋放緩存空間時,進入步驟(5);(4)訪問共享緩存空間時,如果命中則直接進行讀寫操作;否則,首先判斷是否有空閑緩存塊可用,方法是判斷可分配號和空閑號是否相等,如果可分配號和空閑號相等,進入步驟(4.1),否則進入步驟(4.2);(4.1)可分配號和空閑號相等表示沒有空閑塊可用,則對緩存塊進行置換,置換后再進行讀寫操作,工作完畢;
(4.2)可分配號和空閑號不相等表示還有空閑塊可用,讀取可分配號所指示的可分配緩存塊數(shù)組項的值,該值就是第一塊可供分配緩存空閑塊的下標,把下標指示的緩存塊分配給應用進程,將可分配號所指示的可分配緩存塊數(shù)組項的值設為-1,然后可分配號加1并以緩存總塊數(shù)為模做取余運算,余數(shù)即為新的可分配號,它指示下一個空閑塊,工作完畢;(5)應用進程釋放緩存塊時首先空閑號加1并以緩存總塊數(shù)為模做取余運算得到新的空閑號,把空閑號指示的可分配緩存塊數(shù)組項的值設為所釋放緩存塊號,完成緩存塊的回收,工作完畢。
如圖3.1-3.4是一級緩存分配與釋放過程的一個具體實例。圖3.1是緩存單元第一次分配前的狀態(tài)??煞峙渚彺鎵K數(shù)組的各項值與下標相等??煞峙涮枮?,指明第一個可分配的數(shù)據(jù)塊為緩存塊數(shù)組的第零項;空閑號為n,指明最后一個可分配的數(shù)據(jù)塊為緩存塊數(shù)組的第n項。緩存塊數(shù)組的第一塊被分配后的狀態(tài)如圖3.2所示第零項可分配緩存塊數(shù)組的值為-1,可分配號向前推進值變?yōu)?,表示下一可分配塊為緩存塊數(shù)組的第一項。圖3.3描述了數(shù)據(jù)塊第一次被釋放前的狀態(tài)。在此之前,前4塊已被分配;圖3.4描述了數(shù)據(jù)塊被釋放后的狀態(tài)在緩存塊數(shù)組第二塊被釋放后,按照空閑號的指示,將可分配緩存數(shù)組第零項的值修改為2,表示最后一個可分配塊為緩存塊數(shù)組的第二項,同時空閑號循環(huán)向前推進,其值為0。
以上是本發(fā)明一級緩存空間申請、分配和回收的實現(xiàn),由守護進程完成,但它不處理具體進程讀寫請求,讀寫請求由一級緩存管理模塊中實現(xiàn)的基于hash的LFU-DA(LFU with Dynamic Aging)算法完成。
LFU-DA是LFU的改進算法。LFU算法是基于頻率訪問優(yōu)先考慮的置換算法,即只考慮到訪問了很多次的數(shù)據(jù)塊有很大機會在不久被重新訪問,卻忽略了這些數(shù)據(jù)塊的最近一次訪問時間。事實上,系統(tǒng)經(jīng)常在處理完一個任務之后,轉(zhuǎn)向處理其它的任務。那些在前一次任務中訪問非常頻繁的數(shù)據(jù)塊有可能再也沒有機會在新的任務中被重新訪問,但是這些占據(jù)了大量緩存空間的數(shù)據(jù)塊的訪問次數(shù)卻是很大的,采用LFU算法不可能把這些數(shù)據(jù)塊置換出去,極大的降低了緩存空間的利用率。LFU-DA算法對緩存數(shù)據(jù)塊加入了“年齡”屬性,并且在訪問過程中不斷加以調(diào)整,但是并不是每次都調(diào)整所有塊的年齡,而只是在訪問的時候動態(tài)調(diào)整。數(shù)據(jù)塊的“年齡”Ki由數(shù)據(jù)塊的訪問次數(shù)和上次被置換塊的“年齡”共同求得,Ki的計算公式如下Ki=CI*Fi+K(公式1)其中,F(xiàn)i是數(shù)據(jù)塊被訪問的次數(shù),第一次加入到緩存中的數(shù)據(jù)塊訪問次數(shù)F1的值為1;CI為頻率因子,是一個可變參數(shù),通常取值為1,但可根據(jù)系統(tǒng)不同應用調(diào)整其取值,得到當前應用的最佳值;K是一個全局變量,初始值為0,一有數(shù)據(jù)塊被置換出去時,都把K值調(diào)整為被置換塊的“年齡”。LFU-DA算法每一次都把“年齡”最小的數(shù)據(jù)塊置換出去。實踐表明LFU-DA算法比LRU算法具有更高的命中率。由于LFU-DA同時考慮了“訪問時間”和“訪問頻率”兩個方面,用作客戶端緩存置換算法能獲得很好的性能,明顯比只考慮訪問時間的算法有更高的命中率。然而當文件系統(tǒng)緩存容量很大時,LFU-DA算法有一個弊端會造成緩存隊列過長,導致應用程序在緩存中查找數(shù)據(jù)耗時間太久。
本發(fā)明對LFU-DA算法作進一步的改進,具體的做法是將過長的緩存隊列根據(jù)所選hash函數(shù)分成m個小隊列,用緩存數(shù)據(jù)塊的塊號和數(shù)據(jù)塊所屬對象的ID求hash值,然后根據(jù)所求hash值把數(shù)據(jù)塊插入到對應的隊列中。每一個hash隊列都是LFU-DA隊列。這樣就可以加快緩存的查找速度。證明方法很簡單假設LFU-DA算法的平均查找時間是t,系統(tǒng)緩存隊列被分成m個隊列,那么改進后算法的平均查找時間約為t/m。
共享內(nèi)存方式的緩存結(jié)構(gòu)可能出現(xiàn)同一時刻多個進程訪問同一緩存塊的情況,需要加鎖實現(xiàn)進程間的訪問互斥。鎖粒度大小對緩存性能影響很大,粒度過大會造成太大的一致性和互斥開銷,粒度太小則會帶來太大的鎖管理開銷。本發(fā)明緩存的鎖粒度是隊列級的。緩存隊列根據(jù)hash函數(shù)被分成m個小隊列,為每個小隊列都設立一個讀寫互斥鎖。使用隊列級鎖粒度策略易于管理,守護進程在文件系統(tǒng)初啟時負責預先為每個隊列靜態(tài)申請一個鎖,之后所有鎖也由守護進程管理和撤消。本實例鎖采用信號量實現(xiàn)。
一級緩存管理模塊控制流程如下
(1)守護進程申請共享內(nèi)存空間,維護和管理緩存塊數(shù)組和可分配緩存塊數(shù)組;(2)應用進程數(shù)據(jù)訪問請求,判斷一級緩存是否命中,命中進入步驟(5);(3)一級緩存未命中,按照零級緩存網(wǎng)絡訪問協(xié)議訪問對象存儲節(jié)點,得到所需數(shù)據(jù)對象,數(shù)據(jù)對象訪問頻率為0,如果判斷緩存隊列是否為滿,滿則進入步驟(4),否則將數(shù)據(jù)對象放入空的緩存單元,進入步驟(5);(4)緩存隊列滿,則查找所有緩存單元中年齡最小的緩存單元,用數(shù)據(jù)對象替換年齡最小的緩存單元,使全局變量K等于被替換塊年齡;(5)數(shù)據(jù)塊訪問頻率加1,按照(公式1)計算得到新的年齡,然后求hash值隊列號,申請隊列級互斥鎖,把緩存單元插入新的隊列,進行緩存單元讀寫操作。
二級緩存管理模塊負責對象存儲節(jié)點間二級緩存統(tǒng)一置換,采用多隊列統(tǒng)一置換算法——MQU(Multi-Queue United)算法。
大型對象網(wǎng)絡存儲系統(tǒng)中,一個文件往往被分片成多個對象,分別存儲在不同的對象存儲節(jié)點上,以提高并行帶寬。在高性能計算(如矩陣計算)中,經(jīng)常需要同時取得所有存儲節(jié)點上的數(shù)據(jù)對象后才能開始操作,如果某個節(jié)點訪問延遲較大,就會產(chǎn)生系統(tǒng)單一失效點,降低計算性能。為了解決單一失效點問題,本發(fā)明提出了訪問組的概念,即具有相同屬性分布在不同對象存儲節(jié)點上的數(shù)據(jù)對象構(gòu)成同一個訪問組。MQU算法對于屬于同一個訪問組的數(shù)據(jù)對象進行統(tǒng)一置換,要么全部保留,要么全部置換,從而保證了較高的系統(tǒng)命中率。
對象存儲節(jié)點上的二級緩存不像客戶端中的一級緩存,訪問具有高度的時間和空間局部原理特性,這種特性使得考慮訪問時間優(yōu)先的算法在一級緩存中具有較高的命中率。然而LRU和MRU等基于訪問時間考慮的置換算法缺乏對數(shù)據(jù)塊訪問頻率的考慮;LFU等基于訪問頻率考慮的置換算法則缺乏對訪問時間的考慮,存在緩存污染問題;LFU-DA、MQ等算法雖然綜合考慮了訪問時間和訪問頻率,但是沒有考慮在分布式環(huán)境下多個存儲節(jié)點間的統(tǒng)一置換,在存在多個存儲節(jié)點的分布式系統(tǒng)中緩存命中率和緩存讀寫響應速度不夠理想。
本發(fā)明MQU算法基于MQ算法設計,在置換時,對位于不同存儲節(jié)點上的同屬于一個訪問組的對象給予整體考慮,和傳統(tǒng)的數(shù)據(jù)塊單獨置換算法相比,MQU算法減小了存儲節(jié)點二級緩存中出現(xiàn)單個節(jié)點緩存缺失的概率,并且各節(jié)點的緩存命中率更趨于平均。如何確定不同對象是否屬于同一個訪問組,本發(fā)明利用集合對象屬性來實現(xiàn),屬于同一個集合的對象位于同一個訪問組。
MQU算法可分成三部分緩存單元的訪問、緩存隊列的動態(tài)調(diào)整和置換對象的選取。其中緩存單元的訪問是算法的主體,由它調(diào)用算法的其它兩部分。算法描述如下MQU算法是在MQ算法的基礎上設計的。MQU算法以訪問組中對象的訪問頻率作為統(tǒng)一置換的依據(jù),各對象存儲節(jié)點在統(tǒng)一置換一個訪問組時需要獲知位于其他存儲節(jié)點上同一個訪問組中對象的訪問頻率,可以通過在每個對象存儲節(jié)點維護所有存儲節(jié)點緩存信息來實現(xiàn)。MQU算法對屬于每個存儲節(jié)點的緩存信息都使用多隊列來管理,即分別用q個LRU隊列來管理屬于每個存儲節(jié)點的緩存信息,q取值由具體應用決定,范圍在4到8之間。根據(jù)對象的訪問頻率來決定把其插入到哪一個LRU隊列中。每個存儲節(jié)點的緩存信息被分成q個部分,每個部分對應一級,從而能夠很快地從最低一級緩存隊列中找出一個對象進行置換。這樣每個存儲節(jié)點上都要維護p*q個緩存隊列,其中p為對象存儲節(jié)的個數(shù)。
MQU算法根據(jù)對象在緩存中未被訪問的時間來動態(tài)調(diào)整數(shù)據(jù)對象的訪問頻率,為此為每個對象都設置一個生存周期(lifeTime),同時設對象的生存期限(expireTime)為當前時間(currentTime)加上生存周期。如果對象過了生存期限即生存期限小于當前時間,此對象將被調(diào)整到低一級隊列(允許不被訪問的時間較短)中,最低一級隊列中的數(shù)據(jù)對象則有可能被調(diào)整出緩存。
MQU算法把對象從緩存中置換出來并非簡單的丟棄,而是為屬于每個存儲節(jié)點的q個緩存信息隊列都提供了一個FIFO隊列來記錄被丟棄對象的歷史訪問頻率和緩存單元標記號,一旦丟棄的數(shù)據(jù)對象被重新訪問,即可從中找到它的歷史訪問頻率。對一個訪問組實行整體置換時,需要經(jīng)常查找同一個訪問組中其他數(shù)據(jù)對象的訪問頻率。為了減少查找時間,MQU算法把同一訪問組中所有的數(shù)據(jù)對象都鏈接在一起。
二級緩存管理模塊控制流程如下(1)申請緩存空間,監(jiān)聽客戶端訪問請求;(2)對象存儲節(jié)點與客戶端建立連接,客戶請求對某個數(shù)據(jù)對象a進行操作;(3)對象存儲節(jié)點訪問二級緩存,判斷二級緩存是否命中,如果命中,把對象a從當前隊列移到高一級隊列中,處于最高隊列則不變,進入步驟(6),否則,二級緩存未命中,進入步驟(4);(4)判斷緩存隊列是否有空閑塊,如果有,進入步驟(6),否則,緩存隊列已滿,按照步驟(4.1)-(4.5)選取被置換對象(4.1)選取被置換對象,把對象存儲節(jié)點最低一級非空隊列中第一個對象作為被置換對象;(4.2)如果被置換對象不屬于任何訪問組,直接丟棄,進入步驟(5);否則,獲取被置換對象所在的訪問組中所有對象的最大訪問頻率;(4.3)如果訪問組中所有對象的最大訪問頻率小于等于被置換對象的訪問頻率,則丟棄本訪問組的所有對象,進入步驟(4.5);(4.4)否則調(diào)整本訪問組中所有對象的訪問頻率為該訪問組中所有對象中的最大訪問頻率,插入相應隊列尾部,調(diào)整被置換對象為最低一級非空隊列的下一個對象,進入步驟(4.2);(4.5)FIFO隊列記錄下被置換對象的訪問頻率,返回被置換對象;(5)緩存隊列已滿且若數(shù)據(jù)對象a在FIFO隊列中,從FIFO隊列中獲得數(shù)據(jù)對象a的訪問頻率,否則數(shù)據(jù)對象a的訪問頻率置為初始值0;(6)從存儲設備讀取對象a,對象a的訪問頻率加1,計算新的隊列號,把對象a插入新隊列的尾部,計算對象a的生存期,按照步驟(6.1)-(6.3)動態(tài)調(diào)整對象存儲節(jié)點二級緩存隊列;(6.1)當前時間加1;
(6.2)在當前對象存儲節(jié)點中依次選擇q個二級緩存隊列中的一個隊列,選取當前隊列的第一個對象。如果為當前隊列為最后一級隊列,進入步驟(7);(6.3)如果第一個對象的生存期限小于當前時間,把此對象調(diào)整到下一級緩存隊列尾部,對象的新生存期限為當前時間加生存周期,當前隊列級加1,進入步驟(6.2);(7)操作結(jié)束。
本發(fā)明的分布式多級緩存系統(tǒng),很好的利用了現(xiàn)有的主存資源,用最小代價取得了很好的性能。如圖4所示為本發(fā)明提供分布式多級緩存系統(tǒng)后數(shù)據(jù)訪問控制流程圖。
權(quán)利要求
1.一種適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng),其特征在于該系統(tǒng)包括位于客戶端中的零級緩存和一級緩存,以及位于對象存儲節(jié)點中的二級緩存;零級緩存用于來源自元數(shù)據(jù)服務器中的元數(shù)據(jù)緩存,一級緩存為直接服務于應用進程的數(shù)據(jù)緩存,二級緩存為直接服務于客戶端的數(shù)據(jù)緩存;零級緩存管理模塊用于負責零級緩存中元數(shù)據(jù)的查找、替換以及按照網(wǎng)絡訪問控制協(xié)議進行元數(shù)據(jù)的訪問;一級緩存管理模塊用于控制一級緩存,負責共享內(nèi)存空間的申請、分配、回收以及緩存單元的置換;二級緩存管理模塊負責對對象存儲節(jié)點間二級緩存進行統(tǒng)一置換。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述零級緩存管理模塊中的網(wǎng)絡訪問協(xié)議為(B1)客戶端將要訪問文件的路徑轉(zhuǎn)化為全局文件系統(tǒng)唯一路徑名,應用進程查詢零級緩存,判斷緩存是否命中,如果命中進入步驟(B4);(B2)客戶端與元數(shù)據(jù)服務器建立連接,發(fā)送元數(shù)據(jù)查詢請求;(B3)元數(shù)據(jù)服務器對客戶端訪問進行身份驗證,如果合法則查詢元數(shù)據(jù),確認所訪問的文件是否存在,發(fā)送應答信息到客戶端,進入步驟(B5);(B4)應答應用進程;(B5)客戶端應用進程收到應答信息后,訪問對象存在則發(fā)送讀對象請求到元數(shù)據(jù)服務器,否則報錯過程結(jié)束;(B6)元數(shù)據(jù)服務器收到客戶讀對象請求后,發(fā)送對象ID到相關對象存儲節(jié)點;(B7)對象存儲節(jié)點驗證元數(shù)據(jù)服務器訪問請求后,打開對象,發(fā)送應答信息到元數(shù)據(jù)服務器;(B8)元數(shù)據(jù)服務器收到應答后,把對客戶端的授權(quán)、文件與存儲對象ID映射表以及存儲對象節(jié)點位置信息應答給客戶端,同時更新零級緩存;(B9)客戶端收到元數(shù)據(jù)服務器的應答信息后,向元數(shù)據(jù)對應的對象存儲節(jié)點發(fā)讀對象請求命令包,與相應對象存儲節(jié)點建立連接;(B10)對象存儲節(jié)點驗證用戶請求,確認后發(fā)送數(shù)據(jù)對象給客戶端,直到數(shù)據(jù)傳輸結(jié)束。
3.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其特征在于所述一級緩存管理模塊的守護進程按照下述步驟申請、分配和回收一級緩存空間(C1)向系統(tǒng)申請一塊緩存空間,并按照指定緩存塊大小將緩存空間分塊,用一個緩存塊數(shù)組表示緩存空間,數(shù)組大小為所申請緩存空間的總塊數(shù);(C2)維護一個可分配緩存塊數(shù)組,大小與緩存塊數(shù)組相同,并用可分配號、空閑號分別指示可分配緩存塊數(shù)組中空閑項的首部和尾部;(C3)當應用進程訪問共享緩存空間時,進入步驟(C4);當應用進程釋放緩存空間時,進入步驟(C5);(C4)訪問共享緩存空間時,如果命中則直接進行讀寫操作;否則,首先判斷是否有空閑緩存塊可用,方法是判斷可分配號和空閑號是否相等,如果可分配號和空閑號相等,進入步驟(C41),否則進入步驟(C42);(C41)可分配號和空閑號相等表示沒有空閑塊可用,則對緩存塊進行置換,置換后再進行讀寫操作,工作完畢;(C42)可分配號和空閑號不相等表示還有空閑塊可利用,讀取可分配號所指示的可分配緩存塊數(shù)組項的值,該值就是第一塊可供分配緩存空閑塊的下標,把下標指示的緩存塊分配給應用進程,將可分配號所指示的可分配緩存塊數(shù)組項的值設為-1,然后可分配號加1并取總緩存塊數(shù)的模,新的可分配號指示下一個空閑塊,工作完畢;(C5)應用進程不再使用緩存塊時需要釋放申請的緩存塊,首先空閑號加1取總緩存塊數(shù)的模得到新的空閑號,把空閑號指示的可分配緩存塊數(shù)組項的值設為所釋放緩存塊號,完成緩存塊的回收,工作完畢。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于所述一級緩存管理模塊按照下述步驟對緩存單元進行置換(D1)申請共享內(nèi)存空間,維護和管理緩存塊數(shù)組和可分配緩存塊數(shù)組;(D2)應用進程數(shù)據(jù)訪問請求,判斷一級緩存是否命中,命中進入步驟(D5);(D3)一級緩存不命中,按照零級緩存網(wǎng)絡訪問協(xié)議訪問對象存儲節(jié)點,得到所需數(shù)據(jù)對象,數(shù)據(jù)對象訪問頻率為0,如果判斷緩存隊列是否為滿,滿則進入步驟(D4),否則將數(shù)據(jù)對象放入空的緩存單元,轉(zhuǎn)入步驟(D5);(D4)查找所有緩存單元中年齡最小的緩存單元,用數(shù)據(jù)對象替換年齡最小的緩存單元,使全局變量K等于被替換塊年齡;(D5)數(shù)據(jù)塊訪問頻率加1,按照公式(1)計算得到新的年齡Ki,然后求hash值隊列號,申請隊列級互斥鎖,把緩存單元插入新的隊列,進行緩存單元讀寫操作;Ki=CI*Fi+K 公式(1)其中,F(xiàn)i是數(shù)據(jù)塊被訪問的次數(shù),第一次加入到緩存中的數(shù)據(jù)塊訪問次數(shù)F1的值為1;CI為頻率因子;K值在有數(shù)據(jù)塊被置換出去時調(diào)整為被置換塊的“年齡”。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于所述二級緩存管理模塊按照下述步驟對對象存儲節(jié)點間二級緩存進行統(tǒng)一置換(E1)申請緩存空間,監(jiān)聽客戶端訪問請求;(E2)對象存儲節(jié)點與客戶端建立連接,客戶請求對某個數(shù)據(jù)對象a進行操作;(E3)對象存儲節(jié)點訪問二級緩存,判斷二級緩存是否命中,如果命中,把上述對象a從當前隊列移到高一級隊列中,處于最高隊列則不變,進入步驟(E6),否則,二級緩存不命中,進入步驟(E4);(E4)判斷緩存隊列是否有空閑塊,如果有,進入步驟(E6),否則,緩存隊列已滿,按照步驟(E41)-(E45)選取被置換對象(E41)選取被置換對象,把對象存儲節(jié)點最低一級非空隊列中第一個對象作為被置換對象;(E42)如果被置換對象不屬于任何訪問組,直接丟棄,進入步驟(E5);否則獲取被置換對象所在的訪問組中所有對象的最大訪問頻率;(E43)如果訪問組中所有對象的最大訪問頻率小于等于被置換對象的訪問頻率,則丟棄本訪問組的所有對象,進入步驟(E45);(E44)調(diào)整本訪問組中所有對象的訪問頻率為該訪問組中所有對象中的最大訪問頻率,插入相應隊列尾部,調(diào)整被置換對象為最低一級非空隊列的下一個對象,轉(zhuǎn)入步驟(E42);(E45)FIFO隊列記錄下被置換對象的訪問頻率,返回被置換對象;(E5)緩存隊列已滿且如果數(shù)據(jù)對象a在FIFO隊列中,從FIFO隊列中獲得數(shù)據(jù)對象a的訪問頻率,否則數(shù)據(jù)對象a的訪問頻率為初始值0,(E6)從存儲設備讀取對象a,對象a的訪問頻率加1,計算新的隊列號,把對象a插入新隊列的尾部,計算對象a的生存期,按照步驟(E61)-(E63)動態(tài)調(diào)整對象存儲節(jié)點二級緩存隊列;(E61)當前時間加1;(E62)在當前對象存儲節(jié)點中依次選擇q個二級緩存隊列中的一個隊列,其中,q為屬于各個存儲節(jié)點的緩存信息的隊列數(shù),q取值在4到8之間;選取當前隊列的第一個對象,如果為當前隊列為最后一級隊列,進入步驟(E7);(E63)如果第一個對象的生存期限小于當前時間,把此對象調(diào)整到下一級緩存隊列尾部,對象的新生存期限為當前時間加生存周期,當前隊列級加1,進入步驟(E62);(E7)操作結(jié)束。
全文摘要
本發(fā)明公開了一種適用于對象網(wǎng)絡存儲的分布式多級緩存系統(tǒng)。包括用于元數(shù)據(jù)緩存的零級緩存、用于客戶端數(shù)據(jù)緩存的一級緩存和用于對象存儲節(jié)點數(shù)據(jù)緩存的二級緩存。零級緩存管理模塊負責零級緩存中元數(shù)據(jù)的查找、替換和按照網(wǎng)絡訪問控制協(xié)議進行元數(shù)據(jù)訪問;一級緩存管理模塊負責共享內(nèi)存空間的申請、分配、回收以及緩存單元的置換;二級緩存管理模塊負責對對象存儲節(jié)點間二級緩存進行多隊列統(tǒng)一置換。本發(fā)明解決了客戶端元數(shù)據(jù)緩存一致性問題,加快了元數(shù)據(jù)的訪問速度,降低了服務請求響應時間;提高了整個文件系統(tǒng)的I/O吞吐量,降低了緩存對象的平均查找時間;提高了存儲節(jié)點緩存整體命中率,提高了系統(tǒng)數(shù)據(jù)傳輸率。
文檔編號G06F12/08GK1852318SQ20061001883
公開日2006年10月25日 申請日期2006年4月19日 優(yōu)先權(quán)日2006年4月19日
發(fā)明者陳進才, 周功業(yè), 吳偉杰, 易佳, 雷偉, 李漪 申請人:華中科技大學