一种可容多错交叉循环卷积码的局部性修复编码方法与流程

文档序号:15700161发布日期:2018-10-19 19:42阅读:338来源:国知局

本发明属于计算机领域,涉及一种可容多错交叉循环卷积码的局部性修复编码方法。



背景技术:

随着存储数据的爆炸性增长,存储系统规模也成倍增长,这意味着存储节点海量化,为了确保存储数据的可用性和可靠性,存储系统通常采用“复制”和“纠删码”策略,然而“复制”策略存储代价较高,需要存储大量副本数据确保系统较高的可靠性,“纠删码”策略在节点修复过程中带宽开销过大,需要存储系统具有较高的网络带宽。针对“复制”和“纠删码”策略存在的不足,提出了再生码,但再生码在故障节点修复过程中连接的节点数量较多,具有较高的磁盘I/O开销,且故障节点修复方案单一,不能满足当前海量化的存储节点要求,同时系统的容错能力较低,这使得存储系统中故障节点修复存在局限性。



技术实现要素:

针对上述现有技术中存在的缺陷或不足,本发明的目的在于,提供一种可容多错交叉循环卷积码的局部性修复编码方法,该方法可以容许系统的多个节点同时出现故障,且故障节点的修复方案较多,同样降低了故障节点修复过程中的磁盘I/O开销。

为了实现上述目的,本发明采用如下技术方案:

一种可容多错交叉循环卷积码的局部性修复编码方法,该方法用于将原始文件M存储到分布式存储系统中的节点上,分布式存储系统中的节点至少包括2n个,其特征在于,包括以下步骤:

步骤1,将原始文件M分成k个原始数据块,对k个原始数据块采用(n,k) 系统MDS码进行编码,得到n个编码数据块c1,…,cn-1,cn;

步骤2,将n个编码数据块复制2次,每个编码数据块形成3个副本;

步骤3,在分布式存储系统中随机选取n个节点作为n个数据节点 N1,...,Ni,...Nn;

步骤4,将n个编码数据块的3个副本存储到选取的n个数据节点上;采用的方法如下:

对于数据节点Ni,当1≤i≤n-1时,,该数据节点Ni上存储的编码数据块是ci、ci+1和ci+2;当i=n时,该数据节点Ni上存储的编码数据块是cn、c1和c2;

步骤5,在分布式存储系统中随机选取除去步骤3选取的n个数据节点以外的n个节点作为n个校验节点Nn+1,...,Nn+j...,N2n;

步骤6,在n个编码数据块c1,…,cn-1,cn中选取两个编码数据块ca和cb进行异或编码操作,得到n个校验数据块ca,b;其中,1≤a≤n,b=a+1,当a=n时, b=1;

步骤7,将n个校验数据块分别存储到n个校验节点Nn+1,...,Nn+j...,N2n上,采用的方法如下:

对于校验节点Nn+j,若1≤j≤n-1,则校验节点Nn+j上存储的校验数据块为cj,j+1;若j=n,则校验节点Nn+j上存储的校验数据块为cn,1。

本发明还提供一种节点修复方法,包括以下步骤:

按照权利要求1所述的可容多错交叉循环卷积码的局部性修复编码方法,将原始文件M存储到分布式存储系统中的2n个节点中,2n个节点包括 n个数据节点N1,...,Ni,...Nn和n个校验节点Nn+1,...,Nn+j...,N2n;

(1)若数据节点中单个节点Ni,1≤i≤n,发生故障

修复方案1:从节点Ni-1上采集编码数据块ci和ci+1,从节点Ni+1上采集编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+1为节点N1;

修复方案2:从节点Ni-1上采集编码数据块ci,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+1为节点N1;

修复方案3:从节点Ni-1上采集编码数据块ci和ci+1,从节点Ni+2上采集编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+2为节点N2,当i=n-1时,节点Ni+2为节点N1;

修复方案4:从节点Ni-2上采集编码数据块ci,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现Ni节点的故障修复;

在该修复方案中,当i=1时,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Ni+1为节点N1;

修复方案5:从节点Ni-1上采集编码数据块ci和ci+1,从节点Nn+i+1上采集校验数据块c(i+1),(i+2),根据校验数据块c(i+1),(i+2)和编码数据块ci+1恢复得到编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn;当i=n时,节点Nn+i+1为节点Nn+1;

(2)若数据节点中两个相邻节点Ni-1和Ni,1≤i≤n,发生故障

修复方案1:从节点Ni-2上采集编码数据块ci和ci-1,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,将编码数据块ci-1ci和ci+1传送给节点Ni-1,实现节点Ni-1和Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Ni+1为节点N1;

修复方案2:从节点Ni-2上采集编码数据块ci和ci-1,从节点Nn+i上采集校验数据块ci,(i+1),从节点Nn+i+1上采集校验数据块c(i+1),(i+2),根据校验数据块ci,(i+1)和编码数据块ci恢复得到编码数据块ci+1,根据校验数据块c(i+1),(i+2)和编码数据块ci+1恢复得到编码数据块ci+2;将将编码数据块ci、ci+1和ci+2传送给节点Ni,将编码数据块ci-1ci和ci+1传送给节点Ni-1,实现节点Ni-1和Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Nn+i+1为节点Nn+1;

(3)若数据节点中两个不相邻节点Ni-1和Ni+1,1≤i≤n,发生故障

修复方案1:从节点Ni-2上采集编码数据块ci-1,从节点Ni上采集编码数据块ci、ci+1和ci+2,从节点Ni+2上采集编码数据块ci+3,将编码数据块ci-1、ci和 ci+1传送给节点Ni-1,将编码数据块ci+1、ci+2和ci+3、传送给节点Ni+1,实现节点Ni-1和Ni+1的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n-1时,节点Ni+2为节点N1;当i=n时,节点Ni+2为节点N2,节点Ni+1为节点N1;

修复方案2:从节点Ni上采集编码数据块ci、ci+1和ci+2,从节点Nn+i-1上采集校验数据块c(i-1),i,从节点Nn+i+2上采集校验数据块c(i+2),(i+3),根据校验数据块c(i-1),i和编码数据块ci恢复得到编码数据块ci-1,根据校验数据块c(i+2),(i+3)和编码数据块ci+2恢复得到编码数据块ci+3;将编码数据块ci-1、ci和ci+1传送给节点 Ni-1,将编码数据块ci+1、ci+2和ci+3、传送给节点Ni+1,实现节点Ni-1和Ni+1的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn;当i=n时,节点Ni+1为节点N1,节点Nn+i+2为节点Nn+2;当i=n-1时,节点Nn+i+2为节点Nn+1。

与现有技术相比,本发明具有以下技术效果:

1、考虑到存储系统中存储的数据量大,存储节点数增多,若采用传统部分重复码构造局部性修复编码,当节点出现故障时,故障节点修复方案单一,修复过程中的磁盘I/O开销较大,同时系统的容错能力较低,为此在分布式存储系统中采用可容多错交叉循环卷积码,在修复故障节点过程中修复方案较多,磁盘I/O开销相对较低且提高了系统的容错能力。

2、当修复组中存在单节点、两相邻节点以及两不相邻节点时,都可以通过数据节点和校验节点快速实现故障节点数据重构,恢复出故障节点数据。

附图说明

图1是本发明方法对应的基于可容多错交叉循环卷积码的存储结构图;

图2是本发明方法修复组内存在单节点故障时的节点修复示意图,其中图2 (a)、(b)、(c)、(d)是修复方案一的修复示意图;图2(e)、(f)是修复方案二的修复示意图;

图3是本发明方法修复组内存在两相邻节点故障时的节点修复示意图,其中图3(a)是修复方案一的修复示意图;图3(b)是修复方案二的修复示意图;

图4是本发明方法修复组内存在两不相邻节点故障时的节点修复示意图,其中图4(a)是修复方案一的修复示意图;图4(b)是修复方案二的修复示意图;

图5是实施例中修复组内存在单节点故障时的节点修复示意图,其中图5 (a)、(b)、(c)、(d)是修复方案一的修复示意图;图5(e)、(f)是修复方案二的修复示意图;

图6是实施例中修复组内存在两相邻节点故障时的节点修复示意图,其中图6(a)是修复方案一的修复示意图;图6(b)是修复方案二的修复示意图;

图7是实施例中修复组内存在两不相邻节点故障时的节点修复示意图,其中图7(a)是修复方案一的修复示意图;图7(b)是修复方案二的修复示意图;

下面结合附图和实施例对本发明的方案做进一步详细地解释和说明。

具体实施方式

本发明提供一种可容多错交叉循环卷积码的局部性修复编码方法,该方法用于将原始文件M存储到分布式存储系统中的节点上,分布式存储系统中的节点至少包括2n个,具体包括以下步骤:

步骤1,将原始文件M分成k个原始数据块,对k个原始数据块采用(n,k) 系统MDS码进行编码,得到n个编码数据块c1,…,cn-1,cn。

步骤2,将n个编码数据块复制2次,每个编码数据块形成3个副本。

步骤3,在分布式存储系统中随机选取n个节点作为n个数据节点 N1,...,Ni,...Nn。

步骤4,将n个编码数据块的3个副本存储到选取的n个数据节点上,采用的方法如下:

对于数据节点Ni,当1≤i≤n-1时,,该数据节点Ni上存储的编码数据块是ci、ci+1和ci+2;当i=n时,该数据节点Ni上存储的编码数据块是cn、c1和c2。

步骤5,在分布式存储系统中随机选取除去步骤3选取的n个数据节点以外的n个节点作为n个校验节点Nn+1,...,Nn+j...,N2n。

步骤6,在n个编码数据块c1,…,cn-1,cn中选取两个编码数据块ca和cb进行异或编码操作,得到n个校验数据块ca,b;其中,1≤a≤n,b=a+1,当a=n时,b=1;

步骤7,将n个校验数据块分别存储到n个校验节点Nn+1,...,Nn+j...,N2n上,采用的方法如下:

对于校验节点Nn+j,若1≤j≤n-1,则校验节点Nn+j上存储的校验数据块为cj,j+1;若j=n,则校验节点Nn+j上存储的校验数据块为cn,1。

本发明的另一个方面还提供一种节点修复方法,包括以下步骤:

按照上述可容多错交叉循环卷积码的局部性修复编码方法将原始文件 M存储到分布式存储系统中的2n个节点中,2n个节点包括n个数据节点 N1,...,Ni,...Nn和n个校验节点Nn+1,...,Nn+j...,N2n;

(1)数据节点中单个节点Ni,1≤i≤n发生故障

修复方案1,仅通过数据节点进行故障修复,参见图2中的(a),从节点Ni-1上采集编码数据块ci和ci+1,从节点Ni+1上采集编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+1为节点N1;

修复方案2,参见图2中的(b),从节点Ni-1上采集编码数据块ci,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+1为节点N1;

修复方案3,参见图2中的(c),从节点Ni-1上采集编码数据块ci和ci+1,从节点Ni+2上采集编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,当i=n时,节点Ni+2为节点N2,当i=n-1时,节点Ni+2为节点N1;

修复方案4,参见图2中的(d),从节点Ni-2上采集编码数据块ci,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点 Ni,实现节点Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Ni+1为节点N1;

修复方案5,通过数据节点和校验节点进行修复,参见图2中的(e), 从节点Ni-1上采集编码数据块ci和ci+1,从节点Nn+i+1上采集校验数据块

c(i+1),(i+2),根据校验数据块c(i+1),(i+2)和编码数据块ci+1恢复得到编码数据块ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,实现节点的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn;当i=n时,节点Nn+i+1为节点Nn+1。

(2)数据节点中两个相邻节点Ni-1和Ni发生故障

修复方案1,仅通过数据节点进行修复

参见图3中的(a),从节点Ni-2上采集编码数据块ci和ci-1,从节点Ni+1上采集编码数据块ci+1和ci+2,将编码数据块ci、ci+1和ci+2传送给节点Ni,将编码数据块ci-1ci和ci+1传送给节点Ni-1,实现节点Ni-1和Ni的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Ni+1为节点N1;

修复方案2,通过数据节点和校验节点进行修复

参见图3中的(b),从节点Ni-2上采集编码数据块ci和ci-1,从节点Nn+i上采集校验数据块ci,(i+1),从节点Nn+i+1上采集校验数据块c(i+1),(i+2),根据校验数据块ci,(i+1)和编码数据块ci恢复得到编码数据块ci+1,根据校验数据块c(i+1),(i+2)和编码数据块ci+1恢复得到编码数据块ci+2;将将编码数据块ci、ci+1和ci+2传送给节点Ni,将编码数据块ci-1ci和ci+1传送给节点Ni-1,实现节点Ni-1和Ni的故障修复。

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n时,节点Nn+i+1为节点Nn+1。

(3)数据节点中两个不相邻节点Ni-1和Ni+1发生故障

修复方案1,仅通过数据节点进行修复

参见图4中的(a),从节点Ni-2上采集编码数据块ci-1,从节点Ni上采集编码数据块ci、ci+1和ci+2,从节点Ni+2上采集编码数据块ci+3,将编码数据块 ci-1、ci和ci+1传送给节点Ni-1,将编码数据块ci+1、ci+2和ci+3、传送给节点Ni+1,实现节点Ni-1和Ni+1的故障修复;

在该修复方案中,当i=1时,节点Ni-1为节点Nn,节点Ni-2为节点Nn-1;当i=2时,节点Ni-2为节点Nn;当i=n-1时,节点Ni+2为节点N1;当i=n时,节点Ni+2为节点N2,节点Ni+1为节点N1;

修复方案2,通过数据节点和校验节点进行修复

参见图4中的(b),从节点Ni上采集编码数据块ci、ci+1和ci+2,从节点Nn+i-1 上采集校验数据块c(i-1),i,从节点Nn+i+2上采集校验数据块c(i+2),(i+3),根据校验数据块c(i-1),i和编码数据块ci恢复得到编码数据块ci-1,根据校验数据块c(i+2),(i+3)和编码数据块ci+2恢复得到编码数据块ci+3;将编码数据块ci-1、ci和ci+1传送给节点Ni-1,将编码数据块ci+1、ci+2和ci+3、传送给节点Ni+1,实现节点Ni-1和Ni+1的故障修复。

在该修复方案中,当i=1时,节点Ni-1为节点Nn;当i=n时,节点Ni+1为节点N1,节点Nn+i+2为节点Nn+2;当i=n-1时,节点Nn+i+2为节点Nn+1。

实施例

本实施例为在有限域GF(8)中构造(5,4)MDS码,记存储的文件大小为 M=1000M,将文件分为k=4个信息数据块,用m=[m1m2m3m4]表示文件信息数据,其中的m1,m2,…,m4表示信息数据块;c=[c1c2…c5]表示在分布式存储节点中存储的MDS码的生成码字,且c=m·GMDS,这里的(5,4)MDS 码的生成矩阵GMDS=[I|P]4×5,其中I为4×4单位矩阵,P为4×1维子矩阵。 (5,4)MDS码可以表示为

c=m·GMDS=m·[I|P]4×5

通过(5,4)MDS码生成的n=5个编码数据块,分别复制两次,以循环移位的方式存储于选取的n=5(N1、N2、N3、N4、N5)数据节点中,每个节点存储三个数据块,通过节点编码数据块的三角构造图,交叉生成由编码数据块循环卷积的n个校验数据块,存储在n=5(N6、N7、N8、N9、N10) 校验节点中。

将可容多错交叉循环卷积码作为局部码,在分布式存储系统的存储节点中选取2n=10个存储节点构成修复组,在该具有10个存储节点的修复组内构造局部性修复编码,确保MDS性质以及简单修复特性。

图5给出了具有10个存储节点修复组中数据节点3出现故障,有两种修复方案。

修复方案一,只通过数据节点进行修复,参见图5中的(a),从数据节点2上采集数据3、4,从数据节点4上采集数据5,传送给节点3,完成节点3的修复;参见图5中的(b),从数据节点2上采集数据3,从数据节点 4上采集数据4、5,传送给节点3,完成节点3的修复;参见图5中的(c),从数据节点2上采集数据3、4,从数据节点5上采集数据5,传送给节点3,完成节点3的修复;参见图5中的(d),从数据节点1上采集数据3,从数据节点4上采集数据4、5,传送给节点3,完成节点3的修复。

修复方案二,通过数据节点和校验节点进行修复,参见图5中的(e),从数据节点2上采集数据3、4,从校验节点9上采集数据4⊕5,与数据节点2的采集数据4进行异或操作,恢复出数据5,传送给节点3,完成节点 3的修复;参见图5中的(f),从数据节点4上采集数据4、5,从校验节点 8上采集数据3⊕4,与数据节点4的采集数据4进行异或操作,恢复出数据 3,传送给节点3,完成节点3的修复。

图6给出了具有10个存储节点修复组中两相邻节点3和4故障修复,有两种修复方案。

修复方案一,只通过数据节点进行修复,参见图6中的(a),从数据节点2上采集数据3、4,从数据节点5上采集数据5、1,分别传送给节点3 和节点4,完成节点3和节点4的修复。

修复方案二,通过数据节点和校验节点进行修复,参见图6中的(b),从数据节点2上采集数据3、4,从校验节点9上采集数据4⊕5,与数据节点2的采集数据4进行异或操作,恢复出数据5,从校验节点10上采集数据5⊕1,与恢复数据5进行异或操作,恢复出数据1,分别传送给节点3和节点4,完成节点3和节点4的修复。

图7给出了具有10个存储节点修复组中两不相邻节点2和4故障修复,有两种修复方案。

修复方案一,只通过数据节点进行修复,参见图7中的(a),从数据节点1上采集数据2,从数据节点3上采集数据3、4、5,从数据节点5上采集数据1,分别传送给节点2和节点4,完成节点2和节点4的修复。

修复方案二,通过数据节点和校验节点进行修复,参见图7中的(b),从数据节点3上采集数据3、4、5,从校验节点7上采集数据2⊕3,与数据节点3的采集数据3进行异或操作,恢复出数据2,从校验节点10上采集数据5⊕1,与数据节点3的采集数据5进行异或操作,恢复出数据1,分别传送给节点2和节点4,完成节点2和节点4的修复。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1