本發(fā)明涉及分布式存儲技術(shù)領(lǐng)域,特別是涉及一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)。
背景技術(shù):
伴隨著網(wǎng)絡(luò)和信息技術(shù)的飛速發(fā)展,數(shù)據(jù)的生產(chǎn)速度越來越快。大數(shù)據(jù)時代對數(shù)據(jù)的存儲和訪問速度的要求也越來越高。傳統(tǒng)的數(shù)據(jù)存儲方式顯然不能夠滿足日益增長的數(shù)據(jù)存儲的需求,分布式存儲系統(tǒng)應(yīng)運而生。
分布式存儲系統(tǒng),是將數(shù)據(jù)分散存儲在多臺獨立的設(shè)備上,網(wǎng)絡(luò)存儲系統(tǒng)采用集中的存儲服務(wù)器存放所有數(shù)據(jù)。
互聯(lián)網(wǎng)中的信息主要以海量的小文件居多,目前在分布式存儲系統(tǒng)中存儲海量的小文件時還存在著存儲空間不高,存儲空間利用率低的瓶頸等問題。小文件的寫入是小文件存儲的重要環(huán)節(jié),文件寫入速度直接關(guān)系到系統(tǒng)的存儲速度和吞吐量。
分布式存儲系統(tǒng)中,文件寫入時,需要先向元數(shù)據(jù)服務(wù)器(metadataserver,mds)申請元數(shù)據(jù)信息,寫緩存模式下,寫入文件數(shù)據(jù)到客戶端緩存,客戶端緩存中的數(shù)據(jù)通過數(shù)據(jù)刷新接口寫入到對象存儲設(shè)備(object-basedstoragedevice,osd)中,然后客戶端向mds端更新寫入文件的元數(shù)據(jù)信息。
當(dāng)寫入文件數(shù)量較多時,客戶端需要頻繁與mds和osd交互,容易造成請求阻塞,并且后端存儲的時延很高。
因此,如何提供一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)的技術(shù)方案,能夠在寫入大量小文件時,減少客戶端與臟數(shù)據(jù)對象寫入對象存儲設(shè)備的交互,提高小文件寫入的性能,是本領(lǐng)域技術(shù)人員目前需要解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)。能夠在寫入大量小文件時,減少客戶端與臟數(shù)據(jù)對象寫入對象存儲設(shè)備的交互,提高小文件寫入的性能。
為解決上述技術(shù)問題,本發(fā)明提供了如下技術(shù)方案:
一種分布式存儲系統(tǒng)中文件寫入的方法,包括:
客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)請求;
客戶端根據(jù)元數(shù)據(jù)服務(wù)器返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值;
若是,則將待寫數(shù)據(jù)寫入客戶端緩存后立即釋放待寫數(shù)據(jù)文件句柄,將臟數(shù)據(jù)寫入osd;若否,則將寫入客戶端緩存后的待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中,當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,將臟數(shù)據(jù)寫入osd。
優(yōu)選地,在待寫數(shù)據(jù)寫入客戶端緩存后,還包括:向用戶發(fā)送待寫數(shù)據(jù)寫入客戶端緩存提示。
優(yōu)選地,當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,包括:調(diào)用臟數(shù)據(jù)刷新接口釋放延遲釋放鏈表中的文件句柄。
優(yōu)選地,將待寫數(shù)據(jù)寫入客戶端緩存,還包括:當(dāng)寫入客戶端的緩存達(dá)到預(yù)設(shè)客戶端緩存閾值時,釋放寫入客戶端的緩存對應(yīng)的文件句柄。
優(yōu)選地,包括:使用配置項對預(yù)設(shè)數(shù)據(jù)長度閾值、預(yù)設(shè)句柄數(shù)閾值、預(yù)設(shè)客戶端緩存閾值進行設(shè)置。
本發(fā)明還提供一種分布式存儲系統(tǒng)中文件寫入的系統(tǒng),包括:
元數(shù)據(jù)請求發(fā)送模塊,用于客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)請求;
判斷模塊,用于客戶端根據(jù)元數(shù)據(jù)服務(wù)器返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值;
延遲刷新模塊,用于當(dāng)待寫數(shù)據(jù)長度小于預(yù)設(shè)數(shù)據(jù)長度閾值時,將待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中;
數(shù)據(jù)釋放模塊,用于當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄;
臟數(shù)據(jù)寫入模塊,用于將臟數(shù)據(jù)寫入osd。
優(yōu)選地,還包括:提示模塊,向用戶發(fā)出待寫數(shù)據(jù)寫入客戶端緩存提示。
優(yōu)選地,數(shù)據(jù)釋放模塊包括:臟數(shù)據(jù)刷新接口單元,用于釋放延遲釋放鏈表中的文件句柄。
優(yōu)選地,數(shù)據(jù)釋放模塊,還用于當(dāng)寫入客戶端的緩存達(dá)到預(yù)設(shè)客戶端緩存閾值時,釋放寫入客戶端的緩存對應(yīng)的文件句柄。
優(yōu)選地,包括:配置模塊,用于使用配置項對預(yù)設(shè)數(shù)據(jù)長度閾值、預(yù)設(shè)句柄數(shù)閾值、預(yù)設(shè)客戶端緩存閾值進行設(shè)置。
與現(xiàn)有技術(shù)相比,上述技術(shù)方案具有以下優(yōu)點:
本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)。
本發(fā)明所提供的方案中,客戶端通過對元數(shù)據(jù)服務(wù)器的返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)的長度;若待寫數(shù)據(jù)的長度小于預(yù)設(shè)長度閾值,則判定待寫數(shù)據(jù)為小文件,則將小文件的文件句柄加入延遲釋放列表中,延遲釋放列表中的文件句柄;當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,統(tǒng)一調(diào)用臟數(shù)據(jù)刷新接口,一次性釋放多個數(shù)據(jù)的文件句柄,將臟數(shù)據(jù)寫入osd。本發(fā)明所提供的方案,能夠在寫入大量小文件時,減少客戶端與寫入對象存儲設(shè)備的交互,提高小文件寫入的性能。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的方法流程圖;
圖2為本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明的核心是提供一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)。
為了使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施方式做詳細(xì)的說明。
在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的具體實施的限制。
請參考圖1,圖1為本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的方法流程圖。
本發(fā)明的一種具體實施方式提供了一種分布式存儲系統(tǒng)中文件寫入的方法,步驟包括:
s11:客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)請求;
在分布式存儲系統(tǒng)中,文件寫入時,需要先向元數(shù)據(jù)服務(wù)器(metadataserver,mds)申請元數(shù)據(jù)信息;元數(shù)據(jù)(metadata),又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(dataaboutdata),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能;元數(shù)據(jù)算是一種電子式目錄。
s12:客戶端根據(jù)元數(shù)據(jù)服務(wù)器返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值;
客戶端根據(jù)元數(shù)據(jù)服務(wù)器返回的元數(shù)據(jù)消息中,待寫入數(shù)據(jù)的信息,具體為待寫入數(shù)據(jù)的大小和長度信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值。
s13:若是,則將待寫數(shù)據(jù)寫入客戶端緩存后立即釋放待寫數(shù)據(jù)文件句柄,將臟數(shù)據(jù)寫入osd;若否,則將寫入客戶端緩存后的待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中,當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,將臟數(shù)據(jù)寫入osd。
如果判斷待寫入數(shù)據(jù)的長度大于預(yù)設(shè)文件長度閾值,則該文件無需延遲釋放,立即將該文件的文件句柄釋放,然后將該數(shù)據(jù)對應(yīng)的臟數(shù)據(jù)寫入osd中。
如果判斷待寫入數(shù)據(jù)的長度小于預(yù)設(shè)文件長度閾值,則需要將該文件的文件句柄加入至延遲釋放列表,等待延遲刷新列表中的文件數(shù)量達(dá)到預(yù)設(shè)句柄數(shù)閾值時,再將延遲釋放列表里的文件句柄釋放,將對應(yīng)的臟數(shù)據(jù)寫入osd中。
如果,延遲釋放列表中的數(shù)據(jù)個數(shù)未滿,則一直等待下次的文件寫入請求及文件句柄,直至延遲釋放列表中的數(shù)據(jù)條數(shù)達(dá)到預(yù)設(shè)的條件。
對于大文件不進行延遲釋放,僅僅將大量的小文件進行延遲釋放,既不會造成大文件的嚴(yán)重延遲,還能夠減少小文件與osd文件的交互次數(shù),提高小文件的寫入效率。
本發(fā)明的實施列所提供的方案中,客戶端通過對元數(shù)據(jù)服務(wù)器的返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)的長度;若待寫數(shù)據(jù)的長度小于預(yù)設(shè)長度閾值,則判定待寫數(shù)據(jù)為小文件,則將小文件的文件句柄加入延遲釋放列表中,延遲釋放列表中的文件句柄;當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,統(tǒng)一調(diào)用臟數(shù)據(jù)刷新接口,一次性釋放多個數(shù)據(jù)的文件句柄,將臟數(shù)據(jù)寫入osd。減少客戶端與寫入對象存儲設(shè)備的交互,提高了小文件寫入的性能。
在本發(fā)明所提供的一種實施例中,步驟s11還包括:
當(dāng)待寫入的數(shù)據(jù),寫入客戶端的緩存后,客戶端向用戶發(fā)送待寫入數(shù)據(jù)寫入客戶端緩存的提示。
在本發(fā)明所的方案中,對于大文件直接釋放其文件句柄,而對于大量的小文件,則需要先進行加入延遲釋放列表中的操作。釋放之前,同時也是將小文件緩存到客戶端的內(nèi)存,當(dāng)小文件被緩存下來時,便認(rèn)為已經(jīng)寫入成功,便向用戶發(fā)送寫入成功提示。
先寫入客戶端緩存,可以加快文件的寫入速度,減小延時。
在本發(fā)明所提供的一種實施例中,步驟s11包括:
當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,該步驟通過調(diào)用臟數(shù)據(jù)刷新接口釋放所述延遲釋放鏈表中的文件句柄。
當(dāng)延遲釋放列表中的文件對應(yīng)的文件句柄數(shù)量積攢到預(yù)設(shè)句柄數(shù)閾值時,便開始釋放延遲釋放列表中的數(shù)據(jù)。
該釋放的過程中,通過調(diào)用臟數(shù)據(jù)刷新接口一次釋放多個文件句柄,有效地減少了mds與osd的交互,減少了請求發(fā)送堵塞的概率。
在本發(fā)明所提供的一種實施例中,步驟s11還包括:
當(dāng)寫入客戶端的緩存達(dá)到預(yù)設(shè)客戶端緩存閾值時,釋放所述寫入客戶端的緩存對應(yīng)的文件句柄。
當(dāng)待寫入的數(shù)據(jù)的文件句柄加入延遲釋放列表中,并且數(shù)據(jù)緩存進客戶端,有利于加快文件的寫入速度。當(dāng)客戶端的緩存存滿或達(dá)到了一個最大緩存的閾值時,便要強制的釋放延遲刷新列表中數(shù)據(jù)、文件句柄、將數(shù)據(jù)寫入osd中。
防止因客戶端緩存存滿,造成文件寫入的滯后、中斷或錯誤。
在本發(fā)明的實施例中,預(yù)設(shè)數(shù)據(jù)長度閾值、預(yù)設(shè)句柄數(shù)閾值、預(yù)設(shè)客戶端緩存閾值進行設(shè)置一般在本發(fā)明中均會給出一個默認(rèn)值,但是這些預(yù)設(shè)值用戶可以通過調(diào)用配置項對其進行修改,以符合實際使用情況的需求。
本發(fā)明還提供了一種分布式存儲系統(tǒng)中文件寫入的系統(tǒng),包括:
元數(shù)據(jù)請求發(fā)送模塊21,用于客戶端向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)請求;
判斷模塊22,用于客戶端根據(jù)元數(shù)據(jù)服務(wù)器返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值;
延遲刷新模塊23,用于當(dāng)待寫數(shù)據(jù)長度小于預(yù)設(shè)數(shù)據(jù)長度閾值時,將待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中;
數(shù)據(jù)釋放模塊24,用于當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄;
臟數(shù)據(jù)寫入模塊25,用于將臟數(shù)據(jù)寫入osd。
優(yōu)選地,還包括:提示模塊26,向用戶發(fā)出待寫數(shù)據(jù)寫入客戶端緩存提示。
優(yōu)選地,數(shù)據(jù)釋放模塊24包括:臟數(shù)據(jù)刷新接口單元241,用于釋放延遲釋放鏈表中的文件句柄。
優(yōu)選地,數(shù)據(jù)釋放模塊24,還用于當(dāng)寫入客戶端的緩存達(dá)到預(yù)設(shè)客戶端緩存閾值時,釋放寫入客戶端的緩存對應(yīng)的文件句柄。
優(yōu)選地,包括:配置模塊27,用于使用配置項對預(yù)設(shè)數(shù)據(jù)長度閾值、預(yù)設(shè)句柄數(shù)閾值、預(yù)設(shè)客戶端緩存閾值進行設(shè)置。
以下舉例說明上述系統(tǒng)的工作工程:
首先,元數(shù)據(jù)請求發(fā)送模塊21向元數(shù)據(jù)服務(wù)器發(fā)送元數(shù)據(jù)請求,獲取待寫入數(shù)據(jù)的信息,包括數(shù)據(jù)大小、數(shù)據(jù)存儲位置等。
當(dāng)元數(shù)據(jù)服務(wù)器返回消息,判斷模塊22根據(jù)元數(shù)據(jù)服務(wù)器返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)長度是否大于預(yù)設(shè)數(shù)據(jù)長度閾值。
當(dāng)判斷模塊22判斷待寫數(shù)據(jù)的長度小于預(yù)設(shè)長度閾值時,便將待寫數(shù)據(jù)的文件句柄加入到延遲刷新列表中。當(dāng)延遲刷新列表中的文件句柄數(shù)量大于預(yù)設(shè)的預(yù)設(shè)句柄數(shù)閾值時,由數(shù)據(jù)釋放模塊24,釋放延遲釋放鏈表中的文件句柄。
最后由臟數(shù)據(jù)寫入模塊25,將文件句柄對應(yīng)的臟數(shù)據(jù)寫入osd中。
其中,當(dāng)待寫數(shù)據(jù)長度小于預(yù)設(shè)數(shù)據(jù)長度閾值時,將待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中時,待寫數(shù)據(jù)被緩存在客戶端中;當(dāng)待寫數(shù)據(jù)緩存到客戶端中便認(rèn)為待寫數(shù)據(jù)寫入成功,提示模塊26便向用戶發(fā)出數(shù)據(jù)寫入成功的提示。
在將待寫數(shù)據(jù)長度小于預(yù)設(shè)數(shù)據(jù)長度閾值的待寫數(shù)據(jù)文件句柄加入到延遲釋放鏈表中時,可能會出現(xiàn)客戶端緩存的存儲空間大小不足或預(yù)設(shè)句柄數(shù)閾值設(shè)置過大,文件句柄數(shù)還未達(dá)到預(yù)設(shè)句柄數(shù)閾值,客戶端可供緩存的空間已滿,此時需要數(shù)據(jù)釋放模塊24先將客戶端中緩存的數(shù)據(jù)及對應(yīng)的文件句柄釋放出去,將數(shù)據(jù)寫入到osd中。
對于以上所提到的能會出現(xiàn)客戶端緩存的存儲空間大小不足或預(yù)設(shè)句柄數(shù)閾值設(shè)置過大的情況,均需要對預(yù)設(shè)的閾值進行修改,此時需要配置模塊27,使用配置項對預(yù)設(shè)數(shù)據(jù)長度閾值、預(yù)設(shè)句柄數(shù)閾值、預(yù)設(shè)客戶端緩存閾值進行設(shè)置,將這些閾值設(shè)置為合適的大小和范圍。
綜上所述,本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)所采用的方案中,客戶端通過對元數(shù)據(jù)服務(wù)器的返回消息中待寫數(shù)據(jù)的信息,判斷待寫數(shù)據(jù)的長度;若待寫數(shù)據(jù)的長度小于預(yù)設(shè)長度閾值,則判定待寫數(shù)據(jù)為小文件,則將小文件的文件句柄加入延遲釋放列表中,延遲釋放列表中的文件句柄;當(dāng)延遲釋放鏈表中的文件句柄數(shù)大于預(yù)設(shè)句柄數(shù)閾值時,釋放延遲釋放鏈表中的文件句柄,統(tǒng)一調(diào)用臟數(shù)據(jù)刷新接口,一次性釋放多個數(shù)據(jù)的文件句柄,將臟數(shù)據(jù)寫入osd。本發(fā)明所提供的方案,能夠在寫入大量小文件時,減少客戶端與寫入對象存儲設(shè)備的交互,提高小文件寫入的性能。
以上對本發(fā)明所提供的一種分布式存儲系統(tǒng)中文件寫入的方法及系統(tǒng)進行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。