CN109643258B - 使用高速率最小存储再生擦除代码的多节点修复 - Google Patents
使用高速率最小存储再生擦除代码的多节点修复 Download PDFInfo
- Publication number
- CN109643258B CN109643258B CN201780052269.6A CN201780052269A CN109643258B CN 109643258 B CN109643258 B CN 109643258B CN 201780052269 A CN201780052269 A CN 201780052269A CN 109643258 B CN109643258 B CN 109643258B
- Authority
- CN
- China
- Prior art keywords
- parity
- indices
- symbols
- nodes
- storage nodes
- 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
-
- 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
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/134—Non-binary linear block codes not provided for otherwise
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
-
- 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
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/154—Error and erasure correction, e.g. by using the error and erasure locator or Forney polynomial
-
- 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
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/373—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
Abstract
分布式存储系统可以在多个节点故障发生时使用高速率MSR擦除代码来修复多个节点。编码器构造m个r叉树以确定用于奇偶校验节点的符号阵列。这些符号阵列用于根据奇偶校验定义或奇偶校验方程来生成奇偶校验数据。该m个r叉树还用于标识跨辅助节点的恢复行的集合,以用于修复系统节点。当故障的系统节点对应于m个r叉树的不同树时,解码器可以选择附加的恢复行。在奇偶校验定义不提供足够数目的独立线性方程以求解故障节点的未知符号时,解码器选择附加的恢复行。为了访问高效性,解码器可以选择与已经被标识的恢复行相邻的恢复行。
Description
背景技术
本公开一般地涉及分布式存储系统领域,并且更具体地涉及分布式存储系统中的数据修复。
分布式存储系统可以使用用于数据弹性的复制类型冗余(即,创建和维持数据的副本)或具有更高存储效率的擦除编码类型冗余。用于分布式存储系统的擦除编码涉及将大小为B的数据单元(例如,文件)均分成x个块,每个块具有相同大小B/x。然后应用擦除代码来生成奇偶校验信息,这引入了文件的一些冗余。在奇偶校验信息片段被包括时,编码产生文件的n个片段。被应用于数据的擦除代码被表示为(n,k),其中n表示节点的总数目,所有的片段将跨这些节点而被存储,并且k表示系统节点(即,仅存储系统数据或非奇偶校验信息的节点)的数目。奇偶校验节点(即,存储奇偶校验信息的节点)的数目是n-k=r。
随着被存储的数据量大量增加,对擦除代码的研究寻求优化该存储效率以及可靠性。该研究中的一些研究已经探索了被称为最大距离可分离(MDS)代码(例如,里德所罗门(Reed Solomon)代码)的一类擦除代码。因为分布式存储系统将由于各种原因(例如,较低成本、不可靠的存储节点)而遭受擦除(例如,存储节点故障),所以研究试图解决跨网络的数据传输的问题/成本以从擦除中恢复并且恢复被存储在每个节点处的数据量,这被称为“修复问题”。对该修复问题的研究已经引出“再生代码”或“再生的代码”。这些代码是允许比传统的擦除代码更高效地修复故障节点的擦除代码。再生代码满足表达式:
B=将被存储的源数据的总大小,以符号的数目表示;
α=每个节点的存储容量,以符号的数目表示:
k=源数据从任何k个节点的数据中可恢复;
d和β=在节点故障时,替换节点连接到任何d个现有节点,从d个现有节点中的每个节点下载至多β个符号;以及
dβ=修复带宽。
由方程1限定的曲线(“最优存储-带宽折衷曲线”)示出了α和β两者不能同时被最小化。因此,与折衷曲线上的极值点相对应的再生代码被称为最小存储再生(MSR)代码和最小带宽再生(MBR)代码。MSR代码是最小化每个节点的存储空间消耗量(即,α)的MDS代码。针对MSR代码,修复带宽被表达为:
MBR代码是最小化修复带宽的代码。针对MBR代码,修复带宽被表达为dβ=α。
针对(n,k)擦除代码的“代码速率”被限定为k/n或k/(k+r),其表示系统数据在被存储的数据(即,系统数据加奇偶校验数据)的总量中的比例。具有代码速率k/n>0.5的擦除代码被称为高速率擦除代码。这意味着:编码方案将需要与奇偶校验节点r相比相对大量的系统节点k。相反,低速率(k/n≤0.5)擦除代码将需要与奇偶校验节点r相比相对少量的系统节点k。高速率擦除代码可能是期望的,因为针对给定的系统数据的集合,其比低速率擦除代码需要更少的存储开销。
附图说明
通过参考附图可以更好地理解本公开的实施例。
图1描绘了使用高速率MSR擦除代码来修复分布式存储系统中的两个故障节点的图。
图2描绘了m个r叉树135的图。
图3描绘了使用高速率MSR擦除代码来修复分布式存储系统中的具有重叠修复行的两个故障节点的图。
图4是用于利用高速率MSR擦除代码来修复分布式存储系统中的多个节点的示例操作的流程图。
图5描绘了用于标识附加修复行的示例操作的流程图。
图6描绘了不同的分布式存储系统中的高速率MSR编码器/解码器的备选部署的图。
图7描绘了具有用于修复多个故障存储节点的高速率MSR编码器/解码器的示例计算机系统。
具体实施方式
以下描述包括体现本公开的各方面的示例系统、方法、技术和程序流。然而,应该理解,本公开可以在没有这些具体细节的情况下被实践。例如,本公开以说明性示例涉及存储节点的故障。节点“故障”不一定意味着数据已经在存储节点上被丢失(例如,数据损坏或节点损毁)。节点故障可能是连接性的丢失,其在特定时间段内阻止存储节点处的数据的可用性,这将违反数据可用性保证。在其他情况下,没有详细示出公知的指令实例、协议、结构和技术,以免混淆描述。
术语
本公开使用术语“符号”,因为其是在讨论错误纠正代码时文献中所使用的术语。在错误纠正代码的实际应用中,符号对应于数据单元。例如,将跨9个存储节点而被存储的162兆字节(MB)的文件将被描述为162个符号的大小,每个存储节点具有足够存储1MB符号的容量。并且存储节点被描述为各自具有足够用于18个符号的容量。
本公开还使用术语“存储节点”。存储节点对应于可以托管数据的、逻辑上或物理上不同的存储单元。例如,存储节点可以是单个存储介质(例如,磁盘)、存储设备(例如,闪速存储驱动器)、虚拟磁盘、存储设备组等。例如,存储节点可以是通过存储控制器管理和访问的闪速存储设备群。“替换”存储节点可以是已经是存储系统成员的存储节点或被添加到存储系统的存储节点。将存储节点添加到存储系统可以包括提供、部署和/或配置存储节点。作为示例,替换存储节点可以涉及提供、配置和部署来自云存储供应商的存储节点。
本描述还区分系统存储节点和奇偶校验存储节点。系统存储节点是托管系统符号的存储节点,系统符号是源数据的一部分并且不包括奇偶校验信息。奇偶校验存储节点是托管奇偶校验信息的存储节点。奇偶校验存储节点或奇偶校验节点上的奇偶校验信息至少包括奇偶校验定义(即,用于计算来自系统符号的(多个)未知符号的线性方程或表达式的系统)和奇偶校验符号(即,针对每个奇偶校验定义的结果)。
介绍
在MSR编码方案中,每个系统节点存储形成源数据片段的α个符号。每个节点处的符号的数目(α)被称为“子分组化级别”。如前所述,MSR代码允许利用来自每个幸存节点(“辅助节点”)的β个符号进行节点修复,其中β是α个符号的子集。研究已经表明针对α的下限是rm,其中m=k/r。虽然研究是活跃的,但是该研究专注于单节点修复。随着大规模分布式存储系统中的节点老化以及不可靠的存储设备/介质的利用增加,多节点故障的可能性也增加。
概述
在多节点故障发生时,分布式存储系统可以使用高速率MSR擦除代码来修复多个节点。编码器构造m个r叉树以确定用于奇偶校验节点的符号阵列。这些符号阵列用于根据奇偶校验定义或奇偶校验方程来生成奇偶校验数据。该m个r叉树还用于标识跨辅助节点的“恢复行”的集合,以用于修复系统节点以及恢复其符号。用于故障系统节点的恢复行的集合通过索引来标识跨辅助节点的符号的集合和用于系统节点修复的对应的奇偶校验信息。在多个系统节点故障时,如果故障节点在m个r叉树的同一树中被表示,则解码器将故障节点的恢复行的集合组合以用于符号恢复。然而,在故障系统节点对应于m个r叉树的不同树时,解码器选择附加恢复行。因为在m个r叉树的不同树中表示的系统节点的恢复行的集合以某种程度重叠,所以解码器选择附加恢复行。在恢复行重叠的情况下,组合的恢复行的集合不能提供足够的奇偶校验表达式以形成线性独立方程的完整集合。为了访问高效性,解码器可以选择与已经被标识的修复行相邻的附加修复行。
示例说明
图1描绘了使用高速率MSR擦除代码来修复分布式存储系统中的两个故障节点的图。该示例假定MSR代码(9,6),这意味着存储节点的总数目是n=9;系统存储节点的数目是k=6;奇偶校验存储节点的数目是r=3,并且系统存储节点与奇偶校验存储节点的比率是k/r=m=2。由于图纸的空间限制,未描绘大规模的整个分布式存储系统,但是描绘了n个存储节点,该n个存储节点用于托管大小为Q个符号的文件101的n个片段。n个存储节点包括分别被标识为N0至N5的系统存储节点103和奇偶校验存储节点P0至P2。使用针对访问最优MSR擦除代码(α=rm)的下限,每个文件片段(或块)被均分为9个符号(9=α=rm=32)。因此,Q=k*α。符号被索引为0至8。片段是片段a至f。所考虑的高速率MSR代码的码字包含文件101的(k+r)*α个符号/块。
根据擦除代码(9,6)和对应的奇偶校验定义,分布式存储系统的编码器100将文件101编码成系统符号和奇偶校验符号。编码器可以在对相同的片段/块大小进行编码之前填充片段/块。编码器100提供系统符号和奇偶校验符号,以用于写入n个存储节点中的对应存储节点。编码器100还将奇偶校验定义传送到奇偶校验节点105、107、109。编码器100的部署和用于码字生成、写入、传输等的特定职责将根据实现而变化。之后将讨论若干示例实现。
图1描绘了在对应于修复行布置的布置中的系统节点符号和奇偶校验信息,以方便理解。系统节点N0托管包括符号a0至a8的符号阵列111;系统节点N1托管包括符号b0至b8的符号阵列112;系统节点N2托管包括符号c0至c8的符号阵列113;系统节点N3托管包括符号d0至d8的符号阵列114;系统节点N4托管包括e0至e8的符号阵列115;以及系统节点N5托管包括f0至f8的符号阵列116。奇偶校验节点P0至P2中的每个奇偶校验节点托管包括奇偶校验定义和奇偶校验符号的奇偶校验信息。被标识为P0的奇偶校验节点105托管奇偶校验定义阵列119和奇偶校验符号阵列121。奇偶校验符号被描绘为Pti,其中t标识奇偶校验节点并且i指示行索引。每个奇偶校验定义阵列包括针对每个符号索引的奇偶校验定义。例如,奇偶校验定义阵列119包括索引0处的奇偶校验定义,其指定具有索引0的符号的和的计算,即a0+b0+c0+d0+e0+f0。“和”表示在具有固定大小的伽罗瓦域(GF)中的符号的添加,该“和”可以依赖于实现而变化。该和被存储在奇偶校验符号阵列121中由0索引的条目处。针对P0的奇偶校验定义是具有索引i的符号的矢量的和。在标号{i}指示具有索引i的符号的集合情况下,在i处针对P0的奇偶校验定义是Σ{i},其中,在图1中,i为0至8。换言之,P0奇偶校验定义是行奇偶校验。针对奇偶校验节点P1的奇偶校验定义被表示为P1Fi(<符号集合>)并且针对P2的奇偶校验定义被表示为P2Fi(<符号集合>)。为了清楚起见,语义P1Fi()不指示P1和Fi()的乘积并且P2Fi()不指示P2和Fi()的乘积。以下的表1示出了针对P1和P2的示例定义,其中所选择的系数确保跨线性表达式的独立性。这些系数可以在所使用的GF的大小内被随机选择,并且然后被验证以确保得到的线性表达式保持独立。表1中的系数从大小为256的GF即GF(256)中被随机选择。
表1:跨行的奇偶校验定义
用于奇偶校验节点P1和P2的定义的系统符号的集合用m个r叉树135来确定。图2描绘了m个r叉树135的图。由于m=2且r=3,所以有两个3叉树。树201具有根索引0并且树203具有根索引1。树的第二级别表示存储节点。在树201中,第二级别处的内部树节点从左到右分别表示存储节点N0、N1和N2。在树203中,第二级别处的内部树节点从左到右分别表示存储节点N3、N4和N5。树201、203的叶节点指示以r为基的索引0至8,在该示例图示中是以3为基。用于P1和P2的每个奇偶校验定义具有符号集合,该符号集合包括对应索引处的系统符号和2个附加系统符号。如表1所示,针对i=0的用于P1和P2的奇偶校验定义包括具有索引0({0})的所有系统符号。在i=0(P1F0)时,用于针对P1的奇偶校验定义的符号集合还包括系统符号a3和d1。针对P2F0,符号集合包括a6和d2以及{0}。为了确定奇偶校验定义符号集合中的附加符号,编码器使用m个r叉树,这些r叉树通过右移t次并且然后根据叶节点索引的数字进行旋转操作来构造,其中t是被构造的树的根节点索引。这种基于t次右移-旋转(RSR)的树构造建立了用于奇偶校验定义的线性表达式的符号集合成员资格。为了解释图2的基于RSR的树构造,具有根索引0的第一树201针对前3个存储节点N0至N2而被构造,每个存储节点具有3个叶节点-这基于r=3并且这些存储节点是r叉树。树201的叶节点指示与子分组化级别相对应的索引,因此存在9个索引(rm=9)。针对具有根索引0的树,如图2所示,这些索引按顺序表示。树201用叶节点中的以r为基的索引和那些索引下的十进制表示来描绘。下一树203基于树201来构造。树201的根节点递增1以将树203的根节点设定为1。树203的3个内部节点表示下3个存储节点N3至N5。树203的叶节点利用通过将已经提到的RSR操作应用于前一r叉树的叶节点而得到的索引值来创建,在该示例图示中,前一r叉树是树201。针对树203的每个叶节点,在树201的对应叶节点中被指示的以r为基的索引被右移t次(t是被创建的树的根节点索引,针对树203,t是1)并且然后被旋转。如针对树201中的存储节点N0的最左边的叶节点所示,索引00的最左边的数字被右移1个位置,并且然后被移动的数字(在这种情况下是最右边的数字)被旋转到被移位的数字的位置,得到相同的索引00。针对下一叶节点(即,存储节点N3的中间叶节点),针对存储节点N0的索引01的0被右移1个位置并且数字1被旋转到第一位置,以将存储节点N3的中间叶节点中所指示的索引设定为10。因此,针对存储节点N3的中间叶节点,索引01变为10。从图3中可以看出,在针对以3为基的索引的RSR操作之后,具有相同数字(即,00、11、22)的索引是相同的。
除了在用于奇偶校验节点的奇偶校验定义中建立符号集合成员资格之外,r叉树还被用来建立用于系统节点103的修复行。该修复行信息被存储在图1的修复行表137中。“修复行”是对应于索引的信息的逻辑行。因此,修复行i包括跨图1中所描绘的存储节点的阵列的第i行中的信息。例如,修复行0(被标识为RR[0])包括符号a0至f0、奇偶校验定义阵列123、131(P1F0和P2F0)的索引0处的奇偶校验定义和奇偶校验符号阵列127、133(即,P10和P20)的索引0处的奇偶校验符号。由r叉树的叶节点标识的索引标识修复行索引。树201图示(以基3形式):用于N0的修复行是0、1和2;用于N1的是3、4和5;以及用于N2的是6、7和8。树203图示(以基3形式):用于N3的修复行是0、3和6;用于N4的是1、4和7;以及用于N5的是2、5和8。树201中的叶节点基于系统符号索引0至8按顺序标识修复行索引。为了构造每个后续的树,树t-1的叶节点的数字被右移t次并且然后被旋转,t是被构造的树的根节点索引。针对树203,树201的叶节点中所指示的索引被右移1次并且然后被旋转(“RSR”操作)。针对具有相同数字、以3为基表示的索引,索引保持相同。因此,由索引00、11和22表示的叶节点跨数保持相同。针对N3子树的中间叶节点,由N0子树的中间叶节点指示的索引01通过RSR操作而被修改。0被移位到1的位置,并且1被旋转到0的位置:01->10。因此,RSR操作使得针对N3子树的中间叶节点指示索引3而不是1。由r叉树确定的修复行表137在以下的表2中重现。
表2:用于单节点故障的恢复行(RR)
表2指定了用于特定节点故障的修复行。如果N5故障,则恢复行2、5和8将被访问以修复N5。如果多个节点故障,则节点的恢复行被组合以修复该多个故障节点。然而,节点可能具有重叠的恢复行。在这种情况下,附加恢复行被选择,因为组合的恢复行将不会产生足够的线性表达式来求解来自节点故障的未知符号。在故障节点对应于m个r叉树的不同树时,发生恢复行的重叠。
图1图示了没有恢复行重叠的节点故障:N0和N1。在节点N0和N1的故障之后,节点修复解码器150选择替换节点N0’153和N1’155并且确定恢复行以修复多个故障的存储节点。通过恢复行表137,节点修复解码器150标识基于N0的恢复行0至2和基于N1的恢复行3至5。
节点修复解码器150从恢复行RR[0]至RR[5]获得信息。来自RR[0]至RR[5]的信息包括:索引0至5的24个符号c至f;18个奇偶校验定义Σ{i}、P1Fi,P1Fi,其中i为0至5;以及对应的18个奇偶校验符号P0i、P1i和P2i。通过18个奇偶校验定义,节点修复解码器150将形成独立线性表达式的集合并且求解表达式以恢复a0至a8。然后,节点修复解码器150将这些系统符号写入替换节点N0’。然后,节点修复解码器150使用所获得的恢复行信息以及恢复的符号a0至a8来求解表达式以恢复b0至b8。节点修复解码器150可以首先求解符号b0至b8,并且然后使用那些恢复的符号来求解符号a0至a8。
图3描绘了使用高速率MSR擦除代码来修复分布式存储系统中的具有重叠恢复行的两个故障节点的图。图3描绘了与图1中相同的系统,但是遭受N0和N3的故障。节点修复解码器150从恢复行表137中标识基于N0故障的恢复行0至3和基于N3故障的恢复行0、3和6。由于RR[0]发生在恢复行的两个集合中,因此这些恢复行产生15个线性表达式来求解18个未知符号,这是不够的。
为了获得足够数目的线性表达式,节点修复解码器150选择附加恢复行。虽然节点修复解码器150可以选择任何附加恢复行,但是选择与已经被选择的恢复行相邻的恢复行可能比非相邻的选择更高效(例如,包括RR[0]至RR[4]的顺序存储器范围的一次读取而不是多次读取)。因此,节点修复解码器150选择与RR[3]相邻的恢复行RR[4]。通过RR[4]的添加,P0至P3具有18个线性表达式。然而,3个附加奇偶校验定义是不够的,因为其仅包括2个未知符号,因此奇偶校验定义中的一个是冗余的。在跨奇偶校验节点的RR[4]处的奇偶校验定义的符号集合成员资格仅包含未知符号a4和d4。因此,仅获得了17个独立线性表达式。因此,节点修复解码器150选择RR[5]以获得第三线性方程,以得到18个独立线性方程以求解18个未知符号(总共为18,因为用于RR[4]的P2的奇偶校验信息未被使用)。附加信息350描绘了来自奇偶校验节点P0和P1的索引4处的可用系统符号和索引4处的奇偶校验信息,以及来自P0的索引4处的可用系统符号和索引5处的奇偶校验信息。虽然节点修复解码器150可以选择来自P0至P3的RR[5]奇偶校验定义中的任何1个,但是节点修复解码器150选择P0的奇偶校验信息,因为其是最高效的(由于其是行奇偶校验,因此可以不隐含系数和定义)。通过来自RR[0]至RR[6]的足够的独立线性表达式,节点修复解码器150将恢复的符号a0至a8写入替换节点N0’353并且将恢复的符号d0至d8写入替换节点N3’355。
利用重叠的恢复行来修复多个存储节点导致一些效率的丢失,因为超过了针对MSR擦除代码的最小I/O限。在没有附加行的示例中(即,没有共用恢复行的故障节点),访问42个符号以用于修复(24个系统符号和18个奇偶校验符号)。在具有1个共用恢复行的故障存储节点的第二种情况下,使用46个符号以用于修复两个故障存储节点(28个系统符号和18个奇偶校验符号)。虽然超过了最小限,但是通过使得从多个存储节点故障中恢复成为可能,效率的丢失被抵消。
图4是用于利用高速率MSR擦除代码来修复分布式存储系统中的多个节点的示例操作的流程图。为了与前面的附图的一致性,图4是指执行示例操作的解码器。
在框401处,解码器检测多个存储节点的故障。存储控制器或存储管理器可以监测存储节点的可用性。在可用性丢失时,存储控制器/管理器可以调用解码器来恢复丢失的符号。故障的检测可以通过通知而是显式的或通过调用而是隐式的。虽然多个存储节点可能同时故障(例如,丢失与存储节点阵列的连接或驱动器故障),但是节点也可能在不同时间故障。存储控制器/管理器可能不立即响应于检测到存储节点的可用性的丢失而调用解码器。存储控制器/管理器可以基于各种标准来调用解码器。标准的示例包括:不再可用的r个节点的百分比(r为n-k)、超过跨分布式存储系统的阈值故障数目、已故障的节点类型等。该流程假定故障的数目不超过r,因为多于r个故障节点超出了擦除代码恢复符号的能力。
在框403处,解码器确定是否所有的故障存储节点是奇偶校验节点。如果所有的故障存储节点都是奇偶校验节点,则解码器在框405处修复所有的奇偶校验节点。假设系统节点可用,则解码器从系统节点取回系统符号并且再生奇偶校验符号。解码器可以访问具有奇偶校验定义的存储库。解码器可以利用新确定的系数来生成奇偶校验定义。这将是奇偶校验节点的功能性修复,因为精确修复被限制为再生相同的奇偶校验定义。如果所有的故障存储节点都不是奇偶校验节点,则控制流向框409。
在框409处,解码器标识针对每个故障系统节点而被指定的恢复行索引。用于每个系统节点的恢复行的标识可以被维持在永久存储装置中的数据结构中。如前所述,用于每个系统节点的恢复行索引信息事先利用m个r叉树来建立,例如在数据被编码之前来建立。由于m个r叉树是基于擦除代码参数的,因此在使用相同的擦除代码参数时,可以预先构造和使用m个r叉树,以总体上指定针对系统节点的恢复行关联。
在框413处,解码器获得与所标识的恢复行索引相对应的系统符号、奇偶校验定义和奇偶校验符号。为了获得该信息,解码器可以将恢复行索引传送到辅助节点。作为响应,系统辅助节点将查找与所传送的索引相对应的系统符号并且返回那些系统符号。类似地,奇偶校验辅助节点将查找与所传送的索引相对应的奇偶校验符号和奇偶校验定义并且将那些系统符号返回到解码器。由于行奇偶校验定义是符号行的和或相加,因此行奇偶校验定义可以被硬编码到解码器中并且不需要被取回或被获得。
在框415处,解码器确定是否已经获得足够数目的奇偶校验定义以求解故障系统节点的未知符号。如果解码器确定在故障系统节点之间存在共用的恢复行索引,则奇偶校验定义和奇偶校验符号将是不足的(即,将不存在s个独立线性表达式,其中s是故障系统节点的数目)。如果不存在足够的奇偶校验定义以恢复丢失的系统符号,则控制流向框417。否则,控制流向框419。
在框417处,解码器标识s个附加恢复行以获得足够的奇偶校验定义来恢复未知符号。解码器可以标识与那些已经被标识的恢复行相邻的恢复行。解码器从与附加恢复行索引相对应的系统节点获得系统符号。解码器还从奇偶校验辅助节点获得与附加恢复行索引相对应的奇偶校验信息。然而,来自奇偶校验辅助节点的所有奇偶校验定义可以形成足够求解未知符号的独立线性表达式的集合。在2个故障系统节点的情况下,针对具有5个恢复行的(9,6)MSR代码,该5个恢复行针对故障系统节点而被标识,解码器可以选择包括8个附加符号和6个附加奇偶校验定义的2个附加恢复行。通过5个初始恢复行,解码器可能仅获得了15个奇偶校验定义,该15个奇偶校验定义将不足以求解18个未知符号。但是2个附加恢复行产生总共21个奇偶校验定义。这超过18,但是所有的21个奇偶校验定义不形成足够求解18个未知符号的独立线性表达式的集合。解码器从对应于附加恢复行的奇偶校验定义中选择,以形成18个独立线性表达式以求解且恢复18个未知符号。
在框419处,解码器从所获得的奇偶校验定义形成独立线性表达式的集合,并且求解这些表达式以恢复丢失的系统符号。解码器利用所获得的符号来求解独立线性表达式的集合。然后解码器可以将恢复的符号写入替换存储节点。为了求解独立线性表达式的集合,可以经由应用编程接口(API)而进行对函数库(例如,如点积计算和矩阵求逆)的调用。用于错误纠正编码相关的功能的软件库的示例包括存储加速库、Jerasure擦除代码库、kodo擦除代码库和OpenFEC库。
解码基于编码。为了计算奇偶校验符号,可以使用点积函数。每个奇偶校验符号是系统符号和从对应于256位的伽罗瓦域(28)或GF(256)中选择的系数的点积。针对所有奇偶校验符号的点积的计算可以通过利用高级矢量扩展在对API的单个调用中来完成。令奇偶校验符号被表示为:
Pti,其中0≤t<r且0≤i<α
奇偶校验P0i(“行奇偶校验”)是第i行处的奇偶校验节点P0的第一符号,并且由第i行的系统符号的异或(XOR)来形成。令这些系统符号属于集合Si。第i行上的其他奇偶校验符号各自通过来自第i行之外的行的m个额外系统符号(m=k/r)来形成。令这些符号形成集合Sim。具有符号{Si,Sm}的集合的缓冲器作为对点积函数的调用的输入而被形成。缓冲器还针对输出而被指派,该输出具有表示r个编码的奇偶校验符号的r个符号。
为了说明点积的使用以创建针对第一行(i=0)的奇偶校验符号,该示例将使用HMSR(9,6)。以下的表3呈现了用于点积的(k+(r-1)*m)个或(2k-m)个符号。换言之,表3示出了用于跨三个奇偶校验节点的行0的符号集合成员资格。表3中所示的编码矩阵具有对应于奇偶校验节点的r(即,3)行。表3的每个行指示将被应用于所标识的系统符号的系数。
表3:将矩阵编码到编码行1
该r个点积结果将被复制到输出缓冲器。由API限定的函数可以通过应用AVX2矢量化来同时计算r个点积。
在解释如何求解独立线性表达式的集合以修复多个故障存储节点之前,首先解决求解独立线性表达式的集合以修复单个故障节点。为了恢复一个故障存储节点,未知符号的数目是α。因此,要求解以修复单个故障节点的线性方程的数目是α。根据MSR擦除代码的特性,如果节点Nj故障,则解码器可以通过访问来自β行的符号来恢复Nj个系统符号。这意味着在修复过程中将从d=n-1个幸存节点中的每个节点中读取β个符号。令RNi为由Nj下的子树呈现的行的集合,该子树如对应的r叉树所表示。如果节点Nj故障,则其可以通过读取RNi中的行的符号来修复。从β行生成的线性表达式的数目是βr,βr与α相同。因此,来自行€RNi的奇偶校验符号足以修复Nj。针对该单个故障场景,可以假定所形成的α个方程是独立线性方程。在多个故障存储节点场景中,该假定不一定保持正确。
针对由API和GF(256)上的矩阵求逆限定的(多个)点积函数,解码器使用奇偶校验表达式来形成具有24个元素的线性方程系统(SE)。在所形成的线性方程系统中,15个符号是已知的并且9个符号是未知的。解码器生成具有涉及15个已知(可用)符号的单位矩阵(I)的矩阵,并且从16到24的行具有已知符号和9个未知符号的线性组合。然后,解码器分离表示未知符号的线性组合的子矩阵(X)。令R表示子矩阵,该子矩阵表示已知符号的线性组合。解码器求逆子矩阵X。
改变U->k和X->U,
令K={k0,k1,...,k14}为可用符号,
U={u0,u1,...,u8}为丢失或未知的符号,并且
V=9×9矩阵,其具有来自GF(256)的系数。
针对丢失符号要求解的线性方程可以被表达为:
KI+VU=B。
这里,B是从9个奇偶校验符号获得的缓冲器的1×9矩阵。
使用ISAL求逆和点积函数可以高效地将上述线性方程求解为:U=V-1(B-KI)。使用相同的方法完成针对多个系统节点故障的解。针对多个故障,方程的系统涉及要求解的s*α个未知数,其中s是故障系统节点的数目。因此,矩阵的大小将增加。
在框423处,解码器修复任何剩余的故障奇偶校验节点。现在,解码器可以使用恢复的系统符号来修复故障奇偶校验节点。
图5描绘了用于标识附加恢复行的示例操作的流程图。图5是用于执行图4的框417的示例。再次地,为了与前面的附图的一致性,该附图是指执行操作的解码器。
在框501处,解码器标识没有针对故障存储节点而被指定的恢复行的集合。换言之,解码器标识没有针对故障存储节点而被指定的那些恢复行。
在框503处,解码器根据选择标准从所标识的恢复行的集合中标识s个附加恢复行。如前所述,s指示故障存储节点的数目。选择标准可以被限定以提高访问效率。例如,选择标准可以指定选择偏向于与已经被标识的恢复行索引相邻(即,顺序)的恢复行索引。
在框505处,解码器从辅助节点获得附加恢复行的符号。解码器将附加恢复行的索引传送到系统辅助节点。作为响应,系统辅助节点传送所传送的索引的系统符号。同样地,解码器将附加恢复行的索引传送到奇偶校验辅助节点。作为响应,奇偶校验辅助节点传送所传送的索引的奇偶校验信息。
在框509处,解码器形成具有恢复行的奇偶校验定义的线性表达式的集合,该恢复行已经针对故障存储节点而被标识。该集合不包括所标识的附加恢复行的奇偶校验定义。如果维持独立性,则解码器将使用线性表达式的集合以从附加恢复行的奇偶校验定义中选择。
在框511处,解码器开始评估与s个附加恢复行索引中的每个附加恢复行索引相对应的奇偶校验定义。解码器将针对每个附加恢复行来选择每个奇偶校验辅助节点的每个奇偶校验定义。
在框513处,解码器将T设定为值1。变量T用于索引奇偶校验节点。解码器默认将行奇偶校验定义作为独立线性表达式包括在线性表达式中,并且解码器操作就好像针对奇偶校验节点0的奇偶校验定义是行奇偶校验一样。
在框515处,解码器开始通过奇偶校验辅助节点遍历奇偶校验定义。奇偶校验辅助节点被指定,因为如果奇偶校验节点是故障存储节点中的一个,则其可能是不可用的。
在框517处,解码器确定在当前所选择的一个附加恢复行处的、针对奇偶校验节点T的奇偶校验定义是否独立于线性表达式的集合。如果奇偶校验定义关于线性表达式的集合独立,则控制流向框519。否则,控制流向框521。
在框519处,解码器将在当前所选择的一个附加恢复行索引处针对奇偶校验节点T的奇偶校验定义包括在线性表达式的集合中。解码器还将对应的奇偶校验符号合并到线性表达式集合中,以用于求解未知符号。控制从框519继续到框521。
在框521处,解码器递增奇偶校验节点索引T并且确定是否存在可用节点T。如果存在可用的奇偶校验节点T,则控制返回到框515。如果不存在,则控制流向框523。在框523处,解码器确定是否存在下一附加恢复行。如果是,则控制返回到框511。
图6描绘了在不同的分布式存储系统中的高速率MSR编码器/解码器的备选部署的图。针对第一种情况,分布式存储系统包括存储控制器603和存储控制器619。数据集(例如,文件)可以被摄入到存储控制器的任一个中。存储控制器603包括高速率MSR编码器/解码器605,并且管理对磁盘(即,存储节点)607、609、610的访问。存储控制器619包括高速率MSR编码器/解码器621,并且管理对闪速存储驱动器(即,存储节点)623、625的访问。由于数据集可以被摄入到存储控制器的任一个中,所以第一种情况的图示是指存储控制器中的一个。例如,存储控制器603从客户端接收文件601(被标识为M)。存储控制器603使用高速率MSR编码器/解码器605以将文件601编码成系统符号矢量MA至MF和奇偶校验符号矢量,奇偶校验符号矢量中的一个被描绘为PR。存储控制器603将符号矢量中的每个写入不同的磁盘。针对被摄入在存储控制器619处不同文件,将完成相同的操作。
针对第二种情况,分布式存储系统具有存储系统的层次结构。存储控制器615跨存储系统的存储控制器来分发符号矢量,该存储控制器包括存储控制器603、619。存储控制器615接收文件“Q”613。存储控制器615使用高速率MSR编码器/解码器617来将文件613编码成系统符号矢量QA至QF和奇偶校验符号矢量,奇偶校验符号矢量中的一个被描绘为PQR。接收存储控制器603、619将符号矢量写入其存储节点而无需进一步的编码。为了恢复,存储控制器615可以从跨分布式存储系统取回用于恢复的信息。
变型
流程图被提供以帮助理解说明,而不是用于限制权利要求的范围。流程图描绘了可以在权利要求的范围内变化的示例操作。附加操作可以被执行;更少的操作可以被执行;操作可以被并行执行;并且操作可以以不同的顺序被执行。例如,框413和框415中所描绘的操作可以以不同的顺序被执行。实施例可以确定最初所标识的恢复行是否足够,并且然后在获得符号之前标识附加恢复行。应该理解,可以通过程序代码来实现流程图图示和/或框图中的每个框以及流程图图示和/或框图中的框的组合。程序代码可以被提供给通用计算机、专用计算机或其他可编程机器或装置的处理器。
如将理解的,本公开的各方面可以被体现为被存储在一个或多个机器可读介质中的系统、方法或程序代码/指令。相应地,各方面可以采取硬件、软件(包括固件、常驻软件、微代码等)或软件和硬件方面的组合的形式,所有这些方面可以在本文中一般地被称为“电路”、“模块”或“系统”。根据平台(操作系统和/或硬件)、应用生态系统、接口、程序员偏好、编程语言、管理员偏好等中的任何一个,示例图示中的单个模块/单元的功能性可以被不同地组织。
一个或多个机器可读介质的任何组合可以被利用。机器可读介质可以是例如但不限于系统、装置或设备,其采用电子、磁、光、电磁、红外或半导体技术中的任何一个或其组合来存储程序代码。机器可读存储介质的更具体示例(非详尽列表)将包括以下:便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、便携式压缩盘只读存储器(CD-ROM)、光存储设备、磁存储设备或前述的任何合适的组合。
图7描绘了具有用于修复多个故障存储节点的高速率MSR编码器/解码器的示例计算机系统。该计算机系统包括处理器701(可能包括多个处理器、多个核、多个节点和/或实现多线程等)。计算机系统包括存储器707。存储器707可以是系统存储器或以上已经描述的机器可读介质的可能实现中的任何一个或多个。该计算机系统还包括总线703和网络接口705。该系统还包括用于修复多个故障存储节点的高速率MSR编码器/解码器711。高速率MSR编码器/解码器711从分布式存储系统中的多个擦除中恢复未知符号。先前所描述的功能中的任何一个可以部分地(或完全地)在硬件中和/或在处理器701上被实现。例如,功能可以用专用集成电路、在处理器701中实现的逻辑中、在外围设备或卡上的协同处理器等中来实现。处理器701和网络接口705被耦合到总线703。虽然被图示为耦合到总线703,但是存储器707可以被耦合到处理器701。
一种方法包括:在根据高速率最小存储再生擦除代码检测到多个系统存储节点的不可用性之后,标识针对多个系统存储节点指定的第一多个索引,该多个系统存储节点托管被存储在分布式存储系统中的文件的系统符号。针对多个系统存储节点中的每个系统存储节点指定多个索引的r个索引的集合。r是用于文件的奇偶校验存储节点的数目。该方法包括:确定所标识的索引中的至少一个索引是否跨多个系统存储节点中的至少两个系统存储节点而共用;基于确定至少一个所标识的索引跨多个系统存储节点中的至少两个系统存储节点而共用,确定不是所标识的索引中的一个索引的至少s个附加索引,其中s是多个系统存储节点的数目;从可用的系统存储节点获得与所标识的索引和所确定的s个附加索引相对应的系统符号;从可用的奇偶校验存储节点获得与所标识的索引和所确定的s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义和所获得的系统符号和奇偶校验符号来恢复被托管在不可用的系统存储节点上的系统符号。
在该方法中,n是用于文件的存储节点的总数目,k是用于文件的系统存储节点的总数目,并且k/n>0.5。
该方法还包括,基于确定跨多个系统存储节点的所标识的索引的不共用性:从对应于文件的可用的系统存储节点获得与所标识的索引相对应的系统符号;从对应于文件的可用的奇偶校验存储节点获得与所标识的索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义和所获得的系统符号和奇偶校验符号来恢复被托管在不可用的系统存储节点上的系统符号。
该方法还包括:利用指示以基r格式的索引的叶节点来构造m个r叉树,其中m是k/r;以及针对文件的每个系统存储节点,如果系统存储节点变得不可用,则指定r个索引以用于恢复未知符号。如果系统存储节点变得不可用则指定r个索引以用于恢复未知符号包括:将针对系统存储节点Nj的索引指定为r个索引,该r个索引在具有根索引i的r叉树的子树t的叶节点中被指示,其中0<=j<k,t=j模r,并且i是j/r的整数商。该方法还包括:在多次故障被检测到时,存储由系统节点标识符指定的索引以用于取回。
恢复系统符号包括:利用与所标识的索引相对应的奇偶校验定义形成独立线性表达式的第一集合;利用与附加索引相对应的奇偶校验定义形成线性表达式的第二集合;从线性表达式的第二集合中消除冗余线性表达式,以创建线性表达式的缩减的第二集合;以及形成线性表达式的系统,以求解独立线性表达式的第一集合和线性表达式的缩减的第二集合。
从可用的奇偶校验存储节点获得与所标识的索引和所确定的s个附加索引相对应的奇偶校验定义和奇偶校验符号包括:获得奇偶校验定义和奇偶校验符号,直到已获得足够的奇偶校验定义以恢复被托管在多个存储节点上的系统符号。
从可用的系统存储节点获得与所标识的索引和所确定的s个附加索引相对应的系统符号包括:将对系统符号的请求传送到管理可用的系统存储节点的存储控制器。
一个或多个非瞬态机器可读存储介质,包括用于利用高速率最小存储再生擦除代码来恢复分布式存储系统中的多个符号阵列擦除的程序代码。在用于文件的s个系统符号阵列处检测到擦除之后,该文件被编码为k个系统符号阵列和r个奇偶校验符号阵列,其中s小于或等于r且k/r>0.5,其中k个系统符号阵列中的每个系统符号阵列和r个奇偶校验符号阵列中的每个奇偶校验符号阵列被托管在分布式存储系统中的存储节点处:针对s个系统符号阵列中的每个系统符号阵列,标识用于系统符号阵列的恢复而被指定的r个索引的集合;确定索引中的至少一个索引是否跨r个索引的集合中的至少两个集合而共用;基于确定至少一个所标识的索引跨r个索引的集合中的至少两个集合而共用,确定不是所标识的索引中的一个索引的至少s个附加索引;从可用的并且托管系统符号阵列的存储节点获得与所标识的索引和所确定的s个附加索引相对应的系统符号;从可用的并且托管奇偶校验符号阵列的存储节点获得与所标识的索引和所确定的s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义、所获得的系统符号和所获得的奇偶校验符号来恢复s个系统符号阵列。
该程序还包括用于以下的程序代码:基于确定r个索引的s个集合中没有重叠,从可用的并且托管系统符号阵列的存储节点获得与所标识的索引相对应的系统符号;从可用的并且托管奇偶校验符号阵列的存储节点获得与所标识的索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义、所获得的系统符号和所获得的奇偶校验符号来恢复s个系统符号阵列。
用于确定至少s个附加索引的程序代码包括:用于标识与所标识的索引中的至少一个索引相邻的索引的程序代码。
用于获得与所确定的s个附加索引相对应的奇偶校验定义和奇偶校验符号的程序代码包括用于以下的程序代码:从可用的r个符号阵列中的每个符号阵列选择在所确定的s个附加索引中的每个附加索引处的至少一个奇偶校验定义和对应的奇偶校验符号,直到足够数目的奇偶校验定义和奇偶校验符号,以形成s*k个独立线性方程。用于从可用的r个符号阵列中的每个符号阵列选择在所确定的s个附加索引中的每个附加索引处的至少一个奇偶校验定义和对应的奇偶校验符号,直到足够数目的奇偶校验定义和奇偶校验符号,以形成s*k个独立线性方程的程序代码包括:用于至少选择在s个附加索引处的行奇偶校验符号的程序代码。
一种装置,包括处理器和机器可读介质,该机器可读介质包括由处理器可执行以使得装置执行以下的程序代码:在根据高速率最小存储再生擦除代码检测到多个系统存储节点的不可用性之后,标识针对多个系统存储节点指定的第一多个索引,该多个系统存储节点托管被存储在分布式存储系统中的文件的系统符号,其中针对多个系统存储节点中的每个系统存储节点指定多个索引的r个索引的集合,其中r是用于文件的奇偶校验存储节点的数目;确定所标识的索引中的至少一个索引是否跨多个系统存储节点中的至少两个系统存储节点而共用;以及基于确定至少一个所标识的索引跨多个系统存储节点中的至少两个系统存储节点而共用,确定不是所标识的索引中的一个索引的至少s个附加索引,其中s是多个系统存储节点的数目;从可用的系统存储节点获得与所标识的索引和所确定的s个附加索引相对应的系统符号;从可用的奇偶校验存储节点获得与所标识的索引和所确定的s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义、所获得的系统符号和所获得的奇偶校验符号来恢复被托管在不可用的系统存储节点上的系统符号。
在该装置中,n是用于文件的存储节点的总数目,k是用于文件的系统存储节点的总数目,并且k/n>0.5。
程序代码由处理器可执行以使得装置执行以下:基于确定跨多个系统存储节点的所标识的索引的不共用性,从对应于文件的可用的系统存储节点获得与所标识的索引相对应的系统符号;从对应于文件的可用的奇偶校验存储节点获得与所标识的索引相对应的奇偶校验定义和奇偶校验符号;以及至少部分地基于奇偶校验定义和所获得的系统符号和奇偶校验符号来恢复被托管在不可用的系统存储节点上的系统符号。
程序代码由处理器可执行以使得装置执行以下:利用指示以基r格式的索引的叶节点来构造m个r叉树,其中m是k/r;以及针对文件的每个系统存储节点,如果系统存储节点变得不可用,则指定r个索引以用于恢复未知符号。用于如果系统存储节点变得不可用则指定r个索引以用于恢复未知符号的程序代码包括用于以下的程序代码:将针对系统存储节点Nj的索引指定为r个索引,该r个索引在具有根索引i的r叉树的子树t的叶节点中被指示,其中0<=j<k,t=j模数r,并且i是j/r的整数商。
程序代码由处理器可执行以使得装置在多次故障被检测到时,存储由系统节点标识符指定的索引以用于取回。
Claims (20)
1.一种方法,包括:
在根据高速率最小存储再生擦除代码检测到多个系统存储节点的不可用性之后,标识针对所述多个系统存储节点指定的第一多个索引,所述多个系统存储节点托管被存储在分布式存储系统中的文件的系统符号,其中所述第一多个索引的r个索引的集合被指定用于所述多个系统存储节点中的每个系统存储节点,其中r是用于所述文件的奇偶校验存储节点的数目;
基于确定所述第一多个索引中的至少一个索引跨所述多个系统存储节点中的至少两个系统存储节点而共用,
确定不是所述第一多个索引中的一个索引的至少s个附加索引,其中s是所述多个系统存储节点的数目;
从可用的系统存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的系统符号;
从可用的奇偶校验存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及
至少部分地基于所述奇偶校验定义和所获得的所述系统符号和所述奇偶校验符号,来恢复被托管在不可用的所述系统存储节点上的所述系统符号。
2.根据权利要求1所述的方法,其中n是用于所述文件的存储节点的总数目,k是用于所述文件的系统存储节点的总数目,并且k/n>0.5。
3.根据权利要求1所述的方法,还包括:
基于确定跨所述多个系统存储节点的索引的不共用性,
从对应于所述文件的可用的奇偶校验存储节点获得与所述第一多个索引相对应的奇偶校验定义和奇偶校验符号。
4.根据权利要求1所述的方法,还包括:
针对所述文件的每个系统存储节点,响应于所述系统存储节点变得不可用,指定r个索引以用于恢复未知符号。
5.根据权利要求1所述的方法,还包括:
将针对系统存储节点Nj的索引指定为r个索引,所述r个索引在具有根索引i的r叉树的子树t的叶节点中被指示,其中0<=j<k,t=j模r,k是用于所述文件的系统存储节点的总数目,并且i是j/r的整数商。
6.根据权利要求1所述的方法,还包括:响应于检测到多次故障,通过系统节点标识符存储索引以用于取回。
7.根据权利要求1所述的方法,其中恢复所述系统符号包括:
利用与所述第一多个索引相对应的所述奇偶校验定义来形成独立线性表达式的第一集合。
8.根据权利要求1所述的方法,其中从可用的奇偶校验存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的奇偶校验定义和奇偶校验符号包括:获得所述奇偶校验定义和所述奇偶校验符号,直到足够的奇偶校验定义已被获得,以恢复被托管在所述多个系统存储节点上的所述系统符号。
9.根据权利要求1所述的方法,其中从可用的系统存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的系统符号包括:将对所述系统符号的请求传送到管理所述可用的系统存储节点的存储控制器。
10.一种非瞬态机器可读存储介质,其上存储有用于执行方法的指令,所述方法用于以高速率最小存储再生擦除代码来恢复分布式存储系统中的多个符号阵列擦除,所述高速率最小存储再生擦除代码包括机器可执行代码,所述机器可执行代码在由至少一个机器执行时使得所述机器:
在用于文件的s个系统符号阵列处检测到擦除之后,所述文件被编码为k个系统符号阵列和r个奇偶校验符号阵列,其中s小于或等于r且k/r>0.5,其中所述k个系统符号阵列中的每个系统符号阵列和所述r个奇偶校验符号阵列中的每个奇偶校验符号阵列被托管在分布式存储系统中的存储节点处,
针对所述s个系统符号阵列中的每个系统符号阵列,标识用于所述系统符号阵列的恢复而被指定的r个索引的集合;
基于确定至少一个索引跨r个索引的所述集合中的至少两个集合而共用,
确定不是r个索引的所述集合中的一个集合的至少s个附加索引;
从可用的并且托管系统符号阵列的所述存储节点获得与r个索引的所述集合和所确定的所述s个附加索引相对应的系统符号;
从可用的并且托管奇偶校验符号阵列的所述存储节点获得与r个索引的所述集合和所确定的所述s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及
至少部分地基于所述奇偶校验定义、所获得的所述系统符号和所获得的所述奇偶校验符号来恢复所述s个系统符号阵列。
11.根据权利要求10所述的机器可读存储介质,进一步包括代码,所述代码用以:
基于确定所述r个索引的所述集合中没有重叠,
从可用的并且托管奇偶校验符号阵列的所述存储节点获得与r个索引的所述集合相对应的奇偶校验定义和奇偶校验符号。
12.根据权利要求10所述的机器可读存储介质,其中用于确定至少s个附加索引的所述代码包括:用于标识与r个索引的所述集合中的至少一个集合相邻的索引的指令。
13.根据权利要求10所述的机器可读存储介质,其中用于获得与所确定的所述s个附加索引相对应的奇偶校验定义和奇偶校验符号的所述代码包括用于以下的代码:从可用的r个符号阵列中的每个符号阵列选择在所确定的所述s个附加索引中的每个附加索引处的至少一个奇偶校验定义和对应的奇偶校验符号,直到足够数目的奇偶校验定义和奇偶校验符号,以形成s*k个独立线性方程。
14.根据权利要求10所述的机器可读存储介质,还包括代码,所述代码用于至少选择在所述s个附加索引处的行奇偶校验符号的指令。
15.一种计算设备,包括:
包含机器可读介质的存储器,所述机器可读介质包括机器可执行代码,在其上存储有用于执行恢复数据的方法的指令;以及
被耦合至所述存储器的处理器,所述处理器被配置为执行所述机器可执行代码以使所述处理器:
在根据高速率最小存储再生擦除代码检测到多个系统存储节点的不可用性之后,标识针对所述多个系统存储节点指定的第一多个索引,所述多个系统存储节点托管被存储在分布式存储系统中的文件的系统符号,其中所述第一多个索引的r个索引的集合被指定用于所述多个系统存储节点中的每个系统存储节点,其中r是用于所述文件的奇偶校验存储节点的数目;
基于确定所述第一多个索引中的至少一个索引跨所述多个系统存储节点中的至少两个系统存储节点而共用,
确定不是所述第一多个索引中的一个索引的至少s个附加索引,其中s是所述多个系统存储节点的数目;
从可用的系统存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的系统符号;
从可用的奇偶校验存储节点获得与所述第一多个索引和所确定的所述s个附加索引相对应的奇偶校验定义和奇偶校验符号;以及
至少部分地基于所述奇偶校验定义、所获得的所述系统符号和所述奇偶校验符号,来恢复被托管在不可用的所述系统存储节点上的所述系统符号。
16.根据权利要求15所述的计算设备,其中n是用于所述文件的存储节点的总数目,k是用于所述文件的系统存储节点的总数目,并且k/n>0.5。
17.根据权利要求15所述的计算设备,其中所述机器可读介质还包括由所述处理器可执行的代码,所述代码使得所述处理器:
基于确定跨所述多个系统存储节点的索引的不共用性,
从对应于所述文件的可用的奇偶校验存储节点,获得与所述第一多个索引相对应的奇偶校验定义和奇偶校验符号。
18.根据权利要求15所述的计算设备,其中所述机器可读介质还包括由所述处理器可执行的代码,所述代码使得所述处理器:
针对所述文件的每个系统存储节点,响应于所述系统存储节点变得不可用,指定r个索引以用于恢复未知符号。
19.根据权利要求15所述的计算设备,还包括代码,所述代码用以:
将针对系统存储节点Nj的索引指定为r个索引,所述r个索引在具有根索引i的r叉树的子树t的叶节点中被指示,其中0<=j<k,t=j模r,k是用于所述文件的系统存储节点的总数目,并且i是j/r的整数商。
20.根据权利要求15所述的计算设备,其中所述机器可读介质还包括由所述处理器可执行的代码,所述代码使得所述处理器:响应于检测到多次故障,通过系统节点标识符存储索引以用于取回。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/248,047 | 2016-08-26 | ||
US15/248,047 US10452477B2 (en) | 2016-08-26 | 2016-08-26 | Multiple node repair using high rate minimum storage regeneration erasure code |
PCT/US2017/048963 WO2018039678A1 (en) | 2016-08-26 | 2017-08-28 | Multiple node repair using high rate minimum storage regeneration erasure code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109643258A CN109643258A (zh) | 2019-04-16 |
CN109643258B true CN109643258B (zh) | 2022-06-10 |
Family
ID=59858775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780052269.6A Active CN109643258B (zh) | 2016-08-26 | 2017-08-28 | 使用高速率最小存储再生擦除代码的多节点修复 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10452477B2 (zh) |
EP (1) | EP3504623B1 (zh) |
CN (1) | CN109643258B (zh) |
WO (1) | WO2018039678A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10452477B2 (en) | 2016-08-26 | 2019-10-22 | Netapp, Inc. | Multiple node repair using high rate minimum storage regeneration erasure code |
US11194668B1 (en) * | 2018-01-29 | 2021-12-07 | Daniel Backer Grunberg | Backup across redundant removable media |
US10354717B1 (en) * | 2018-05-10 | 2019-07-16 | Micron Technology, Inc. | Reduced shifter memory system |
US10719397B2 (en) * | 2018-06-08 | 2020-07-21 | Samsung Electronics Co., Ltd. | System, device and method for storage device assisted low-bandwidth data repair |
WO2020081512A1 (en) | 2018-10-15 | 2020-04-23 | Netapp, Inc. | Improving available storage space in a system with varying data redundancy schemes |
US11061772B2 (en) | 2018-12-14 | 2021-07-13 | Samsung Electronics Co., Ltd. | FPGA acceleration system for MSR codes |
US11314593B2 (en) | 2019-06-25 | 2022-04-26 | Western Digital Technologies, Inc. | Storage node processing of data functions using overlapping symbols |
US11055018B2 (en) * | 2019-06-25 | 2021-07-06 | Western Digital Technologies, Inc. | Parallel storage node processing of data functions |
US11281531B2 (en) | 2019-06-25 | 2022-03-22 | Western Digital Technologies, Inc. | Serial storage node processing of data functions |
US10990324B2 (en) | 2019-06-25 | 2021-04-27 | Western Digital Technologies, Inc. | Storage node processing of predefined data functions |
CN112947847B (zh) * | 2019-12-11 | 2023-12-29 | 伊姆西Ip控股有限责任公司 | 用于存储数据的方法、设备和计算机程序产品 |
US11567840B2 (en) * | 2020-03-09 | 2023-01-31 | Rubrik, Inc. | Node level recovery for clustered databases |
CN112783688B (zh) * | 2021-02-10 | 2022-06-03 | 上海交通大学 | 一种基于可用分区级的纠删码数据恢复方法及装置 |
CN113258936B (zh) * | 2021-06-03 | 2021-10-15 | 成都信息工程大学 | 一种基于循环移位的双重编码的构造方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8402346B2 (en) * | 2001-12-28 | 2013-03-19 | Netapp, Inc. | N-way parity technique for enabling recovery from up to N storage device failures |
US7392458B2 (en) * | 2004-11-19 | 2008-06-24 | International Business Machines Corporation | Method and system for enhanced error identification with disk array parity checking |
US7327287B2 (en) | 2004-12-09 | 2008-02-05 | Massachusetts Institute Of Technology | Lossy data compression exploiting distortion side information |
US8335966B1 (en) * | 2008-08-01 | 2012-12-18 | Dell Products L.P. | Dual parity RAID wherein no more than N+1 data symbols contribute to any parity symbol |
US20100138717A1 (en) * | 2008-12-02 | 2010-06-03 | Microsoft Corporation | Fork codes for erasure coding of data blocks |
TWI497293B (zh) * | 2009-12-17 | 2015-08-21 | Ibm | 固態儲存裝置內之資料管理 |
US8156368B2 (en) * | 2010-02-22 | 2012-04-10 | International Business Machines Corporation | Rebuilding lost data in a distributed redundancy data storage system |
US8631269B2 (en) * | 2010-05-21 | 2014-01-14 | Indian Institute Of Science | Methods and system for replacing a failed node in a distributed storage network |
US8775860B2 (en) * | 2010-07-20 | 2014-07-08 | Tata Consultancy Services Limited | System and method for exact regeneration of a failed node in a distributed storage system |
US8677227B2 (en) | 2010-08-25 | 2014-03-18 | Royal Institution for the Advancement of Learning / McGill University | Method and system for decoding |
US8443255B2 (en) | 2010-08-26 | 2013-05-14 | Qualcomm Incorporated | Parity check matrix optimization and selection for iterative decoding |
US9569320B2 (en) * | 2010-12-01 | 2017-02-14 | Seagate Technology Llc | Non-volatile memory program failure recovery via redundant arrays |
US8433979B2 (en) * | 2011-02-28 | 2013-04-30 | International Business Machines Corporation | Nested multiple erasure correcting codes for storage arrays |
US8694866B2 (en) * | 2011-03-15 | 2014-04-08 | California Institute Of Technology | MDS array codes with optimal building |
US9600365B2 (en) * | 2013-04-16 | 2017-03-21 | Microsoft Technology Licensing, Llc | Local erasure codes for data storage |
US10187088B2 (en) * | 2014-04-21 | 2019-01-22 | The Regents Of The University Of California | Cost-efficient repair for storage systems using progressive engagement |
US9595979B2 (en) * | 2015-01-20 | 2017-03-14 | International Business Machines Corporation | Multiple erasure codes for distributed storage |
US10452477B2 (en) | 2016-08-26 | 2019-10-22 | Netapp, Inc. | Multiple node repair using high rate minimum storage regeneration erasure code |
-
2016
- 2016-08-26 US US15/248,047 patent/US10452477B2/en active Active
-
2017
- 2017-08-28 WO PCT/US2017/048963 patent/WO2018039678A1/en unknown
- 2017-08-28 CN CN201780052269.6A patent/CN109643258B/zh active Active
- 2017-08-28 EP EP17765512.3A patent/EP3504623B1/en active Active
-
2019
- 2019-10-11 US US16/599,298 patent/US10901844B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20180060169A1 (en) | 2018-03-01 |
CN109643258A (zh) | 2019-04-16 |
US10452477B2 (en) | 2019-10-22 |
US10901844B2 (en) | 2021-01-26 |
WO2018039678A1 (en) | 2018-03-01 |
EP3504623A1 (en) | 2019-07-03 |
EP3504623B1 (en) | 2023-04-26 |
US20200117542A1 (en) | 2020-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109643258B (zh) | 使用高速率最小存储再生擦除代码的多节点修复 | |
CN111149093B (zh) | 分布式存储系统的数据编码、解码及修复方法 | |
US10936417B2 (en) | Multi-stage slice recovery in a dispersed storage network | |
US10146618B2 (en) | Distributed data storage with reduced storage overhead using reduced-dependency erasure codes | |
US10067832B2 (en) | Imposter slices | |
US9600365B2 (en) | Local erasure codes for data storage | |
US7681105B1 (en) | Method for lock-free clustered erasure coding and recovery of data across a plurality of data stores in a network | |
US8392805B2 (en) | Non-MDS erasure codes for storage systems | |
EP1450260A2 (en) | Data redundancy method and apparatus | |
US11500725B2 (en) | Methods for data recovery of a distributed storage system and storage medium thereof | |
CN110750382A (zh) | 用于提高数据修复性能的最小存储再生码编码方法及系统 | |
CN111090540B (zh) | 基于纠删码的数据处理方法与装置 | |
CN109358980B (zh) | 一种对数据更新和单磁盘错误修复友好的raid6编码方法 | |
CN108762978B (zh) | 一种局部部分重复循环码的分组构造方法 | |
TW202001920A (zh) | 在資料儲存系統中用於改善資料回復之方法及裝置 | |
KR101621752B1 (ko) | 부분접속 복구 가능한 반복분할 부호를 이용한 분산 저장 장치 및 그 방법 | |
Ivanichkina et al. | Mathematical methods and models of improving data storage reliability including those based on finite field theory | |
US10331519B2 (en) | Application of secret sharing schemes at multiple levels of a dispersed storage network | |
CN116501553B (zh) | 数据恢复方法、装置、系统、电子设备及存储介质 | |
Li et al. | Relieving both storage and recovery burdens in big data clusters with R-STAIR codes | |
US9450617B2 (en) | Distribution and replication of erasure codes | |
Wei et al. | expanCodes: Tailored LDPC codes for big data storage | |
CN113168882B (zh) | 一种编码方法、译码方法以及存储控制器 | |
JP2012033169A (ja) | バックアップシステムにおける符号化を使用して、ライブチェックポインティング、同期、及び/又は復旧をサポートするための方法及び装置 | |
US20230342250A1 (en) | Allocating Data in a Decentralized Computer System |
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 |