-
近年来,由于数据量的快速上升,急需一种适宜的大数据存储系统。分布式存储系统由许多廉价磁盘组成,以其突出优势成为海量数据存储的有效系统,并被广泛部署和使用[1]。但在分布式存储系统中,节点容易发生故障,造成数据丢失。因此,故障节点的快速修复研究成为了分布式存储系统可靠性的重中之重。
目前,分布式存储系统主要通过复制和纠删码策略来恢复节点故障。复制策略中三副本复制最为常见,故障节点修复具有较低的修复带宽开销,但需要存储大量的副本数据,存储开销较大。纠删码策略通过增加校验数据块来确保数据存储的可靠性,实现故障节点修复,且存储开销较小。虽然纠删码弥补了复制策略存储开销大的缺点,但是纠删码在修复故障节点时的修复带宽开销过大[2]。
鉴于复制和纠删码策略存在上述局限性,文献[3]将网络编码应用到分布式存储中,提出了再生码的概念,降低了故障节点的修复带宽开销。现在再生码研究重点在最小存储再生(minimum storage regeneration, MSR)码和最小带宽再生(minimum bandwidth regeneration, MBR)码[4-5]。再生码在修复故障节点时,需要连接大量存活节点以获得较低的修复带宽开销,且在修复过程中涉及有限域运算,计算复杂度相对较高。随后,文献[6]提出了局部修复码(locally repairable codes, LRC),使修复过程中需要连接的存活节点数较小,修复带宽开销较低,具有较好的修复局部性。将再生码和局部修复码结合,文献[7-8]提出了局部再生码的概念,达到存储−带宽开销的最佳折中。其中,基于系统MSR码的局部再生码,故障局部码可以通过相邻局部码进行协作修复[9]。
文献[10]提出了一种精确最小带宽再生码—部分重复(fractional repetition, FR)码,故障节点修复过程中的计算复杂度和修复带宽开销都有所降低,可以实现故障节点的精确无编码修复。近年来,许多研究人员对FR码进行了研究,文献[11]利用组合设计来构造FR码。随后,学者们又相继给出了几种基于组合结构的FR码构造,包括基于射影几何的FR码构造[12]、基于正则图的FR码构造[13]及基于可分组设计的FR码构造[14]。
现有FR码对于故障节点的修复,特别是多节点故障修复,其修复带宽开销和修复局部性较高,同时修复复杂度也较高。文献[13]提出了基于正则图构造FR码,随后文献[15]提出了运用网格构造FR码,但其都只能修复单节点故障。基于相对差集的FR码构造,能够修复分布式存储系统中的多节点故障,但是随着参数的增大,其节点存储容量和构造复杂度会随之增大[16]。而且常见的FR码构造随着系统规模和参数的增大,其节点数或节点容量增大,构造复杂度也会增大。本文提出基于Hadamard矩阵构造FR码,同时对其进行分组,运用8阶Hadamard矩阵提出了分组构造FR(Hadamard grouping fractional repetition, HGFR)码的一般算法,实现故障节点的局部修复。基于Hadamard矩阵分组构造FR码可以对多个节点故障进行快速精确无编码修复,有效降低了运算复杂度,同时运用了分组可以实现组内修复,复杂度进一步降低,实现故障节点的快速修复。理论分析发现,与RS码和SRC简单再生码相比,设计的FR码在分布式存储系统节点发生故障时,修复局部性、修复复杂度和修复带宽开销进一步降低,且修复效率提高,减少了故障节点的修复时间。
HTML
-
本节对提出的基于Hadamard矩阵构造分组FR码进行性能分析,修复带宽开销、修复局部性、修复复杂度为分析的主要性能,并与SRC简单再生码以及RS码进行比较。取文件大小
$M{\rm{ = }} $ $ 1\;000\;{\rm{Mb}}$ ,SRC简单再生码的子文件数$f = 4$ 。 -
当节点发生故障时,修复故障节点被下载的数据量大小称为修复带宽开销。在分布式存储系统中,原文件大小为
$M$ ,当发生单节点故障时,若采用$(n,k)$ RS码,则需要下载全部的原文件来修复故障节点,所以采用$(n,k)$ RS码修复单节点故障的修复带宽开销为文件大小$M$ ;对于$(n,k,f)$ SRC简单再生码,每个节点存储$f + 1$ 个数据块,每个数据块大小为${M / {fk}}$ ,当一个数据块发生故障,$f$ 个数据块被下载进行修复,所以1个节点发生故障的修复带宽开销为${{(f + 1)M} / k}$ ;如果采用基于Hadamard矩阵的分组FR码,每个数据块大小为${M / k}$ ,每个节点含有3个数据块,所以基于Hadamard矩阵的分组FR码的单节点故障的修复带宽开销为${\rm{3}}M/{\rm{}}k$ 。单节点故障的3种编码方式修复带宽开销对比如图4所示。当2个节点发生故障时,若采用
$(n,k)$ RS码,仍然需要下载全部的原文件来修复故障节点,所以$(n,k)$ RS码修复2个故障节点的修复带宽开销仍为$M$ ;对于$(n,k,f)$ SRC简单再生码,如果2个故障节点数大于$f{\rm{ - 1}}$ ,则2个节点发生故障的修复带宽开销为${\rm{2}}{{(f + 1)M}/ k}$ ,如果2个故障节点数小于$f{\rm{ - 1}}$ ,需要先恢复原文件,所以修复带宽开销为$M$ ,这里$f$ =4,所以2个节点故障时,SRC简单再生码的修复带宽开销为M;如果采用基于Hadamard矩阵的分组FR码,2个故障节点在同一修复组时,修复带宽开销为${\rm{3}}M/{\rm{}}k$ ,不在同一修复组时,修复带宽开销为${\rm{6}}M/{\rm{}}k$ 。修复带宽开销对比如图5所示。从图4和图5可以看出,基于Hadamard矩阵的分组FR码,单节点和两节点故障时的修复带宽开销性能明显优于RS码和SRC简单再生码,且在图5中RS码和SRC简单再生码由于修复带宽开销一样,所以曲线重合。
-
修复局部性是指故障节点修复过程中需要连接的存活节点数目,即修复过程中的磁盘I/O开销。首先对于单节点失效,简单再生码修复时需要连接
$2f$ 个存活节点,所以局部修复性为$2f$ ;RS码发生单节点故障时,需要连接$k$ 个节点恢复原文件修复故障节点,所以RS码修复局部性为$k$ ;基于Hadamard矩阵的分组FR码,连接3个未发生故障的节点来恢复单个节点故障,所以其修复局部性为3。单节点故障时的修复局部性对比如图6所示。对于2个节点发生故障,SRC简单再生码需要先恢复原文件才可以修复故障节点,所以SRC简单再生码的修复局部性为
$k$ ;对于RS码,仍然需要恢复原文件,所以修复2个节点的修复局部性也为$k$ ;基于Hadamard矩阵的分组FR码,分两种情况:1) 如果一个修复组中发生2个节点故障,从3个未失效节点中下载所需数据,修复局部性为3;2) 2个故障节点不在同一个局部修复组内,其修复两个故障节点需要连接6个存活节点,修复局部性为6。修复故障节点时,可以看出基于Hadamard矩阵的分组FR码的修复局部性,优于简单再生码和RS码的修复局部性。
-
本文提出的基于Hadamard矩阵的分组FR码,当发生节点故障时,可以直接从其他存活节点下载数据块进行修复,无需进行编码运算。对于RS码修复故障节点需要先恢复原文件,之后再编码生成所需要的数据块,编码数据块由
$k$ 个数据块在有限域$GF(q)$ 上运算得到。所以RS码在修复单节点故障时需要${k^2} + k$ 次有限域乘法运算和${k^2} - 1$ 次有限域加法运算。对于SRC简单再生码,其修复一个故障节点需要进行$(f - 1)(f + 1)$ 次异或运算。可以看出,本文构造的FR码修复复杂度明显低于RS码和SRC简单再生码的修复复杂度,可以快速修复故障节点,修复时间减少。表1给出了分布式存储系统中,RS码、简单再生码和基于Hadamard矩阵的分组FR码分别在修复带宽开销、修复局部性及节点存储开销三方面的性能比较。从表1可以看出,基于Hadamard矩阵的分组FR码其修复局部性和带宽开销较低。而且,基于Hadamard矩阵的分组FR码在修复节点故障时可以实现精确无编码修复,运算复杂度较低,修复时间减少,可靠性提高。
开销 简单再生码 RS码 基于Hadamard矩阵的分组FR码 节点存储开销 $ \left( {f + 1} \right)M/k$ M/k 3M/k 修复带宽开销 单节点故障 $ \left( {f + 1} \right)M/k $ M 3M/k 两节点故障 M M 3M/k或6M/k 修复局部性 单节点故障 2f k 3 两节点故障 k k 3或6