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