摘要:為解決Ceph系統(tǒng)在處理小文件時,由于小文件被頻繁訪問時,集群需要在多個存儲節(jié)點之間不斷查找文件,導(dǎo)致系統(tǒng)讀取性能較低的問題,本文提出了一種基于Ceph的文件預(yù)取緩存算法。該算法通過引入權(quán)重衰減因子來動態(tài)計算緩存文件的權(quán)重,當(dāng)小文件長時間未被訪問時,該文件的權(quán)重會隨之降低。若權(quán)重小于閾值時,該文件會從緩存中移除,這樣可以減少緩存空間的浪費,提高緩存文件的命中率。實驗結(jié)果表明,該方法與現(xiàn)有方法相比能明顯提高小文件的訪問效率。
關(guān)鍵詞:ceph;小文件;預(yù)讀取;緩存;權(quán)重因子
中圖分類號:TP302 ? ? 文獻標識碼:A
文章編號:1009-3044(2020)17-0225-03
Abstract: In order to solve the problem that when CEPH system processes small files, because of the frequent access of small files, the cluster needs to constantly search for files among multiple storage nodes, resulting in low system read performance, this paper proposes a file prefetch caching algorithm based on CEPH. In this algorithm, the weight of the cache file is calculated dynamically by introducing the weight attenuation factor. When the small file is not accessed for a long time, the weight of the file will be reduced. If the weight is less than the threshold value, the file will be removed from the cache, which can reduce the waste of cache space and improve the hit rate of the cache file. Experimental results show that this method can significantly improve the access efficiency of small files compared with the existing methods.
Key words: ceph; small file; prepare reading; cache; weight factor
Ceph[1,2]是一種基于對象存儲的無中心化的分布式文件系統(tǒng),由于采用了對象存儲的方式,其數(shù)據(jù)處理過程高度并行化,Ceph系統(tǒng)能夠通過添加普通服務(wù)器來擴大集群,可輕松將存儲規(guī)模擴展至PB級。而CRUSH[5,6]作為Ceph集群的核心算法可以動態(tài)的計算出各個文件的存儲位置,實現(xiàn)了文件元數(shù)據(jù)的服務(wù)器功能,使之成了一個即使出現(xiàn)單節(jié)點故障也能正常使用的存儲系統(tǒng)。但Ceph系統(tǒng)在頻繁讀取小文件時,由于集群需要在多個存儲節(jié)點之間不斷查找文件,導(dǎo)致系統(tǒng)讀取性能較低的問題[8]。
在小文件訪問時,目前有兩種方法可以提高小文件的訪問效率。Zou Zhenyu[3]等人采用文件預(yù)取機制將文件預(yù)取至緩存中,減少用戶與集群的直接交互,從而提高文件的訪問效率;Cheng Wenjuan[4]等人提出一種索引機制,在文件合并時生成相應(yīng)的索引文件,減少小文件的查找時間,可以提高小文件的訪問效率。本文在LRU算法的基礎(chǔ)上給出一種改進的LRU_W算法。
1 LRU_W算法
分布式存儲系統(tǒng)在處理海量小文件時,通過優(yōu)化小文件處理算法所帶來的效果遠不如系統(tǒng)利用緩存帶來的效果。因此,為了提高分布式存儲系統(tǒng)的性能,針對不同應(yīng)用場景設(shè)計實現(xiàn)的文件存儲系統(tǒng)則會采用不同的緩存替換方法。
在確定分布式存儲系統(tǒng)采用緩存機制可以提高系統(tǒng)的整體性能后,如何確定系統(tǒng)的緩存容量已經(jīng)成為評估系統(tǒng)存儲性能的重要問題。通過分析存儲系統(tǒng)的數(shù)據(jù)特征,可以確定存儲系統(tǒng)是讀請求比較集中,還是寫請求比較集中。若存儲系統(tǒng)是寫請求比較集中時,可以在系統(tǒng)文件寫入時設(shè)置一個寫緩存;若該系統(tǒng)是讀請求比較集中時,可以在系統(tǒng)中設(shè)置一個讀緩存。系統(tǒng)也可以通過再次訪問緩存對象文件的大小,確定系統(tǒng)所需要的緩存容量大小,從而可以避免因緩存文件太小而浪費緩存空間。
1.1 LRU_W算法改進與實現(xiàn)
LRU算法是目前最常用的一種緩存替換算法,該算法是根據(jù)緩存文件的訪問時間間隔原理設(shè)計實現(xiàn)的。當(dāng)緩存容量不足時,將最不常被訪問的文件替換出緩存。本文在設(shè)計緩存機制時,采用的是LRU算法來實現(xiàn)系統(tǒng)文件的預(yù)取及緩存。但在實驗時發(fā)現(xiàn),在面對海量文件讀取及緩存時,隨著文件存儲數(shù)量及用戶請求數(shù)量的不斷增大,緩存中文件的數(shù)量也不斷增長,這樣將出現(xiàn)有些小文件長時間未被訪問而浪費緩存空間的問題,導(dǎo)致緩存文件命中率降低。對此,論文給出一種基于訪問頻率及用戶訪問時間的LRU改進算法LRU_W。該算法在文件寫入緩存時,首先利用公式(1)為該緩存文件計算出其權(quán)重因子Rw,并將其放置在緩存隊列的頭部。
1.2 LRU_W算法請求處理流程
LRU_W算法是基于LRU算法的改進,該算法充分考慮了文件的訪問時間及訪問頻率因素,動態(tài)計算出每一個緩存文件的權(quán)重因子。通過公式(2)計算緩存文件的權(quán)重,并根據(jù)緩存文件的權(quán)重來確定緩存文件的優(yōu)先級。當(dāng)緩存容量不足時,將權(quán)重最小的文件從緩存中移除。
LRU_W緩存算法的請求處理流程如圖1所示。
由圖1可以看出,當(dāng)用戶發(fā)出訪問請求時,系統(tǒng)需要首先緩存中是否有該文件,若存在緩存中,則從緩存中讀出相應(yīng)的文件內(nèi)容并返回請求文件給用戶,并重新計算緩存對象的權(quán)重,若其權(quán)重值低于給定閾值,則從緩存中移除該文件,否則就更新緩存信息。若該文件不在緩存中,就說明文件尚未被讀取出來,然后系統(tǒng)向Ceph集群發(fā)出讀請求,從Ceph集群中讀取請求文件及與其相關(guān)的小文件至緩存中。當(dāng)緩存容量不足時,優(yōu)先將緩存中權(quán)重比較低的緩存對象從緩存中移除。
本文在LRU_W算法的基礎(chǔ)上設(shè)計實現(xiàn)了一個二級緩存策略,該策略根據(jù)文件對應(yīng)的權(quán)重因子不同,將緩存文件分別對應(yīng)不同的優(yōu)先級,其詳細實現(xiàn)過程如圖2所示。
如圖2所示,Q,Q1分別代表二級緩存數(shù)據(jù)結(jié)構(gòu)的一級緩存和二級緩存,其中二級緩存中的文件優(yōu)先級相比一級緩存中的文件較高。該緩存策略的主要實現(xiàn)過程是:
1) 新加入緩存的數(shù)據(jù)放入Q中的首部,記錄訪問時間和訪問次數(shù),并給出相應(yīng)的初始權(quán)重;
2) 隨著時間的不斷增加,文件權(quán)重的不斷改變,當(dāng)文件的權(quán)重大于給定的閾值時,就將優(yōu)先級比較高的文件放入二級緩存Q1中。用戶在訪問文件時,首先從Q1中檢查該文件是否存在,若不存在,再從Q中檢查該文件是否存在。這樣可以保證權(quán)重較高的文件優(yōu)先級較高;
3) 隨著海量小文件的讀取,緩存容量不足時,首先從優(yōu)先級較低的一級緩存Q中刪除權(quán)重因子較低的文件;
4) 由于緩存文件的權(quán)重因子會隨著時間的增長而衰減,當(dāng)其權(quán)重降低到低于閾值時,該文件將會緩存中淘汰,避免文件長時間未被訪問而浪費緩存空間。
2 實驗與分析
實驗對緩存優(yōu)化機制的測試主要分為:LRU_W改進算法的相對命中率、絕對命中率及緩存優(yōu)化機制應(yīng)用到系統(tǒng)時文件的平均讀取時間測試三部分。
(1)LRU_W算法的命中率
測試實驗在本地緩存容量與數(shù)據(jù)總量的比值分別為10%、20%、30%、40%、50%、55%、60%、65%時,對LFU、LRU、LRU_W三種算法的相對命中率進行了測試。其測試結(jié)果如圖3所示。
由圖3可以看出,隨著本地緩存容量與數(shù)據(jù)總量比值的不斷增大,三種緩存替換算法的相對命中率也隨之不斷提高,但本章節(jié)給出的緩存算法的相對命中率在本地緩存容量與數(shù)據(jù)總量比值較小時一直都是最優(yōu)的。
(2) LRU_W算法的絕對命中率
該測試主要是通過不斷改變本地緩存容量與數(shù)據(jù)總量的比值對緩存文件命中率的影響。具體實驗過程是:本地緩存容量與數(shù)據(jù)總量的比值分別為10%、20%、30%、40%、50%、55%、60%、65%,對LFU、LRU、LRU_W三種算法的絕對命中率進行測試。其測試結(jié)果如圖4所示。
由圖4可以看出,隨著本地緩存容量與數(shù)據(jù)總量比值的不斷增大,LRU_W、LRU、LFU三種算法的絕對命中率也隨之不斷提高,但明顯可以看出LRU_W算法相比其他兩種算法的絕對命中率也是相對較優(yōu)的。當(dāng)比值達到55%時,可以看出三種緩存算法的絕對命中率幾乎相同。
由圖3和圖4可以看出,LRU_W算法和LRU、LFU緩存算法想比較,LRU_W算法在本地緩存容量與數(shù)據(jù)總量的比值較小時性能較優(yōu)。海量小文件存儲系統(tǒng)中本地緩存容量是有限的,而系統(tǒng)數(shù)據(jù)是海量的, 因此本地緩存容量與數(shù)據(jù)總量的比值是較小的,而LRU_W算法在比值較小時,其緩存性能最優(yōu)。
(3) 系統(tǒng)文件讀取性能測試
該測試模塊的主要作用是當(dāng)系統(tǒng)中存在海量數(shù)據(jù)時,使用緩存優(yōu)化機制的系統(tǒng)和無緩存優(yōu)化系統(tǒng)對小文件查找效率的影響。具體實驗過程如下:每一次測試都在上一次測試的基礎(chǔ)上,增加相應(yīng)的小文件請求。如首次測試讀取500個小文件時的文件平均讀取時間,其次是分別測試讀取1000、3000、6000、10000個小文件時文件的平均讀取時間。其中,緩存機制的緩存容量設(shè)置為2000,小文件的平均讀取時間測試結(jié)果如圖5所示。
由圖5可以看出,在沒有緩存優(yōu)化機制的系統(tǒng)中,隨著小文件讀取數(shù)量的不斷增加,其平均讀取時間明顯增加較快;在讀取同樣數(shù)量的小文件時,具有緩存優(yōu)化機制系統(tǒng)的平均讀取時間顯然優(yōu)于原存儲系統(tǒng)。主要是因為系統(tǒng)使用了緩存優(yōu)化機制,可以將小文件提前存儲在緩存中,用戶從緩存中讀取文件,可以減少用戶與集群的交互,從而減少用戶的讀取時間,提高了系統(tǒng)的讀取效率。同時隨著讀取文件數(shù)量的增加,緩存優(yōu)化機制根據(jù)緩存文件的訪問時間和訪問頻率計算出其權(quán)重衰減因子,若文件長時間未被訪問,該權(quán)重隨之衰減。當(dāng)權(quán)重小于閾值時,該文件會從緩存中移除,可以減少緩存空間的浪費,提高緩存文件的命中率及系統(tǒng)的整體性能。
3 結(jié)束語
針對Ceph系統(tǒng)讀取性能較低的問題,本文在LRU算法的基礎(chǔ)上給出一種改進的LRU_W算法。該算法通過引入權(quán)重衰減因子來動態(tài)計算緩存文件的權(quán)重,當(dāng)小文件長時間未被訪問時,該文件的權(quán)重會隨之降低。若權(quán)重小于閾值時,該文件會從緩存中移除,這樣可以減少緩存空間的浪費,提高緩存文件的命中率。實驗結(jié)果表明,該方法與現(xiàn)有方法相比能明顯提高小文件的訪問效率。
參考文獻:
[1] 陸小霞, 王勇, 雷曉春.系統(tǒng)中海量氣象小文件存取性能優(yōu)化方法[J]. 桂林電子科技大學(xué)學(xué)報, 2019, 39(1):61-66.
[2] Yang Chaowei, Huang Qunying, Li Zhenlong, et al. Big Data and cloud computing: innovation opportunities and challenges[J]. International Journal of Digital Earth, 2017, 10(1):13-53.
[3] Zou Zhenyu, Zheng Quan, Wang Song, et al. Optimiza-tion Scheme of Small File in Cloud Storage System Based on HDFS[J]. Computer Engineering, 2016, 42(3):34-40,46.
[4] Cheng Wenjuan, Zhou Miaomiao, Tong Bing, et al. Op-timizing small file storage process of the HDFS which based on the indexing mechanism[C]// IEEE, Internation-al Conference on Cloud Computing and Big Data Analy-sis. IEEE, 2017:44-48.
[5] Weil S A, Brandt S A, Miller E L, et al. CEPH: a scala-ble, high-performance distributed file system[C]//7th Symposium on Operating Systems Design and Imple-mentation (OSDI '06), November 6-8, Seattle, WA, USA. 2006:307-320.
[6] Weil S A. CEPH: reliable, scalable, and high perfor-mance-distributed storage[J]. Santa Cruz, 2007.
[7] Li Hongqi, Zhu Liping, Sun Guoyu, et al. Design and implementation of distributed mass small file storage system [J].Computer Engineering and Design, 2016,37(1):86-92.
[8] Wang Tao, Yao Shihong, Xu Zhengquan, et al. An Effec-tive Strategy for Improving Small File Problem in Dis-tributed File System[C]// International Conference on In-formation Science and Control Engineering. IEEE Com-puter Society, 2015:122-126.
【通聯(lián)編輯:梁書】