CN107003933B - 部分复制码的构建方法、装置及其数据修复的方法 - Google Patents
部分复制码的构建方法、装置及其数据修复的方法 Download PDFInfo
- Publication number
- CN107003933B CN107003933B CN201480078750.9A CN201480078750A CN107003933B CN 107003933 B CN107003933 B CN 107003933B CN 201480078750 A CN201480078750 A CN 201480078750A CN 107003933 B CN107003933 B CN 107003933B
- Authority
- CN
- China
- Prior art keywords
- elements
- blocks
- data
- node
- coding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
一种部分复制码的构建方法,对数据进行MDS编码,得到β个编码块(S11),并将编码块依次编号得到集合V(S12);对所述集合V中的元素进行分组,得到β/t个组(S13);根据集合V的分组情况,得到所有符合条件的区组(S14);将得到的区组对应的编码块存储在存储节点,每个存储节点存储一个区组对应的编码块,得到部分复制码(S15)。该部分该部分复制码的构建方法、实现该方法的装置及对上述部分复制码进行数据修复的方法具有以下有益效果:其参数设置较为方便、灵活。
Description
技术领域
本发明涉及网络存储领域,更具体地说,涉及一种部分复制码的构建方法、装置及其数据修复的方法。
背景技术
随着计算机技术和因特网的飞速发展,网络信息数据量呈爆炸式增长,大数据对现有存储系统提出了严峻的挑战,高效地存储海量数据的系统已经越来越重要。目前,分布式存储系统以其高效的可扩展性和高可用性成为存储海量数据的有效系统。然而在大规模分布式存储系统中,由于突发性断电等情况,数据存储节点是不可靠的。为了能够由不可靠的存储节点提供可靠的存储服务,通常需要在存储系统中引入冗余。引入冗余最直接的方法就是对原数据直接备份,备份机制虽然简单但是其存储效率不高。在相同冗余的情况下,新兴的编码技术的引入可以大幅地提高其存储效率。在目前的存储系统中,编码方法一般采用MDS码(Maximum Distance Separable,最大距离可分),MDS码可以实现存储空间效率的最佳。一个参数为(n,k)的MDS码需要将一个原文件均分成k个大小相等的模块,并通过编码生成n个互不相关的编码模块,由n个节点存储不同的模块,并满足任意k个节点存储的数据就可重构原始文件,该特性进一步称为MDS属性。这种编码技术在提供有效的网络存储冗余中占有重要的地位,特别适合大文件存储以及档案数据备份应用。
在分布式存储系统中,通常把大小为B的数据存储在n个存储节点中,每个节点存储的数据大小为α。数据接收者只需要连接n个存储节点中的任意k个并下载数据即可恢复出原始数据B,这一过程称为数据重建过程。RS(Reed-Solomon,里德-所罗门)码是一种典型的满足MDS码特性的一种码字。当存储系统中的存储节点失效时,为了保持存储系统的冗余量,需要恢复该失效节点存储的数据并将该数据存储在新节点中,该过程称为修复过程。然而,在修复过程中,RS码首先需要下载k个存储节点的数据并恢复出原始文件,再为新引入的节点编码生成失效节点存储的数据。为了恢复一个存储节点的数据而解码出整个原始数据显然对网络带宽是一种浪费。
然而,由于系统中节点失效或者文件损耗,系统的冗余度会随着时间而逐渐减小,因此需要一种机制来保证系统的冗余。在此基础上,有人提出了EC码(Erasure Codes,纠删码),该码有效地减少了系统存储开销,然而支持冗余恢复所需要的通信开销也比较大。在EC码中,数据修复时首先从系统中的k个存储节点中下载数据并重构原始文件;再由原始文件再重新编码出新的模块,存储在新节点上。该恢复过程表明修复任何一个失效节点所需要的网络负载至少为k个节点所存储的内容。
为了降低修复过程中所使用的带宽,有人利用网络编码理论的思想提出了再生码(RGC,Regenerating Codes),RGC码也满足MDS码特性。传统的再生码修复过程中,替换节点需要在剩下的可用存储节点中连接x个并分别从这x个存储节点中下载y大小的数据,所以RGC码的修复带宽为xy。对于RGC码功能修复而言,提出了RGC码的两类最佳码:最小存储再生码(MSR)和最小修复带宽再生码(MBR)。RGC码的修复过程中不需要重构出源文件,修复带宽优于RS码。
然而,再生码的修复过程计算复杂度比较高,通常涉及大量的有限域运算,即修复节点需要对其存储的数据执行随机线性网络编码操作。具体地说,参与修复的节点读出所存储的数据块并进行特定的线性运算,再向替换节点传递组合后的数据块。为了满足所有编码包是相互独立的,RGC码的运算需要在一个较大的有限域内。考虑到实际系统中节点读写带宽小于网络带宽,因此读写带宽很容易成为系统性能瓶颈。为了降低修复过程运算复杂度,又在MBR码的基础上提出了FR码的概念,指出了FR码可以提供精确有效的修复。一般地,FR码包含两个部分:一个外部MDS码以及一个内部复制码。数据块经过MDS编码后,将输出的编码块复制整数倍再分散到各存储节点。系统中发生节点失效时,可以通过从其它节点直接下载数据并存储到替换节点来完成修复,不需要额外的运算。相比传统的RS码与再生码RGC,FR码大幅提升了节点失效修复速度,相应地降低了修复时间。由于MDS码的构建是较为成熟的技术,所以部分复制码的构造难点在于内部复制码设计。现有的部分复制码一般采用基于有限几何进行构造,如正则图,有限射影平面,正交拉丁方等,这些特定的抽象几何构造过程比较复杂,而且参数选择具有一定局限性,无疑增加了部分重复码的设计复杂度。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述所用时间较长、参数设置较为不便、系统开销较大的缺陷,提供一种所用时间较短、参数设置方便、系统开销较小的部分复制码的构建方法、装置及其数据修复的方法。
本发明解决其技术问题所采用的技术方案是:构造一种部分复制码的构建方法,包括如下步骤:
A)将要存储的数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块;
B)取得设定参数,所述参数包括每个组包括的所述元素个数t、每个存储节点存储的编码块的个数s;将所述β个编码块依次编号并作为集合V的元素,得到集合V;
C)对所述集合V中的元素进行分组,得到β/t个分组;一个分组中的元素编号各不相同;
D)通过上述步骤中得到的分组得到集合V的所有区组,并根据设定参数在所有区组中选择,得到选择后的n个区组;所述区组是一个其中的元素满足由任意不同分组的元素构成的集合;所述n个区组中总共包括被复制f倍的β个编码块;
E)将得到的选择后的区组对应的编码块存储在存储节点,每个存储节点存储一个选择后的区组对应的编码块;
其中,所述α、β、t、s和f均为正整数,所述β能够被t整除。
更进一步地,在步骤C)中,得到的所有分组构成集合G;所述集合G是所述集合V的一个划分。
更进一步地,所述步骤D)中得到的全部区组满足任意一个集合V中的元素分别存在于f个区组中。
更进一步地,所述每个区组的大小相同,所述每个组的容量相同。
更进一步地,所述步骤B)中,按照f=(β-t)/(s-1)得到所述编码块复制倍数f;按照n=β(β-t)/s(s-1)得到存储节点数n。
更进一步地,所述步骤D)中,进一步包括如下步骤:
D1)将所述得到的所有区组划分成ρ个平行类;其中,如若干个区组的集合中的元素刚好是集合V中的所有元素,并且这些区组之间无相交元素,则这些区组就构成一个平行类;
D2)在所述ρ个平行类中任意选择f个,得到选择的区组;其中,所述f小于等于ρ;所述ρ个平行类中包括n个区组。
本发明还涉及一种实现上述方法的装置,包括:
编码块取得模块:用于将要存储的数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块;
集合V构建模块:用于取得设定参数,所述参数包括每个组包括的所述元素个数t、每个存储节点存储的编码块的个数s;将所述β个编码块依次编号并作为集合V的元素,得到集合V;
分组模块:用于对所述集合V中的元素进行分组,得到β/t个分组;一个分组中的元素编号各不相同;
区组构建模块:用于通过得到的分组得到集合V的所有区组,并根据设定参数在所有区组中选择,得到选择后的n个区组;所述区组是一个其中的元素满足由任意不同分组的元素构成的集合;所述n个区组中总共包括被复制f倍的β个编码块;
数据存储模块:用于将得到的选择后的区组对应的编码块存储在存储节点,每个存储节点存储一个选择后的区组对应的编码块;
其中,所述α、β、t、s和f均为正整数,所述β能够被t整除。
更进一步地,所述区组构建模块进一步包括:
平行类划分单元:用于将所述得到的所有区组划分成ρ个平行类;其中,如若干个区组的集合中的元素刚好是集合V中的所有元素,并且这些区组之间无相交元素,则这些区组就构成一个平行类;
平行类选择单元:用于在所述ρ个平行类中任意选择f个,得到选择的区组;其中,所述f小于等于ρ;所述ρ个平行类中包括n个区组。
本发明还涉及一种对使用上述方法得到的数据进行修复的方法,包括如下步骤:
M)取得修复表格,以失效节点的编号为索引查找其修复方案;
N)下载修复表格指示的节点数据并得到替换节点数据,生成替换节点。
更进一步地,所述修复表格存储在存储系统中的追踪服务器的系统元数据中;所述修复表格中对于一个节点的修复方案包括至少一个。
实施本发明的部分复制码的构建方法、装置及其数据修复的方法,具有以下有益效果:由于在本实施例中,采用了可分组设计来构建部分复制码的内部复制码,使得其在保持部分复制码的构建所用时间较短、系统开销较小的前提下,增加了其参数设置较为方便、灵活;使得其在不同的存储系统上使用具有很好的灵活性。
附图说明
图1是本发明部分复制码的构建方法、装置及其数据修复的方法实施例中部分复制码的构建过程流程图;
图2是所述实施例中部分复制码的一个构建示意图;
图3是所述实施例中另一个构建示意图;
图4是所述实施例中部分复制码的构建装置示意图;
图5是所述实施例中数据修复选择度和节点存储容量之间的关系示意图;
图6是所述实施例中一种存储参数情况下各种编码的修复时间对比;
图7是所述实施例中另一种存储参数情况下各种编码的修复时间对比。
具体实施方式
下面将结合附图对本发明实施例作进一步说明。
如图1所示,在本发明的部分复制码的构建方法、装置及其数据修复的方法实施例中,该部分复制码的构建方法包括如下步骤:
步骤S11对数据进行MDS编码,得到编码块:在本步骤中,将要存储的网络上的数据,通常是一个文件,将这些数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块。由于MDS编码本身是较为成熟的技术,在此不作过多的描述。
步骤S12按照设定参数,处理得到的编码块,得到集合V:在本步骤中,取得事先设定的参数,这些参数不仅仅与本步骤相关,也和后续步骤中的分组,得到区组以及选择区组等相关。这些参数包括每个组中的元素个数t、每个存储节点存储的编码块的个数s、存储节点个数n、编码块的复制倍数f等等;在本实施例中,上述α、β、t、s和f均为正整数,且β能够被t整除。在本步骤中,取得上述设定参数之后,首先对上述步骤中得到的编码块依次编号,并作为集合V的元素,得到集合V。也就是说,对于集合V而言,其元素的编号是唯一的,在上述集合V中共有β个编码块。在本实施例中,涉及任何集合时,其元素是用该元素的编号来代替的,并不涉及该元素的具体内容。
步骤S13对集合V进行分组:在本步骤中,对上述得到的集合V进行分组,每组包括上述元素中的t个,每组之间的元素不会重复(即该元素的编号不重复)。即将上述β个元素(即编码块)进行分组,每组包括t个元素,得到β/t个组。在本步骤中,得到的所有分组构成集合G;每个组的容量相同;所述集合G是所述集合V的一个划分(或一种划分方式)。
步骤S14得到区组,并按照设定参数选择区组:在本步骤中,由于在上述步骤中已经得到了组,在组的基础上,得到区组;一个区组是一个集合,其中元素均是上述集合V中的元素,每个区组中包括s个元素,每个区组中的任意元素与该区组中的其他元素不属于同一个组。换句话说,在本实施例中,首先采用分组的方式对上述集合V进行一次划分,在这次划分的基础上,再次依据区组的定义对集合V划分,得到区组。对于一个区组而言,其元素是被划分到不同分组的集合V的元素。例如,设集合V有4个编码块,分别是1,、2、3和4,被分为两组,分别是(1、2)和(3、4);则其分组可能包括(1、3);(2、4);(1、4)和(2、3)。如果在本步骤中全部选择,则其可以存储在4个存储节点,每个存储节点存储2个编码块,对于集合V中的元素而言,其复制倍数是2,因为这些分组总共包括了2个编码块1,2个编码块2,两个编码块3以及两个编码块4。由这个例子可以看到,在本实施例中,设定参数的选择的范围是比较大的。当设定选择得较为适当时,得到的分组可能会构成平行类。一般来讲,如果若干个区组中的所有元素刚好是集合V中的所有元素,则认为这些区组组成一个平行类。对于一个集合中得到的所有区组而言,可以将其划分为ρ个平行类。在这种情况下,在本步骤中,也可以首先得到对于集合V而言的ρ个平行类的所有区组,然后,在这ρ个平行类中选择f个,实现对区组的选择。例如,一个平行类中如果包括3个区组,所有区组构成3个平行类,而选择其中两个平行类的话,就是在全部9个区组中选择其中6个。其中,所述f小于ρ。此时,f可以是设定的或计算得到的。
值得一提的是,在本实施例中,使用的参数可以是全部给出或设定的,也可以是给出一部分后通过计算得到其他未给出参数的。例如,可以按照f=(v-t)/(s-1)得到编码块复制倍数f,按照n=v(v-t)/s(s-1)得到存储节点数n。
步骤S15将选择的区组分配到各存储节点:在本步骤中,将上述的到的区组分别存储到存储节点上,每个存储节点存储一个区组。例如,在上述步骤中已经选择了2个平行类共6个区组,这样将选择的6个区组所代表的编码块分别存储到6个存储节点。一个存储节点上存储的数据量就是一个区组所包括(或指向)的数据量;例如,一个区组中包括两个编码块编号,即其包括(或指向)两个编码块,一个存储节点存储的数据量就是两个编码块的数据量,其存储的数据就是这两个编码块。
在上述步骤中,α、β、t、s、f均为正整数,而β能够被t整除。
在本实施例中,从整体上来讲,一个分布式存储系统通常用(n,k,d)来表示,其中n表示存储系统的节点总数,k表示重构原文件所需最少节点数,d表示修复一个失效节点所需的可用节点数,并且满足k≤d≤n-1。MDS码的研究已经相对成熟,几乎可以满足任何符合条件的参数。所以,部分复制码的构造难点在于内部复制码设计。FR码的实质是复制倍数为f的θ个数据块在节点上的一种排列,同时保证每个数据块的副本分别存储在不同的节点上。
一个适用于参数为(n,k,d)分布式存储系统的部分复制码C=(U,M),复制倍数为f,是指特定n个子集的集合M={M1,...,Mn},其中每个子集的元素均来自于符号集U={1,...,θ}。同时满足以下两个条件:
(1)每个子集的大小均为d;
(2)U中的每个元素属于M中f个子集。
在上述定义中,每个子集Mi中的元素表示经过MDS编码后数据块的下标,这些数据块相应地存储在节点Ni(i=1,...,n)。可见,每个子集对应于一个存储节点。所有数据块分布在n个不同的节点上,且每个节点的存储容量为d。
假设表示一个包含5个数据块的文件,表示大小为q的有限域。经过参数为(6,5)的MDS编码,输出6个数据块Y1,...,Y6。其中每个输出的编码块均复制两倍,将生成的数据块存储在4个节点上,请参见图2。图2方框中的数字表示编码块的下标,如节点N1存储的三个数据块依次为Y1,Y3,Y5。。任意两个节点存储的数据可以重构出原文件,因此有k=2。当节点失效时,可以从其它三个节点下载数据进行修复,则d=3。
设v与λ为给定的正整数,S与T为给定的正整数集。设D=(V,G,A)为有限关联结构,其中V为一个v元集,G构成V的一个划分。V中的元素叫点(point),A中的元素叫做区组(block),G中的元素叫做组(group)。若以下条件满足:
(1)对任意B∈A,都有|B|∈S;
(2)对任意G∈G,都有|G|∈T;
(3)对任意B∈A与G∈G,都有|B∩G|≤1;
(4)V中的任意一对属于不同组的元素恰好同时包含在λ个区组中;
那么,上述D为一个可分组设计(group divisible design)或者GD设计,记作GD(S,λ,T;v)。如果每个组的容量相同,每个区组大小相同,即S={s},T={t},把GD({s},λ,{t};v)简记作GD(s,λ,t;v)并称其为均匀(uniform)可分组设计。若对1≤i≤h,G包含mi个容量为ti的组,且则称D为一个型(type)为的GD设计。
如D=(V,G,A)为一个GD设计令若V中的每一点都正好与P中唯一的区组相关联,则称P为一个平行类(parallel class)。如果一个GD(s,λ,t;v)的全部区组能够划分成平行类,则称为一个可分解GD设计。
当v=st时,GD(s,λ,t;v)叫做λ重横截设计(λ-fold transversal design),记作TD(s,λ;t),简称TD设计。如果参数λ=1,横截设计TD(s,1;t)的存在性等价于相互正交的拉丁方的存在性。若每组均只包含一个点,即t=1,则该TD设计相当于一个Steiner系。虽然Steiner系是一种特殊的GD设计,但并不是所有的GD设计都属于Steiner系。
对于均匀GD(s,λ,t;v),V中的每一点都属于特定数目的区组(记为r),称为此设计的重复数,并满足下述参数关系:
r=λ(v-t)/(s-1)
同时,用b表示该GD设计包含的区组总数,从而有如下等式成立:
b=λv(v-t)/s(s-1).
例如,设V={1,2,...,6},三个大小相等的组分别取为G:{1,2},{3,4},{5,6},所生成的区组为{1,3,5},{2,3,6},{1,4,6},{2,4,5}。则(V,G,A)构成一个均匀GD(3,1,2;6)。其中,任一给定的点属于两个不同的区组。因此,r=2,b=4。
为了构造能够达到随机访问模式下的系统存储容量的FR码,GD设计中应取λ=1,任意一对属于不同组的点恰好同时包含在唯一的区组中。并且设计中节点存储容量相同,这里采用均匀GD设计。一个GD设计可能存在若干同构,在本实施例中仅考虑一种具体的设计(对应于特定的分组),相应的构造方法同样适用于所有其它同构设计。
GDDFRC码构造取一个给定的GD(s,1,t;v),其中t≥2。该设计全体区组为A={B1,...,Bb},则可以生成一个FR码C=(V,A)。这里,所构造的FR码参数为:θ=v,f=(v-t)/(s-1)。相应存储系统的节点规模为n=v(v-t)/s(s-1),每个节点可以存储d=s个数据块。
其中,复制倍数f和系统节点数n可以分别上述式子求出。如采用上述均匀GD(3,1,2;6)设计,构造出的FR码如图2所示。该系统可以容纳一个节点失效且保证精确无编码地数据再生。如果节点N1,N2同时失效,那么须重构原文件才能得到编码块Y3。一般地,对于一个复制倍数为f的FR码,系统可以承受f-1个节点失效而不丢失精确无编码修复特性,此时系统中所有数据块都至少存在一个备份。
对于允许多节点失效的情况下,令元素集V={1,2,...,8},G={{1,2},{3,4},{5,6},{7,8}},从而可以得到8个区组:
{1,3,5},{2,4,6},{1,4,7},{2,3,8},
{1,6,8},{2,5,7},{3,6,7},{4,5,8}.
取一个包含6个数据块的文件,记为X1,...X6。经过参数为(8,6)的MDS编码,输出8个编码块Y1,...Y8。运用所述均匀GD设计,系统中的数据块存储方式如图3所示。
如果构造过程中所使用的设计能够分解成ρ个平行类,则可以通过选取其中任意f(<ρ)个来生成复制倍数为f的FR码。每个平行类包含了符号集中的所有元素,因此只要系统中存在一个完整的平行类,那么节点修复就可以正常进行。相应地,如果GDDFRC码构造过程中所应用的GD设计是可分解的,则可以灵活地选择编码块的复制倍数和系统中节点规模。
再如,考虑一个均匀GD(3,1,3;9),其中三个分组依次为{1,2,3},{4,5,6},{7,8,9}。该设计所生成的9个区组可以分成3个平行类(每一行的区组构成一个平行类):
{1,4,7},{2,5,9},{3,6,8};
{1,6,9},{2,4,8},{3,5,7};
{1,5,8},{2,6,7},{3,4,9}。
如果选取其中任意两个平行类,由构造方法可以得到一个复制倍数f=2的GDDFRC码,适用于参数为(6,3,3)的分布式存储系统;如果取三个平行类,则可以生成一个复制倍数f=3的GDDFRC码,对应存储系统参数为(9,3,3)。这种灵活的参数选取,给系统设计提供了很大的便利。
在本实施例中,参见图4,还包括一种实现上述方法的装置,包括编码块取得模块1、集合V构建模块2、分组模块3、区组构建模块4以及数据存储模块5;其中,编码块取得模块1用于将要存储的数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块;集合V构建模块2用于取得设定参数,所述参数包括每个组包括的所述元素个数t、每个存储节点存储的编码块的个数s;将所述β个编码块依次编号并作为集合V的元素,得到集合V;分组模块3用于对所述集合V中的元素进行分组,得到β/t个分组;一个分组中的元素编号各不相同;区组构建模块4用于通过得到的分组得到集合V的所有区组,并根据设定参数在所有区组中选择,得到选择后的n个区组;所述区组是一个其中的元素满足由任意不同分组的元素构成的集合;所述n个区组中总共包括被复制f倍的β个编码块;数据存储模块5用于将得到的选择后的区组对应的编码块存储在存储节点,每个存储节点存储一个选择后的区组对应的编码块;其中,α、β、t、s和f均为正整数,所述β能够被t整除。
在本实施例中,区组构建模块1进一步包括:平行类划分单元41和平行类选择单元42;其中,平行类划分单元41用于将所述得到的所有区组划分成ρ个平行类;其中,如若干个区组的集合中的元素刚好是集合V中的所有元素,并且这些区组之间无相交元素,则这些区组就构成一个平行类;平行类选择单元42用于在所述ρ个平行类中任意选择f个,得到选择的区组;其中,所述f小于ρ;所述ρ个平行类中包括n个区组。
在本实施例中,还涉及一种对上述方法得到的部分复制码进行数据修复的方法,在本实施例中,由于GDDFRC码涵盖了FR码的所有特性。每个数据块的复制倍数一致,同时系统每个节点的存储容量相同。值得注意的是,与传统随机访问模式不同,GDDFRC码采用基于表格(table-based)的修复方式。具体地说,修复表格指明了每个具体失效节点可选择的修复方案。如图3中所示,如果节点N8失效,可以通过节点N2,N4,N6来进行修复,而非节点N1,N2及N3。实际存储系统部署中通常包含一个追踪服务器(tracker server),用于记录系统元数据。因此,可以将修复表格信息写入元数据,便于失效修复的快速访问读取。就降低修复过程的复杂度而言,建立和维护节点修复表格的代价是值得的。
此外,对于使用本实施例中的方法得到的部分复制码而言,其数据修复的选择度是比较大的。由于对MDS码来说,系统中发生节点失效时可以通过从其它n-1个可用节点中随机选择k个下载数据,重构出原始文件再进行编码修复。因此,对于任一节点失效,MDS码存在种修复方案。这种指明了节点失效修复可选的方案数,称为该节点的修复选择度。
在本实施例中,与随机访问模式不同,GDDFRC码采用基于表格的修复方式,其中表格给出了节点具体的修复方案。由于每个数据块的f个副本分布在不同的节点并且一对不同的数据块存储在唯一的节点上,当一个节点失效时,可以连接其它与该节点存储相同数据块的节点,下载所丢失数据块的副本再生出替换节点。由此可知,给定一个容量为d的存储节点,系统存在(f-1)d种失效修复方案。图5给出了复制倍数为3的GDDFRC码的节点修复选择度与存储容量d之间的关系。
从图中可以看出,虽然GDDFRC码的修复方式基于表格,其节点修复选择度依然可以达到很高的水平。对于复制倍数一定的GDDFRC码,节点修复选择度随着节点存储容量d呈指数倍增长。
在本实施例的一个例子中,采用业内流行的Hadoop分布式文件系统,实现了本发明提出的GDDFRC码,完成了文件的编解码以及失效恢复功能。实验中系统服务器的CPU配置为Intel(R)Xeon(R)E5-2609 2.40GHz,内存大小为24G。采用普通PC机(CPU为AMD A8-5600k3.0GHz,4G内存)作为数据存储节点,配置了相同的实验环境,并且实验过程中每个节点无任何其它作业。在节点存储容量相同的条件下,从不同的(n,k)值比较分析了GDDFRC码与经典的RS码、MBR码在修复时间上的差异。
首先,设定节点数量n=9,任意6个节点存储的数据可以重构出原文件。同时,实验中采用复制倍数为2的GDDFRC码,分别在节点存储容量为100MB、200MB、300MB的情况下测试三种编码的单节点失效修复时间。在相同条件下运行多次取平均测试值,结果如图6所示。从图中可以看出,与RS码和MBR码相比,GDDFRC码大幅降低了节点失效恢复时间。
设定节点数量n=6,且k=10。采用复制倍数为f=3的GDDFRC码,结果如图7所示。当节点存储容量增加时,GDDFRC码在修复时间上的优势更为明显。
传统的RS码节点修复过程中需恢复出原始文件,重新编码再将生成的编码块存储到替换节点,因此修复时间比较长。对于最小带宽再生MBR码,参与修复的节点对存储的数据进行线性运算,再将组合后的数据块传送到替换节点。该节点对接收的所有数据块进一步整合,进而恢复出失效的数据。整个过程涉及大量的有限域运算,增加了修复时间。当检测出节点失效时,系统首先判定具体哪一个节点失效,根据GDDFRC码修复表格(存储在系统元数据中)确定修复方案。同时连接方案中指定的可用节点,下载相应数据块并直接存储到替换节点中。可见,整个修复过程仅仅涉及文件读取工作,并不引入其它复杂运算。虽然在一定程度上增加了系统的冗余量,但其结果表明,GDDFRC码可以大幅降低失效修复时间。
相比传统的RGC码,基于可分组设计的部分复制码(GDDFRC)最大的优势在于显著地减小了编解码过程中计算复杂度,以简单易于实施的数据复制取代了有限域复杂的运算。传统RGC码的构造基于有限域GF(q),编解码过程中设计到的有限域加法、减法以及乘法。有限域的运算虽然理论研究比较成熟,但实际运用起来比较繁琐、时间消耗大,明显不能符合当今分布式存储系统快速可靠的设计指标。GDDFRC码则不同,系统中节点失效修复可以通过从其它节点直接下载数据并存储到替换节点来完成修复,不需要额外的运算,大大提高了节点修复及数据块再生的速率,在实际的分布式存储系统中具有很高的应用价值和发展潜力。
基于可分组设计的部分复制码不仅降低了节点修复过程中的运算复杂度,同时可以保证节点修复过程中所消耗的带宽是最小的(即原始文件大小),并不消耗多余的带宽。在带宽资源越来越宝贵的今天,GDDFRC码带来的裨益是显然的。在本实施例中,其GDDFRC码可以保证:丢失的编码块可以直接下载其他编码模块的若干子集进行修复;丢失的编码块可以通过固定数目的编码模块进行修复,修复模式基于表格。同时,GDDFRC码修复后的节点存储的数据和失效节点是完全一致的,也就是精确修复,很大程度上减少了系统操作复杂度(如元数据更新、更新后的数据广播等)。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种部分复制码的构建方法,其特征在于,包括如下步骤:
A)将要存储的数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块;
B)取得设定参数,所述参数包括每个组包括的元素个数t、每个存储节点存储的编码块的个数s;将所述β个编码块依次编号并作为集合V的元素,得到集合V;
C)对所述集合V中的元素进行分组,得到β/t个分组;一个分组中的元素编号各不相同;
D)通过上述步骤中得到的分组得到集合V的所有区组,并根据设定参数在所有区组中选择,得到选择后的n个区组;所述区组是一个其中的元素满足由任意不同分组的元素构成的集合;所述n个区组中总共包括被复制f倍的β个编码块;
E)将得到的选择后的区组对应的编码块存储在存储节点,每个存储节点存储一个选择后的区组对应的编码块;
其中,所述α、β、t、s和f均为正整数,所述β能够被t整除;
所述步骤D)中,进一步包括如下步骤:
D1)将所述得到的所有区组划分成ρ个平行类;其中,如若干个区组的集合中的元素刚好是集合V中的所有元素,并且这些区组之间无相交元素,则这些区组就构成一个平行类;
D2)在所述ρ个平行类中任意选择f个,得到选择的区组;其中,所述f小于等于ρ;所述ρ个平行类中包括n个区组。
2.根据权利要求1所述的部分复制码的构建方法,其特征在于,在步骤C)中,得到的所有分组构成集合G;所述集合G是所述集合V的一个划分。
3.根据权利要求2所述的部分复制码的构建方法,其特征在于,所述步骤D)中得到的全部区组满足任意一个集合V中的元素分别存在于f个区组中。
4.根据权利要求3所述的部分复制码的构建方法,其特征在于,每个所述区组的大小相同,所述每个组的容量相同。
5.根据权利要求4所述的部分复制码的构建方法,其特征在于,所述步骤B)中,按照f=(β-t)/(s-1)得到所述编码块复制倍数f;按照n=β(β-t)/s(s-1)得到存储节点数n。
6.一种实现如权利要求1所述的部分复制码构建方法的装置,其特征在于,包括:
编码块取得模块:用于将要存储的数据等分为α份,并对其进行其参数为(β,α)的MDS编码,得到β个编码块;
集合V构建模块:用于取得设定参数,所述参数包括每个组包括的元素个数t、每个存储节点存储的编码块的个数s;将所述β个编码块依次编号并作为集合V的元素,得到集合V;
分组模块:用于对所述集合V中的元素进行分组,得到β/t个分组;一个分组中的元素编号各不相同;
区组构建模块:用于通过得到的分组得到集合V的所有区组,并根据设定参数在所有区组中选择,得到选择后的n个区组;所述区组是一个其中的元素满足由任意不同分组的元素构成的集合;所述n个区组中总共包括被复制f倍的β个编码块;
数据存储模块:用于将得到的选择后的区组对应的编码块存储在存储节点,每个存储节点存储一个选择后的区组对应的编码块;
其中,所述α、β、t、s和f均为正整数,所述β能够被t整除;
所述区组构建模块进一步包括:
平行类划分单元:用于将所述得到的所有区组划分成ρ个平行类;其中,如若干个区组的集合中的元素刚好是集合V中的所有元素,并且这些区组之间无相交元素,则这些区组就构成一个平行类;
平行类选择单元:用于在所述ρ个平行类中任意选择f个,得到选择的区组;其中,所述f小于等于ρ;所述ρ个平行类中包括n个区组。
7.一种对使用如权利要求1所述的部分复制码构建方法得到的数据进行数据修复的方法,其特征在于,包括如下步骤:
M)取得修复表格,以失效节点的编号为索引查找其修复方案;
N)下载修复表格指示的节点数据并得到替换节点数据,生成替换节点。
8.根据权利要求7所述的数据修复的方法,其特征在于,所述修复表格存储在存储系统中的追踪服务器的系统元数据中;所述修复表格中对于一个节点的修复方案包括至少一个。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/078539 WO2015180038A1 (zh) | 2014-05-27 | 2014-05-27 | 部分复制码的构建方法、装置及其数据修复的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107003933A CN107003933A (zh) | 2017-08-01 |
CN107003933B true CN107003933B (zh) | 2020-12-08 |
Family
ID=54697824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480078750.9A Active CN107003933B (zh) | 2014-05-27 | 2014-05-27 | 部分复制码的构建方法、装置及其数据修复的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107003933B (zh) |
WO (1) | WO2015180038A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018209541A1 (zh) * | 2017-05-16 | 2018-11-22 | 北京大学深圳研究生院 | 基于t-设计的部分重复码的编码结构以及构造方法 |
CN109257049B (zh) * | 2018-08-09 | 2020-11-06 | 东莞理工学院 | 一种修复二进制阵列码校验矩阵的构造方法及修复方法 |
CN110032470B (zh) * | 2019-03-18 | 2023-02-28 | 长安大学 | 一种基于哈夫曼树的异构部分重复码的构造方法 |
CN110532125A (zh) * | 2019-07-15 | 2019-12-03 | 长安大学 | 一种基于图因子分解的部分重复码构造方法 |
CN111125014B (zh) * | 2019-11-19 | 2023-02-28 | 长安大学 | 一种基于u-型设计的柔性部分重复码的构造方法 |
CN111290710B (zh) * | 2020-01-20 | 2024-04-05 | 北京信息科技大学 | 一种基于动态调整复制因子的云副本存储方法及系统 |
CN112799605B (zh) * | 2021-03-31 | 2021-06-29 | 中南大学 | 平方部分重复码构造方法、节点修复方法及容量计算方法 |
CN113157485B (zh) * | 2021-05-06 | 2022-07-15 | 中南大学 | 一种部分重复码的扩张构造方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100138717A1 (en) * | 2008-12-02 | 2010-06-03 | Microsoft Corporation | Fork codes for erasure coding of data blocks |
CN102624866A (zh) * | 2012-01-13 | 2012-08-01 | 北京大学深圳研究生院 | 一种存储数据的方法、装置及分布式网络存储系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8898542B2 (en) * | 2011-12-12 | 2014-11-25 | Cleversafe, Inc. | Executing partial tasks in a distributed storage and task network |
CN102932331A (zh) * | 2012-09-29 | 2013-02-13 | 南京云创存储科技有限公司 | 应用于分布式存储系统的超安存编解码方法 |
CN103559102A (zh) * | 2013-10-22 | 2014-02-05 | 北京航空航天大学 | 数据冗余处理方法、装置和分布式存储系统 |
-
2014
- 2014-05-27 WO PCT/CN2014/078539 patent/WO2015180038A1/zh active Application Filing
- 2014-05-27 CN CN201480078750.9A patent/CN107003933B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100138717A1 (en) * | 2008-12-02 | 2010-06-03 | Microsoft Corporation | Fork codes for erasure coding of data blocks |
CN102624866A (zh) * | 2012-01-13 | 2012-08-01 | 北京大学深圳研究生院 | 一种存储数据的方法、装置及分布式网络存储系统 |
Non-Patent Citations (1)
Title |
---|
General Fractional Repetition Codes for Distributed Storage Systems;Bing Zhu et al.;《IEEE COMMUNICATIONS LETTERS》;20140430;第660-663页 * |
Also Published As
Publication number | Publication date |
---|---|
WO2015180038A1 (zh) | 2015-12-03 |
CN107003933A (zh) | 2017-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107003933B (zh) | 部分复制码的构建方法、装置及其数据修复的方法 | |
CN107656832B (zh) | 一种低数据重建开销的纠删码方法 | |
US11531593B2 (en) | Data encoding, decoding and recovering method for a distributed storage system | |
CN103688515B (zh) | 一种最小带宽再生码的编码和存储节点修复方法 | |
CN104052576B (zh) | 一种云存储下基于纠错码的数据恢复方法 | |
CN109643258B (zh) | 使用高速率最小存储再生擦除代码的多节点修复 | |
EP2394220B1 (en) | Distributed storage of recoverable data | |
CN109491835B (zh) | 一种基于动态分组码的数据容错方法 | |
CN107357689B (zh) | 一种存储节点的故障处理方法及分布式存储系统 | |
CN112799605B (zh) | 平方部分重复码构造方法、节点修复方法及容量计算方法 | |
CN107844272A (zh) | 一种提高纠错能力的交叉分组编译码方法 | |
CN113190377B (zh) | 一种基于分布式存储系统的可靠冗余方法及设备 | |
CN107153661A (zh) | 一种基于hdfs系统的数据的存储、读取方法及其装置 | |
US20150227425A1 (en) | Method for encoding, data-restructuring and repairing projective self-repairing codes | |
CN103650462A (zh) | 基于同态的自修复码的编码、解码和数据修复方法及其存储系统 | |
CN108614749B (zh) | 一种数据处理方法及装置 | |
Tang et al. | Self-checkpoint: An in-memory checkpoint method using less space and its practice on fault-tolerant HPL | |
Ivanichkina et al. | Mathematical methods and models of improving data storage reliability including those based on finite field theory | |
Li et al. | Parallelizing degraded read for erasure coded cloud storage systems using collective communications | |
WO2018209541A1 (zh) | 基于t-设计的部分重复码的编码结构以及构造方法 | |
CN111224747A (zh) | 可降低修复带宽和磁盘读取开销的编码方法及其修复方法 | |
CN108647108B (zh) | 一种基于循环vfrc的最小带宽再生码的构造方法 | |
CN112732203B (zh) | 一种再生码构造方法、文件重构方法及节点修复方法 | |
Li et al. | RE-store: Reliable and efficient KV-store with erasure coding and replication | |
Calis et al. | Architecture-aware coding for distributed storage: Repairable block failure resilient codes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |