具体实施方式
图1示出了设备系统100的示例性布置,该设备系统100包括多个计算机主机102、104、106以及多个存储设备108、110和112。在一个实施例中,主机102、104、106以及存储设备108、110和112可以通过网络101互连。网络101例如可以包括局域网(LAN)、广域网(WAN)、存储区域网(SAN)、因特网、或者任何其它类型的通信链路。另外,网络101可以包括系统总线或其它快速互连。图1所示的系统100可以是下述中的任何一个:应用服务器群(farm)、存储服务器群(或存储区域网)、web服务器群、交换机或路由器群等等。尽管图1中示出了三个主机102、104、106以及三个存储设备108、110和112,但是能够理解,根据系统100所用于的特定应用,系统100可以包括三个以上的主机和三个以上的存储设备。所述主机例如可以是计算机(例如应用服务器、存储服务器、web服务器等等)、通信模块(例如交换机、路由器等等)、以及其它类型的机器。尽管所述主机之中的每个都在图1中被描绘为包含在框中,但是特定的主机可以是分布式机器,该分布式机器具有多个节点,所述节点提供分布式且并行的处理系统。
存储设备108-112适于存储与主机102-106相关联的数据。主机102-106之中的每个都可以耦合到存储设备108-112之中的一个或多个,并且主机102-106之中的每个都可以访问存储设备108-112以用于存储和/或从这些设备检索数据。存储设备108-112之中的每个都可以是独立的存储体(memory bank)。可替代地,设备108-112可以互连,由此形成大的存储体或者大存储体的子联合体(subcomplex)。根据设备被部署于其中的系统100的特定实施方式,设备108-112例如可以是磁存储器设备、光存储器设备、闪存设备等等。
在示例性的实施例中,可以在所述多个主机102-106和/或所述多个存储设备108-112上实施纠删码,以使得能够恢复在由主机102-106和/或存储设备108-112实施的传送、存储和/或检索操作期间被损坏、丢失或者以其它方式被破坏的数据。纠删码的类型包括最大距离可分(MDS)码、以及基于异或的码。总的来说,MDS和基于异或的纠删码二者都由n个符号构成,所述n个符号之中的k个是数据符号,并且所述n个符号之中的m个是冗余(或奇偶校验)符号。基于异或的纠删码包括:奇偶校验阵列码、简单积码(simple product code)、Weaver码、以及平面码。奇偶校验阵列码将每个盘的多个符号放置成条块(strip)。来自每个盘的条块共同构成条带(stripe)。奇偶校验阵列码的例子包括EVENODD、行对角奇偶校验(Row-DiagonalParity,RDP)、以及X码。EVENODD和RDP码是水平码-即条块包括数据或奇偶校验符号,但不会同时包括二者)。X码是垂直码-即每个条块包括相似数目的数据和奇偶校验符号。
简单积码是水平垂直码:一些条块与垂直码条块类似,并且其它条块与水平码条块类似。Weaver码是具有规则对称结构的垂直码。平面码是每条块具有单个符号的基于XOR的水平纠删码。为了平衡由于存储设备间的奇偶校验更新造成的负荷,水平和水平垂直码可以被旋转(也就是说,每个接连的条带或条带集合中的条块被旋转以将数据和奇偶校验符号的数目均匀地分布在系统中的存储设备当中)。在下面的讨论中,将使用标记(k,m)-“类型”码来指代特定的码。举例来说,具有5个数据符号和3个奇偶校验符号的平面码将被称为(5,3)-平面码。
图2示出了根据本发明示例性实施例的纠删码编码和解码过程200。过程200包括由纠删码执行的编码和解码步骤,以用于在系统100中存储、检索和/或传送数据。根据本发明的一个实施例,过程200由基于异或的码来执行。如图2所示,初始数据集202被提供,所述数据集202包括位串、字节串或者表示由系统100所使用的可存储、可检索、和/或可传送数据或其他信息的其它符号串。纠删码将初始数据集202编码成经过编码的数据集204(由箭头206表示)。箭头206表示变换过程,该变换过程通常包括:在原始数据集202内创建冗余,由此增加其大小以形成经过编码的数据集204。所使用的特定变换过程206基于所使用的纠删码以及系统100的特定实施方式。
在编码以后,数据集204可以被存储、检索、和/或传送(如箭头208所指示的那样)。举例来说,箭头208可以对应于在各个计算机之间传输数据集204或者对应于用户从服务器检索数据。可替代地,箭头208可以对应于发生在系统100的多个通信和/或存储设备之间的数据传送、存储、和/或检索操作。在由箭头208表示的过程期间,数据集204例如可能通过有损通信信道传播或者被存储在坏损(corrupted)的存储设备中。因此,数据集204的某部分可能丢失或者以其它方式被破坏,从而产生退化数据集210。如图2所示,数据集210包括纠删部分(由被划掉的部分来表示),所述纠删部分对应于数据集204的在过程208期间已经丢失的那些部分。根据所使用的纠删码和丢失数据部分,原始数据集202可能是可恢复的。
为了恢复初始数据集202,解码过程(由箭头212来表示)被应用于退化数据集210。再次,所使用的特定解码过程依赖于所实施的纠删码的结构。由于恢复数据的能力依赖于所使用的纠删码以及经过编码的数据集204的哪些部分已丢失(即纠删部分),因此在一些情况中可能不能恢复初始数据集202。
如下面将要描述的那样,本发明的示例性实施例提供一种用于恢复由于一个或多个存储设备的故障而丢失的数据的技术。尽管该技术将针对非MDS的基于异或的码而被描述,但是应当理解,该恢复方案可适用于其它类型的纠删码,包括MDS码。该技术包括在该系统中的每个存储设备上枚举(enumerate)每个符号的恢复策略,并且然后确定并行的恢复策略来重建一个或多个故障存储设备。如在此所使用的那样,恢复策略是负责恢复特定条块内的丢失符号的策略。并行恢复策略是可以被并行执行以重建故障存储设备的恢复策略的列表。并行策略中的每个恢复策略负责从不同存储设备集合中恢复丢失符号。所述并行策略影响恢复的“加速”和恢复期间的系统上的“负荷”二者。如在此所使用的那样,“加速”是并行策略与单独的恢复策略(即其中必须读取某个数目的盘的全部内容来恢复故障盘的恢复策略)的恢复速率之比。如在此所使用的那样,“负荷”是与为了重建故障盘而必须读取的数据相当(worth of)的盘的数目。并行策略可以基于所期望的性能度量(比如在恢复期间实现最大加速与最小负荷的平衡)来选择。可替代地,并行策略的选择可以更加偏向于最大加速或者更加偏向于最小负荷。
使得能够重建故障设备的特定恢复方案依赖于该系统中所实施的纠删码的结构。这样的结构可以由生成矩阵或者Tanner图来定义。如本领域中已知的那样,(k,m)-码的生成矩阵是两个元素的伽罗瓦(Galois)域中的k×(k+m)矩阵。在生成矩阵中添加行和列通过模2、即根据异或运算来完成。生成矩阵由k×k数据子矩阵和作为奇偶校验子矩阵附加到所述数据子矩阵的维度为k×1的m个列构成。所述数据子矩阵的m个列之中的每个都对应于所存储的数据符号。同样,所述奇偶校验子矩阵中的m个列之中的每个都对应于所存储的奇偶校验符号。当且仅当数据符号si被异或以确定p时,奇偶校验列p在行i中才具有“1”。例如,如果p=s2 XOR s4,则奇偶校验列p在行2和4中具有“1”,并且在所有其它行中具有“0”。例如,下面阐述了(5,3)-平面码的一个可能的生成矩阵。
该(5,3)-平面码的结构还可以由Tanner图来表示。Tanner图是一种二分图,该二分图在一侧具有k个数据节点,在另一侧具有m个奇偶校验符号,并且具有根据纠删码的结构将所述数据符号与奇偶校验符号互连的多个边。图3中示出了Tanner图300,其表示由上面的生成矩阵所描述的纠删码的结构。
一般而言,故障存储设备上的每个符号都可以根据依赖于纠删码结构的一个或多个恢复策略而被恢复。在最简单的意义上,针对基于异或的纠删码而言,用于确定每个存储设备上的每个符号的恢复策略的算法是测试该码中的符号的所有组合的异或。其异或产生所讨论的符号的任何符号组合都是该符号的恢复策略。然而这样的蛮力(bruteforce)算法不是非常高效,因为其考虑了2k+m-1种符号组合,并且可能生成依赖于比所需还多的存储设备的一些恢复策略。
参考图4中的流程图,用于产生盘上的每个符号的恢复策略的更高效的算法400使用例如由该码的生成矩阵或Tanner图所定义的纠删码的结构(步骤402)。以这种方式为该码的每个符号所生成的恢复策略(RP)被称为基本恢复策略(BRP)(步骤404)。根据本发明的实施例,每个符号的基本恢复策略然后可以被操纵以产生该码的每个符号的所有恢复策略的列表(步骤406)。然后,所有符号的恢复策略列表可以被组合考虑以生成可能的并行恢复策略的集合以用于重建故障存储设备(步骤408)。然后,所述可能策略的集合可以被评估以基于所选性能度量来识别用于重建每个存储设备的优选的并行恢复策略(步骤410)。下面的表1阐述了用于以这种方式生成并行恢复策略列表以及识别优选策略的示例性恢复策略和并行恢复策略算法的伪代码。
用于为纠删码的数据符号和奇偶校验符号生成基本恢复策略的过程是不同的,不过这两个过程都基于由生成矩阵或Tanner图所定义的码的结构来确定基本恢复策略。举例来说在一个实施例中,对于奇偶校验符号而言,基本恢复策略仅仅只是被重新布置为求解奇偶校验符号的奇偶校验方程,也就是说,生成矩阵的对应于奇偶校验符号的列被重新布置。对于每个奇偶校验符号正好存在一个基本恢复策略。因此举例来说,参考上述(5,3)-平面码的生成矩阵,奇偶校验符号s5的基本恢复策略是:
s5=s0 XOR s1 XOR s2(或(0,1,2))(1)
对于数据符号而言,可以使用生成矩阵的行或Tanner图来确定每个符号的基本恢复策略。举例来说,参考表1中所述的恢复策略算法,函数base_rp枚举纠删码中的数据符号s的基本恢复策略。对于每个数据符号s而言,针对依赖于该数据符号的奇偶校验符号的每个“奇集合(odd set)”存在基本恢复策略。奇偶校验符号的奇集合可以根据对应于纠删码的Tanner图或者生成矩阵的行来确定。当参考Tanner图300时,奇集合是数据符号所连接到的具有奇数大小的奇偶校验节点的所有集合。举例来说,对于上述(5,3)-平面码而言,Tanner图300示出了:数据符号s0分别通过边302、304和306连接到三个奇偶校验符号s5、s6和s7。因此,符号s0具有四个奇偶校验符号奇集合。更具体而言,存在三个大小为1的奇集合(即针对每个奇偶校验符号s5、s6和s7各有一个集合)和一个大小为3的奇集合(即由三个奇偶校验符号s5、s6和s7构成的一个集合)。数据符号s4具有仅仅一个奇偶校验符号奇集合,因为节点s4仅仅通过边308连接到奇偶校验符号s7。因此,该奇集合大小为1并且由奇偶校验符号s7构成。奇集合后面的直觉知识是:由于单奇偶性,奇数个基本恢复策略的异或仍然是基本恢复策略。偶集合不能产生恢复策略,因为其不能产生可以求出缺失符号的方程。
再次参考表1中所述的伪代码,函数bitmap(p,s)求解p的奇偶校验方程以求出符号s。例如,针对数据符号s0的仅仅包括p=s5的奇集合,bitmap(5,0)返回38,因为38=21+22+25。符号s0的奇集合可以参考图3中的Tanner图300来容易地获悉。在Tanner图300中,数据符号s0连接到奇偶校验符号s5、s6、s7。第一奇集合由符号s5构成,符号s5通过边连接到数据符号s0、s1和s2。第二奇集合由符号s6构成,符号s6通过边连接到数据符号s0、s1、和s3。第三奇集合由符号s7构成,符号s7通过边连接到数据符号s0、s2、s3和s4。因此,符号s0的前三个基本恢复策略是奇偶校验符号s5、s6和s7之中每个的奇偶校验方程的简单重新布置,以求出符号s0。基于大小为3的奇集合的第四恢复策略是三个其它基本恢复策略的异或。
因此,基于大小为1的奇集合的前三个基本恢复策略是:
s0=s1 XOR s2 XOR s5(或(1,2,5)) (2)
s0=s1 XOR s3 XOR s6(或(1,3,6)) (3)
s0=s2 XOR s3 OR s4 XOR s7(或(2,3,4,7)) (4)
基于大小为3的奇集合的第四基本恢复策略是:
s0=s4 XOR s5 XOR s6 XOR s7(或(4,5,6,7)) (5)
然后,s0的基本恢复策略被操纵以生成s0的恢复策略的列表。这例如通过使用表1中的函数enump_rp以及如图5的示例性恢复策略算法500的流程图中所述的那样来完成。根据该算法,针对每个符号s(数据符号或奇偶校验符号),恢复策略的列表被初始化为其基本恢复策略的列表(步骤502)。
在给定所有符号的基本恢复策略的情况下,函数rp枚举特定符号的恢复策略。函数rp按次序处理基本恢复策略的初始列表,并且在附加的恢复策略被找出时将其附加到该列表。为了根据该列表生成恢复策略rp,针对基本恢复策略BRP(s)中的每个数据符号s′,识别s′的不依赖于s的基本恢复策略(BRP(s′))的集合(步骤504)。函数cond_rp确定这样的条件基本恢复策略集合。针对条件基本恢复策略集合中的每个基本恢复策略BRP(s′),用基本恢复策略BRP(s′)替代基本恢复策略BRP(s)中的s′并且进行异或(步骤506)。如果所得到的恢复策略还未处于s的基本恢复策略的列表中,则所得到的恢复策略被附加到s的恢复策略列表(步骤508)。在本发明的一些实施例中,可以为每个数据符号s维持恢复策略的词典(dictionary),以保证附加到初始列表的每个恢复策略都是唯一的。该过程针对基本恢复策略BRP(s)中的每个符号s′重复进行,直到所有符号s′都已经被考虑并且被替换为止(步骤510和512)。一旦BRP(s)中的所有符号s′都已经被考虑,则符号s的下一个BRP被操纵(步骤514和516)。
为了说明,考虑上述(5,3)-平面码中的数据符号s0。对于s=s0的恢复策略的列表被初始化成s0的四个基本恢复策略的列表。因此由函数rp处理的第一恢复策略是(1,2,5)。在该恢复策略中被处理的第一数据符号是s1。s′的不依赖于数据符号s0的第一基本恢复策略是(3,4,5,7)。用(3,4,5,7)替代恢复策略(1,2,5)中的符号s 1并且进行异或将产生条件恢复策略(2,3,4,7)。因为(2,3,4,7)已经处于数据符号s0的基本恢复策略的列表中,所以该条件恢复策略不被附加到符号s0的恢复策略的列表。当该过程针对s0的恢复策略中的每个符号重复进行时,在该情况中发现:符号s0的恢复策略的列表简单地是s0的基本恢复策略的列表。
一旦纠删码中的符号的恢复策略列表被生成,则可以确定用于重建故障存储设备的并行恢复策略。尽管许多并行恢复策略都是可能的,但是可以使用各种性能度量来确定优选的并行恢复策略。在一个实施例中,所述度量是具有最小负荷的最大加速。因此,在将该度量用作准则的情况下,优选的并行恢复策略产生用于并行执行的恢复策略集合的调度,其中该调度提供具有最小负荷的最大加速。还构思有其它类型的用于选择优选并行恢复策略的性能度量。举例来说,也可以考虑在并行恢复策略中必须从最忙的存储设备中读取的数据量的界限(被称为“瓶颈盘负荷”)。并行恢复策略的容错性和可靠性也可以是可以被用于选择优选并行策略的性能度量。
在最简单的意义上,优选并行恢复策略可以通过评估可以重建故障盘的恢复策略的所有可能的组合而被确定。然而,由于码的恢复策略的数目可能非常大,因此以这种方式来确定并行恢复策略并不是高效的。因此,在本发明的一些实施例中,恢复策略算法可以通过基于某种所指定的界限(比如恢复策略的权重)对添加到该列表的恢复策略进行过滤来降低所考虑的恢复策略的数目(即恢复策略算法滤除依赖于超过预先定义的阈值的数目的符号的高权重策略)。
在给定符号的恢复策略列表的情况下,可以使用并行恢复策略算法来确定故障存储设备的所有并行恢复策略。再次,在最简单的意义上,并行恢复策略算法可以考虑每个符号s的所有恢复策略,并且确定所有可能的恢复策略组合的幂集P,其中幂集P中的每个元素p都是并行恢复策略。然后,并行恢复策略算法可以基于所期望的性能度量(比如加速和负荷)来评估每个元素p。加速被定义为并行策略p中的恢复策略的数目除以p中的出现任何一个符号的恢复策略的最大数目。负荷被定义为与在并行策略p中将被读取的数据相当的盘的总数,其通过将在p中的每个恢复策略上所使用的符号的总计数目除以p中的恢复策略的数目而被计算出。
根据本发明的一个实施例,由并行恢复策略算法针对加速和负荷所评估的恢复策略的组合的数目可以通过滤除幂集P中如下这样的并行策略p而被减小,对于所述并行策略p,p中的其中出现任何一个符号的恢复策略的最大数目受常数限制。该常数被称为瓶颈界限。瓶颈界限在滤除并行策略方面是有效的,因为加速度量是并行策略中的恢复策略的数目除以任何一个符号参与其中的恢复策略的最大数目。例如,如果瓶颈界限是“1”,则仅仅不相交的恢复策略被包括在并行策略中。因此,在该例中,加速仅仅只是构成该并行策略的恢复策略的数目。
再次参考表1中的伪代码,在给定恢复策略列表和特定瓶颈界限的情况下,函数enum_pp递归地枚举并行策略。在第一循环中,enum_pp函数将来自该列表中的每个恢复策略添加到并行策略并且然后递归。针对第一恢复策略,enum_pp的调用产生可以在不超过该瓶颈界限的情况下被添加到该并行策略的每个其它的恢复策略(即第二到最后一个策略),由此生成并行策略(以及进一步的递归)。当恢复策略列表用尽时,递归停止。在一个实施例中,可以使用直方图来确定将恢复策略添加到并行策略是否超过瓶颈界限。
为了识别最佳的并行策略,并行恢复策略算法以连续更大的瓶颈界限调用enum_pp,直到达到某一最大瓶颈界限为止。如在此所使用的那样,“最佳”或“优选”的并行策略是满足所期望的性能度量的策略。因此,“最佳”的策略将根据所选度量而变化。而且,可能存在多个最佳或优选的策略。
无论所使用的度量如何,由enum_pp所生成的所有并行策略然后被评估以找出满足所选度量的那些策略,举例来说,比如首先找出具有最大加速的那些策略并且然后找出具有最小负荷的那些策略。在其它实施例中,如果主导的度量是最小负荷,则并行策略算法的优先级可以被定义为首先考虑最小负荷并且然后考虑最大加速。表1中的函数best_pp示出了针对单个符号的恢复策略列表的该过程。在给定码中的每个符号的最佳并行策略的情况下,并行恢复策略算法然后可以在假定已经擦除单个符号的情况下计算所有符号上的平均加速和负荷。计算平均数所针对的是如下事实:纠删码常常被应用于被旋转的条带。
图6示出了由并行恢复策略算法为故障盘d 0所选择的并行策略600的例子。在图6中,(5,3)-平面码被实施在8个盘d0-d7上。如上面所讨论的那样,符号s0的恢复策略列表是在故障盘d0上的s0的基本恢复策略的列表:[(1,2,5),(1,3,6),(2,3,4,7),(4,5,6,7)]。恢复策略(1,2,5)在条带602上恢复d0上的s0;恢复策略(1,3,6,5)在条带604上恢复d0上的s0;恢复策略(2,3,4,7)在条带606上恢复d0上的s0;并且恢复策略(4,5,6,7)在条带608上恢复d0上的s0。在图6所示的并行策略600中,每个盘都是瓶颈盘,因为每个盘都参与两个恢复策略。因此,最佳或优选并行策略调度所有四个恢复策略。在该策略中,加速是2.0,其是通过将并行策略中所调度的恢复策略的数目(即4)除以每个瓶颈盘参与的恢复策略的数目(即2)而确定的。该并行策略的负荷是3.5,其是通过将组成策略(constituent plan)中的符号的总数(即3+3+4+4)除以组成恢复策略的数目(即4)而确定的。这意味着,需要3.5个盘的数据来恢复丢失的盘d0(即每个可用盘的一半在盘d0的重构期间被读取)。
上述恢复策略和并行恢复策略算法假设仅仅一个存储设备发生了故障。在其它实施例中,该算法可以被扩展为考虑多个故障。举例来说,如图7所示,可以实施条件恢复策略算法700,其在假定其它符号也已经丢失的情况下确定丢失符号的所有可能的条件恢复策略。根据该算法,为特定符号s生成的恢复策略(RP)的列表被考虑(步骤702)。针对该列表中的每个恢复策略中的每个其它符号s′,那些依赖于符号s′的恢复策略被滤除以提供符号s的以符号s′的丢失为条件的恢复策略(被称为RP(s,s′))的列表(步骤704,706,708)。该算法700可以被进一步扩展为生成以成对、成三元组等等的其它丢失符号为条件的条件恢复策略列表。使用枚举的条件恢复策略,条件并行恢复策略算法可以被实施,其枚举所有可能的条件并行恢复策略并且基于一个或多个所选度量(比如并行性和/或负荷)确定每个条件并行恢复策略的效力。
上述恢复策略和并行恢复策略算法还可以被扩展为实施多并行恢复策略算法800,其确定所有可能的多并行恢复策略(即根据某种调度并发地恢复多个丢失符号的策略)并且基于一个或多个所选度量(比如并行性最高的、负荷最小的、或其组合)确定每个多并行恢复策略的效力。举例来说,参考图8,为符号s和s′生成恢复策略列表(步骤802),并且并行策略p和p′的集合P和P′根据相应恢复策略列表而被生成(步骤804)。然后,在给定两个丢失符号s和s′的情况下,多并行恢复策略800一起考虑符号s的并行恢复策略的集合P和符号s′的并行恢复策略的集合P′。然后,算法800根据这些集合确定所有可能的多并行恢复策略的集合以及运行所述策略的调度(步骤806)。调度是符号s的恢复策略与符号s′的恢复策略的配对的列表,使得来自并行策略p和p′的并集的每个恢复策略发生正好一次。如果并行策略p和p′具有不同数目的恢复策略,则恢复策略的一些配对将含有仅仅单个恢复策略(即来自并行策略p和p′之中较长者的策略)。然后,可以为每个多并行恢复策略确定性能度量(比如加速和负荷)(步骤808)。在一个实施例中,最高效的多并行恢复策略可以通过如下方式确定:检查p和p′中的所有恢复策略并且识别共有最多数目的符号的那些恢复策略。对于多并行恢复策略而言,加速是所有丢失符号上的加速之和。负荷是调度的函数。举例来说,在给定被一起调度的恢复策略对(一个来自p、一个来自p′)的情况下,在两个恢复策略中都出现的符号被仅仅计数一次。因此,具有最低负荷的多并行恢复策略是共有最多数目的符号的策略的那些组合。
可以对于任何数目的丢失符号实施多并行策略。另外,用于减小使用并行恢复策略算法评估的并行策略的数目的上述技术还适用于多并行恢复策略算法。
应当理解,在此所述的并行恢复策略技术可适用于静态和旋转的码二者。对于旋转的码,不是识别整个存储设备的单个并行恢复策略,而是根据纠删码的符号在(一个或多个)存储设备上被旋转的方式来为所述设备的每个条块集合选择并行恢复策略。
上述软件的指令(包括上述的以及在表1和图4、5、7和8中被部分示出的恢复策略算法、并行恢复策略算法、条件恢复策略算法、条件并行恢复策略算法、以及多并行恢复策略算法)被加载以用于在处理器(比如图1的一个或多个CPU114-118)上执行。所述处理器可以包括微处理器、微控制器、处理器模块、或者子系统(包括一个或多个微处理器或微控制器)、或者其它控制或计算设备。如在此所使用的那样,“控制器”是指软件、硬件、或其组合。“控制器”可以指单个部件或多个部件(无论是软件还是硬件)。
(软件的)指令、数据、或者数据结构被存储在相应的存储设备中,所述存储设备被实施为一个或多个计算机可读或者计算机可用的存储介质(比如图1中的一个或多个存储器120-124)。所述存储介质包括不同形式的存储器,包括:半导体存储器件,比如动态或静态随机存取存储器(DRAM或SRAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、以及闪存;磁盘,比如固定盘(fixed disk)、软盘、以及可移动盘;包括磁带在内的其它磁介质;以及光学介质,比如致密盘(CD)或者数字视频盘(DVD)。注意:上述软件的指令、数据以及数据结构可以被提供在一个计算机可读或计算机可用的存储介质上,或者可替换地,可以被提供在分布在可能具有多个节点的大系统中的多个计算机可读或计算机可用的存储介质上。这样的(一个或多个)计算机可读或计算机可用的存储介质被认为是物品(或制造品)的一部分。物品或制造品可以指任何所制造的单个部件或多个部件。
在此描述的算法可以被实施为用于评估被实施在各个存储系统上的各个码的并行恢复策略的独立工具。也设想所述算法的其它应用,比如将所述算法作为管理工具嵌入到存储系统(比如系统100)中以周期性地识别一个或多个丢失符号的并行恢复策略、和/或以实时的方式提供对并行恢复策略的评估(例如,使得加速与负荷之间的平衡可以通过识别不同的并行恢复策略而动态地改变)。
在前述描述中,阐述了许多细节以提供对本发明的理解。然而,本领域的技术人员能够理解,本发明可以在没有这些细节的情况下被实施。尽管本发明是针对有限数目的实施例而被公开的,但是本领域的技术人员在得益于本公开的情况下能够理解本公开的许多修改和变型。旨在由所附权利要求来覆盖所有这样的落入本发明的实际精神和范围内的修改和变型。