一種由極大距離可分存儲碼生成最小存儲再生碼的一般方法
【技術領域】
[0001] 本發(fā)明涉及分布式存儲系統(tǒng)領域,特別涉及一種適用于分布式存儲系統(tǒng)的將系統(tǒng) 節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成最小存儲再生碼的編碼技術。
【背景技術】
[0002] 為提高分布式存儲系統(tǒng)的可靠性,冗余是不可或缺的。一般來說,有兩種增加冗余 的機制:復制和糾刪。與重復碼相比,在冗余量相同的情況下糾刪碼能提供更多的可靠性, 所以更具優(yōu)勢。而在所有的糾刪碼中,極大距離可分(MDS)碼如Reed-Solomon碼因為在冗余 量相同的情況下具有最大的糾刪錯誤能力,被廣泛用于Google Colossus、Microsoft Azure等多個分布式云存儲系統(tǒng)。通常,將源文件均分成k份,采用一個(k+r,k)的MDS碼進行 編碼后得到k+r份數據,然后分別存放在k+r個獨立的存儲設備上,這些設備也被稱為節(jié)點。
[0003] 但是對于大型分布式云存儲系統(tǒng),各個節(jié)點的可靠性不高,失效現(xiàn)象經常發(fā)生,節(jié) 點失效會增加數據丟失的可能性、降低系統(tǒng)的可靠性,而其中單節(jié)點失效高達98.08%。為 了維持一定的冗余量,系統(tǒng)會頻繁地進行節(jié)點修復,常用的修復方式是從其它存活的節(jié)點 中下載數據以修復該失效節(jié)點,這些節(jié)點也被稱之為幫助節(jié)點。在修復過程中,所下載數據 的量被稱為修復帶寬,實際系統(tǒng)中為降低開銷,修復帶寬應該最小化。然而,傳統(tǒng)MDS存儲碼 的修復方法是連接任意k個幫助節(jié)點下載全部數據,從而重構源文件,然后再編碼產生失效 節(jié)點里的數據,相應的修復帶寬最大,這給分布式存儲系統(tǒng)帶來極大的開銷。
[0004] 文南犬〃Network coding for distributed storage systems,IEEE Trans〇on Information Theory,vol。56,11〇。9,口口。4539_4551,September 2010(基于網絡編碼的分布 式存儲系統(tǒng),IEEE信息論匯刊,第56卷,第9期,第4539-4551頁,2010年9月)〃確定了存儲編 碼的最小修復帶寬,達到最小修復帶寬的節(jié)點被稱為具有最佳修復性質,所有節(jié)點都具有 最佳修復性質被稱之為再生碼,其中最重要是兩類編碼:最小存儲再生(MSR)碼和最小修復 帶寬再生(MBR)碼。
[0005] 具體地,MSR編碼將一份大小為kN個元素的源文件均分成k份,每份包含N個元素, 用長度為N的列向量6表示,0<i〈k.對原始數據編碼后得到r份校驗數據,同樣用長度為N 的列向量fi表示,k < i<k+r。將這k+r份數據分別存放在一個包含在k+r個節(jié)點的分布式存 儲系統(tǒng)中。一個(k+r,k)MSR碼具有:(1 )MDS性質,即連接任意k個節(jié)點可以重構源文件,參見 附圖1;(2)最佳修復性質,即一個失效節(jié)點的修復帶寬為y =dN/(d-k+l),這可以通過連接 d(k < cK k+r-1)個幫助節(jié)點個數,從每個幫助節(jié)點中下載N/(d-k+l)個元素實現(xiàn),如附圖2 所示。
[0006] 特別需要指出,上述文獻中所構造的存儲碼是功能修復碼,即代替失效節(jié)點的新 節(jié)點存儲的數據可以與失效節(jié)點原來的數據不一樣但在功能上等價;然而,要求代替失效 節(jié)點的新節(jié)點存儲的數據與失效節(jié)點原來的數據完全一樣的精確修復MSR碼,能在實際應 用中減小系統(tǒng)的復雜度,因而更受實際系統(tǒng)歡迎。此外,目前已知的精確修復MSR碼都考慮d = k+r-l的情形來最大的減小修復帶寬。本發(fā)明也考慮這一種情況。
[0007] 實際的分布式存儲系統(tǒng)通常要求所采用的MSR碼的碼率k/(k+r)盡可能地大以減 少存儲開銷,但是目前只有4類這樣的MSR碼,如〃Repair optimal erasure codes through hadamard designs,IEEE Trans〇on Information Theory,vol〇59,no〇5,pp〇3021_3037, May 2013(基于hadamard設計的最佳修復糾刪碼,IEEE信息論匯刊,第59卷,第5期,第3021-3037頁,2013年5月)〃等等中的構造。此外,目前存在一些對于碼率大于1/2的MDS存儲碼,如 文獻〃A framework of constructions of minimal storage regenerating codes with the optimal access/update property,IEEE Trans〇on Information Theory,vol〇61, 11〇。4 4口。1920-1932,4口41 2015(-個具有最佳存取/更新性質的MSR碼的構造框架,IEEE 信息論匯刊,第61卷,第4期,第1920-1932頁,2015年4月)〃等等中的構造。而這類MDS存儲碼 只能最佳修復系統(tǒng)節(jié)點而不能最佳修復校驗節(jié)點。
【發(fā)明內容】
[0008] 本發(fā)明的目的在于提供一種由系統(tǒng)節(jié)點具有最佳修復性質的MDS存儲碼轉換成 MSR碼的一般方法。
[0009] 本發(fā)明的上述目的這樣實現(xiàn)的,一種將系統(tǒng)節(jié)點具有最佳修復性質的MDS存儲碼 轉換成MSR碼的一般方法,包括以下步驟:
[0010] (1)選擇系統(tǒng)節(jié)點具有最佳修復性質的節(jié)點容量為N的(k+r,k)MDS存儲碼&作為 基碼;
[0011] (2)產生r個碼&的實例,得到節(jié)點容量為rN的(k+r,k )MDS存儲碼C2;
[0012] (3)利用r個置換分別對C2中每個實例的校驗節(jié)點進行置換從而得到節(jié)點容量為 rN 的(k+r,k)MDS 存儲碼 C3;
[0013] ⑷對于〇 < j矣l〈r,將C3實例j節(jié)點1上的數據與實例1節(jié)點j上的數據做兩個線性 無關的線性組合并分別代替C3中實例j節(jié)點1與實例1節(jié)點j的數據,從而得到節(jié)點容量為rN 的(k+r,k)MSR碼C4。
[0014]在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的MDS存儲碼轉換成MSR碼的一般方法 中,所述的基碼Ci是非二元的。
[0015]在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成MSR碼的 一般方法中,所述的r個置換是{0,1,…,r-1}上的置換。
[0016]在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成MSR碼的 一般方法中,在修復基碼CjPMSR碼C4的某個存儲節(jié)點時,所連接的幫助節(jié)點個數為k+r-1。
[0017] 在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成MSR碼的 一般方法中,中間產生的碼C2,C 3和轉換后的碼C4,其系統(tǒng)節(jié)點存儲的數據完全一樣。
[0018] 在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成MSR碼的 一般方法中,修復所述的MSR碼C4的系統(tǒng)節(jié)點j時,修復方法與作為基碼Cj^MDS存儲碼對應 的節(jié)點j時修復方法相同.
[0019] 在本發(fā)明的將系統(tǒng)節(jié)點具有最佳修復性質的極大距離可分存儲碼轉換成MSR碼的 一般方法中,修復所述的MSR碼的校驗節(jié)點j時,下載剩下k+r-1的節(jié)點中的第r j到r j+r-1個 元素。
[0020] 本發(fā)明有益效果是:(1)系統(tǒng)的存儲開銷非常??;(II)任意一個失效節(jié)點都能被最 佳修復,修復失效節(jié)點的過程中只消耗最小的帶寬資源;(III)若采用系統(tǒng)節(jié)點具有最佳1/ 0修復性質的MDS存儲碼作為基碼,修復失效節(jié)點時I/O開銷也最小。
[0021] 下面結合附圖對本發(fā)明進行詳細說明。
【附圖說明】
[0022] 圖1是采用MDS碼的分布式存儲系統(tǒng)的編碼、存儲、重構源文件、修復單個節(jié)點的示 意圖;
[0023] 圖2是現(xiàn)有技術中MSR碼的修復單個節(jié)點失效的示意圖;
[0024]圖3是現(xiàn)有技術中MSR碼存儲節(jié)點的數據示意圖;
[0025] 圖4是本發(fā)明過程中間碼C2存儲節(jié)點的數據示意圖;
[0026] 圖5是本發(fā)明過程中間碼C3校驗節(jié)點的數據示意圖;
[0027]圖6是本發(fā)明生成的MSR碼C4校驗節(jié)點的數據示意圖;
[0028]圖7是本發(fā)明產生的MSR碼的一個例子;
[0029]圖8是本發(fā)明生成MSR碼C4產生的流程圖。
【具體實施方式】
[0030]本發(fā)明所提出的MSR碼,由系統(tǒng)節(jié)點具有最佳修復性質的節(jié)點容量為N的(k+r,k) MDS存儲碼&轉換而來。
[0031]假定采用碼&的存儲系統(tǒng)的系統(tǒng)節(jié)點與校驗節(jié)點所存儲的數據分別為f/,0< i〈k 和g/,0< j〈r,其中f/是長度為N的列向量,舄^七/^^是哪介非奇異方陣^系統(tǒng)節(jié) /=〇. 點i的數據f/可通過下載Si,jf/,0< j矣i〈k和Si,k+ig^,0<l〈r恢復出來,其中Si,j和Si,k+1 是N/r X N的矩陣。則所提出的MSR碼的生成與修復、重構按下述方法進行.
[0032] MSR碼的生成:
[0033] 1.把一份大小為krN的文件分成r份子文件,每份子文件的大小為kN,對每一份子 文件都按照基碼&編碼方式進行編碼得到r個實例,這些實例構成節(jié)點容量為rN的(k+r,k) MDS存儲碼,記為C2,記子文件1編碼后存放在系統(tǒng)節(jié)點i和校驗節(jié)點j上的數據分別為和 容(/) = 2!4^('>,其中〇<1,」〈 1',〇<:[〈讓,則/^可以通過*^.,廣.,0幻_矣 :[〈讓和5*,知名;'),.0<8 :/=0 <r恢復出來。C2碼的結構見附圖4。
[0034] 2 ?產生r個{0,1,…,r-1}上的置換,記為po,P1,。。。,pr-i。對于上一步驟中的矩陣 Si, j,(a)若對任意的0 < i〈k,存在矩陣Si使得Si, j = Si對所有的0 < j矣i〈k+r都成立,則這r個 置換是任意的{〇,1,…,r-1}上的置換;(b)否則這r個置換需滿足
[0035] pi( j)=pj(i) ,0 < i,j<r,
[0036] 這里P1將作用在實例1上的r個校驗點中數據,0 < l〈r。
[0037] 保持碼C2中校驗數據系統(tǒng)節(jié)點的數據不變,僅通過上述置換調整其校驗數據的位 置來生成碼C3,記碼C 3實例1中存放在