本發(fā)明涉及文件預(yù)取與緩存領(lǐng)域問題,特別涉及一種面向分布式文件系統(tǒng)的文件預(yù)取/緩存方法及裝置。
背景技術(shù):
目前,隨著移動互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)也呈爆炸式增長,為了應(yīng)對海量數(shù)據(jù)的存取所面臨的各種問題,分布式存儲技術(shù)也得到的快速的發(fā)展,目前比較成熟的分布式文件系統(tǒng)主要包括Google的GFS、Hadoop Distributed File System(HDFS)、Lustre、FastDFS、MooseFS、MogileFS、NFS以及淘寶的TFS,這些分布式文件系統(tǒng)應(yīng)用的場景各不相同,所以它們的特點也有所差異。
這些分布式文件系統(tǒng),在生產(chǎn)應(yīng)用方面表現(xiàn)出來的性能各異,主要表現(xiàn)在從海量文件中讀取某一或某些文件時的效率問題,對于這方面的問題,解決方案主要有,優(yōu)化分布式文件系統(tǒng)本身的讀取、存儲機(jī)制,包括元數(shù)據(jù)的格式、文件的存放規(guī)則等,另一方面則是從分布式文件系統(tǒng)的外圍來優(yōu)化文件的讀取、存儲性能,主要包括文件的預(yù)取和緩存技術(shù)。本發(fā)明提出的是通過預(yù)取和緩存來提高分布式文件系統(tǒng)的讀取性能。
對于緩存技術(shù),基本思想是當(dāng)分布式文件系統(tǒng)的某個文件被訪問時,用內(nèi)存來存放剛被讀取的文件,而不是直接丟掉,這樣,再次讀取時,就可以直接從內(nèi)存里面讀取,而不用再次從分布式文件系統(tǒng)中讀取,這樣整個分布式文件系統(tǒng)的響應(yīng)能力就會有很大的提高,但是,當(dāng)讀取的文件個數(shù)特別多時,不可能把所有被訪問的文件都放在緩存中,因為內(nèi)存大小是有限的,與之相配合的是各種不同的剔除策略,包括LRU算法、LIRS算法,LRU即最少使用頁面置換算法,把最近最少使用的頁面替換掉;LIRS算法通過使用兩次訪問同一個文件的距離(本距離指中間被訪問了多少非重復(fù)文件)作為一種尺度去動態(tài)的將被訪問文件進(jìn)行排序,從而做出替換選擇,由于分布式文件系統(tǒng)的文件數(shù)量比較大,所以這些緩存策略得到的緩存文件的命中率相對比較低下,不能滿足某些需求。
對于預(yù)取技術(shù),通常采用以下技術(shù):基于訪問頻率的預(yù)取模型,當(dāng)對Web的訪問具有一定的規(guī)律,且具有歷史性和相對集中的愛好,因此提出了基于組的興趣和訪問行為對未來將要訪問的文件進(jìn)行預(yù)測;基于數(shù)據(jù)挖掘的預(yù)取模型,利用數(shù)據(jù)挖掘技術(shù)挖掘用戶的興趣關(guān)聯(lián)規(guī)則,作為對用戶即將訪問的頁面進(jìn)行預(yù)取的依據(jù);基于流行度的預(yù)取模型,定期地統(tǒng)計網(wǎng)頁的訪問次數(shù),并選取訪問次數(shù)較多的網(wǎng)頁組成流行頁面集,然后根據(jù)客戶最近發(fā)出的請求量的大小,從每個服務(wù)器上的流行頁面集中預(yù)取相當(dāng)于用戶最近發(fā)出的請求量的頁面放在緩存或直接送給用戶,利用Zipf第1定律和第2定律對訪問流行度建模,提出了基于Web流行度的預(yù)取模型,這些預(yù)取技術(shù)主要應(yīng)用于Web網(wǎng)頁的預(yù)取,對應(yīng)分布式文件系統(tǒng)上的文件的預(yù)取則少之又少。
上面的預(yù)取方法極少應(yīng)用到分布式文件系統(tǒng)中,但專利CN 104933110 A提出了一種基于MapReduce的數(shù)據(jù)預(yù)取方法,該專利通過性能評估來預(yù)測各計算節(jié)點的數(shù)據(jù)塊處理量,并根據(jù)一系列的計算來評估哪些計算節(jié)點會出現(xiàn)非本地化任務(wù),對于通過計算評估的非本地化任務(wù),在計算節(jié)點還未申請?zhí)幚碓撊蝿?wù)時就提前預(yù)取到計算節(jié)點本地,從而使得計算節(jié)點不會產(chǎn)生計算等待,這種預(yù)取大大提高了系統(tǒng)執(zhí)行MapReduce任務(wù)的效率,但對于非MapReduce場景該預(yù)取規(guī)則并不適用。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的不足,本發(fā)明提出一種面向分布式文件系統(tǒng)的文件預(yù)取/緩存方法及裝置。
本發(fā)明提出一種面向分布式文件系統(tǒng)的文件預(yù)取/緩存方法,包括:
文件緩存步驟,當(dāng)客戶端訪問分布式文件系統(tǒng)中的文件時,將訪問所述文件的訪問時間及文件信息記錄到訪問日志中,并根據(jù)所述訪問時間及所述文件信息判斷所述文件是否進(jìn)行緩存;
文件預(yù)取步驟,根據(jù)所述訪問日志,取出時間段TP內(nèi)所述文件的各訪問時間點,并獲取每個所述訪問時間點的鄰域,通過聚類算法計算所述文件與所述鄰域內(nèi)被訪問文件的關(guān)聯(lián)度,將與所述關(guān)聯(lián)度相對應(yīng)的文件以字符串的形式存放到待預(yù)取隊列中,通過余弦相似度算法分別計算所述待預(yù)取隊列中兩兩文件間的相似度,對所述待預(yù)取隊列中的文件進(jìn)行重新組合,并結(jié)合所述相似度,對每個所述組合進(jìn)行壓縮,計算每個所述組合與所述文件的總關(guān)聯(lián)度,并獲取所述組合中所述總關(guān)聯(lián)度最大的組合,作為所要預(yù)取的一組文件。
所述文件緩存步驟包括設(shè)定所述文件被訪問次數(shù)的閾值N,根據(jù)所述訪問時間判斷所述文件在距離當(dāng)前時間T內(nèi)的被訪問次數(shù)num,如果所述被訪問次數(shù)num大于所述閾值N,則將所述文件緩存到的分布式的緩存中,否則未緩存所述文件。
所述鄰域為在某一時間點tt前后各取時間段TN,獲取的時間段。
所述文件預(yù)取步驟還包括對所要預(yù)取的一組文件進(jìn)行壓縮處理,預(yù)取壓縮后的文件到分布式的緩存。
還包括剔除文件步驟,包括:
步驟31,在隊列Qf取出t時間內(nèi)訪問次數(shù)最少的文件,其中在分布式的緩存中按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的隊列為所述隊列Qf;
步驟32,以隊列Qt的中間位置為臨界剔除點,在所述隊列Qt中找到所述t時間內(nèi)訪問次數(shù)最少的文件,判斷其在所述隊列Qt中的位置,如果訪問次數(shù)最少的文件在臨界剔除點的后面,且訪問次數(shù)最少的文件最早被訪問的時間小于臨界剔除點的文件的最早訪問時間,則剔除訪問次數(shù)最少的文件,否則執(zhí)行所述文件緩存步驟,其中在分布式的緩存中按訪問時間進(jìn)行排序的隊列為所述隊列Qt;
步驟33,在所述隊列Qf中取出所述t時間內(nèi)訪問次數(shù)少于閾值M的文件,并執(zhí)行步驟32。
本發(fā)明還提出一種面向分布式文件系統(tǒng)的文件預(yù)取/緩存系統(tǒng),包括:
文件緩存模塊,用于當(dāng)客戶端訪問分布式文件系統(tǒng)中的文件時,將訪問所述文件的訪問時間及文件信息記錄到訪問日志中,并根據(jù)所述訪問時間及所述文件信息判斷所述文件是否進(jìn)行緩存;
文件預(yù)取模塊,用于根據(jù)所述訪問日志,取出時間段TP內(nèi)所述文件的各訪問時間點,并獲取每個所述訪問時間點的鄰域,通過聚類算法計算所述文件與所述鄰域內(nèi)被訪問文件的關(guān)聯(lián)度,將與所述關(guān)聯(lián)度相對應(yīng)的文件以字符串的形式存放到待預(yù)取隊列中,通過余弦相似度算法分別計算所述待預(yù)取隊列中兩兩文件間的相似度,對所述待預(yù)取隊列中的文件進(jìn)行重新組合,并結(jié)合所述相似度,對每個所述組合進(jìn)行壓縮,計算每個所述組合與所述文件的總關(guān)聯(lián)度,并獲取所述組合中所述總關(guān)聯(lián)度最大的組合,作為所要預(yù)取的一組文件。
所述文件緩存模塊包括設(shè)定所述文件被訪問次數(shù)的閾值N,根據(jù)所述訪問時間判斷所述文件在距離當(dāng)前時間T內(nèi)的被訪問次數(shù)num,如果所述被訪問次數(shù)num大于所述閾值N,則將所述文件緩存到的分布式的緩存中,否則未緩存所述文件。
所述鄰域為在某一時間點tt前后各取時間段TN,獲取的時間段。
所述文件預(yù)取模塊還包括對所要預(yù)取的一組文件進(jìn)行壓縮處理,預(yù)取壓縮后的文件到分布式的緩存。
還包括文件剔除模塊,包括:
步驟31,在隊列Qf取出t時間內(nèi)訪問次數(shù)最少的文件,其中在分布式的緩存中按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的隊列為所述隊列Qf;
步驟32,以隊列Qt的中間位置為臨界剔除點,在所述隊列Qt中找到所述t時間內(nèi)訪問次數(shù)最少的文件,判斷其在所述隊列Qt中的位置,如果訪問次數(shù)最少的文件在臨界剔除點的后面,且訪問次數(shù)最少的文件最早被訪問的時間小于臨界剔除點的文件的最早訪問時間,則剔除訪問次數(shù)最少的文件,否則執(zhí)行所述文件緩存模塊,其中在分布式的緩存中按訪問時間進(jìn)行排序的隊列為所述隊列Qt;
步驟33,在所述隊列Qf中取出所述t時間內(nèi)訪問次數(shù)少于閾值M的文件,并執(zhí)行步驟32。
由以上方案可知,本發(fā)明的優(yōu)點在于:
本發(fā)明的緩存模塊能通過分析,有效的緩存以后很可能會被再次訪問的文件,對于不太可能會被再次訪問的文件,不予以緩存。預(yù)取模塊采用聚類算法和余弦相似度算法對文件間的關(guān)聯(lián)度進(jìn)行計算,并結(jié)合壓縮技術(shù),能有效的進(jìn)行預(yù)取問題,使預(yù)取到的文件能被有效的訪問,提高預(yù)取文件的命中率。對于剔除模塊,維護(hù)了兩個隊列,一個是按訪問時間進(jìn)行排序的一個隊列Qt,另一個是按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的一個隊列Qf,采用時間和空間上兩種策略相結(jié)合以確保剔除的文件是最不可能會被再次訪問的文件。
附圖說明
圖1為本發(fā)明方法流程圖;
圖2為本發(fā)明系統(tǒng)結(jié)構(gòu)圖。
具體實施方式
本發(fā)明在現(xiàn)有分布式文件系統(tǒng)之上,提供了一層分布式buffer(緩沖器),用于緩存和預(yù)取分布式文件系統(tǒng)中的文件,目標(biāo)是能夠加快分布式文件系統(tǒng)的讀取速度。
為實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
本發(fā)明提出面向分布式文件系統(tǒng)的文件預(yù)取/緩存方法,包括下列步驟,如圖1所示:
A.緩存文件,其實現(xiàn)方法為:
A1.客戶端訪問分布式文件系統(tǒng)中的一個文件時;
A2.將訪問該文件的時間及文件信息記錄到訪問日志中;
A3.根據(jù)訪問日志中該文件的被訪問時間及即對應(yīng)的文件信息判斷該文件是否進(jìn)行緩存。
B.預(yù)取文件,其實現(xiàn)方法為:
B1.當(dāng)一個文件被緩存到內(nèi)存中時,根據(jù)歷史的訪問日志,取出TP時間段內(nèi)該文件的各訪問時間點t1,t2,t3……tN;
B2.遍歷歷史訪問日志,時間點的鄰域是指,在某一時間點tt前后各取TN時間段,得到的時間段。取出t1鄰域內(nèi)的被訪問文件fi 1,fi2,fi3……,組成一列,得到一條訪問信息Inf1;
B3.按步驟B2分別取出t2鄰域,t3鄰域……tN鄰域的訪問信息Inf2,Inf3……InfN;
B4.運用現(xiàn)有的聚類算法對上述訪問信息Inf1,Inf2,Inf3……InfN進(jìn)行計算,得到上述緩存文件與上述時間點鄰域內(nèi)被訪問文件的關(guān)聯(lián)度r1,r2,r3……。
B5.按關(guān)聯(lián)度大小對f1,f2,f3……進(jìn)行排序并將文件名以字符串的形式存放到待預(yù)取隊列中,根據(jù)分布式內(nèi)存的大小,設(shè)定每緩存一個文件可預(yù)取文件的空間大小M,從關(guān)聯(lián)文件中根據(jù)關(guān)聯(lián)度從大到小截取待預(yù)取隊列,使待預(yù)取隊列中待預(yù)取文件的大小為p*M,p可取大于1的任意數(shù),建議取3。
B6.利用余弦相似度算法,分別計算待預(yù)取隊列中的兩兩文件間的相似度。余弦相似度算法的步驟為:預(yù)處理→文本特征項選擇→加權(quán)→生成向量空間模型后計算余弦。所得到的余弦值即為兩個文件的相似度。
B7.對待預(yù)取隊列中的文件進(jìn)行重新組合,結(jié)合文件間的相似度,利用現(xiàn)有壓縮算法,對每個組合取出壓縮后的總大小為M或稍小于M大小的文件。
B8.計算B7中各個組合文件與所緩存文件的總的關(guān)聯(lián)度大小,取出總關(guān)聯(lián)度大小最大的一組,即為所要預(yù)取的一組文件。
B9.用現(xiàn)有壓縮技術(shù)對B8中的得到的一組文件進(jìn)行壓縮處理,然后預(yù)取這些壓縮文件到分布式緩存,預(yù)取結(jié)束。
C.剔除文件,其實現(xiàn)方法為:
當(dāng)分布式內(nèi)存不足時,需要從內(nèi)存中剔除一些文件,剔除方法如下。
C1.分布式內(nèi)存中維護(hù)兩個文件隊列,一個是按訪問時間進(jìn)行排序的一個隊列Qt,另一個是按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的一個隊列Qf。
C2.在Qf取出t時間內(nèi)訪問次數(shù)最少的文件。
C3.以Qt的中間位置為臨界剔除點,在Qt中找到上述t時間內(nèi)訪問次數(shù)最少的文件,判斷其在Qt中的位置,如果該文件在臨界剔除點的后面,即該文件最早被訪問的時間比臨界剔除點文件的最早訪問時間要早,則直接剔除該文件,該步驟結(jié)束。否則執(zhí)行步驟A4-4。
C4.在Qf取出t時間內(nèi)訪問次數(shù)少于閾值M的文件,執(zhí)行C3;
下面更進(jìn)一步描述本發(fā)明步驟,本發(fā)明的目標(biāo)是緩存預(yù)取分布式文件系統(tǒng)上的文件,提升分布式文件系統(tǒng)的響應(yīng)速度。詳細(xì)實施步驟包含執(zhí)行:A、緩存文件到分布式內(nèi)存;B、預(yù)取與緩存文件關(guān)聯(lián)度大的文件到分布式內(nèi)存。C、分布式內(nèi)存不足時,剔除內(nèi)存中的一些文件。具體的一種實施方式如下:
A.緩存文件,其實現(xiàn)方法為:
A1.當(dāng)客戶端訪問分布式文件系統(tǒng)中的一個文件時;
A2.將訪問該文件的時間及文件信息記錄到訪問日志中;
A3.根據(jù)訪問日志中該文件的被訪問時間判斷該文件在距離當(dāng)前時間T時間內(nèi)的訪問次數(shù)num,設(shè)定訪問次數(shù)的閾值N,如果在T時間內(nèi)的訪問次數(shù)num大于設(shè)定的訪問次數(shù)的閾值N,則把該文件緩存到的分布式的緩存中,反之則不緩存該文件。對于分布式文件系統(tǒng),很多文件在較長一段時間內(nèi)只被訪問一次,就無需緩存這些文件,進(jìn)而提高分布式內(nèi)存的利用率,避免無用的緩存和剔除操作。
B.預(yù)取文件,其實現(xiàn)方法為:
B1.當(dāng)一個文件被緩存到內(nèi)存中時,根據(jù)歷史訪問日志,取出TP時間內(nèi)該文件的各訪問時間點t1,t2,t3……tN;
B2.遍歷歷史訪問日志,時間點的鄰域是指,在某一時間點tt前后各取TN時間段,得到的時間段。取出t1鄰域內(nèi)的被訪問文件fi1,fi2,fi3……,組成一列,得到一條訪問信息Inf1;
B3.按步驟B2分別取出t2鄰域,t3鄰域……tN鄰域的訪問信息Inf2,Inf3……InfN;
B4.運用現(xiàn)有的聚類算法對上述訪問信息Inf1,Inf2,Inf3……InfN進(jìn)行計算,得到上述緩存文件與上述時間點鄰域內(nèi)被訪問文件的關(guān)聯(lián)度r1,r2,r3……。
B5.按關(guān)聯(lián)度大小對f1,f2,f3……進(jìn)行排序并將文件名以字符串的形式存放到待預(yù)取隊列中,根據(jù)分布式內(nèi)存的大小,設(shè)定每緩存一個文件可預(yù)取文件的空間大小M,從關(guān)聯(lián)文件中根據(jù)關(guān)聯(lián)度從大到小截取待預(yù)取隊列,使待預(yù)取隊列中待預(yù)取文件的大小為p*M,p可取大于1的任意數(shù),建議取3。
B6.利用余弦相似度算法,分別計算待預(yù)取隊列中的兩兩文件間的相似度。余弦相似度算法的步驟為:預(yù)處理→文本特征項選擇→加權(quán)→生成向量空間模型后計算余弦。所得到的余弦值即為兩個文件的相似度。
B7.對待預(yù)取隊列中的文件進(jìn)行重新組合,結(jié)合文件間的相似度,利用現(xiàn)有壓縮算法,對每個組合取出壓縮后的總大小為M或稍小于M大小的文件,得到總大小為大于小于M的新組合。具體執(zhí)行步驟如下:
B7-1.預(yù)取隊列中的文件個數(shù)為FN個,從FN個文件中取出X個文件,保證X個文件的大小在壓縮后大于M。即對FN個文件進(jìn)行重新組合,得到個組合。
B7-2.利用B6計算出的兩兩文件的相似度,計算每個組合中相似度高的兩文件進(jìn)行壓縮后的大小。
B7-3.把相似度高的兩個文件當(dāng)作一個壓縮后的文件,從每個組合中進(jìn)一步篩選出大小等于或稍小于M的一組文件。
B8.計算B7中各組文件與所緩存文件的總的關(guān)聯(lián)度大小,取出總關(guān)聯(lián)度大小最大的一組,即為所要預(yù)取的一組文件。
B9.采用aprior壓縮技術(shù)對B8中的得到的一組文件進(jìn)行壓縮處理,然后預(yù)取這些壓縮文件到分布式緩存,預(yù)取結(jié)束。
C.剔除文件,其實現(xiàn)方法為:
當(dāng)分布式內(nèi)存不足時,需要從內(nèi)存中剔除一些文件,剔除方法如下。
C1.分布式內(nèi)存中維護(hù)兩個文件隊列,一個是按訪問時間進(jìn)行排序的一個隊列Qt,另一個是按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的一個隊列Qf。
C2.在Qf取出t時間內(nèi)訪問次數(shù)最少的文件。
C3.以Qt的中間位置為臨界剔除點,在Qt中找到上述t時間內(nèi)訪問次數(shù)最少的文件,判斷其在Qt中的位置,如果該文件在臨界剔除點的后面,即該文件最早被訪問的時間比臨界剔除點文件的最早訪問時間要早,則直接剔除該文件,該步驟結(jié)束。否則執(zhí)行步驟A4-4。
C4.在Qf取出t時間內(nèi)訪問次數(shù)少于閾值M的文件,執(zhí)行C3;
本發(fā)明還提出一種面向分布式文件系統(tǒng)的文件預(yù)取/緩存系統(tǒng),如圖2所示,包括:
文件緩存模塊,用于當(dāng)客戶端訪問分布式文件系統(tǒng)中的文件時,將訪問所述文件的訪問時間及文件信息記錄到訪問日志中,并根據(jù)所述訪問時間及所述文件信息判斷所述文件是否進(jìn)行緩存;
文件預(yù)取模塊,用于根據(jù)所述訪問日志,取出時間段TP內(nèi)所述文件的各訪問時間點,并獲取每個所述訪問時間點的鄰域,通過聚類算法計算所述文件與所述鄰域內(nèi)被訪問文件的關(guān)聯(lián)度,將與所述關(guān)聯(lián)度相對應(yīng)的文件以字符串的形式存放到待預(yù)取隊列中,通過余弦相似度算法分別計算所述待預(yù)取隊列中兩兩文件間的相似度,對所述待預(yù)取隊列中的文件進(jìn)行重新組合,并結(jié)合所述相似度,對每個所述組合進(jìn)行壓縮,計算每個所述組合與所述文件的總關(guān)聯(lián)度,并獲取所述組合中所述總關(guān)聯(lián)度最大的組合,作為所要預(yù)取的一組文件。
所述文件緩存模塊包括設(shè)定所述文件被訪問次數(shù)的閾值N,根據(jù)所述訪問時間判斷所述文件在距離當(dāng)前時間T內(nèi)的被訪問次數(shù)num,如果所述被訪問次數(shù)num大于所述閾值N,則將所述文件緩存到的分布式的緩存中,否則未緩存所述文件。
所述鄰域為在某一時間點tt前后各取時間段TN,獲取的時間段。
所述文件預(yù)取模塊還包括對所要預(yù)取的一組文件進(jìn)行壓縮處理,預(yù)取壓縮后的文件到分布式的緩存。
還包括文件剔除模塊,包括:
步驟31,在隊列Qf取出t時間內(nèi)訪問次數(shù)最少的文件,其中在分布式的緩存中按t時間內(nèi)的訪問次數(shù)進(jìn)行排序的隊列為所述隊列Qf;
步驟32,以隊列Qt的中間位置為臨界剔除點,在所述隊列Qt中找到所述t時間內(nèi)訪問次數(shù)最少的文件,判斷其在所述隊列Qt中的位置,如果訪問次數(shù)最少的文件在臨界剔除點的后面,且訪問次數(shù)最少的文件最早被訪問的時間小于臨界剔除點的文件的最早訪問時間,則剔除訪問次數(shù)最少的文件,否則執(zhí)行所述文件緩存模塊,其中在分布式的緩存中按訪問時間進(jìn)行排序的隊列為所述隊列Qt;
步驟33,在所述隊列Qf中取出所述t時間內(nèi)訪問次數(shù)少于閾值M的文件,并執(zhí)行步驟32。