一種面向糾刪碼的數(shù)據(jù)放置方法
【專利摘要】本發(fā)明公開了一種面向糾刪碼的數(shù)據(jù)放置方法,目的是提高大規(guī)模分布存儲系統(tǒng)的容錯能力。技術(shù)方案是先構(gòu)建由一個控制節(jié)點和M個機架(每個機架上安裝N個存儲節(jié)點)組成的分布存儲系統(tǒng),控制節(jié)點上安裝有數(shù)據(jù)寫入管理程序,存儲節(jié)點上安裝有數(shù)據(jù)寫入程序;控制節(jié)點執(zhí)行數(shù)據(jù)寫入管理程序,接收用戶提交的數(shù)據(jù)對象寫入請求,對數(shù)據(jù)對象進行分塊和編碼計算,得到原始數(shù)據(jù)塊和冗余數(shù)據(jù)塊,且向各存儲節(jié)點分發(fā)數(shù)據(jù)塊寫入請求;存儲節(jié)點的數(shù)據(jù)寫入程序接收來自控制節(jié)點的數(shù)據(jù)塊寫入請求,將原始數(shù)據(jù)塊或冗余數(shù)據(jù)塊寫入本地磁盤。本發(fā)明有效兼顧了分布存儲系統(tǒng)的數(shù)據(jù)訪問效率、數(shù)據(jù)可靠性和數(shù)據(jù)修復(fù)效率,最大限度地提升了大規(guī)模分布存儲系統(tǒng)的容錯能力。
【專利說明】—種面向糾刪碼的數(shù)據(jù)放置方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布存儲系統(tǒng)的數(shù)據(jù)容錯技術(shù),尤其是面向糾刪碼的數(shù)據(jù)放置方法。【背景技術(shù)】
[0002]數(shù)據(jù)容錯是海量數(shù)據(jù)分布存儲的關(guān)鍵技術(shù)之一,數(shù)據(jù)容錯對于提高系統(tǒng)的可用性和可靠性至關(guān)重要。目前,數(shù)據(jù)容錯技術(shù)主要包括基于復(fù)制的容錯技術(shù)和基于糾刪碼的容錯技術(shù)。
[0003]基于復(fù)制的容錯技術(shù)簡單直觀,易于實現(xiàn)和部署,需要為每個數(shù)據(jù)對象創(chuàng)建若干同樣大小的副本,存儲空間開銷較大?;诩m刪碼的容錯技術(shù)通過將數(shù)據(jù)對象分割為多個數(shù)據(jù)塊,通過利用糾刪碼算法對原始的數(shù)據(jù)塊進行編碼得到冗余的數(shù)據(jù)塊,把多個數(shù)據(jù)塊的信息融合到較少的冗余信息中,有效節(jié)省存儲空間。與基于復(fù)制的容錯技術(shù)相比,基于糾刪碼的容錯技術(shù)具有冗余度低、存儲空間利用率高等優(yōu)點,已經(jīng)逐步成為大數(shù)據(jù)時代數(shù)據(jù)容錯的主流技術(shù)。
[0004]基于糾刪碼的容錯技術(shù)的基本思想是對k個原始數(shù)據(jù)塊進行編碼計算得到m個冗余數(shù)據(jù)塊;只需k+m個數(shù)據(jù)塊中的任意k個數(shù)據(jù)塊,就可通過解碼計算恢復(fù)得到原始的k個數(shù)據(jù)塊。
[0005]具體而言,每個冗余數(shù)據(jù)塊Cj(j = I, 2,…,m)都是k個原始數(shù)據(jù)塊Di (i =
I,2,…,k)的線性組合,編碼計算可表示為公式(I),其中,Gji (j = I, 2,…,m, i =
1.2,-,k)是數(shù)據(jù)塊編碼系數(shù)。也就是說,對于冗余數(shù)據(jù)塊C^j= 1,2,...,!!!)而言,首先,編碼系數(shù)(i = I, 2,…,k)與數(shù)據(jù)塊Di (i = I, 2,…,k)進行逐位相乘,得到k個新數(shù)據(jù)塊Tji = GjiXDi (i = I, 2,…,k);然后,k個新數(shù)據(jù)塊TjiQ = I, 2,…,k)進行逐位相加,得
到冗余數(shù)據(jù)塊。
【權(quán)利要求】
1.一種面向糾刪碼的數(shù)據(jù)放置方法,其特征在于包括以下步驟: 第一步,構(gòu)建一個分布存儲系統(tǒng),它由多個節(jié)點構(gòu)成,每個節(jié)點都是一臺可獨立運行的計算機,各節(jié)點通過網(wǎng)絡(luò)設(shè)備互連; 分布存儲系統(tǒng)中的節(jié)點分為兩類:控制節(jié)點和存儲節(jié)點,控制節(jié)點和存儲節(jié)點上均安裝有操作系統(tǒng)、TCP/IP協(xié)議軟件,配置了網(wǎng)絡(luò)環(huán)境; 分布存儲系統(tǒng)包括一個控制節(jié)點,負責(zé)與用戶交互,控制節(jié)點上安裝有數(shù)據(jù)寫入管理程序;數(shù)據(jù)寫入管理程序接收用戶提交的數(shù)據(jù)對象寫入請求,負責(zé)存儲編碼系數(shù),對數(shù)據(jù)對象進行分塊和編碼計算,向各存儲節(jié)點分發(fā)數(shù)據(jù)塊寫入請求;所述編碼系數(shù)是指糾刪碼編碼計算公式Gjl XD1+…+Gji XDi+…+GjkXDk = Cj 中的系數(shù)Gji, j = 1,2,…,m,i = 1,2,…,k ; 分布存儲系統(tǒng)包括M個機架,每個機架上安裝N個存儲節(jié)點,存儲節(jié)點負責(zé)存儲數(shù)據(jù)對象的原始數(shù)據(jù)塊和冗余數(shù)據(jù)塊,執(zhí)行數(shù)據(jù)塊寫入任務(wù);在分布存儲系統(tǒng)中,每個原始數(shù)據(jù)塊和冗余數(shù)據(jù)塊均擁有唯一的數(shù)據(jù)塊編號,M為正整數(shù),N為正整數(shù); 存儲節(jié)點上安裝有數(shù)據(jù)寫入程序,數(shù)據(jù)寫入程序負責(zé)接收來自控制節(jié)點的數(shù)據(jù)塊寫入請求,完成數(shù)據(jù)塊寫入任務(wù); 第二步,控制節(jié)點執(zhí)行數(shù)據(jù)寫入管理程序,接收用戶提交的數(shù)據(jù)對象D0,對數(shù)據(jù)對象DO進行分塊和編碼計算,得到原始數(shù)據(jù)塊和冗余數(shù)據(jù)塊,具體步驟如下: .2.1控制節(jié)點的數(shù)據(jù)寫入管理程序接收用戶提交的數(shù)據(jù)對象DO寫入請求;. 2.2控制節(jié)點的數(shù)據(jù)寫入管理程序?qū)?shù)據(jù)對象DO分割為k個原始數(shù)據(jù)塊D1~Dk,記Di;l ≤ i ≤ k ; . 2.3控制節(jié)點的數(shù)據(jù)寫入管理程序利用編碼系數(shù)對k個原始數(shù)據(jù)塊D1~Dk進行編碼計算,得到m個冗余數(shù)據(jù)塊C1~Cm,記Cj, 1≤j≤m ; 第三步,控制節(jié)點執(zhí)行數(shù)據(jù)寫入管理程序,將編碼計算得到的k個原始數(shù)據(jù)塊即D1~Dk和m個冗余數(shù)據(jù)塊即C1~Cm分別寫入不同的存儲節(jié)點,具體步驟如下: . 3.1初始化信息,具體包括: .3.1.1分布存儲系統(tǒng)的機架記為Rz,z為機架序號,1≤ z ≤ M,分布存儲系統(tǒng)的M個機架構(gòu)成機架集合RSet ; . 3.1.2分布存儲系統(tǒng)中每個機架Rz的N個存儲節(jié)點構(gòu)成存儲節(jié)點集合SNSetz ; . 3.1.3令原始數(shù)據(jù)塊Dx的序號x=l; .3.1.4令寫入同一機架的原始數(shù)據(jù)塊數(shù)目sum = m ; . 3.1.5令冗余數(shù)據(jù)塊Cy的序號y = 1 ; .3.2控制節(jié)點的數(shù)據(jù)寫入管理程序從RSet中任意選擇一個機架Rz,將sum個原始數(shù)據(jù)塊寫入從Rz的存儲節(jié)點集合SNSetz中任意選擇的sum個存儲節(jié)點; .3.3如果(k-x+1) ≥m,則轉(zhuǎn)第3.2步,繼續(xù)將原始數(shù)據(jù)塊寫入到不同機架的存儲節(jié)點;否則,轉(zhuǎn)第3.4步; .3.4如果0〈 (k-x+1) <m,則令sum = k_x+l,轉(zhuǎn)到第3.2步,繼續(xù)將原始數(shù)據(jù)塊寫入到不同機架的存儲節(jié)點;否則,說明k個原始數(shù)據(jù)塊已經(jīng)分別寫入不同機架的存儲節(jié)點,轉(zhuǎn)第.3.5 步; .3.5控制節(jié)點的數(shù)據(jù)寫入管理程序從RSet中任意選擇一個機架Rz,將m個冗余數(shù)據(jù)塊C1~Cm寫入從SNSetz中任意選擇的m個存儲節(jié)點。第四步,控制節(jié)點執(zhí)行數(shù)據(jù)寫入管理程序,向用戶發(fā)送數(shù)據(jù)寫入成功信息。
2.如權(quán)利要求1所述的一種面向糾刪碼的數(shù)據(jù)放置方法,其特征在于2.3步中所述控制節(jié)點的數(shù)據(jù)寫入管理程序利用編碼系數(shù)對k個原始數(shù)據(jù)塊D1~Dk進行編碼計算的具體方法是: . 2.3.1初始化信息,具體包括: . 2.3.1.1令冗余數(shù)據(jù)塊Cj的序號j = I ; . 2.3.1.2令原始數(shù)據(jù)塊Di的序號i = I ; .2.3.2控制節(jié)點的數(shù)據(jù)寫入管理程序進行編碼計算,將編碼系數(shù)Gm與原始數(shù)據(jù)塊01進行逐位相乘,即,Tji = GjiXDi,得到新數(shù)據(jù)塊Tji ; .2.3.3如果i = 1,那么,令Cj = Tji,轉(zhuǎn)第2.3.4步;否則,將Tji與Cj進行逐位相加,BP, Cj = CfTji,轉(zhuǎn)第 2.3.4 步; .2.3.4更新原始數(shù)據(jù)塊Di的序號,i = i+1 ;
.2.3.5 如果 i>k,則令 i = 1,j = j+Ι ; .2.3.6如果j>m,則編碼計算生成冗余數(shù)據(jù)塊結(jié)束;否則,轉(zhuǎn)第2.3.2步。
3.如權(quán)利要求1所述的一種面向糾刪碼的數(shù)據(jù)放置方法,其特征在于3.2步中控制節(jié)點的數(shù)據(jù)寫入管理程序從RSet中任意選擇一個機架Rz,將sum個原始數(shù)據(jù)塊寫入從Rz的存儲節(jié)點集合SNSetz中任意選擇的sum個存儲節(jié)點的具體方法是: .3.2.1初始化信息,令寫入機架Rz的原始數(shù)據(jù)塊數(shù)目dn = I ; .3.2.2控制節(jié)點的數(shù)據(jù)寫入管理程序從SNSetz中任意選擇一個存儲節(jié)點SN,控制節(jié)點的數(shù)據(jù)寫入管理程序向存儲節(jié)點SN發(fā)送Dx的寫入請求,將存儲節(jié)點SN從SNSetz中刪除,即,SNSetz = SNSetz-{SN}; . 3.2.3存儲節(jié)點SN的數(shù)據(jù)寫入程序接收來自控制節(jié)點的Dx寫入請求,將Dx寫入本地磁盤; .3.2.4更新Dx的序號,X = x+1 ; .3.2.5更新寫入機架Rz的原始數(shù)據(jù)塊數(shù)目dn = dn+Ι ; .3.2.6如果dn>Sum,則說明sum個原始數(shù)據(jù)塊已經(jīng)分別寫入機架Rz中的不同存儲節(jié)點,轉(zhuǎn)第3.2.7步;否則,轉(zhuǎn)第3.2.2步; .3.2.7 將機架 Rz 從 RSet 中刪除,即,RSet = RSet-{RJ。
4.如權(quán)利要求1所述的一種面向糾刪碼的數(shù)據(jù)放置方法,其特征在于3.5步中控制節(jié)點的數(shù)據(jù)寫入管理程序從RSet中任意選擇一個機架Rz,將m個冗余數(shù)據(jù)塊C1~Cm寫入從SNSetz中任意選擇的m個存儲節(jié)點的具體步驟是: .3.5.1初始化信息,令寫入機架Rz的冗余數(shù)據(jù)塊數(shù)目cn = I ; .3.5.2控制節(jié)點的數(shù)據(jù)寫入管理程序從SNSetz中任意選擇一個存儲節(jié)點SN,控制節(jié)點的數(shù)據(jù)寫入管理程序向存儲節(jié)點SN發(fā)送Cy的寫入請求,將存儲節(jié)點SN從SNSetz中刪除,即,SNSetz = SNSetz-{SN}; .3.5.3存儲節(jié)點SN的數(shù)據(jù)寫入程序接收來自控制節(jié)點的Cy寫入請求,將Cy寫入本地磁盤; .3.5.4更新Cy的序號,y = y+Ι ; .3.5.5更新寫入機架Rz的原始數(shù)據(jù)塊數(shù)目cn = cn+Ι ;.3.5.6如果cn≤ m,則轉(zhuǎn)第3.5.2步,繼續(xù)將冗余數(shù)據(jù)塊寫入機架Rz中的存儲節(jié)點;否貝U,說明m 個冗余數(shù)據(jù)塊已經(jīng)分別寫入機架Rz中的不同存儲節(jié)點,結(jié)束。
【文檔編號】G06F3/06GK104035732SQ201410269720
【公開日】2014年9月10日 申請日期:2014年6月17日 優(yōu)先權(quán)日:2014年6月17日
【發(fā)明者】王意潔, 許方亮, 裴曉強, 符永銓, 孫偉東, 程力, 李小勇, 馬行空, 王媛, 趙越, 林軒, 熊澤宇 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)