本發(fā)明涉及分布式存儲,特別是涉及一種分布式文件存儲的配額統(tǒng)計方法、裝置及介質(zhì)。
背景技術(shù):
1、配額是一種磁盤空間管理機(jī)制,分為空間配額和文件數(shù)配額,空間配額限制空間占用,文件數(shù)配額限制目錄下的最大文件數(shù)。配額的主要目的是確保所有用戶都有自己獨(dú)占的文件系統(tǒng)空間,從而保證用戶使用系統(tǒng)的公平性和安全性。在配置配額之后,分布式文件系統(tǒng)需要實(shí)時統(tǒng)計該目錄下的空間占用或文件數(shù),如果大于用戶配置的配額,就對用戶的寫請求返回失敗,防止單個用戶過度占用系統(tǒng)資源。
2、在相關(guān)技術(shù)中,實(shí)現(xiàn)配額的方案主要包括:通過元數(shù)據(jù)服務(wù)(metadata?service,mds)后臺做配額統(tǒng)計,以及通過內(nèi)存緩存加配額日志的方式做統(tǒng)計兩種方案。但是第一種方案需要后臺按目錄逐層向上級目錄更新統(tǒng)計值,延時較大。第二種方案則依賴協(xié)議接入層通過文件鎖服務(wù)器加文件元數(shù)據(jù)寫鎖,以保證協(xié)議接入層計算配額增量的準(zhǔn)確性。使得當(dāng)多客戶端對同一文件進(jìn)行并發(fā)訪問時,存在可能會導(dǎo)致協(xié)議層無法準(zhǔn)確計算準(zhǔn)確的配額變化量的問題。
3、所以,現(xiàn)在本領(lǐng)域的技術(shù)人員亟需要一種分布式文件存儲的配額統(tǒng)計方法,以解決上述問題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的是提供一種分布式文件存儲的配額統(tǒng)計方法、裝置及介質(zhì),以解決傳統(tǒng)方案在多客戶端并發(fā)訪問同一文件時可能出現(xiàn)配額變化量計算不準(zhǔn)確的問題。
2、為解決上述技術(shù)問題,本發(fā)明提供一種分布式文件存儲的配額統(tǒng)計方法,應(yīng)用于元數(shù)據(jù)服務(wù)側(cè),包括:
3、當(dāng)接收到由所述協(xié)議接入層發(fā)送的元數(shù)據(jù)查詢請求時,返回目標(biāo)文件的元數(shù)據(jù)至對應(yīng)的所述協(xié)議接入層;
4、當(dāng)接收到由所述協(xié)議接入層發(fā)送的訪問后文件大小時,通過本地元數(shù)據(jù)鎖上鎖所述目標(biāo)文件的元數(shù)據(jù);其中,所述訪問后文件大小為所述協(xié)議接入層根據(jù)所述目標(biāo)文件的元數(shù)據(jù)中的文件大小和文件訪問請求中的文件大小所確定;
5、根據(jù)所述訪問后文件大小和所述目標(biāo)文件的元數(shù)據(jù)中的文件大小,確定文件配額變化量;
6、根據(jù)所述訪問后文件大小更新所述目標(biāo)文件的元數(shù)據(jù);
7、解鎖所述目標(biāo)文件的元數(shù)據(jù)。
8、在一種可能的實(shí)施例中,在確定文件配額變化量之后,還包括:
9、將所述目標(biāo)文件的元數(shù)據(jù)和配額日志寫入元數(shù)據(jù)服務(wù)日志中;其中,所述配額日志包括所述文件配額變化量和所述文件配額變化量對應(yīng)的配額編號;
10、本方法還包括:
11、當(dāng)所述元數(shù)據(jù)服務(wù)后臺進(jìn)行日志清理優(yōu)化時,進(jìn)行文件元數(shù)據(jù)和所述配額日志的刷盤;其中,在進(jìn)行所述配額日志的刷盤時,向存儲池發(fā)送的寫請求中包含多條所述配額日志。
12、為解決上述技術(shù)問題,本發(fā)明還提供一種分布式文件存儲的配額統(tǒng)計方法,應(yīng)用于協(xié)議接入層側(cè),包括:
13、當(dāng)接收到文件訪問請求時,向元數(shù)據(jù)服務(wù)發(fā)送目標(biāo)文件的元數(shù)據(jù)查詢請求;
14、根據(jù)所述元數(shù)據(jù)服務(wù)返回所述目標(biāo)文件的元數(shù)據(jù)中的文件大小和所述文件訪問請求中的文件大小,確定訪問后文件大??;
15、將所述訪問后文件大小發(fā)送至所述元數(shù)據(jù)服務(wù),以便于所述元數(shù)據(jù)服務(wù):根據(jù)所述訪問后文件大小和所述目標(biāo)文件元數(shù)據(jù)中的文件大小確定文件配額變化量,并根據(jù)所述訪問后文件大小更新所述目標(biāo)文件的元數(shù)據(jù);其中,當(dāng)所述元數(shù)據(jù)服務(wù)接收到任一所述協(xié)議接入層發(fā)送的所述訪問后文件大小時,通過本地元數(shù)據(jù)鎖上鎖所述目標(biāo)文件的元數(shù)據(jù),并在所述目標(biāo)文件的元數(shù)據(jù)更新完畢后,解鎖所述目標(biāo)文件的元數(shù)據(jù)。
16、在一種可能的實(shí)施例中,在將所述訪問后文件大小發(fā)送至所述元數(shù)據(jù)服務(wù)之后,還包括:
17、若接收到所述元數(shù)據(jù)服務(wù)返回的響應(yīng),則將所述響應(yīng)中的所述文件配額變化量寫入本地緩存;
18、通過后臺任務(wù)將所述文件配額變化量上報至配額服務(wù)中,以便于所述配額服務(wù):根據(jù)所述文件配額變化量更新內(nèi)存中的配額使用量;根據(jù)預(yù)設(shè)的第一周期定時將所述配額使用量持久化到存儲池中。
19、在一種可能的實(shí)施例中,還包括:根據(jù)預(yù)設(shè)的第二周期向所述配額服務(wù)上報心跳信息,以便于所述配額服務(wù):
20、根據(jù)所述心跳信息判斷所述協(xié)議接入層是否故障;
21、若是,則獲取在邏輯時鐘當(dāng)前計數(shù)周期的起始時刻下所述存儲池中存儲的所述配額使用量;其中,所述邏輯時鐘為分布式存儲系統(tǒng)內(nèi)部維護(hù)的一個時鐘信號,每經(jīng)過一個所述計數(shù)周期,所述邏輯時鐘的計數(shù)值加一;
22、獲取所述存儲池在當(dāng)前所述計數(shù)周期記錄的配額日志,并過濾得到與故障的所述協(xié)議接入層相關(guān)的所述配額日志;
23、根據(jù)與故障的所述協(xié)議接入層相關(guān)的所述配額日志,確定故障的所述協(xié)議接入層在當(dāng)前所述計數(shù)周期的所述文件配額變化量;
24、根據(jù)所述計數(shù)周期起始時刻的所述配額使用量,以及故障的所述協(xié)議接入層在當(dāng)前所述計數(shù)周期的所述文件配額變化量,恢復(fù)故障的所述協(xié)議接入層在故障時的文件配額變化量。
25、在一種可能的實(shí)施例中,所述配額日志由所述元數(shù)據(jù)服務(wù)寫入所述存儲池,并在所述存儲池中根據(jù)所述邏輯時鐘的所述計數(shù)周期,將同一所述計數(shù)周期寫入的所述配額日志聚合存儲;
26、則所述獲取所述存儲池在當(dāng)前所述計數(shù)周期記錄的配額日志,并過濾得到與故障的所述協(xié)議接入層相關(guān)的所述配額日志包括:
27、獲取所述存儲池在當(dāng)前所述計數(shù)周期中記錄的所有所述配額日志;
28、過濾所述配額日志,僅保留與故障的所述協(xié)議接入層對應(yīng)的所述配額日志。
29、在一種可能的實(shí)施例中,在根據(jù)所述元數(shù)據(jù)服務(wù)返回所述目標(biāo)文件的元數(shù)據(jù)中的文件大小和所述文件訪問請求中的文件大小,確定訪問后文件大小之前,還包括:
30、向所述配額服務(wù)發(fā)送預(yù)申請配額請求;其中,所述預(yù)申請配額請求包括:所述配額編號和預(yù)申請配額量;
31、接收所述配額服務(wù)返回的預(yù)分配配額量,并于內(nèi)存中記錄所述預(yù)分配配額量;其中,若所述配額服務(wù)中配額的剩余量大于所述預(yù)申請配額量,則所述預(yù)分配配額量大于所述預(yù)申請配額量;
32、在下一次接收到所述文件訪問請求時,若所述文件配額變化量小于所述預(yù)分配配額量,則根據(jù)所述元數(shù)據(jù)服務(wù)返回的所述文件配額變化量更新所述預(yù)分配配額量,并停止向所述配額服務(wù)發(fā)送預(yù)申請配額請求。
33、為解決上述技術(shù)問題,本發(fā)明還提供一種分布式文件存儲的配額統(tǒng)計裝置,應(yīng)用于元數(shù)據(jù)服務(wù)側(cè),包括:
34、元數(shù)據(jù)響應(yīng)模塊,用于當(dāng)接收到由所述協(xié)議接入層發(fā)送的元數(shù)據(jù)查詢請求時,返回目標(biāo)文件的元數(shù)據(jù)至對應(yīng)的所述協(xié)議接入層;
35、元數(shù)據(jù)鎖模塊,用于當(dāng)接收到由所述協(xié)議接入層發(fā)送的訪問后文件大小時,通過本地元數(shù)據(jù)鎖上鎖所述目標(biāo)文件的元數(shù)據(jù);其中,所述訪問后文件大小為所述協(xié)議接入層根據(jù)所述目標(biāo)文件的元數(shù)據(jù)中的文件大小和文件訪問請求中的文件大小所確定;
36、配額計算模塊,用于根據(jù)所述訪問后文件大小和所述目標(biāo)文件的元數(shù)據(jù)中的文件大小,確定文件配額變化量;
37、元數(shù)據(jù)更新模塊,用于根據(jù)所述訪問后文件大小更新所述目標(biāo)文件的元數(shù)據(jù);
38、元數(shù)據(jù)解鎖模塊,用于解鎖所述目標(biāo)文件的元數(shù)據(jù)。
39、為解決上述技術(shù)問題,本發(fā)明還提供一種分布式文件存儲的配額統(tǒng)計裝置,應(yīng)用于協(xié)議接入層側(cè),包括:
40、元數(shù)據(jù)查詢模塊,用于當(dāng)接收到文件訪問請求時,向元數(shù)據(jù)服務(wù)發(fā)送目標(biāo)文件的元數(shù)據(jù)查詢請求;
41、文件大小計算模塊,用于根據(jù)所述元數(shù)據(jù)服務(wù)返回所述目標(biāo)文件的元數(shù)據(jù)中的文件大小和所述文件訪問請求中的文件大小,確定訪問后文件大?。?/p>
42、文件大小響應(yīng)模塊,用于將所述訪問后文件大小發(fā)送至所述元數(shù)據(jù)服務(wù),以便于所述元數(shù)據(jù)服務(wù):根據(jù)所述訪問后文件大小和所述目標(biāo)文件元數(shù)據(jù)中的文件大小確定文件配額變化量,并根據(jù)所述訪問后文件大小更新所述目標(biāo)文件的元數(shù)據(jù);其中,當(dāng)所述元數(shù)據(jù)服務(wù)接收到任一所述協(xié)議接入層發(fā)送的所述訪問后文件大小時,通過本地元數(shù)據(jù)鎖上鎖所述目標(biāo)文件的元數(shù)據(jù),并在所述目標(biāo)文件的元數(shù)據(jù)更新完畢后,解鎖所述目標(biāo)文件的元數(shù)據(jù)。
43、為解決上述技術(shù)問題,本發(fā)明還提供一種非易失性存儲介質(zhì),所述非易失性存儲介質(zhì)上存儲有計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時實(shí)現(xiàn)如上所述的分布式文件存儲的配額統(tǒng)計方法的步驟。
44、本發(fā)明提供的一種分布式文件存儲的配額統(tǒng)計方法,通過協(xié)議接入層和元數(shù)據(jù)服務(wù)的交互實(shí)現(xiàn)文件配額變化量的計算。且本方法中將文件配額變化量的計算放在元數(shù)據(jù)服務(wù)中進(jìn)行,當(dāng)出現(xiàn)客戶端并發(fā)訪問文件,也即同時存在多個協(xié)議接入層向元數(shù)據(jù)服務(wù)更新同一文件的文件大小時,元數(shù)據(jù)服務(wù)利用本地的元數(shù)據(jù)鎖對目標(biāo)文件的元數(shù)據(jù)進(jìn)行加鎖。元數(shù)據(jù)服務(wù)的本地元數(shù)據(jù)鎖相比于文件鎖服務(wù)器提供的文件元數(shù)據(jù)鎖功能,不存在同一時刻僅允許一個協(xié)議接入層訪問的問題,從而可以在多個協(xié)議接入層并發(fā)訪問時仍能保證文件配額變化量計算準(zhǔn)確。
45、本發(fā)明提供的分布式文件存儲的配額統(tǒng)計裝置、及非易失性存儲介質(zhì),與上述方法對應(yīng),效果同上。