陸小霞, 王 勇, 雷曉春
(1.桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林 541004;2.桂林電子科技大學(xué) 計(jì)算機(jī)與信息安全學(xué)院, 廣西 桂林 541004;3.桂林電子科技大學(xué) 廣西云計(jì)算與大數(shù)據(jù)協(xié)同創(chuàng)新中心,廣西 桂林 541004)
Ceph[1-2]分布式存儲(chǔ)系統(tǒng)因其高有效性、高可靠性、高可擴(kuò)展性等優(yōu)異的性能使其在企業(yè)和科研領(lǐng)域得到了廣泛關(guān)注。由于Ceph采用對(duì)象存儲(chǔ)方式,其數(shù)據(jù)處理過(guò)程高度并行化,通過(guò)添加普通服務(wù)器至集群,可輕松將存儲(chǔ)規(guī)模擴(kuò)展至PB級(jí),CRUSH[3](controlled replication under scalable hashing)作為Ceph核心算法,能動(dòng)態(tài)計(jì)算數(shù)據(jù)存儲(chǔ)位置,實(shí)現(xiàn)了元數(shù)據(jù)服務(wù)器的功能,使之成為一個(gè)無(wú)單節(jié)點(diǎn)故障的系統(tǒng)。但Ceph集群在存儲(chǔ)海量小文件時(shí),仍存在著幾個(gè)問(wèn)題:1) 由于Ceph集群的數(shù)據(jù)雙倍寫入導(dǎo)致實(shí)際磁盤的輸出吞吐量是其物理性能的一半。2) 由于Ceph集群要求高度的數(shù)據(jù)一致性,對(duì)副本一致性的要求較高,在文件寫入時(shí),文件必須先寫入到主副本的OSD,主副本的OSD寫入成功后再同時(shí)向一個(gè)或者多個(gè)次副本的OSD寫入相同的數(shù)據(jù),只有在所有OSD都寫入完成后,主副本的OSD才向客戶端返回寫入成功,但是這樣就會(huì)降低Ceph的存儲(chǔ)效率,特別是面對(duì)數(shù)量規(guī)模特別大的情況。
目前,針對(duì)海量小文件存儲(chǔ)和訪問(wèn)效率較低問(wèn)題,主要有2種解決方法:1) 文件合并方法。該方法通過(guò)小文件合并來(lái)減少文件元數(shù)據(jù)的數(shù)量,以提高小文件的存儲(chǔ)效率。2) 文件預(yù)讀取方法。該方法通過(guò)讀取文件時(shí)將與其相鄰的文件一起取出放入緩存,減少用戶與系統(tǒng)的交互以提高文件的訪問(wèn)效率。已有文獻(xiàn)并未考慮文件合并后,文件之間的關(guān)聯(lián)性對(duì)文件預(yù)取的影響[4-8]。
文獻(xiàn)[9-10]針對(duì)HDFS在存儲(chǔ)海量小文件時(shí)NameNode內(nèi)存消耗高等問(wèn)題,提出了通過(guò)相關(guān)小文件的合并和預(yù)取來(lái)提高結(jié)構(gòu)相關(guān)小文件的方案,但并未給出獨(dú)立小文件的相關(guān)解決方法;游小容等[11]提出一種利用教育資源小文件間的前驅(qū)后繼關(guān)系,通過(guò)空間向量模型VSM算法計(jì)算出2個(gè)文件間的相關(guān)性合并的解決方案,以解決HDFS在存儲(chǔ)海量小文件時(shí)NameNode內(nèi)存消耗高的問(wèn)題;FU Songling等[4]針對(duì)并行網(wǎng)絡(luò)文件系統(tǒng)在大規(guī)模訪問(wèn)小文件時(shí),由于元數(shù)據(jù)訪問(wèn)頻率較高,磁盤效率較低導(dǎo)致小文件訪問(wèn)性能較低的問(wèn)題,提出一種小文件元數(shù)據(jù)預(yù)取優(yōu)化機(jī)制,該機(jī)制可以明顯降低用戶訪問(wèn)延遲并充分利用客戶端緩存,提高了并行網(wǎng)絡(luò)文件系統(tǒng)的小文件訪問(wèn)效率。LI Hongqi等[6]針對(duì)Ceph在面對(duì)海量小文件同時(shí)訪問(wèn)時(shí)性能下降等問(wèn)題,提出將同一個(gè)目錄下的相關(guān)小文件歸檔為一個(gè)大文件的方法,以減少文件元數(shù)據(jù)的數(shù)量來(lái)提高文件的訪問(wèn)效率,并采用2-3-4樹索引以提高小文件添加查找的靈活度,但其并未考慮各個(gè)小文件間之間的關(guān)聯(lián)性問(wèn)題,也未考慮文件讀取優(yōu)化機(jī)制。
針對(duì)上述已有文獻(xiàn)所給出優(yōu)化方法的不足,以及Ceph在處理海量小文件時(shí)存在的問(wèn)題,提出一種Ceph系統(tǒng)中海量氣象小文件存取性能優(yōu)化方法。該方法的主要?jiǎng)?chuàng)新點(diǎn)是:1) 在Ceph集群中增加文件日志分析模塊,該模塊用于統(tǒng)計(jì)分析用戶的訪問(wèn)行為,得到同一空間不同時(shí)間及同一時(shí)間不同空間氣象文件間的關(guān)聯(lián)概率,并根據(jù)其關(guān)聯(lián)關(guān)系進(jìn)行相關(guān)合并,通過(guò)減少文件的數(shù)量來(lái)提高文件的存儲(chǔ)效率;2) 提出一種基于文件塊的利用率和相關(guān)率的文件預(yù)取算法,通過(guò)將相關(guān)文件預(yù)取至緩存,可以減少用戶與集群交互,提高文件的訪問(wèn)效率。
在氣象研究中,氣象小文件之間一般存在著同一空間不同時(shí)間或同一時(shí)間不同空間的關(guān)聯(lián)關(guān)系,可以通過(guò)統(tǒng)計(jì)分析文件的歷史訪問(wèn)日志,利用式(1)和式(2)計(jì)算這些氣象文件間的關(guān)聯(lián)概率,并將相關(guān)聯(lián)的文件進(jìn)行合并存儲(chǔ)至Ceph集群。
定義1P(B|A)表示用戶在訪問(wèn)過(guò)文件A之后T時(shí)間內(nèi)再訪問(wèn)文件B的概率。
(1)
其中:NAB為T時(shí)間內(nèi)文件A和文件B同時(shí)被訪問(wèn)的次數(shù);NA為文件A被訪問(wèn)的次數(shù)。
定義2P(AB)表示T時(shí)間范圍內(nèi),文件A和B都被訪問(wèn)的概率,其中N為歷史文件訪問(wèn)日總數(shù)。
(2)
1.1.1 文件關(guān)聯(lián)概率算法
計(jì)算文件關(guān)聯(lián)概率時(shí)首先通過(guò)分析文件歷史訪問(wèn)日志并統(tǒng)計(jì)出文件A和B被訪問(wèn)的次數(shù)NA和NB,以及歷史日志的訪問(wèn)總數(shù)N,然后通過(guò)式(1)和式(2)分別計(jì)算出文件的關(guān)聯(lián)概率。
1.1.2 文件關(guān)聯(lián)合并算法
定義3在關(guān)聯(lián)關(guān)系(file1,file2,, filen)中,其中,稱file1為其關(guān)聯(lián)關(guān)系的前驅(qū),而filen為其后繼。
由算法1得到文件的關(guān)聯(lián)集合,但該關(guān)聯(lián)關(guān)系只限于2個(gè)小文件之間,如(file1,file2)和(file2,file3),若只是將該關(guān)聯(lián)集合內(nèi)的文件進(jìn)行合并,將會(huì)導(dǎo)致文件重復(fù)存儲(chǔ)且浪費(fèi)存儲(chǔ)空間。因此,在文件合并前需要將文件關(guān)聯(lián)集合的關(guān)聯(lián)關(guān)系先進(jìn)行合并,其合并過(guò)程如下:
輸入:文件歷史日志
輸出:文件關(guān)聯(lián)集合
1.遍歷文件歷史訪問(wèn)日志分析統(tǒng)計(jì)得到fileA和fielB的訪問(wèn)次數(shù)NA、NB和NAB
2.利用公式P(B|A)=NAB/NA和P(AB)=NAB/N// 計(jì)算文件之間的關(guān)聯(lián)概率
3.ifP(B|A)>minP(B|A)&&P(AB)>minP(AB):
4.file_set.append(fileA,fileB)
5.else:
6.remove(fileA,fielB)
7.return file_set
1) 在文件關(guān)聯(lián)集合file_set中選取一個(gè)小文件,該文件在關(guān)聯(lián)關(guān)系中前驅(qū)出現(xiàn)次數(shù)最多,并從這些關(guān)聯(lián)關(guān)系中選擇關(guān)聯(lián)概率最大的作為首個(gè)合并對(duì)象。
2) 依次將其余關(guān)聯(lián)關(guān)系中的前驅(qū)與此關(guān)聯(lián)關(guān)系后繼相同的關(guān)聯(lián)關(guān)系合并在一起,若有多個(gè)關(guān)聯(lián)關(guān)系滿足條件,則選取關(guān)聯(lián)概率最大的合并,每次合并一個(gè)關(guān)聯(lián)關(guān)系就將其從file_set中移除。
3) 重復(fù)執(zhí)行過(guò)程2直到找不到合適的關(guān)聯(lián)關(guān)系,結(jié)束此次合并,返回過(guò)程1開(kāi)始下一次合并。
在文件進(jìn)行合并時(shí),為避免文件分塊存儲(chǔ),設(shè)置的文件塊大小為4 MB,當(dāng)文件塊小于4 MB時(shí),遍歷關(guān)聯(lián)文件集合將每個(gè)關(guān)聯(lián)關(guān)系中的小文件進(jìn)行合并存儲(chǔ)到Ceph中。文件關(guān)聯(lián)合并算法的偽代碼如下:
輸入:文件關(guān)聯(lián)集合file_set
輸出:上傳至Ceph集群
1.merge(file_set,correlation){//關(guān)聯(lián)關(guān)系合并
2.if (correlation=null):
3. 首個(gè)合并對(duì)象firstfile
4. nextfile=firstfile.next
5. if(size(firstfile)+size(nextfile))<4M:
6. correlation_set.append(nextfile)//關(guān)聯(lián)合并
7. remove nextfile
8. else:
9. firstfile=correlation
10. if(nextfile=null):
11. correlation_set.append(firstfile)
12. remove firstfile from file_set
13. merge(file_set,correlation)//開(kāi)始
下一次關(guān)聯(lián)合并
14.for nextfile in correlation_set: //文件合并上傳
15. if(size(mergefile)+size(nextfile))<4M:
16. mergefile.append(nextfile)
17. else:
18. upload mergefile to Ceph
19.}
1.1.3 索引文件
在小文件訪問(wèn)時(shí),目前有2種方法可以提高小文件的訪問(wèn)效率。一種是減少用戶與集群的直接交互;另外一種是減少小文件的查找時(shí)間。為了提高文件的查找效率,減少用戶小文件的查找時(shí)間,在小文件合并時(shí)為各個(gè)小文件建立了相應(yīng)的索引文件,通過(guò)索引文件Ceph集群可以快速找到小文件在合并后大文件中的具體位置信息,并迅速獲取小文件的相關(guān)屬性。在建立索引文件時(shí),首先為大文件建立索引文件,再為大文件中的小文件建立局部索引。索引文件結(jié)構(gòu)由
1.2.1 文件預(yù)取因素
通過(guò)文件關(guān)聯(lián)合并算法已將有關(guān)聯(lián)的文件進(jìn)行了合并,為了證明合并之后各個(gè)文件之間的關(guān)聯(lián)關(guān)系是最優(yōu)解,使用文件塊內(nèi)的利用率和塊內(nèi)相關(guān)率來(lái)衡量小文件合并之后的相關(guān)性。當(dāng)用戶訪問(wèn)某個(gè)小文件時(shí),不僅要考慮文件塊中小文件的相關(guān)性,還要考慮文件預(yù)取時(shí)間、用戶等待時(shí)間等因素。
定義4文件塊的利用率ΦURFB(utilization ratio of file block,簡(jiǎn)稱URFB):表示一段時(shí)間內(nèi),用戶訪問(wèn)某文件塊中不同文件的個(gè)數(shù)與該文件塊的所有小文件總個(gè)數(shù)的比值。
(3)
其中:d_f為一段時(shí)間內(nèi)訪問(wèn)該文件塊中不同小文件的個(gè)數(shù);sum_f為該文件塊中小文件的總數(shù)。
定義5文件塊的相關(guān)率ΨCRFB(correlation ratio of file block,簡(jiǎn)稱CRFB):用來(lái)衡量一個(gè)文件塊中的小文件是否能同時(shí)傳輸。
(4)
(5)
其中:n為該時(shí)間段內(nèi)訪問(wèn)該文件塊的總次數(shù);Υ表示當(dāng)前文件塊的相關(guān)率,對(duì)于每個(gè)文件塊,Υ的初始值均設(shè)為0.1,i=1,2,3,由定義可看出,文件塊的相關(guān)率是一個(gè)不斷隨時(shí)間變化的過(guò)程。
若用戶在沒(méi)有預(yù)取的情況下,讀取2個(gè)文件的時(shí)間為T1=2TCeph,有預(yù)取時(shí)讀取2個(gè)文件的時(shí)間為T2=TCeph+Tpre+Tcache。其中TCeph表示在沒(méi)有預(yù)取的情況下,客戶端從接收到用戶請(qǐng)求到集群返回?cái)?shù)據(jù)的時(shí)間。Tpre表示預(yù)取一個(gè)文件的時(shí)間,Tcache表示從緩存中讀取文件的時(shí)間。
因?yàn)閺木彺嬷凶x取文件時(shí)主要是訪問(wèn)內(nèi)存時(shí)間,可以忽略不計(jì)。因此當(dāng)T2 TCeph+(Tpre+Tcache)×P<(1-P)×2TCeph。 (6) 在預(yù)取文件時(shí),需要考慮文件塊的利用率和相關(guān)率及用戶的最大等待時(shí)間等因素。故當(dāng)文件塊的利用率和相關(guān)率均大于閾值F時(shí),說(shuō)明同時(shí)傳輸該文件塊時(shí)無(wú)效數(shù)據(jù)較少,因此可以把該文件塊中的文件預(yù)讀取出來(lái);否則在用戶最大等待時(shí)間內(nèi),其文件最大預(yù)取個(gè)數(shù)可通過(guò)式(7)計(jì)算。 (7) 其中Tw為用戶的最大等待時(shí)間。 1.2.2 文件預(yù)取算法 文件預(yù)取算法的偽代碼如下: 輸入:要查找的文件file 輸出:要查找的文件及其相關(guān)文件files 1.prefetch(file){ 2.ifΦCRFB&ΨURFB>F: 3. files.append(mergefile) 4.else: 6.for file in mergefile: 7. if (i>max_num): 8. break 9.P=probility(file) // 文件關(guān)聯(lián)概率 10. if (TCeph+(Tpre+Tcache)×P<(1-P)×2TCeph): 11. files. append(file) 12.i=i+1 13. return files 14.} 本實(shí)驗(yàn)環(huán)境是基于7個(gè)節(jié)點(diǎn)的Ceph集群,其中:1個(gè)Mon節(jié)點(diǎn),6個(gè)OSD節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)的操作系統(tǒng)都是Ubuntu 14.04,Ceph版本0.9.2.1,OSD系統(tǒng)為XFS,Python 版本為3.4,Ceph副本數(shù)為3,Ceph文件塊的大小為4 MB。 本實(shí)驗(yàn)對(duì)比的主要性能指標(biāo)是平均存儲(chǔ)時(shí)間、文件塊的利用率和相關(guān)率及平均讀取時(shí)間。其中,平均讀取時(shí)間是最主要的性能指標(biāo)。 該實(shí)驗(yàn)的性能指標(biāo)是:平均存儲(chǔ)時(shí)間=文件存儲(chǔ)時(shí)間/小文件總數(shù)。該實(shí)驗(yàn)分別對(duì)原Ceph集群和優(yōu)化后的集群存儲(chǔ)500,1 000,1 500,2 000,2 500,3 000,4 000,6 000個(gè)小文件,其文件平均存儲(chǔ)時(shí)間如圖1所示。 圖1 文件平均存儲(chǔ)時(shí)間 由圖1可看出,隨著存儲(chǔ)小文件數(shù)目的增大,原Ceph集群存儲(chǔ)時(shí)間明顯上升,而優(yōu)化后的Ceph集群則增長(zhǎng)較為緩慢,主要是因?yàn)樾∥募喜⒑笤俅鎯?chǔ)至Ceph中,可以大大減少小文件的數(shù)量,所以小文件存儲(chǔ)時(shí)明顯減少了申請(qǐng)存儲(chǔ)空間的次數(shù),從而節(jié)省了小文件的存儲(chǔ)時(shí)間。 該實(shí)驗(yàn)的性能指標(biāo)是文件塊的利用率和相關(guān)率及平均讀取時(shí)間。由定義4和定義5可知,文件塊的利用率和相關(guān)率都是基于一個(gè)時(shí)間段內(nèi)用戶的訪問(wèn)次數(shù)進(jìn)行計(jì)算的,因此,實(shí)驗(yàn)針對(duì)不同時(shí)間間隔對(duì)文件塊的利用率及相關(guān)率的影響進(jìn)行了測(cè)試。實(shí)驗(yàn)結(jié)果如圖2、圖3、圖4所示。 圖2 文件塊的利用率和相關(guān)率(時(shí)間:5 min) 圖3 文件塊的利用率和相關(guān)率(時(shí)間:15 min) 由圖2可看出,當(dāng)時(shí)間間隔較小時(shí),文件塊的利用率和相關(guān)率波動(dòng)較大,但若時(shí)間間隔取值較大,如圖4所示,文件塊的利用率和相關(guān)率將接近100%,無(wú)法準(zhǔn)確反映文件塊中各個(gè)小文件間的相關(guān)性。通過(guò)多次實(shí)驗(yàn)發(fā)現(xiàn),將時(shí)間間隔設(shè)為15 min,可以較好地反映文件塊中小文件間的相關(guān)性,如圖3所示,并將關(guān)聯(lián)閾值設(shè)為0.6,若文件塊的利用率和相關(guān)率均大于給定關(guān)聯(lián)閾值,就將該文件塊一起預(yù)取出來(lái)存至緩存。 圖4 文件塊的利用率和相關(guān)率(時(shí)間:50 min) 在文件塊間利用率和相關(guān)率實(shí)驗(yàn)的基礎(chǔ)上,對(duì)比了原Ceph集群和優(yōu)化后的Ceph集群分別讀取500,1 000,1 500,2 000,2 500,3 000,4 000,6 000個(gè)小文件時(shí)集群的平均讀取時(shí)間,其文件平均讀取時(shí)間如圖5所示。 圖5 文件平均讀取時(shí)間 由圖5可看出,優(yōu)化后的Ceph集群的文件讀取性能明顯優(yōu)于原Ceph集群,并且隨著文件數(shù)目的增大,原Ceph集群的讀取時(shí)間逐漸增大,而優(yōu)化后的Ceph集群的讀取時(shí)間增長(zhǎng)較為緩慢,主要原因是優(yōu)化后Ceph集群引入了小文件的預(yù)讀取功能,在讀取小文件時(shí),通過(guò)將與該文件相關(guān)聯(lián)的小文件預(yù)讀取到緩存中,可以減少用戶與集群的交互,減少用戶的訪問(wèn)時(shí)間,從而提高用戶的訪問(wèn)效率。 針對(duì)Ceph集群在處理海量氣象小文件時(shí)存取效率較低的問(wèn)題,提出一種Ceph系統(tǒng)中海量氣象小文件存取性能的優(yōu)化方法,該方法主要包括文件歷史訪問(wèn)日志統(tǒng)計(jì)分析、關(guān)聯(lián)文件合并和文件預(yù)讀取3部分。Ceph集群存儲(chǔ)文件時(shí),首先通過(guò)文件關(guān)聯(lián)概率算法得到氣象文件間的關(guān)聯(lián)概率,然后利用文件關(guān)聯(lián)合并算法將相關(guān)聯(lián)的文件進(jìn)行合并,并利用索引機(jī)制來(lái)提高海量氣象文件的查詢速率;訪問(wèn)文件時(shí),提出一種文件預(yù)取算法,該算法利用文件塊的利用率和相關(guān)率來(lái)衡量合并后小文件間的相關(guān)性,并根據(jù)其相關(guān)性對(duì)文件進(jìn)行預(yù)讀取。實(shí)驗(yàn)結(jié)果表明,該方法能有效提高Ceph集群在處理海量氣象小文件的存儲(chǔ)效率和訪問(wèn)效率。提出的基于文件塊的利用率和相關(guān)率的文件預(yù)取方法,并未考慮同一個(gè)數(shù)據(jù)結(jié)點(diǎn)上不同文件塊間的相關(guān)率,以及不同數(shù)據(jù)節(jié)點(diǎn)上不同文件塊間的相關(guān)率是否影響小文件的讀取效率。2 實(shí)驗(yàn)與分析
2.1 文件平均存儲(chǔ)時(shí)間
2.2 文件平讀取時(shí)間
3 結(jié)束語(yǔ)