一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)與重構(gòu)方法
【專利摘要】本發(fā)明提供一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)與重構(gòu)方法。該自適應(yīng)數(shù)據(jù)存儲(chǔ)方法包括如下步驟:(1)客戶端計(jì)算待存儲(chǔ)文件的哈希值,將該哈希值上傳至服務(wù)器端;(2)將待存儲(chǔ)文件的哈希值與服務(wù)器端已存儲(chǔ)的文件的哈希值進(jìn)行比對(duì);(3)若出現(xiàn)相同的哈希值,服務(wù)器端不接受待存儲(chǔ)文件的上傳;若未出現(xiàn)相同的哈希值,服務(wù)器端接受待存儲(chǔ)文件的上傳,將上傳的文件進(jìn)行分塊,計(jì)算并存儲(chǔ)各文件分塊的哈希值,將各文件分塊進(jìn)行編碼產(chǎn)生校驗(yàn)數(shù)據(jù)分塊。相對(duì)于現(xiàn)有技術(shù),本發(fā)明通過記錄存儲(chǔ)文件及每個(gè)文件分塊的哈希值,根據(jù)系統(tǒng)與客戶端的情況來選擇相應(yīng)的文件存儲(chǔ)與重構(gòu)方法,從而降低數(shù)據(jù)中心因重構(gòu)數(shù)據(jù)帶來的網(wǎng)絡(luò)帶寬壓力和計(jì)算壓力。
【專利說明】一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)與重構(gòu)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息【技術(shù)領(lǐng)域】,特別是涉及利用編碼冗余策略為基礎(chǔ)存儲(chǔ)架構(gòu)的數(shù)據(jù)存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)與丟失數(shù)據(jù)重構(gòu)方法。
【背景技術(shù)】
[0002]與復(fù)制冗余技術(shù)相比,基于編碼冗余的可靠性技術(shù),在擁有相同容錯(cuò)能力的前提下具有更低的數(shù)據(jù)冗余和存儲(chǔ)開銷。但當(dāng)系統(tǒng)中出現(xiàn)節(jié)點(diǎn)損毀或者數(shù)據(jù)塊丟失時(shí),基于復(fù)制冗余的存儲(chǔ)策略僅需下載與丟失數(shù)據(jù)同樣大小的數(shù)據(jù)量就可以實(shí)現(xiàn)修復(fù)過程,但基于編碼冗余,如糾刪碼的冗余策略則至少需要下載k倍的丟失數(shù)據(jù)量才能解碼重構(gòu)出丟失數(shù)據(jù)。因而與復(fù)制冗余策略相比,糾刪碼冗余策略在文件恢復(fù)時(shí)要占用更多的網(wǎng)絡(luò)帶寬資源,這將會(huì)給數(shù)據(jù)中心中本來就比較緊張的網(wǎng)絡(luò)帶寬資源帶來更大的壓力,進(jìn)而給數(shù)據(jù)的讀取帶來更大的性能影響。正是由于糾刪碼冗余策略在數(shù)據(jù)修復(fù)過程中需要更大的維護(hù)帶寬,再加之需要更為復(fù)雜的管理策略,從而極大地限制了基于編碼容錯(cuò)技術(shù)的應(yīng)用和推廣。
[0003]顯然,如何利用體系結(jié)構(gòu)的設(shè)計(jì)來避免編碼冗余策略本身在重構(gòu)帶寬方面存在的劣勢(shì),或者使糾刪編碼存儲(chǔ)系統(tǒng)具有更優(yōu)的性能,同樣是業(yè)界關(guān)注的焦點(diǎn)。近年,隨著海量數(shù)據(jù)存儲(chǔ)系統(tǒng)基礎(chǔ)環(huán)節(jié)(如服務(wù)器性能、網(wǎng)絡(luò)帶寬、傳輸技術(shù)等)的飛速發(fā)展,系統(tǒng)結(jié)構(gòu)研究的重心逐漸向客戶端過渡。
[0004]本發(fā)明針對(duì)編碼冗余存儲(chǔ)系統(tǒng)中,當(dāng)有文件分塊丟失時(shí),系統(tǒng)需要調(diào)用遠(yuǎn)大于丟失的數(shù)據(jù)量來重構(gòu)丟失的文件分塊的缺點(diǎn),針對(duì)糾刪碼分布式存儲(chǔ)的特點(diǎn),提出了基于對(duì)等結(jié)構(gòu)的分布式存儲(chǔ)與重構(gòu)方式。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)存在的問題,本發(fā)明的主要目的在于提供一種降低編碼冗余存儲(chǔ)系統(tǒng)的網(wǎng)絡(luò)帶寬壓力和服務(wù)器端計(jì)算壓力的自適應(yīng)數(shù)據(jù)存儲(chǔ)與重構(gòu)方法。
[0006]一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,該編碼冗余存儲(chǔ)系統(tǒng)包含服務(wù)器端和客戶端,客戶端向服務(wù)器端提出文件存儲(chǔ)需求,該針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法包括如下步驟:
[0007](I)該客戶端計(jì)算待存儲(chǔ)文件的哈希值,將待存儲(chǔ)文件的哈希值上傳至服務(wù)器端;
[0008](2)將待存儲(chǔ)文件的哈希值與服務(wù)器端已經(jīng)存儲(chǔ)的文件的哈希值進(jìn)行比對(duì);
[0009](3)若出現(xiàn)相同的哈希值,則服務(wù)器端不接受該待存儲(chǔ)文件的上傳,但服務(wù)器端接受客戶端上傳的關(guān)于存儲(chǔ)文件的文件信息,并建立該文件信息與已經(jīng)存儲(chǔ)的具有相同哈希值的文件的關(guān)聯(lián);若未出現(xiàn)相同的哈希值,則服務(wù)器端接受該待存儲(chǔ)文件的上傳,將上傳的文件進(jìn)行分塊,計(jì)算并存儲(chǔ)各文件分塊的哈希值,將各文件分塊進(jìn)行編碼產(chǎn)生校驗(yàn)數(shù)據(jù)分塊。
[0010]進(jìn)一步地,在步驟(I)客戶端計(jì)算待存儲(chǔ)文件的哈希值之前,服務(wù)器端先詢問客戶端是否愿意計(jì)算待存儲(chǔ)文件的哈希值,若客戶端不愿意計(jì)算待存儲(chǔ)文件的哈希值,則將該待存儲(chǔ)文件直接上傳服務(wù)器端,由服務(wù)器端計(jì)算該待存儲(chǔ)文件的哈希值。針對(duì)待存儲(chǔ)文件直接上傳服務(wù)器端,由服務(wù)器端計(jì)算該待存儲(chǔ)文件的哈希值的情況,步驟(3)中若出現(xiàn)相同的哈希值,則對(duì)已經(jīng)上傳的待存儲(chǔ)文件進(jìn)行刪除。
[0011]一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,該針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法包括如下步驟:
[0012](I)實(shí)時(shí)檢測(cè)編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端是否有存儲(chǔ)節(jié)點(diǎn)損毀;
[0013](2)當(dāng)有存儲(chǔ)節(jié)點(diǎn)損毀時(shí),系統(tǒng)將損毀存儲(chǔ)節(jié)點(diǎn)的文件分塊對(duì)應(yīng)的哈希值標(biāo)記為丟失狀態(tài),并判斷損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)是否大于系統(tǒng)的設(shè)定值,該系統(tǒng)的設(shè)定值在編碼所允許的容災(zāi)范圍內(nèi);
[0014](3)當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)大于系統(tǒng)的設(shè)定值時(shí),編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)不大于系統(tǒng)的設(shè)定值時(shí),進(jìn)入步驟⑷;
[0015](4)實(shí)時(shí)判斷是否有客戶端提出讀取文件請(qǐng)求;
[0016](5)若有客戶端提出讀取文件請(qǐng)求,則判斷待讀取的文件是否有文件分塊丟失;
[0017](6)若待讀取的文件有文件分塊丟失,則判斷客戶端的硬件資源是否符合設(shè)定的硬件性能要求;
[0018](7)若客戶端的硬件資源不符合設(shè)定的硬件性能要求,則編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),將恢復(fù)出的文件分塊提供給客戶端;若客戶端的硬件資源符合設(shè)定的硬件性能要求,則進(jìn)入步驟(8);
[0019](8)詢問客戶端是否愿意參與丟失文件分塊的恢復(fù);
[0020](9)若客戶端愿意參與丟失文件分塊的恢復(fù),則客戶端下載相關(guān)文件分塊與可以滿足恢復(fù)丟失文件分塊的校驗(yàn)數(shù)據(jù)分塊,對(duì)丟失的文件分塊進(jìn)行恢復(fù)。若客戶端不愿意參與丟失文件分塊的恢復(fù),則編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu)。
[0021]進(jìn)一步地,對(duì)丟失的文件分塊進(jìn)行恢復(fù)后,該針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法還包括如下步驟:
[0022]計(jì)算重構(gòu)的文件分塊的哈希值;
[0023]將該重構(gòu)文件分塊的哈希值上傳至服務(wù)器端;
[0024]服務(wù)器端比較重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值是否相同;
[0025]若重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值相同,則允許客戶端上傳重構(gòu)的文件分塊;
[0026]客戶端上傳該重構(gòu)的文件分塊;
[0027]服務(wù)器端計(jì)算該上傳文件分塊的哈希值,并與對(duì)應(yīng)丟失的原文件分塊的哈希值進(jìn)行比對(duì);
[0028]若上傳文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值相同時(shí),服務(wù)器端保存該上傳的文件分塊,并將該上傳文件分塊對(duì)應(yīng)的哈希值設(shè)置為可用。
[0029]相對(duì)于現(xiàn)有技術(shù),首先,本發(fā)明在存儲(chǔ)系統(tǒng)體系結(jié)構(gòu)上提出了一種基于對(duì)等結(jié)構(gòu)的分布式存儲(chǔ)與重構(gòu)方式,利用了散布廣泛客戶端的計(jì)算能力,使得系統(tǒng)盡可能少的利用數(shù)據(jù)中心服務(wù)器端內(nèi)部有限的網(wǎng)絡(luò)帶寬及計(jì)算資源來實(shí)現(xiàn)丟失數(shù)據(jù)的譯碼重構(gòu),而是根據(jù)客戶對(duì)文件的需求特點(diǎn)將丟失文件分塊的恢復(fù)功能部分的遷移到了客戶端,從而減弱了系統(tǒng)恢復(fù)數(shù)據(jù)時(shí)各節(jié)點(diǎn)并發(fā)讀入現(xiàn)象對(duì)集群內(nèi)部網(wǎng)絡(luò)的影響,從體系結(jié)構(gòu)設(shè)計(jì)的角度解決了糾刪碼冗余策略在恢復(fù)文件時(shí)的維護(hù)帶寬問題,具體地說,當(dāng)系統(tǒng)中出現(xiàn)節(jié)點(diǎn)損毀或數(shù)據(jù)丟失時(shí),系統(tǒng)會(huì)根據(jù)客戶端的需要和相關(guān)硬件性能確定是由系統(tǒng)內(nèi)部自行恢復(fù)還是由客戶端來對(duì)數(shù)據(jù)進(jìn)行恢復(fù)。當(dāng)利用客戶端對(duì)數(shù)據(jù)進(jìn)行重構(gòu)時(shí),客戶端會(huì)計(jì)算重構(gòu)出的丟失數(shù)據(jù)的哈希值,并將該值發(fā)送到服務(wù)器端,經(jīng)服務(wù)器端確認(rèn)該哈希值后,客戶端將上傳該重構(gòu)出的數(shù)據(jù)塊;其次,本發(fā)明通過記錄存儲(chǔ)文件及每個(gè)文件分塊的哈希值,并根據(jù)系統(tǒng)的運(yùn)行與客戶端的情況來選擇相應(yīng)的文件存儲(chǔ)方法與丟失文件分塊的重構(gòu)方法,降低文件分塊重構(gòu)過程對(duì)系統(tǒng)集群內(nèi)部傳輸及前臺(tái)應(yīng)用的I/o性能的影響,進(jìn)而降低數(shù)據(jù)中心因重構(gòu)數(shù)據(jù)帶來的網(wǎng)絡(luò)帶寬壓力和計(jì)算壓力。
【專利附圖】
【附圖說明】
[0030]圖1是本發(fā)明針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法流程圖
[0031]圖2是本發(fā)明針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法客戶端數(shù)據(jù)恢復(fù)示意圖
【具體實(shí)施方式】
[0032]下面結(jié)合附圖,詳細(xì)說明本發(fā)明的【具體實(shí)施方式】。
[0033]本發(fā)明針對(duì)利用編碼冗余策略作為基礎(chǔ)存儲(chǔ)架構(gòu)的數(shù)據(jù)存儲(chǔ)中心,設(shè)計(jì)了一種數(shù)據(jù)存儲(chǔ)中心系統(tǒng),即客戶端與分布廣泛的客戶端之間協(xié)同進(jìn)行的數(shù)據(jù)重構(gòu)方式。編碼冗余存儲(chǔ)系統(tǒng)由服務(wù)器端和分布廣泛的客戶端組成。數(shù)據(jù)存儲(chǔ)系統(tǒng)的基礎(chǔ)存儲(chǔ)架構(gòu)由編碼策略實(shí)現(xiàn),這種編碼策略不限于某一種特定的編碼方式,如RS編碼方法、EVEN0DD編碼方法等均可。
[0034]本發(fā)明提出了一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,當(dāng)客戶端向服務(wù)器端提出文件存儲(chǔ)需求時(shí),該針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法包括如下步驟(I)至步驟⑶:
[0035](I)客戶端計(jì)算待存儲(chǔ)文件的哈希值,將待存儲(chǔ)文件的哈希值上傳至服務(wù)器端。利用現(xiàn)有的哈希算法將任意長(zhǎng)度的二進(jìn)制值映射為固定長(zhǎng)度(125或250位)的由字母和數(shù)字組成的字符串,這個(gè)具有固定長(zhǎng)度的字符串即為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。一個(gè)文件對(duì)應(yīng)一個(gè)哈希值,不同的數(shù)據(jù)經(jīng)過轉(zhuǎn)換后,哪怕兩個(gè)文件之間只差一個(gè)字符,其哈希值都是不同的。在客戶端計(jì)算待存儲(chǔ)文件的哈希值之前,可先由服務(wù)器端詢問客戶端是否愿意計(jì)算待存儲(chǔ)文件的哈希值,若客戶端不愿對(duì)待存儲(chǔ)文件的哈希值進(jìn)行計(jì)算,則服務(wù)器端將接受上傳待存儲(chǔ)文件,并計(jì)算該文件的哈希值。若客戶端愿意對(duì)待存儲(chǔ)文件的哈希值進(jìn)行計(jì)算,則由客戶端計(jì)算待存儲(chǔ)文件的哈希值。
[0036](2)將待存儲(chǔ)文件的哈希值與服務(wù)器端已經(jīng)存儲(chǔ)的文件的哈希值進(jìn)行比對(duì)。
[0037](3)若出現(xiàn)相同的哈希值,則服務(wù)器端不接受待存儲(chǔ)文件的上傳;針對(duì)待存儲(chǔ)文件直接上傳服務(wù)器端,由服務(wù)器端計(jì)算該待存儲(chǔ)文件的哈希值的情況,若出現(xiàn)相同的哈希值,則將已上傳的待存儲(chǔ)文件進(jìn)行刪除。在文件上傳之前先利用哈希值進(jìn)行驗(yàn)證,可避免不同客戶重復(fù)上傳同樣的文件,進(jìn)而降低存儲(chǔ)系統(tǒng)內(nèi)部的數(shù)據(jù)冗余度。服務(wù)器端雖不接受具有相同哈希值的待存儲(chǔ)文件的上傳,但服務(wù)器端接受客戶端上傳的關(guān)于存儲(chǔ)文件的文件信息,存儲(chǔ)文件的文件信息是指文件的名稱、文件的大小、文件的類型等文件標(biāo)注信息。并建立該文件信息與已經(jīng)存儲(chǔ)的具有相同哈希值的文件的關(guān)聯(lián),以便客戶端可以按其規(guī)定的特征來識(shí)別該文件。如用戶A和用戶B具有一段相同的視頻,但是他們的視頻的文件名稱不同,首先利用哈希算法獲得的哈希值判別這兩個(gè)視頻是否相同,若相同,則不接受第二位用戶上傳的視頻文件,但接受第二位用戶上傳文件的文件信息,即也會(huì)按照第二位客戶上傳文件的信息進(jìn)行標(biāo)記,此時(shí)存儲(chǔ)系統(tǒng)中只有一份該視頻文件,但有兩份與該視頻文件關(guān)聯(lián)的文件信息;
[0038]若服務(wù)器端經(jīng)過查詢已經(jīng)存儲(chǔ)的哈希值表,未出現(xiàn)相同的哈希值,則服務(wù)器端接受該待存儲(chǔ)文件的上傳,并存儲(chǔ)該文件的哈希值,同時(shí)將上傳的文件進(jìn)行分塊,計(jì)算并存儲(chǔ)各文件分塊的哈希值,每一個(gè)文件分塊都對(duì)應(yīng)一個(gè)哈希值,文件分塊的哈希值主要是用來檢驗(yàn)后續(xù)客戶端上傳的重構(gòu)好的文件分塊是否是丟失的文件分塊,文件分塊所具有的哈希值是整個(gè)文件哈希值的備份。另外將各文件分塊進(jìn)行編碼產(chǎn)生校驗(yàn)數(shù)據(jù)分塊,可以采用已有的STAR碼、EVEN0DD碼或其它的編碼方法來產(chǎn)生校驗(yàn)數(shù)據(jù)分塊。
[0039]本發(fā)明還提出一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,如圖1所示,該針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法包括如下步驟SI至S15:
[0040]S1、系統(tǒng)檢測(cè)模塊輸出,即系統(tǒng)開始運(yùn)行。
[0041]S2、系統(tǒng)運(yùn)行時(shí)實(shí)時(shí)檢測(cè)編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端是否有存儲(chǔ)節(jié)點(diǎn)損毀。當(dāng)有存儲(chǔ)節(jié)點(diǎn)損毀時(shí),系統(tǒng)將損毀存儲(chǔ)節(jié)點(diǎn)的文件分塊對(duì)應(yīng)的哈希值標(biāo)記為丟失狀態(tài),并進(jìn)入步驟S3,若無存儲(chǔ)節(jié)點(diǎn)損毀時(shí),則進(jìn)入步驟S15,退出恢復(fù)模式。
[0042]S3、判斷損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)是否大于系統(tǒng)的設(shè)定值,該系統(tǒng)的設(shè)定值根據(jù)編碼冗余存儲(chǔ)系統(tǒng)所使用的編碼方法進(jìn)行設(shè)定,必須在編碼所允許的容災(zāi)范圍內(nèi)。每一種編碼方法都會(huì)有一個(gè)容錯(cuò)界限,如RS碼可以容許50%的存儲(chǔ)節(jié)點(diǎn)損毀,因而,設(shè)定值可以根據(jù)編碼容錯(cuò)的界限,在界限以下進(jìn)行設(shè)定。當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)大于系統(tǒng)的設(shè)定值時(shí),進(jìn)入步驟S4,當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)不大于,即小于或等于系統(tǒng)的設(shè)定值時(shí),進(jìn)入步驟S6。
[0043]S4、進(jìn)入集群節(jié)點(diǎn)整體恢復(fù)模式,即編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu)。
[0044]S5、判斷是否恢復(fù)完畢,若恢復(fù)完畢,則進(jìn)入步驟S15,退出恢復(fù)模式,若未恢復(fù)完畢,則返回步驟S3。
[0045]S6、實(shí)時(shí)判斷是否有客戶端提出讀取文件請(qǐng)求,若有客戶端提出讀取文件請(qǐng)求,則進(jìn)入步驟S7,若無客戶端提出讀取文件請(qǐng)求,則返回步驟S2 ;
[0046]S7、判斷待讀取的文件是否完整,即是否有文件分塊丟失,若待讀取的文件有文件分塊丟失,則進(jìn)入步驟S8,若待讀取的文件無文件分塊丟失,則進(jìn)入步驟S15,退出恢復(fù)模式,客戶端可直接讀取文件。
[0047]S8、判斷客戶端的硬件資源是否符合設(shè)定的硬件性能要求,此處主要根據(jù)客戶端的硬件配置情況來確定在該種配置情況下對(duì)丟失數(shù)據(jù)恢復(fù),是否會(huì)給客戶端正常運(yùn)行的程序帶來影響,或者較大影響機(jī)器運(yùn)行性能。若客戶端的硬件資源不符合設(shè)定的硬件性能要求,則進(jìn)入步驟S9。若客戶端的硬件資源符合設(shè)定的硬件性能要求,則進(jìn)入步驟S11。
[0048]S9、進(jìn)入集群?jiǎn)挝募謴?fù)模式,即編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),將恢復(fù)出的文件分塊提供給客戶端。
[0049]S10、判斷是否恢復(fù)完畢,若恢復(fù)完畢,則進(jìn)入步驟S15,退出恢復(fù)模式,若未恢復(fù)完畢,則返回步驟S9。
[0050]S11、詢問客戶端是否愿意參與丟失文件分塊的恢復(fù)。若客戶端愿意參與丟失文件分塊的恢復(fù),則進(jìn)入步驟S12,若客戶端不愿意參與丟失文件分塊的恢復(fù),則進(jìn)入步驟S9,由服務(wù)器端進(jìn)行丟失文件分塊的恢復(fù)。
[0051]S12、客戶端下載相關(guān)文件分塊與可以滿足恢復(fù)丟失文件分塊的校驗(yàn)數(shù)據(jù)分塊,對(duì)丟失的文件分塊進(jìn)行恢復(fù)??蛻舳藢?duì)丟失的文件分塊進(jìn)行恢復(fù)后,對(duì)重構(gòu)的文件分塊進(jìn)行驗(yàn)證,方法為:計(jì)算重構(gòu)的文件分塊的哈希值;客戶端將該重構(gòu)文件分塊的哈希值上傳至服務(wù)器端;服務(wù)器端檢驗(yàn)該哈希值是否正確,即比較重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值是否相同;若重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值相同,說明該客戶端擬上傳的重構(gòu)文件分塊是與丟失的原文件分塊完全一致,則允許客戶端上傳重構(gòu)的文件分塊并進(jìn)入步驟S13 ;若重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值不相同,說明該客戶端擬上傳的重構(gòu)文件分塊不是丟失的原文件分塊,則不允許客戶端上傳重構(gòu)的文件分塊。
[0052]S13、客戶端上傳重構(gòu)的文件分塊。
[0053]S14、判斷重構(gòu)的文件分塊是否上傳完畢,服務(wù)器端計(jì)算該上傳文件分塊的哈希值,并與對(duì)應(yīng)丟失的原文件分塊的哈希值進(jìn)行比對(duì);若上傳文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值相同時(shí),說明該客戶端上傳的重構(gòu)文件分塊與丟失的原文件分塊完全一致,服務(wù)器端保存該上傳的文件分塊,并將該文件分塊對(duì)應(yīng)的哈希值設(shè)置為可用。若重構(gòu)的文件分塊上傳完畢,則進(jìn)入步驟S15,退出恢復(fù)模式,若重構(gòu)的文件分塊未上傳完畢,則返回步驟S13。
[0054]如圖2所示,為本發(fā)明針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法利用客戶端進(jìn)行數(shù)據(jù)恢復(fù)的示意圖。當(dāng)編碼冗余存儲(chǔ)系統(tǒng)出現(xiàn)文件分塊丟失時(shí),系統(tǒng)既可以采用服務(wù)器端內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),也可以利用客戶端的計(jì)算資源進(jìn)行重構(gòu),在利用客戶端對(duì)丟失的文件分塊進(jìn)行恢復(fù)時(shí),系統(tǒng)并不強(qiáng)制客戶端對(duì)丟失的文件分塊進(jìn)行恢復(fù),而是當(dāng)客戶端具有對(duì)丟失文件分塊的文件有讀取需求時(shí),客戶端在下載所需文件的其余完好分塊的同時(shí),并下載一定數(shù)量的校驗(yàn)數(shù)據(jù)分塊,并最終將丟失的文件分塊重構(gòu)出來,并為客戶端自己所用。另外,對(duì)重構(gòu)出的文件分塊計(jì)算哈希值,客戶端將重構(gòu)文件分塊的哈希值上傳至服務(wù)器端,服務(wù)器端通過比對(duì)哈希值來判斷該客戶端擬上傳的重構(gòu)文件分塊是與丟失的原文件分塊完全一致,若一致,則允許客戶端上傳重構(gòu)的文件分塊,客戶端將重構(gòu)的文件分塊上傳至服務(wù)器端。
[0055]服務(wù)器端在客戶端上傳文件分塊之前和客戶端上傳文件分塊之后,均進(jìn)行了哈希值的比對(duì)。在客戶端上傳文件分塊之前進(jìn)行哈希值的比對(duì)主要為了確保重構(gòu)的文件分塊與丟失的原文件分塊完全一致;在客戶端上傳文件分塊之后,服務(wù)器端保存文件分塊之前進(jìn)行哈希值的比對(duì),主要是怕上傳過程中出現(xiàn)數(shù)據(jù)丟失或者因其它情況出現(xiàn)的惡意纂改,為保證上傳文件的準(zhǔn)確性,因此在文件保存前又進(jìn)行了一次哈希值的對(duì)比。[0056]實(shí)施例一
[0057]本實(shí)施例中,編碼冗余存儲(chǔ)系統(tǒng)是利用普通PC機(jī)搭建,因而,系統(tǒng)將節(jié)點(diǎn)失效作為常態(tài)來處理。在利用糾刪編碼重構(gòu)丟失的文件分塊時(shí),根據(jù)糾刪編碼原理,系統(tǒng)需要至少任意m個(gè)數(shù)據(jù)塊,即m個(gè)文件分塊和校驗(yàn)數(shù)據(jù)分塊參與運(yùn)算才可以恢復(fù)丟失的文件分塊,因而伴隨其產(chǎn)生的基于內(nèi)部網(wǎng)絡(luò)的In Cast問題(即由于重構(gòu)節(jié)點(diǎn)需要調(diào)用多個(gè)文件分塊,因而,會(huì)出現(xiàn)多個(gè)文件分塊同時(shí)向重構(gòu)節(jié)點(diǎn)集中匯聚,當(dāng)匯聚節(jié)點(diǎn)網(wǎng)卡性能較差時(shí),會(huì)出現(xiàn)數(shù)據(jù)延遲的情況)會(huì)嚴(yán)重降低集群內(nèi)部網(wǎng)絡(luò)并發(fā)傳輸能力。但是,基于糾多錯(cuò)的糾刪編碼存儲(chǔ)方式,為恢復(fù)丟失的文件分塊提供了更多的可選恢復(fù)策略。為了降低文件分塊重構(gòu)過程對(duì)系統(tǒng)集群內(nèi)部傳輸及前臺(tái)應(yīng)用的I/O性能的影響,本實(shí)施例利用散布在客戶端大量的計(jì)算資源參與丟失文件分塊的重構(gòu)與集群內(nèi)部,即服務(wù)器端集中重構(gòu)相結(jié)合的方式,來實(shí)現(xiàn)損毀節(jié)點(diǎn)上文件分塊的重構(gòu)。
[0058]由于編碼冗余存儲(chǔ)系統(tǒng)的客戶端可能是硬件性能較好的個(gè)人電腦,也可能是性能較差的移動(dòng)終端。雖然每個(gè)客戶端節(jié)點(diǎn)在網(wǎng)絡(luò)中都是平等的,但是它們的網(wǎng)絡(luò)帶寬、計(jì)算能力、內(nèi)存大小可能有較大的差異。因而,對(duì)于網(wǎng)絡(luò)帶寬較小、計(jì)算能力較弱、內(nèi)存容量較小的節(jié)點(diǎn),如果讓其通過客戶端恢復(fù)方式來讀取文件的話,可能具有較差的用戶體驗(yàn)。因而,系統(tǒng)必須對(duì) 客戶端的相關(guān)的硬件性能及計(jì)算能力進(jìn)行測(cè)試。那些硬件性能及計(jì)算能力較好的節(jié)點(diǎn)被選為客戶端恢復(fù)模式的計(jì)算節(jié)點(diǎn)。這些節(jié)點(diǎn)應(yīng)該具有以下特點(diǎn):該節(jié)點(diǎn)首先具有充足的網(wǎng)絡(luò)帶寬和較小的網(wǎng)絡(luò)延遲,并有足夠的計(jì)算能力和內(nèi)存空間。該節(jié)點(diǎn)能夠保證穩(wěn)定的,相對(duì)較長(zhǎng)的在線時(shí)間,不能過于頻繁的加入或者離開系統(tǒng)。該節(jié)點(diǎn)自主的選擇用客戶端恢復(fù)的方式獲取文件,并愿意將重構(gòu)出的文件分塊上傳到服務(wù)器上。
[0059]本實(shí)施例中系統(tǒng)選用的糾刪編碼參數(shù)為(n,k,n_k+l)的MDS碼,則該編碼最小距離為η-k+l,即若原文件為k個(gè)分塊,經(jīng)編碼后產(chǎn)生n-k個(gè)校驗(yàn)數(shù)據(jù)分塊,則從這η個(gè)數(shù)據(jù)塊(文件分塊和校驗(yàn)數(shù)據(jù)分塊)中任意取出k個(gè)分塊便可重構(gòu)出原文件。
[0060]集群存儲(chǔ)系統(tǒng)運(yùn)行時(shí),對(duì)重構(gòu)臨界參數(shù)k(ln-m),即系統(tǒng)的設(shè)定值進(jìn)行設(shè)置。當(dāng)集群中損毀存儲(chǔ)節(jié)點(diǎn)kf < k時(shí),集群管理器(服務(wù)器端)并不組織內(nèi)部節(jié)點(diǎn)對(duì)損毀存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)塊進(jìn)行恢復(fù),而是利用客戶對(duì)所需求的文件分塊進(jìn)行恢復(fù)。由于校驗(yàn)數(shù)據(jù)分塊并不能直接為用戶提供可用信息,因而,考慮極端情況為損毀的節(jié)點(diǎn)全部為原文件分塊所在的節(jié)點(diǎn)。則客戶在讀取某一文件時(shí),需要同時(shí)下載集群中所剩余的n-kff原文件分塊和kf個(gè)校驗(yàn)數(shù)據(jù)分塊,并下載碼字信息,重構(gòu)出損毀的kf個(gè)文件分塊,并將重構(gòu)出的文件分塊與5下載的n-kf個(gè)文件分塊,拼接成原文件。同時(shí),客戶端將對(duì)恢復(fù)出的1^個(gè)文件分塊按照集群系統(tǒng)中文件分塊封裝的格式再次進(jìn)行封裝,并上傳到服務(wù)器集群上。文件服務(wù)器將計(jì)算該文件分塊的哈希值,并與已存儲(chǔ)的原文件分塊的哈希值進(jìn)行比較,若相同,則存儲(chǔ)該分塊,若不同則拒絕該文件分塊的上傳請(qǐng)求。當(dāng)計(jì)算機(jī)集群中損毀的節(jié)點(diǎn)個(gè)數(shù)kf超過設(shè)置的重構(gòu)臨界參數(shù)值k時(shí),服務(wù)器將根據(jù)未被恢復(fù)的文件分塊數(shù)據(jù)量大小及集群內(nèi)節(jié)點(diǎn)運(yùn)行情況確定集群內(nèi)恢復(fù)策略。文件管理服務(wù)器將計(jì)算重構(gòu)所有剩余文件分塊所需要的計(jì)算量,系統(tǒng)將按照計(jì)算量的均衡負(fù)載原則,對(duì)恢復(fù)節(jié)點(diǎn)進(jìn)行任務(wù)分配。并將恢復(fù)的文件分塊再次部署于集群內(nèi)存儲(chǔ)節(jié)點(diǎn)上。
[0061]由于本發(fā)明恢復(fù)模式是將用戶重構(gòu)好的數(shù)據(jù)重新上傳到服務(wù)器端,因而上傳數(shù)據(jù)的私密性、完整性、安全性自然就變成為關(guān)鍵問題,同時(shí),網(wǎng)絡(luò)中存在的惡意節(jié)點(diǎn)可能蓄意破壞網(wǎng)絡(luò)運(yùn)行協(xié)議,破壞節(jié)點(diǎn)的正常路由,造成網(wǎng)絡(luò)癱瘓?;蛏蟼鲙в胁《镜奈募斐纱鎯?chǔ)中心的節(jié)點(diǎn)出現(xiàn)數(shù)據(jù)不可用。因此,保證重構(gòu)數(shù)據(jù)的私密性、完整性及安全性,發(fā)現(xiàn)并隔離不安全節(jié)點(diǎn)、拒絕與原文件分塊不同的客戶端上傳文件分塊等措施同樣是該種恢復(fù)模式方法的一個(gè)環(huán)節(jié)。實(shí)現(xiàn)時(shí),客戶端首先計(jì)算已經(jīng)重構(gòu)出的文件分塊的哈希值,將哈希值上傳到服務(wù)器端,由于服務(wù)器端中已經(jīng)存儲(chǔ)了在最初文件存儲(chǔ)時(shí)的哈希值庫,與庫中的對(duì)應(yīng)丟失的文件分塊的哈希值進(jìn)行比對(duì),如果發(fā)現(xiàn)客戶端重構(gòu)出的文件分塊的哈希值與丟失文件分塊的哈希值相同,那么允許客戶端上傳該文件分塊,若客戶端重構(gòu)出的文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值不同,說明重構(gòu)的文件分塊不正確,或者該數(shù)據(jù)已經(jīng)被惡意篡改,不接收該文件分塊。對(duì)于重要數(shù)據(jù),當(dāng)文件分塊上傳完畢時(shí),系統(tǒng)內(nèi)部需要對(duì)已經(jīng)上傳完畢的文件分塊進(jìn)行二次檢測(cè),服務(wù)器端再次計(jì)算該上傳文件分塊的哈希值,并與對(duì)應(yīng)丟失的原文件分塊的哈希值再次比對(duì),檢測(cè)其是否在上傳過程中,受到惡意攻擊或者篡改,確??蛻舳藬?shù)據(jù)的可靠安全。
[0062]由于采用客戶端恢復(fù)方式,避免了集群內(nèi)部出現(xiàn)數(shù)據(jù)的IN CAST現(xiàn)象,在集群出口鏈接點(diǎn)上,系統(tǒng)只需要與丟失文件分塊等量的通信量,系統(tǒng)便可獲得完整的原文件。從而避免了基于集群內(nèi)部網(wǎng)絡(luò)的IN CAST問題會(huì)嚴(yán)重降低并發(fā)傳輸能力的問題,節(jié)約了云存儲(chǔ)數(shù)據(jù)中的網(wǎng)絡(luò)資源和計(jì)算資源。
[0063]以上介紹了一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)與重構(gòu)方法,在構(gòu)建大數(shù)據(jù)存儲(chǔ)中心,傳感器網(wǎng)絡(luò)方面具有較好的應(yīng)用價(jià)值。本發(fā)明并不限定于以上實(shí)施例,任何未脫離本發(fā)明技術(shù)方案,即僅僅對(duì)其進(jìn)行本領(lǐng)域普通技術(shù)人員所知悉的改進(jìn)或變更,均屬于本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,所述編碼冗余存儲(chǔ)系統(tǒng)包含服務(wù)器端和客戶端,所述客戶端向服務(wù)器端提出文件存儲(chǔ)需求,其特征在于,所述針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法包括如下步驟: (1)所述客戶端計(jì)算待存儲(chǔ)文件的哈希值,將待存儲(chǔ)文件的哈希值上傳至服務(wù)器端; (2)將待存儲(chǔ)文件的哈希值與服務(wù)器端已經(jīng)存儲(chǔ)的文件的哈希值進(jìn)行比對(duì); (3)若出現(xiàn)相同的哈希值,則服務(wù)器端不接受所述待存儲(chǔ)文件的上傳,若未出現(xiàn)相同的哈希值,則服務(wù)器端接受所述待存儲(chǔ)文件的上傳,將上傳的文件進(jìn)行分塊,計(jì)算并存儲(chǔ)各文件分塊的哈希值,將各文件分塊進(jìn)行編碼產(chǎn)生校驗(yàn)數(shù)據(jù)分塊。
2.如權(quán)利要求1所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,其特征在于:所述步驟(1)客戶端計(jì)算待存儲(chǔ)文件的哈希值之前,服務(wù)器端詢問客戶端是否愿意計(jì)算待存儲(chǔ)文件的哈希值,若客戶端不愿意計(jì)算所述待存儲(chǔ)文件的哈希值,則將待存儲(chǔ)文件直接上傳服務(wù)器端,由服務(wù)器端計(jì)算所述待存儲(chǔ)文件的哈希值。
3.如權(quán)利要求2所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,其特征在于:所述步驟(3)若出現(xiàn)相同的哈希值,則對(duì)已經(jīng)上傳的待存儲(chǔ)文件進(jìn)行刪除。
4.如權(quán)利要求1所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)存儲(chǔ)方法,其特征在于:當(dāng)出現(xiàn)相同的哈希值,服務(wù)器端不接受所述待存儲(chǔ)文件的上傳時(shí),服務(wù)器端接受客戶端上傳的關(guān)于存儲(chǔ)文件的文件信息,并建立所述文件信息與已經(jīng)存儲(chǔ)的具有相同哈希值的文件的關(guān)聯(lián)。
5.一種針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,其特征在于,所述針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法包括如下步驟: (1)實(shí)時(shí)檢測(cè)編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端是否有存儲(chǔ)節(jié)點(diǎn)損毀; (2)當(dāng)有存儲(chǔ)節(jié)點(diǎn)損毀時(shí),系統(tǒng)將損毀存儲(chǔ)節(jié)點(diǎn)的文件分塊對(duì)應(yīng)的哈希值標(biāo)記為丟失狀態(tài),并判斷損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)是否大于系統(tǒng)的設(shè)定值; (3)當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)大于系統(tǒng)的設(shè)定值時(shí),編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),當(dāng)損毀的存儲(chǔ)節(jié)點(diǎn)數(shù)不大于系統(tǒng)的設(shè)定值時(shí),進(jìn)入步驟⑷; (4)實(shí)時(shí)判斷是否有客戶端提出讀取文件請(qǐng)求; (5)若有客戶端提出讀取文件請(qǐng)求,則判斷待讀取的文件是否有文件分塊丟失; (6)若待讀取的文件有文件分塊丟失,則判斷客戶端的硬件資源是否符合設(shè)定的硬件性能要求; (7)若客戶端的硬件資源不符合設(shè)定的硬件性能要求,則編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu),將恢復(fù)出的文件分塊提供給客戶端;若客戶端的硬件資源符合設(shè)定的硬件性能要求,則進(jìn)入步驟(8); (8)客戶端下載相關(guān)文件分塊與可以滿足恢復(fù)丟失文件分塊的校驗(yàn)數(shù)據(jù)分塊,對(duì)丟失的文件分塊進(jìn)行恢復(fù)。
6.如權(quán)利要求5所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,其特征在于,所述步驟(7)若客戶端的硬件資源符合設(shè)定的硬件性能要求,則詢問客戶端是否愿意參與丟失文件分塊的恢復(fù),若客戶端愿意參與丟失文件分塊的恢復(fù),則進(jìn)入步驟(8),若客戶端不愿意參與丟失文件分塊的恢復(fù),則編碼冗余存儲(chǔ)系統(tǒng)服務(wù)器端利用內(nèi)部計(jì)算資源對(duì)丟失的文件分塊進(jìn)行重構(gòu)。
7.如權(quán)利要求5所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,其特征在于,所述針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法還包括如下步驟: 對(duì)丟失的文件分塊進(jìn)行恢復(fù)后,計(jì)算重構(gòu)的文件分塊的哈希值; 將所述重構(gòu)文件分塊的哈希值上傳至服務(wù)器端; 服務(wù)器端比較重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值是否相同; 若重構(gòu)文件分塊的哈希值與對(duì)應(yīng)丟失的原文件分塊的哈希值相同,則允許客戶端上傳重構(gòu)的文件分塊; 客戶端上傳所述重構(gòu)的文件分塊; 服務(wù)器端計(jì)算所述上傳文件分塊的哈希值,并與對(duì)應(yīng)丟失的原文件分塊的哈希值進(jìn)行比對(duì); 若上傳文件分塊的哈希值與對(duì)應(yīng)丟 失的原文件分塊的哈希值相同時(shí),服務(wù)器端保存所述上傳的文件分塊,并將所述上傳文件分塊對(duì)應(yīng)的哈希值設(shè)置為可用。
8.如權(quán)利要求5至7任一所述的針對(duì)編碼冗余存儲(chǔ)系統(tǒng)的自適應(yīng)數(shù)據(jù)重構(gòu)方法,其特征在于,所述系統(tǒng)的設(shè)定值在編碼所允許的容災(zāi)范圍內(nèi)。
【文檔編號(hào)】H04L29/08GK103916483SQ201410175898
【公開日】2014年7月9日 申請(qǐng)日期:2014年4月28日 優(yōu)先權(quán)日:2014年4月28日
【發(fā)明者】蔣海波, 李娜, 周星梅, 陳建中, 王曉京 申請(qǐng)人:中國科學(xué)院成都生物研究所