分布式存储系统中的混合冗余容错编解码方法及系统的制作方法
【技术领域】
[0001] 本发明涉及分布式存储系统技术领域,特别是指一种分布式存储系统中的混合冗 余容错编解码方法及系统。
【背景技术】
[0002] 目前常用的容错技术主要有基于复制(r印lication)的容错技术和基于纠删码 (erasure code)的容错技术。前者需要的存储开销巨大,后者是一类源于信道传输的编码 技术,因为能够容忍多个数据帧的丢失,被引入到分布存储领域,使得基于纠删码的容错技 术成为能够容忍多个数据块同时失效的、最常用的基于编码的容错技术。采用纠删码进行 容错的步骤如下:
[0003] 第一步,数据分块,把待存储的数据对象分割成若干大小相等的数据块;
[0004] 第二步,数据块编码,对上述数据块进行编码,得到一些编码后的编码块,依据编 码方式的不同可以分为Reed-Solomon码、奇偶阵列码(parity array code)、奇偶校验码 (parity-check code)和低密度奇偶校验码(low-density parity-check code)等类型;
[0005] 其中常用的Reed-Solomon编码是一种前向纠错的信道编码,对由校正过采样数 据所产生的多项式有效,编码过程首先在多个点上对这些多项式求冗余,然后将其传输或 者存储,对多项式的这种超出必要值的采样使得多项式超定(过限定),当接收器正确的收 到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰 失真;
[0006] Reed-Solomen纠删码是目前应用最广泛的多进制码,能纠正随机错误和突发错 误。其特点是:首先在相同的编码冗余度下,具有很强的纠正随机错误和突发错误的能力; 其次在编码效率相同的情况下,纠错能力是最强的,可获得较大的编码增益;再次,它在短 码和中等码长的情况下接近限,而且它与数据交织技术结合后,能大大提高纠突发错误的 性能;最后,它具有严格的代数结构,体现为线性循环多项式。
[0007] 第三步,数据解码,读取数据时只要获得任意足够数量的编码后的数据块,就可以 解码得到原始数据。
[0008] 基于复制的容错技术简单直观,易于实现和部署,当数据失效以后,基于复制的容 错技术只需要从其他副本下载同样大小的数据即可进行修复,但需要为每个数据对象创建 若干同样大小的副本,存储空间开销巨大。
[0009] 纠删码容错技术针对有损信道进行信息重建,能够把多个数据块的信息融合到较 少的冗余信息中。其优点是存储空间利用率高,缺点在于对数据的读写操作要分别进行编 码和解码操作,导致对分布式系统的计算能力和网络要求较高,且纠删码并不重构已损编 码信息;此外当数据失效以后则需要下载至少k个同样大小的数据块才能解码恢复原始数 据,要占用更多的网络带宽资源,给数据中心中本来就比较紧张的带宽资源带来了巨大的 压力,也给数据的读取带来很大的性能损失,维护丢失冗余的代价限制了基于纠删码的容 错技术的应用和推广。
【发明内容】
[0010] 有鉴于此,本发明的目的在于提出一种存储空间开销小、对网络带宽要求低并能 够降低数据重构困难的分布式存储系统中的混合冗余容错编解码方法及系统。
[0011] 基于上述目的本发明提供的分布式存储系统中的混合冗余容错编解码方法包 括:
[0012] 判断当前输出网络状况的好坏;
[0013] 若当前输出网络状况良好,则采用Reed-Solomen纠删码编码方式对数据进行编 码;
[0014] 若当前输出网络状况不好,则采用非线性自修复码编码方式对数据进行编码;
[0015] 对采用不同编码方式编码得到的数据,采用相对应的解码方式对数据进行解码。
[0016] 在一些实施方式中,所述判断当前输出网络状况的好坏的步骤包括:
[0017] 确定判断阀值,反复测试多组网络带宽和响应时间数据,算出网络状况值的平均 值,以该平均值作为判断阀值,其中单次网络状况值=网络带宽/响应时间;
[0018] 对比判断当前输出网络状况好坏,将当前网络状况值与所述判断阀值比较,当前 网络状况值大于所述判断阀值时,判定输出网络状况良好,当前网络状况值小于所述判断 阀值时,判定输出网络状况不好。
[0019] 在一些实施方式中,所述采用非线性自修复码编码方式对数据进行编码和解码的 步骤包括:
[0020] 数据分块,将目标数据分割成若干大小相等的数据块;
[0021] 通过构建非线性多项式对数据块进行循环编码;
[0022] 构建新的空间基,将每个数据块通过构建非线性多项式获得的相应编码信息在此 空间基上进行映射得到编码矢量;
[0023] 若编码矢量丢失,通过对数据块和编码矢量之间关系构建牛顿多项式,计算得到 全部原始数据;
[0024] 若编码矢量没有丢失,通过对编码矢量解码获得原始数据。
[0025] 在一些实施方式中,所述所述数据分块的步骤包括:
[0026] 定义目标数据分块个数N,单个数据块B,,j e [1,N],j为整数;
[0027] 则所述目标数据B = (B1, B2,…,Bj。
[0028] 在一些实施方式中,所述通过构建非线性多项式对数据块进行循环编码步骤包 括:定义码本c ;
[0029] 确定编码的目标是对所有数据块^通过码本c映射得到L维的编码矢量V = (V1, V2,…,vL),L>N,即 Vj= c*B J;
[0030] 构建非线性多项式,
其中k为网络节点的个数;
[0031] 码本 c = (ρ(α ρ(α 2),…,p(a J),其中 α $ B ο i e [1,N],i 为整数,中的 非零元素,实现循环编码。
[0032] 在一些实施方式中,所述空间基是2M,则B = (B1, B2,…,BN} e 2M,其中M是单个数 据块的尺寸。
[0033] 本发明提供还提供一种分布式存储系统中的混合冗余容错编解码系统,其特征在 于,包括:
[0034] 判断网络状况模块,用于判断网络状况的好坏;
[0035] Reed-Solomen纠删码编解码模块,用于网络状况良好时通过对数据进行编码、解 码,恢复原始数据;
[0036] 非线性自修复码编解码模块,用于网络状况不好时通过对数据进行编码、解码,恢 复原始数据。
[0037] 在一些实施方式中,所述判断网络状况模块包括:
[0038] 响应时间测试模块,用于测试网络的响应时间;
[0039] 带宽能量测试模块,用于测试网络带宽能量值,并与响应时间作比计算得出网络 状况值。
[0040] 在一些实施方式中,所述非线性自修复码编解码模块包括:
[0041] 数据分块模块,将目标数据分割成若干大小相等的数据块;
[0042] 非线性多项式循环编码模块,用于对数据块编码,获得相应的可映射数据块的编 码?目息;
[0043] 构建空间基模块,用于将每个数据块通过相应的编码信息在该空间基上进行映射 得到编码矢量;
[0044] 解码模块,用于通过解码获得原始数据。
[0045] 在一些实施方式中,所述解码模块包括:
[0046] 牛顿多项式差值解码模块,用于所述编码矢量丢失时,通过对所述数据块和所述 编码矢量关系构建牛顿多项式,计算得出全部原始数据;
[0047] 编码矢量解码模块,用于所述编码矢量没有丢失时对所述编码矢量进行解码。
[0048] 从上面所述可以看出,本发明提供的分布式存储系统中的混合冗余容错编解码方 法和系统通过采用非线性自修复码与Reed-Solomen纠删码混合的容错方式:
[0049] 在网络状况较好时,采用Reed-Solomen纠删码;
[0050] 在网络状况不佳时,采用非线性自修复码,通过已损编码信息的少量本地相关编 码信息或片段对其进行重构,提高维护数据冗余的效率。
[0051] 采用两种编解码混合的容错技术,减少了网络传输数据量,同时也明显减少参与 数据恢复运算的数据量和重建时间,可较大程度的降低丢包导致的数据重组困难。
【附图说明】
[0052] 图1为本发明实施例提供的分布式存储系统中的混合冗余容错编解码方法示意 图;
[0053] 图2为本发明实施例提供的非线性自修复码编解码示意图;
[0054] 图3为本发明实施例提供的分布式存储系统中的混合冗余容错编解码系统示意 图;
【具体实施方式】
[0055] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照 附图,对本发明进一步详细说明。
[0056] 如图1所示,本发明提供的分布式存储系统中的混合冗余容错编解码方法的一个 实施例包括:
[0057] 步骤101,判断当前输出网络状况的好坏
[0058] 步骤102a,若当前输出网络状况良好,则采用Reed-Solomen纠删码编码方式对数 据进行编码;
[0059] 步骤102b,若当前输出网络状况不好,则采用非线性自修复码编码方式对数据进 行编码;
[0060] 步骤103,对采用不同编码方式编码得到的数据,采用相应的解码方式对数据进行 解码。
[0061] 采用两种编解码混合的容错技术,减少了网络传输数据量,同时能够明显减少参 与数据恢复运算的数据量和重建时间。
[0062] 进一步,判断当前输出网络状况的好坏的步骤101包括:
[0063] 确定判断阈值,定义单次网络状况值=网络带宽(bps)/响应时间(ms),步骤 l〇la,反复测试多组网络带宽(bps)能量数据,步骤101b,反复测试多组响应时间(ms)数 据,通过计算得到多个网络状况值,算出网络状况值的平均值,以该平均值作为判断阈值;
[0064] 对比判断当前输出网络状况好坏,将当前网络状况值与所述判断阈值比较,当前 网络状况值大于所述判断阈值时,判定输出网络状况良好,