基于完全图的异构部分重复码构造及故障节点修复方法与流程

文档序号:19906646发布日期:2020-02-11 14:34阅读:228来源:国知局
基于完全图的异构部分重复码构造及故障节点修复方法与流程

本发明属于计算机领域,具体涉及一种基于完全图的异构部分重复码构造及故障节点修复方法。



背景技术:

当前互联网技术发展迅速,信息技术已经渗透到社会生活的各个领域,并且正从计算时代步入存储时代,这使得数据急剧增长。传统的数据存储方案已经不能适应于当前海量数据的存储,分布式存储系统逐渐成为主流的数据存储方式。通常,分布式存储系统采用“复制”和“纠删码”技术来产生一定的冗余数据,但“复制”冗余策略产生的存储代价过高。而纠删码可以使分布式存储系统的存储开销达到最优,但修复单个故障节点必须还原整个文件,带宽开销过大。针对“复制”和“纠删码”冗余策略存在的局限性,dimakis等人提出了再生码。再生码在故障节点修复过程中连接的节点数量较多,具有较高的磁盘i/o开销。部分重复码融合了复制和再生码技术,使得修复故障节点时只需从部分存活节点下载少量数据块,并将下载的数据块传输给新节点,无需其他运算操作。然而,大部分传统的部分重复码的构造都是基于同构分布式存储系统。实际上,在分布式存储系统中,用户对数据的访问往往是不均衡的,“热数据”数据经常被访问,“冷”数据很少被访问。若采用相同的数据重复度的传统的部分重复码不但会增加存储开销,还会造成“热数据”访问拥挤等瓶颈问题。



技术实现要素:

本发明的目的在于提供一种基于完全图的异构部分重复码构造方法及故障节点修复方法,用以解决现有技术中同构部分重复码存储开销较大,且易造成“热数据”访问拥挤,以及码构造方法复杂、节点修复过程中修复局部性大、节点修复选择性小等问题。

为了实现上述任务,本发明采用以下技术方案:

基于完全图的异构部分重复码构造方法,包括如下步骤:

步骤1:将原始文件分成k个原始数据块,对k个原始数据块进行(n,k)mds编码,得到n个编码块c1,c2,…,cn,其中n、k为正整数;

步骤2:建立包括m个顶点的完全图,用1,2,…,m沿顺时针方向依次对完全图的m个顶点编号,从1号顶点开始按照顺时针方向,先用1、2、…、m,依次对完全图的最外层m条边编号,然后从顶点1按顺时针方向开始用m+1、m+2、…、n依次对完全图内部的边编号,其中,n=m(m-1)/2且m≥5;

步骤3:将完全图分为m个集合si,i=1,2,…,m,集合si对应顶点i且si包含三条对边,所述三条对边为三个内夹角所对应的完全图最外层的边,所述三个内夹角为从顶点出发沿顺时针方向与该顶点相连且两两相邻的前四条边所构成的夹角;

步骤4:将完全图分为m个集合ei,集合ei对应顶点i且ei包含m-3条边,所述ei中的边为与顶点i不相邻的m-3个顶点与顶点i连接所构成的边;

步骤5:令1至m个顶点分别对应1至m个节点,对于节点i,首先存有三个重复度为3的编码块且三个编码块的编号依次对应si内的三条对边的编号,然后存有m-3个重复度为2的编码块且m-3个编码块的编号依次对应ei内的m-3条边的编号,最终获得m个节点且每个节点存有m个编码块,完成异构部分重复码的构造。

进一步的,步骤3中集合si的构建方法为:

对于顶点1,构建s1,s1的三条对边分别为从顶点出发沿逆时针方向且共用顶点的前四条边lm、lm+1、lm+2和lm+3中,相邻两条边lm和lm+1、lm+1和lm+2以及lm+2和lm+3所构成的夹角对应的完全图最外层的边lm-1、lm-2和lm-3,得到s1={lm-1、lm-2、lm-3},依次类推得到所有顶点对应的集合si。

故障节点修复方法,包括:

按照所述的任一种基于完全图的异构部分重复码构造方法,将包含n个编码块的原始文件存储到分布式存储系统的m个节点中,每个节点存储m个编码块,每个节点存储3个重复度为3的编码块和m-3个重复度为2的编码块;

当某单节点发生故障时,从m-2个存活节点中采集编码块,并将采集到的编码块传送给新节点,完成单节点故障的修复;

当任意连续的两个节点发生故障时,从m-2个存活节点中采集编码块,并将采集到的编码块传送给两个连续新节点,完成任意连续的两个节点故障的修复。

本发明与现有技术相比具有以下技术特点:

1、考虑到分布式存储系统对数据的访问往往是不均衡的。提出访问频率不同的编码块对应不同的重复度,对于“热数据”采用重复度较高的复制,能够提高“热数据”的并行访问速度。对于“冷数据”,采用重复度较低的复制,可以提高分布式存储系统的存储效率。

2、当单节点发生故障有四种故障修复方案,且仅从m-2个存活节点中采集编码块,并将采集到的编码块传送给新节点,即可快速实现故障节点的修复。修复过程运算简单,修复局部性较小。

3、能容忍两节点故障。当任意连续的两个节点发生故障有两种修复方案,也可仅从m-2个存活节点中采集编码块,并将采集到的编码块传送给新节点,即可快速实现故障节点的修复。

4、本发明系统的存储率较高。此外,该部分重复码构造过程简单,极易推广,可操作性强。

附图说明

图1是实施例中存储系统具有5个节点和10个编码块,每个节点存储5个编码块的异构部分重复码的构造示意图;

图2是实施例中包含5个节点和10个编码块的单节点v1故障修复的示意图;

图3是实施例中存储系统具有6个节点和15个编码块,每个节点存储6个编码块的异构部分重复码的构造示意图;

图4是实施例中包含6个节点和15个编码块的节点v1和节点v2故障修复的示意图。

具体实施方式

实施例1

在本实施例中公开了一种基于完全图的异构部分重复码构造方法,包括如下步骤:

步骤1:将原始文件分成k个原始数据块,对k个原始数据块进行(n,k)mds编码,得到n个编码块c1,c2,…,cn,其中n、k为正整数;

步骤2:建立包括m个顶点的完全图,用1,2,…,m沿顺时针方向依次对完全图的m个顶点编号,从1号顶点开始按照顺时针方向,先用1、2、…、m,依次对完全图的最外层m条边编号,然后从顶点1按顺时针方向开始用m+1、m+2、…、n依次对完全图内部的边编号,其中,n=m(m-1)/2且m≥5;

步骤3:将完全图分为m个集合si,i=1,2,…,m,集合si对应顶点i且si包含三条对边,所述三条对边为三个内夹角所对应的完全图最外层的边,所述三个内夹角为从顶点出发沿顺时针方向与该顶点相连且两两相邻的前四条边所构成的夹角;

步骤4:将完全图分为m个集合ei,集合ei对应顶点i且ei包含m-3条边,所述ei中的边为与顶点i不相邻的m-3个顶点与顶点i连接所构成的边;

具体的,从节点1开始,除去和节点1相连的节点m和节点2构成的两条边,记节点1和其他节点连接构成的边的编号为集合e1,将集合e1中各编号对应的编码块存储在节点1中;同理,除去和节点2相连的节点1和节点3构成的两条边,记节点2和其他节点相连构成的边的编号为集合e2,将集合e2中各编号对应的编码块存储在节点2中;按此规律,除去和节点m相连的节点m-1和节点1构成的两条边,记节点m和其他节点相连构成的边的编号为集合em。

步骤5:令1至m个顶点分别对应1至m个节点,对于节点i,首先存有三个重复度为3的编码块且三个编码块的编号依次对应si内的三条对边的编号,然后存有m-3个重复度为2的编码块且m-3个编码块的编号依次对应ei内的m-3条边的编号,最终获得m个节点且每个节点存有m个编码块,完成异构部分重复码的构造。

具体的,步骤3中集合si的构建方法为:

对于顶点1,构建s1,s1的三条对边分别为从顶点出发沿逆时针方向且共用顶点的前四条边lm、lm+1、lm+2和lm+3中,相邻两条边lm和lm+1、lm+1和lm+2以及lm+2和lm+3所构成的夹角对应的完全图最外层的边lm-1、lm-2和lm-3,得到s1={lm-1、lm-2、lm-3},依次类推得到所有顶点对应的集合si。

本发明的目的在于,提供一种基于完全图的异构部分重复码构造方法,提出访问频率不同的编码块对应不同的重复度,即对于“热数据”采用重复度较高的复制,对于“冷数据”采用重复度较低的复制。合理利用网络资源来提高“热数据”的并行访问速度和存储系统的存储效率。此外,基于多边形构造的异构部分重复码的系统的存储利用率高,且该码构造过程简单,极易推广,可操作性强。

本实施例还公开了一种故障节点修复方法,包括:

按照所述的任一种基于完全图的异构部分重复码构造方法,将包含n个编码块的原始文件存储到分布式存储系统的m个节点中,每个节点存储m个编码块,每个节点存储3个重复度为3的编码块和m-3个重复度为2的编码块;

当某单节点发生故障时,从m-2个存活节点中采集编码块,并将采集到的编码块传送给新节点,完成单节点故障的修复;

当任意连续的两个节点发生故障时,从m-2个存活节点中采集编码块,并将采集到的编码块传送给两个连续新节点,完成任意连续的两个节点故障的修复。

在存储海量数据的分布式系统中,节点故障已成为常态。若采用传统部分重复码如基于正则图构造的部分重复码,当节点出现故障时,故障节点修复方案单一,修复磁盘i/o开销较大,同时系统的容错能力较低,不满足海量数据存储对节点的要求。此外,采用相同的数据重复度的传统部分重复码不但会增加存储开销,还会造成“热数据”的访问拥挤等瓶颈问题。为此本发明的一种基于完全图的异构部分重复码,不同的访问频率的编码块,其重复度也不同。在单节点故障和连续的两个节点故障修复过程中,均仅从m-2个存活节点中采集编码块,并将采集到的编码块传送给新节点,即可实现故障节点的修复。在一定程度上,减少了连接存活节点数,减少了修复故障节点的修复磁盘i/o开销和修复时间。修复单节点故障和任意连续的两个故障节点都有多种修复方案,有效缓解了系统压力。此外,该部分重复码所需的校验块较少,系统的存储利用率高。

实施例2

本实施例公开了一种基于完全图的异构部分重复码构造方法,在实施例1的基础上还公开了如下技术特征,图1给出了包含10个编码块的分布式存储系统,每个节点存储5个编码块的异构部分重复码的存储方案。

步骤1:将大小为9m的文件存储于分布式存储系统中,首先对原文件进行(10,9)mds编码,再将这10个编码块用1,2,3,…10表示;

步骤2:画出一个包含5个顶点的完全图,将完全图的5个顶点作为分布式存储系统的5个顶点,并用1、2、…、5依次对完全图的5个顶点和最外层的5条边编号,用6、7、…、10依次对完全图内部的其他边编号;

步骤3:按顺时针方向将节点1和节点5相连的边作为起始边,并将这条边和其右侧相邻的三条边的编号作为集合s1,即s1={5,6,7,1}。这四条边和节点1构成了三个夹角,分别读取这三个夹角对应完全图最外层的边编号即{2,3,4},这些编号就对应节点1中存储的部分编码块的编号,则第一个节点存储的部分编码块为:c2、c3、c4。同理,将节点2和节点1相连的边作为起始边,并将这条边和其右侧相邻的三条边的编号作为集合s2,即s2={1,8,9,2}。这四条边和节点2构成了三个夹角,分别读取这三个夹角对应完全图最外层的边编号即{3,4,5},这些编号就对应节点2中存储的编码块的编号,则第二个节点存储的部分编码块为:c3、c4、c5。按此规律,第三个节点存储的部分编码块为:c1、c4、c5;第四个节点存储的部分编码块为:c1、c2、c5;第五个节点存储的部分编码块为:c1、c2、c3;

步骤4:从节点1开始,除去和节点1相连的节点5和节点2构成的两条边,记节点1和其他节点构成的边的编号为集合e1,即e1={6,7},将集合e1中各条边的编号对应的编码块存储在节点1中,即将编码块c6、c7存储到第一个节点中。同理,除去和节点2相连的节点1和节点3构成的两条边,记节点2和其他节点构成的边的编号为集合e2,即e2={8,9},将集合e2中各条边的编号对应的编码块存储在节点2中,即将编码块c8、c9存储到第二个节点中。按此规律,将编码块c7、c10存储到第三个节点中,将编码块c6、c9存储到第四个节点中,将编码块c8、c10存储到第五个节点中。

步骤5:最终,可以得到5个节点存储容量均为5的异构部分重复码,且每个节点存储3个重复度为3的编码块和2个重复度为2的编码块。第一个节点存储的编码块为:c2、c3、c4、c6、c7;第二个节点存储的编码块为:c3、c4、c5、c8、c9;第三个节点存储的编码块为:c1、c4、c5、c7、c10;第四个节点存储的编码块为:c1、c2、c5、c6、c9;第五个节点存储的编码块为:c1、c2、c3、c8、c10。

本实施例中还公开了一种单节点故障修复方法,图2是本实施例中单节点v1故障修复的示意图。方案1,从节点v2上采集数据c3和c4,从节点v3采集数据c7,从节点v4上采集数据c2和c6,并将编码块c2、c3、c4、c6、c7传送给新节点,完成节点v1的修复。方案2,从节点v3、v5上分别采集数据c4、c7和c2、c3,从节点v4上采集数据c6,并将编码块c2、c3、c4、c6、c7传送给新节点,完成节点v1的修复。方案3,从节点v3采集数据c4和c7,从节点v4上采集数据c2和c6,从节点v5上采集数据c3,将编码块c2、c3、c4、c6、c7传送给新节点,完成节点v1的修复。方案4,从节点v3、v4上分别采集数据c4,c7和c2,c6,从节点v2上采集数据c3,并将编码块c2、c3、c4、c6、c7传送给新节点,完成节点v1的修复。

实施例2

本实施例公开了一种基于完全图的异构部分重复码构造方法,在实施例1的基础上还公开了如下技术特征,图3给出了分布式存储系统中具有15个编码块,每个节点存储6个编码块的异构部分重复码的存储方案。

步骤1:将大小为13m的文件存储于分布式存储系统中,首先对原文件进行(15,13)mds编码,再将这15个编码块用1,2,3,…15表示;

步骤2:画出一个包含6个顶点的完全图,将完全图的6个顶点作为分布式存储系统的6个顶点,并用1、2、…、6依次对完全图的6个顶点和完全图最外层的6条边编号,并从节点1开始用7…,15依次对完全图中其他边编号;

步骤3:按顺时针方向将节点1和节点6相连的边作为起始边,并将这条边和其右侧相邻的三条边的编号作为集合s1,即s1={6,7,8,9}。这四条边和节点1构成了三个角,分别读取这三个角对应完全图最外层的边编号即{3,4,5},这些编号就对应节点1中存储的编码块的编号,则第一个节点存储的部分编码块为:c3、c4、c5。同理,将节点2和节点1相连的边作为起始边,并将这条边和其右侧相邻的三条边的编号作为集合s2,即s2={1,10,11,12}。这四条边和节点2构成了三个角,分别读取这三个角对应完全图最外层的边编号即{4,5,6},这些编号就对应节点2中存储的编码块的编号,则第二个节点存储的部分编码块为:c4、c5、c6。按此规律,第三个节点存储的部分编码块为:c1、c5、c6;第四个节点存储的部分编码块为:c1、c2、c6;第五个节点存储的部分编码块为:c1、c2、c3;第六个节点存储的部分编码块为:c2、c3、c4;

步骤4:从节点1开始,除去和节点1相连的节点6和节点2构成的两条边,记节点1和其他节点相连构成的边的编号为集合e1,即e1={7,8,9}将集合e1中各条边的编号对应的编码块存储在节点1中,即将编码块c7、c8、c9存储到第一个节点中。同理,除去和节点2相连的节点1和节点3构成的两条边,记节点2和其他节点构成的边的编号为集合e2,即e2={10,11,12}。将集合e2中各条边的编号对应的编码块存储在节点2中,即将编码块c10、c11、c12存储到第二个节点中。按此规律,将编码块c9、c13、c14存储到第三个节点中;将编码块c8、c12、c15存储到第四个节点中;将编码块c7、c11、c14存储到第五个节点中;将编码块c10、c13、c15存储到第六个节点中。

步骤5:最终,可以得到6个节点存储容量为6的异构部分重复码,且每个节点存储3个重复度为3的编码块和3个重复度为2的编码块。第一个节点存储的编码块为:c3、c4、c5、c7、c8、c9;第二个节点存储的编码块为:c4、c5、c6、c10、c11、c12;第三个节点存储的编码块为:c1、c5、c6、c9、c13、c14;第四个节点存储的编码块为:c1、c2、c6、c8、c12、c15;第五个节点存储的编码块为:c1、c2、c3、c7、c11、c14;第六个节点存储的编码块为:c2、c3、c4、c10、c13、c15。

本实施例中还公开了连续两个故障节点的修复方法,图4是本实施例中节点v1和节点v2故障修复的示意图。方案1,从节点v3和节点v5上分别采集数据c5、c6、c9和c3、c7、c11,从节点v4、v6上分别采集数据c8、c12和c4、c10。将编码块c3、c4、c5、c7、c8、c9传送给新节点,完成节点v1的修复,将编码块c4、c5、c6、c10、c11、c12传送给新节点,完成节点v2的修复。方案2,从节点v3、v5上分别采集数据c5、c9和c7、c11,从节点v4和节点v6上分别采集数据c6、c8、c12和c3、c4、c10。将编码块c3、c4、c5、c7、c8、c9传送给新节点,完成节点v1的修复,将编码块c4、c5、c6、c10、c11、c12传送给新节点,完成节点v2的修复。

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