一种基于二进制的节点修复方法及系统与流程

文档序号:15615199发布日期:2018-10-09 21:11阅读:113来源:国知局

本发明属于分布式存储技术改进领域,尤其涉及一种基于二进制的节点修复方法及系统。



背景技术:

在大型的分布式存储系统中,我们能存储和分析大规模的数据,然而在日常操作过程中,系统中的节点存在各种故障,例如:因磁盘损坏或者断线导致的数据丢失。因此,确保系统中节点的可靠性和可用性就显的尤为重要。

传统的分布式存储系统中,存储数据常常采用重复策略。即通过复制多个数据副本并存储在系统中的节点上。当有数据损坏需要进行数据恢复时,只需要找到对应的节点中所存储的数据,即可恢复。

近年来,相关学者提出了一种最大距离可分码(mds),通过增加冗余来减小存储开销,同时保证节点在修复时数据的可靠性。其编码方式是:将原始的数据等分成k个原始数据包,然后将这k个原始数据包映射成n(n≥k)个编码数据包,任取k个编码数据包都可以恢复出k个原始数据包。其中最典型的rs码已经广泛的应用在现代数字通信、分布式存储系统中。

重复制的存储方式:由于每个节点都需要备份相应的数据副本,这样不仅会产生大量的冗余数据,加重服务器的负担,并且节点的利用率不高,造成资源的浪费。此外,随着系统中数据量的增加,存储开销也会呈指数型增加。

(n,k)码的在节点修复的过程中,需要读取所选取的修复节点中的全部数据,并下载下来,下载的数据量是所需恢复的数据量的k倍。这样不仅加重了网络带宽的负担,易损坏磁盘的性能。在修复过程中还过多的占用了系统的i/o口资源。并且在实际操作过程中,在某一特定的时间点,分布式存储系统中节点可能会不允许某些数据的读取或者下载请求。



技术实现要素:

本发明的目的在于提供一种基于二进制的节点修复方法及系统,旨在解决修复效率低的技术问题。

本发明是这样实现的,一种基于二进制的节点修复方法,所述节点修复方法包括以下步骤:

s1、在piggyback编码框架上对(n,k)码将系统节点分组并定义系统向量和编码矩阵,定义系统向量:a={a1a2…ak}t,b={b1b2…bk}t,c={c1c2…ck}t,d={d1d2…dk}t;编码矩阵:

s2、将定义的编码矩阵代入编码结构中获取相应的编码方式;

s3、根据编码方式通过zigzag解码对受损节点进行修复;

其中,k表示系统节点的个数,r表示奇偶校验节点的个数,n=k+r,n表示总共节点个数,t代表向量的转置。

本发明的进一步技术方案是:所述步骤s1中r大于等于2,k/r为整数。

本发明的进一步技术方案是:所述步骤s1中在建立编码矩阵时通过移位生成存储开销,所述存储开销与奇偶校验节点和系统节点的个数有关,r越大,存储开销越大,k越大,存储开销越大。

本发明的进一步技术方案是:所述步骤s3中受损节点修复包括系统节点修复和奇偶校验节点修复;所述系统节点修复时,故障节点时,修复系统节点需要m×(k+|s1|)个数据包修复故障节点;故障节点h∈sr时,修复系统节点需要m×(k+|sr|+r-2)个数据包修复故障节点,其中,m是任意的正整数。

本发明的进一步技术方案是:所述奇偶校验节点修复时,(n,k)码满足cp-bzd性质,若第一个奇偶校验节点(nodek+1)受损,需从剩余的n-1个节点中任取k个节点,每个节点存储2m个数据包,修复第一个奇偶校验节点需要2mk个数据包;若修复其他奇偶校验节点l,l∈{k+2,…,k+r},其修复与r和m的值相关,当r=2时,从每个系统节点中下载存储顺序为奇数的数据包和每个系统节点中存储的最后一个数据包,还需读取和下载节点k+1的第3个、第5个,第2m-1个数据包修复受损节点;当r≥3时,从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,以及读取f1,f2∈{k+1,…,k+r}\l中存储顺序为偶数的数据包修复故障节点的所有信息位,其中,m是任意的正整数,f表示除去故障节点的其他奇偶校验节点。

本发明的另一目的在于提供一种基于二进制的节点修复系统,所述节点修复系统包括:

定义模块,用于在piggyback编码框架上对(n,k)码将系统节点分组并定义系统向量和编码矩阵,定义系统向量:a={a1a2…ak}t,b={b1b2…bk}t,c={c1c2…ck}t,d={d1d2…dk}t;编码矩阵:

编码方式获取模块,用于将定义的编码矩阵代入编码结构中获取相应的编码方式;

节点修复模块,用于根据编码方式通过zigzag解码对受损节点进行修复;

其中,k表示系统节点的个数,r表示奇偶校验节点的个数,n=k+r,n表示总共节点个数,t代表向量的转置。

本发明的进一步技术方案是:所述定义模块中r大于等于2,k/r为整数。

本发明的进一步技术方案是:所述定义模块中在建立编码矩阵时通过移位生成存储开销,所述存储开销与奇偶校验节点和系统节点的个数有关,r越大,存储开销越大,k越大,存储开销越大。

本发明的进一步技术方案是:所述节点修复模块中受损节点修复包括系统节点修复和奇偶校验节点修复;所述系统节点修复时,故障节点时,修复系统节点需要m×(k+|s1|)个数据包修复故障节点;故障节点h∈sr时,修复系统节点需要m×(k+|sr|+r-2)个数据包修复故障节点,其中,m是任意的正整数。

本发明的进一步技术方案是:所述奇偶校验节点修复时,(n,k)码满足cp-bzd性质,若第一个奇偶校验节点(nodek+1)受损,需从剩余的n-1个节点中任取k个节点,每个节点存储2m个数据包,修复第一个奇偶校验节点需要2mk个数据包;若修复其他奇偶校验节点l,l∈{k+2,…,k+r},其修复与r和m的值相关,当r=2时,从每个系统节点中下载存储顺序为奇数的数据包和每个系统节点中存储的最后一个数据包,还需读取和下载节点k+1的第3个、第5个,第2m-1个数据包修复受损节点;当r≥3时,从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,以及读取f1,f2∈{k+1,…,k+r}\l中存储顺序为偶数的数据包修复故障节点的所有信息位,其中,m是任意的正整数,f表示除去故障节点的其他奇偶校验节点。

本发明的有益效果是:在分布式存储系统中,根据其特殊的编码方式,使设计的码即满足(n,k)性质;而且在节点修复过程中,可以有效的减小数据的读取量和下载量,从而提高修复效率。

附图说明

图1是本发明实施例提供的基于二进制的节点修复方法的流程图。

图2是本发明实施例提供的64码示意图。

图3是本发明实施例提供的基于二进制的节点修复系统的结构框图。

具体实施方式

如图1-2所示,本发明提供的基于二进制的节点修复方法,其详述如下:

步骤s1,在piggyback编码框架上对(n,k)码将系统节点分组并定义系统向量和编码矩阵;在piggyback的编码框架上,使用zigzag解码,由此来降低解码复杂度和提高故障节点的修复效率,是对k.v.rashmi等人提出的节点修复方案的一个改进。提出的(n,k)码具有cp-bzd性质。

cp-bzd性质的(n,k)码是指在二进制域可以进行锯齿解码的码,它可以容忍最多n-k个节点同时发生故障。把原始信息s分成k个长度为l比特的数据包,分别表示为的第j个比特表示为si,j,且si,j∈{0,1}。根据(n,k)码,将这k个数据包编码成n个数据包(n>k),分别表示为c1,…,cn。此外,我们有ci=si,其中i=1,…,k。我们把前k个节点包称为系统节点,其余n-k个数据包称为奇偶校验节点。

对于任意的(n,k)码,k表示系统节点的个数,系统节点中存储的数据包我们称之为原始数据包。r(r=n-k)表示奇偶校验节点的个数,奇偶校验节点中存储的数据包我们称之为校验数据包,其中,原始数据包和校验数据包我们统称为数据包,每个节点中可以存储多个数据包。本发明中,要求r≥2,k/r为整数。我们将系统节点分为r组,表示为s1……sr,其中

定义系统向量:a={a1a2…ak}t,b={b1b2…bk}t

c={c1c2…ck}t,d={d1d2…dk}t

t代表向量的转置,且每组系统分量之间相互独立。

编码矩阵p和q中的每个元素表示相应的原始数据包在构成校验数据包时的移位位数。其中0表示移位是0比特,k表示移位是k比特,-1表示与之相应的原始数据包不参与运算。

步骤s2,将定义的编码矩阵代入编码结构中获取相应的编码方式;用2m表示每个节点中存储的数据包的个数,其中m是任意的正整数,当m=2时,其中一般形式的编码方式如表1所示:

表1

其中:vr=pr+qr,

存储开销是指编码矩阵通过移位而产生的存储冗余,在本发明中,存储开销由p矩阵中最大的元素确定。存储开销:o=(r-1)×(k-1)。

因此,存储开销与奇偶校验节点和系统节点的个数有关,r越大,存储开销越大,k越大,存储开销越大。

步骤s3,根据编码方式通过zigzag解码对受损节点进行修复;基于piggyback的编码框架,在单个节点发生故障时,可以通过读取和下载特定节点中存储的数据包来减少数据下载量,从而提高节点的平均修复效率。此外本发明中,当每个节点中存储的数据包可以扩展到2m时,编码规则与表1一致,需要改变的是奇偶校验节点k+1中存储的数据包,需要把奇偶校验节点k+2到k+r中存储的第j∈{2,4,…2m-2}个数据包全部相加至奇偶校验节点k+1的第j+1个数据包。

修复系统节点:

1、故障节点不失一般性,我们假设h∈s1,如表1所示,我们首先从分布式存储系统中下载k个数据包,这k个数据包包括{b1,…,bh-1,bh+1,…,bk,p1a},因此我们就可以解码bh,即得到系统向量b={b1b2…bk}t,又因为ah可以通过下载数据包{ai}i∈s1\{h},以及p2b+q2a得到,即k+s1个数据包就可以得到ah,bh。同理通过下载{d1,…,dh-1,dh+1,…,dk,p1d},可以解码得出dh,最后ch可以由p2d+q2c和{ci}i∈s1解码得出,在修复过程中,只需要2×(k+|s1|)个数据包即可恢复故障系统节点h。当m是任意的正整数时,修复系统节点需要m×(k+|s1|)个数据包即可修复故障节点。

2、故障节点h∈sr,如表1所示,我们首先从分布式存储系统中下载k个数据包,这k个数据包包括{b1,…,bh-1,bh+1,…,bk,p1a},因此我们就可以解码bh,再从奇偶校验节点k+r中下载vra+prb,同时读取并下载奇偶校验节点k+2到奇偶校验节点k+r-1中存储的第二个数据包{pib+qia}i∈{2,…,r-1},即可解码得出ah,修复ah,bh整个过程需要读取和下载的数据包的个数是k+|sr|+r-2,如表1所示同理可以修复ch,dh,当m是任意的正整数时,修复系统节点需要m×(k+|sr|+r-2)个数据包即可修复故障节点。

修复奇偶校验节点:

若第一个奇偶校验节点(nodek+1)受损,由于本发明的(n,k)码满足cp-bzd性质,需要从剩下的n-1个节点中任取k个节点,由于每个节点存储2m个数据包,则需要2mk个数据包才能恢复第一个奇偶校验节点。

修复其他的奇偶校验节点l,其中l∈{k+2,…,k+r},其修复效率与r和m的值有关,当r=2时,需要从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,此外还需要读取和下载节点k+1的第3个、第5个,第2m-1个数据包,即可修复受损节点。当r≥3时,我们需要从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,以及读取f1,f2∈{k+1,…,k+r}\l中存储顺序为偶数的数据包。即可恢复故障节点的所有信息位,f表示除去故障节点的其他奇偶校验节点。

对于(6,4)码,k=4,r=6-4=2.

我们首先将系统节点分为2组,s1={nodel,node2}s2={node3,node4}定义系统向量:a={a1,a2,a3,a4}t;b={b1,b2,b3,b4}t;c={c1,c2,c3,c4}t;d={d1,d2,d3,d4}t

编码矩阵为:

q2={o,1,-1,-1}

其中,0,1,2,3分别表示原始分量的移位是0比特,1个比特,2个比特,3个比特,-1表示与之相对应的原始分量不参加编码运算。

相应的编码方式如下:

表2

cp-bzd性质:从6个节点中任取4个节点可以恢复出所有的信息,不失一般性,我们取

node3、node4、node5、node6,通过zigzag解码从剩下的节点中修复{ai,bj}i,j=1,2,3,4,因为node3和node4是系统节点,存储的数据可以直接得到。所以我们只需在奇偶校验节点node5和node6中解码出{ai,bj}i,j=1,2,即可,在节点6的第一个编码数据包中,s1,5没有和其他比特位“重叠”,因此可以直接解码得出,我们标注为1,表示是第一个解码得出的比特位。将s1,5代入到节点5的第二个数据包,通过异或(xor)运算可以解码得出s2,5,s2,5是第二个解码得到的比特位,我们标注为2,我们继续将s2,5代入到节点6的第一个编码数据包中,检验数据包的第二个比特位是s2,5+s1,6,因此我们可以解码得到s1,6,标注为3。解码过程按照如上方式进行,我们可以恢复出系统中所有的信息。

节点修复过程:

若node1受损,取数据包b2,b3,b4,p1b,我们就可以得到b1,再取a2,p2b+q2a即可修复a1。以同样的方式可以解码得出c1,d1。按照此修复方案,只需要12个数据包即可修复node1,相对于传统的mds码修复node1需要16个数据包的情况,提高了25%的修复效率。同理,node2,node3,node4发生故障时,也只需要12个数据包即可修复;

若node5受损,与传统的mds码一样,需要16个数据包才能修复故障节点;

若node6受损,则需取数据包{aicidi}i=1,2,3.4,我们可以很容易的恢复出节点6的第3个和第4个数据包,即p2c+(p2d+q2c)和p2d+q2c,再取节点5的第三个数据包p1c+(p2b+q1a)即可恢复出节点6,整个修复过程只需要13个数据包,相对于传统的mds码需要16个数据包的情况,提高了近19%的修复效率

存储开销为:o=(2-1)×(4-1)=3。

如图3所示,本发明的另一目的在于提供一种基于二进制的节点修复系统,所述节点修复系统包括:

定义模块,用于在piggyback编码框架上对(n,k)码将系统节点分组并定义系统向量和编码矩阵,定义系统向量:a={a1a2…ak}t,b={b1b2…bk}t,c={c1c2…ck}t,d={d1d2…dk}t;编码矩阵:

编码方式获取模块,用于将定义的编码矩阵代入编码结构中获取相应的编码方式;

节点修复模块,用于根据编码方式通过zigzag解码对受损节点进行修复;

其中,k表示系统节点的个数,r表示奇偶校验节点的个数,n=k+r,n表示总共节点个数,t代表向量的转置。

所述定义模块中r大于等于2,k/r为整数。

所述定义模块中在建立编码矩阵时通过移位生成存储开销,所述存储开销与奇偶校验节点和系统节点的个数有关,r越大,存储开销越大,k越大,存储开销越大。

所述节点修复模块中受损节点修复包括系统节点修复和奇偶校验节点修复;所述系统节点修复时,故障节点时,修复系统节点需要m×(k+|s1|)个数据包修复故障节点;故障节点h∈sr时,修复系统节点需要m×(k+|sr|+r-2)个数据包修复故障节点,其中,m是任意的正整数。

所述奇偶校验节点修复时,(n,k)码满足cp-bzd性质,若第一个奇偶校验节点(nodek+1)受损,需从剩余的n-1个节点中任取k个节点,每个节点存储2m个数据包,修复第一个奇偶校验节点需要2mk个数据包;

其修复效率与r和m的值有关,当r=2时,需要从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,此外还需要读取和下载节点k+1的第3个、第5个,第2m-1个数据包,即可修复受损节点。当r≥3时,我们需要从每个系统节点中下载存储顺序为奇数的数据包{qi},i={1,…,k}和每个系统节点中存储的最后一个数据包,以及读取f1,f2∈{k+1,…,k+r}\l中存储顺序为偶数的数据包。即可恢复故障节点的所有信息位,f表示除去故障节点的其他奇偶校验节点。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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