在存储群集中的擦除编码和复制

申请号 CN201380043101.0 申请日 2013-06-04 公开(公告)号 CN104541251B 公开(公告)日 2017-09-05
申请人 卡林戈公司; 发明人 D.贝克; P.R.M.卡彭捷; A.克拉格; A.皮尔斯; J.林; R.特平; D.约亚克利;
摘要 群集接收 请求 来使用复制或擦除编码存储对象。群集使用擦除编码写入对象。清单被写入,其包括擦除编码的指示和每个段的独特的标识符。群集向清单返回独特的标识符。群集从包括独特标识符的客户端接收请求。群集确定对象是使用复制还是使用擦除编码被存储。如果使用擦除编码,则所述方法读取清单。该方法使用清单的独特段标识符标识在群集内的段。使用独特的段标识符,该方法重新构建对象。扫描另一磁盘的永久存储区以寻找故障磁盘的独特标识符。如果使用擦除编码,则标识先前存储在所述磁盘上的丢失的段。该方法 定位 其他段。丢失的段被重新生成。
权利要求

1.一种在存储群集中存储数字对象的方法,所述方法包括:
在所述存储群集的计算机节点处从客户端应用接收请求来存储所述数字对象;
确定是使用复制还是使用擦除编码来将所述数字对象存储在所述群集中;
当确定使用擦除编码存储所述数字对象时,使用擦除编码将所述数字对象写入所述存储群集的多个计算机节点,所述数字对象被存储为多个段;
创建清单计算机文件,其包括所述擦除编码的指示以及在所述存储群集内的针对所述段中每个的独特标识符;
在所述存储群集的计算机节点上存储所述清单计算机文件;以及
向所述客户端应用返回所述清单计算机文件的独特标识符。
2.如权利要求1所述的方法,还包括:
通过参考所述数字对象的固有属性、来自所述客户端应用的指令或所述数字对象的元数据,确定是使用复制还是擦除编码存储所述数字对象。
3.如权利要求1所述的方法,还包括:
在所述存储群集内复制所述清单计算机文件并且不使用擦除编码存储所述清单计算机文件。
4.如权利要求1所述的方法,还包括:
不在所述存储群集内复制所述数字对象。
5.如权利要求1所述的方法,还包括:
针对被存储在所述存储群集的磁盘上的每个段,与所述段相关联地在所述磁盘上存储下一磁盘的独特标识符,所述下一磁盘存储所述数字对象的另一段。
6.如权利要求5所述的方法,还包括:
通过在所述磁盘上的所述段的日志条目中存储所述独特标识符来存储与所述段相关联的所述下一磁盘的所述独特标识符。
7.一种从具有多个计算机节点的存储群集读取数字对象的方法,所述方法包括:
在所述存储群集内所述计算机节点中的一个处从包括针对所述数字对象的独特标识符的客户端应用接收请求;
确定所述数字对象是使用复制还是擦除编码被存储于所述存储群集内;
当确定使用擦除编码存储所述数字对象时,读取被存储在所述计算机节点中的一个上的清单,所述清单被所述独特标识符所标识;
使用在所述清单内找到的独特段标识符在所述存储群集内标识多个段;
使用所述段和擦除编码算法重新构建所述数字对象;并且
向所述客户端应用返回所述数字对象。
8.如权利要求7所述的方法,还包括:
通过参考所述清单确定所述数字对象使用擦除编码被存储。
9.如权利要求7所述的方法,还包括:
确定所述段中的一个不存在于所述存储群集内;以及
使用所述段中的其他段和擦除编码算法重新生成不存在的所述段。
10.如权利要求7所述的方法,还包括:
标识其中存储了所述段中的一个的第一磁盘;以及
读取针对其中存储了所述段中的另一个的第二磁盘的磁盘标识符,在所述第一磁盘上与所述段中的所述的一个相关联地存储所述磁盘标识符。
11.如权利要求7所述的方法,还包括:
在所述清单内标识第二擦除集合,所述第二擦除集合包括多个第二独特段标识符;以及
使用所述段、通过所述第二独特段标识符所标识的多个第二段以及所述擦除编码算法,重新构建所述数字对象。
12.如权利要求7所述的方法,其中在所述存储群集内复制所述清单,并且其中不使用擦除编码将所述清单存储在所述存储群集内。
13.如权利要求7所述的方法,其中在所述存储群集内不复制所述数字对象。
14.一种从故障磁盘恢复的方法,所述方法包括:
在具有多个计算机节点的存储群集内检测所述计算机节点中的一个的第一磁盘已经故障;
扫描所述存储群集的第二磁盘的永久存储区以寻找所述故障磁盘的独特标识符,所述独特标识符与所述存储群集的数字流相关联;
确定所述数字流是使用复制还是擦除编码被存储在所述存储群集内;
当确定所述数字流使用擦除编码被存储时,标识在所述故障的磁盘上先前存储的丢失的段;
在所述存储群集内定位多个其他段,所述多个其他段包括所述数字流;
使用所述多个其他段和擦除编码算法重新生成先前存储于所述故障的磁盘上的丢失的段;以及
在所述存储群集的计算机节点上存储所述重新生成的段。
15.如权利要求14所述的方法,还包括:
扫描所述数字流的元数据部分以寻找针对所述多个其他段的独特标识符。
16.如权利要求14所述的方法,还包括:
扫描所述第二磁盘的所述永久存储区包括扫描所述数字流的日志条目。
17.如权利要求16所述的方法,还包括:
通过参考所述日志条目确定所述数字流是否使用擦除编码被存储。
18.如权利要求14所述的方法,还包括:
在从存储群集之外接收针对使用擦除编码被存储于所述存储群集内的数字对象的请求之前,标识先前存储于所述故障的磁盘上的所述丢失的段,所述存储群集包括所述丢失的段。
19.如权利要求14所述的方法,其中在所述存储群集内不复制所述丢失的段。
20.一种在存储群集内重新定位段的方法,所述方法进一步包括:
标识在存储群集内的计算机节点的第一磁盘上的段,所述段是表示存储于所述存储群集内的数字对象的多个段的一个;
将所述段从所述存储群集的所述第一磁盘重新定位到第二磁盘,通过独特磁盘标识符标识所述第二磁盘;
从所述段的元数据取回针对所述多个段的同胞段的独特标识符,所述同胞段包括在其元数据中的针对所述第一磁盘的独特磁盘标识符;
使用所述同胞段的所述独特标识符在所述存储群集内定位所述同胞段;以及用针对所述第二磁盘的独特磁盘标识符替换在所述同胞段的所述元数据内的所述第一磁盘的所述独特磁盘标识符,由此所述同胞段的所述元数据指示所述段被重新定位到的第二磁盘。
21.一种在存储群集内转换数字对象的方法,所述方法包括:
在计算机节点的单个磁盘上的所述存储群集内将所述数字对象存储为连续比特流,所述数字对象具有在所述存储群集内的独特标识符;
在所述存储之后,标识指示将所述数字对象转换为擦除编码存储格式的需求的所述存储群集的元数据;
使用所述存储群集的计算机节点,从所述单个磁盘读取所述数字对象;
使用所述擦除编码存储格式,将所述数字对象写入所述存储群集的多个磁盘;以及针对以所述擦除编码存储格式写入的所述数字对象保留所述独特标识符,由此客户端应用可以使用所述独特标识符取回以所述擦除编码存储格式写入的所述数字对象。
22.一种在存储群集内转换数字对象的方法,所述方法包括:
在所述存储群集内以第一擦除编码存储格式存储所述数字对象,所述数字对象具有在所述存储群集内的独特标识符;
在所述存储之后,标识指示将所述数字对象转换为第二擦除编码存储格式的需求的所述存储群集的元数据;
使用所述存储群集的计算机节点,从所述存储群集读取所述数字对象;
使用所述第二擦除编码存储格式,将所述数字对象写入所述存储群集;以及针对以所述第二擦除编码存储格式写入的所述数字对象保留所述独特标识符,由此客户端应用可以使用所述独特标识符取回以所述第二擦除编码存储格式写入的所述数字对象。
23.一种在存储群集内转换数字对象的方法,所述方法包括:
在所述存储群集内以擦除编码存储格式存储所述数字对象,所述数字对象具有在所述存储群集内的独特标识符;
在所述存储之后,标识指示将所述数字对象转换为使用复制的存储格式的需求的所述存储群集的元数据;
使用所述存储群集的计算机节点,从所述存储群集读取所述数字对象;
将所述数字对象写入所述存储群集的计算机节点的单个磁盘作为连续比特流;以及针对作为所述连续比特流写入的所述数字对象保留所述独特标识符,由此客户端应用可以使用所述独特标识符取回作为所述连续比特流写入的所述数字对象。
24.一种从源存储群集将数字对象复制到目标存储群集的方法,所述方法包括:
在所述目标存储群集的目标节点处接收指令以将所述数字对象从所述源存储群集复制到所述目标存储群集,所述指令包括所述源存储群集的源节点的地址;
确定所述数字对象在所述目标存储群集中将被存储成的目标转换格式;
从所述源存储群集读取所述数字对象,所述数字对象以源转换格式被存储并且具有在所述源存储群集内的独特标识符;以及
使用所述目标转换格式在所述目标存储群集中存储所述数字对象,使用所述独特标识符存储所述数字对象。
25.如权利要求24所述的方法,其中所述目标转换格式不同于所述源转换格式。
26.如权利要求24所述的方法,其中所述源转换格式是复制或擦除编码。
27.如权利要求24所述的方法,还包括:
通过参考所述数字对象的元数据或者通过参考所述目标存储群集的设置,确定所述目标转换格式。
28.如权利要求24所述的方法,其中所述目标存储群集实现不同于所述源存储群集的存储格式。

说明书全文

在存储群集中的擦除编码和复制

技术领域

[0001] 本发明一般地涉及擦除编码。更具体地,本发明涉及在固定内容存储群集中的擦除编码和复制的组合,并且涉及当使用擦除编码时的卷故障恢复。

背景技术

[0002] 传统地,在存储群集中提供的存储(例如,通过使用独立节点的冗余阵列,或RAIN)相对于通过存储的对象的复制或存储的对象的擦除编码的硬件故障是可靠的。前者具有相同的独特标识符可以访问多个复制品(例如,使用日志和基于RAM的索引方案)的优势,但是具有高的带宽和存储开销(取决于期望的复制品的数量,大的对象可以占用显著量的空间)的缺点。后者享有针对类似级别的相对于介质故障的保护的较小的存储脚印以及较少的开销的好处,但是遭受的缺陷在于擦除集合的每个段是必须分离地标识的不同内容,以便读取对象或重新构建任何丢失的段。当重新启动存储群集时,该标识可能是特别有问题的。擦除编码在存储小的对象时也将招致较高的处理开销并且丢失其脚印优势。
[0003] 因此,两种技术都具有缺陷。进一步地,可应用于擦除编码的某些现有技术方法使用与存储群集分离的控制数据库,以便标识和跟踪特定对象的段;该方法时有问题的,因为其引入更多的开销,并且令人怀疑该控制数据库的可用性以及其是否需要被复制。此外,即使在擦除编码下可以使用被用于对该对象进行编码的段的子集来重新构建对象(例如,如果存在磁盘故障),不仅标识哪些片段不再存在是费时的,而且定位剩余的段也是费时的。
[0004] 相应地,期望改进的技术用于与存储群集一起使用,以便利用复制和擦除编码的优势,以及在硬件故障之后限制暴露。

发明内容

[0005] 为了实现前述内容,并根据本发明的目的,公开了组合对象复制和擦除编码两者以便利用各自的优点的存储群集。
[0006] 在一个实施例中,一种方法在存储群集中存储数字对象。首先,存储群集在存储群集的计算机节点处从客户端应用接收请求来存储数字对象。存储群集然后确定是使用复制还是擦除编码在存储群集中存储数字对象。可以通过参考来自客户端的指令、对象的固有属性、对象的元数据、群集设置或其他手段来做出该确定。当确定使用擦除编码存储数字对象时,存储群集使用擦除编码将数字对象写入到存储群集的多个计算机节点,并且数字对象被存储为多个段。另外,创建清单计算机文件,其包括擦除编码的指示以及在存储群集内针对每个段的独特标识符。存储群集然后将清单计算机文件存储在群集的一个或多个节点上,并且向客户端应用返回清单计算机文件的独特标识符。清单与其他数字对象是可区分的。
[0007] 在另一实施例中,一个方法从具有多个计算机节点的存储群集读取数字对象。首先,在存储群集内的计算机节点中的一个从包括针对数字对象的独特标识符的客户端应用接收请求。存储群集在对象被存储的节点中的一个上寻找被这样标识的对象。如果该对象不是如上文描述的清单,则它被返回到客户端应用。如果该对象是清单,则其接着使用在所述清单内找到的独特段标识符在存储群集内确定多个段。使用这些独特的段标识符,该方法使用段和擦除编码算法重新构建数字对象。最后,该方法向客户端应用返回数字对象。
[0008] 在另一实施例中,其中客户端应用希望以内容的新版本替换与独特标识符相关联的内容,本发明如在先前的段落中描述的那样运转以寻找对象,然后如之前段落中的那样写入它。新的版本将保留先前版本的独特标识符,但是具有较晚的创建时间戳,其在更新过程期间区分两个版本。一旦较新的版本被成功写入群集中,就旧的删除较旧的版本。健康处理模也可以删除针对其较新的版本存在的对象的较旧的版本,作为从错误状态维持群集数据的一种方法。
[0009] 在另一实施例中,一种方法从故障的磁盘恢复。首先,该方法在存储群集(具有多个计算机节点)内检测节点中的一个的磁盘已经故障。接下来,该方法扫描存储群集的另一磁盘的永久存储区以寻找故障磁盘的独特标识符;该独特标识符与存储群集的数字流相关联。然后确定所述数字流是使用复制还是使用擦除编码被存储在存储群集内;当确定数字流使用擦除编码被存储时,该方法标识先前存储在故障磁盘上的丢失的段。使用来自所述数字流的同胞标识符,该方法在存储群集内定位多个其他的段。接下来,该方法使用多个其他的段和擦除编码算法重新生成丢失的段。最后,该方法将重新生成的段存储在存储群集的计算机节点上。
[0010] 在另一实施例中,段可以在存储群集内被重新定位,而不需要额外的控制计算机或控制数据库。当段被重新定位时,在同胞段的元数据中更新在其上游同胞段中的卷提示。替代地,在磁盘上的其日志中的同胞段的流的表示中更新卷提示。存储群集可以广播同胞段的独特标识符以便寻找同胞段所位于的磁盘。清单也可以被用于寻找上游段或者被重新定位的段的同胞段。
[0011] 在其他的实施例中,以对象存储元数据或者在指示何时应将对象转换为不同的格式的群集设置内存储元数据。当触发条件被满足时,群集将对象从使用复制的存储转换成擦除编码格式,从一种擦除编码格式转换成另一种,或者从擦除编码格式转换成复制存储格式。以其旧的格式的原始对象如果期望的话可以被删除。有利的是,与原始对象一起使用的独特标识符被保留用于与以新的存储格式的对象一起使用,因此,确保原始存储所述对象的客户端应用可以使用与其提供的原始的独特标识符在任何未来的时间处取回它。
[0012] 在另一实施例中,对象可以从实现一种存储格式(如,复制、具体的擦除编码等)的存储群集被移动到并不一定使用实现存储格式的第二个存储群集。当被移动时,对象将被自动转换成由第二个群集所使用的存储格式。对象的转换可以通过在第二个存储群集中的默认设置来指示,通过对象的用户元数据(其胜过群集设置)来指示,或者通过来自发起移动的程序的指令来指示。
[0013] 一般地,在本发明的任何实施例的情况下,不需要额外的控制数据库。本质上,存储在群集内的数字对象可以使用其独特标识符被写入、读取和管理,不论对象采样是使用复制还是使用擦除编码被存储。附图说明
[0014] 本发明连同其进一步优点可以通过参考与附图相组合的以下描述被最好地理解,其中:
[0015] 图1图示了本发明操作的环境。
[0016] 图2图示了使用5:7擦除编码的针对对象的示例擦除集合。
[0017] 图3呈现了可以被用于本发明实施例的示例清单。
[0018] 图4A和4B是描述客户端应用如何将文件写入存储集合的流程图
[0019] 图5是描述客户端应用如何从存储群集读取数字对象的流程图。
[0020] 图6是描述存储群集可以如何从卷故障中恢复的流程图。
[0021] 图7是描述如何将对象从一种格式转换到另一格式的流程图。
[0022] 图8是描述如何执行跨存储群集的管理的流程图。
[0023] 图9A和图9B图示了适于实现本发明的实施例的计算机系统

具体实施方式

[0024] 如本领域已知的那样,擦除编码是用于在没有复制的开销的情况下提供数据对象的冗余的技术。给定特定的数据对象,擦除编码将对象分为K个数据段并且从这些数据段生成P个奇偶校验段,针对在擦除集合中的总共M个段,通常指示为K:M擦除编码。例如,数据段被分为5个段,这些段然后被用于生成2个奇偶校验段,被称为使用5:7擦除编码。擦除编码的关键性质在于可以从任何K个段重新构建原始对象,无论擦除编码的对象的段是原始数据段还是奇偶校验段中的一个。相应地,将每个段分发到在存储群集内不同的卷(并且分发到不同的节点)因此保护数据对象防止在群集内的任何两个卷丢失是有利的。在群集中给定足够的节点,段被分布到不同的节点,提供防止节点丢失的保护。如果节点被定位在不同的地理区域中,则段以某种可能的程度被均匀地分布在将保护的各区域之中,以防止在一个地理场所中的群集的一部分的丢失。
[0025] 在一个实施例中,本发明允许使用复制或使用擦除编码存储对象。取决于来自客户端应用的指令、对象的类别、对象的大小、对象的元数据等,群集可以以每个对象的基础来回切换。例如,相对较大的对象都可以使用擦除编码来存储,而相对较小的对象都可以使用复制来存储。普通的复制可以被视为擦除编码的一种特例,其中K=1并且其中M等于给定对象的复制品的总数。此外,不同的对象可以被分派不同的擦除编码。在非常大的对象的情况下,若干这样的擦除集合可以被用于表示该对象。通过允许不同对象被分派包括普通的复制的不同的编码,本发明允许防止数据丢失的不同级别的保护,以不同的处理成本和存储脚印。
[0026] 在第二个实施例中,本发明在擦除编码下尝试标识和寻找对象的段的情况下解决了所述问题。代替使用分离的数据库,清单文件(或对象)包括与特定对象相关联的每个段的描述。在清单内包括在群集内的针对每个段的独特标识符、每个段的大小,其中针对所述对象使用编码算法以及具体的擦除编码(5:7,等)。然后将清单对待为在群集内的普通对象,被提供以独特的标识符,并且按需要被复制(例如,被复制到相同的冗余度,P+1)。清单的复制是简单的,因为群集已经针对其他对象执行了复制,并且具有小的存储开销,因为清单在大小上相对较小。因此,经由清单,特定的擦除编码的对象的段是快速并且容易可访问的。针对该清单对象的标识符被返回到客户应用用于对象的未来的取回。这提供了擦除编码的有效脚印,同时保持了简单的标识、高可用性以及普通复制的快速启动。
[0027] 在第三个实施例中,本发明通过最小化在硬件故障之后、在重新生成所有丢失的段之前的时间,解决了在存储群集内对数据丢失的暴露。擦除编码的对象的每个段包括关于在保持对象的下一段的群集内的卷标识符的提示。该提示有可能是正确的卷标识符,但是可能不被保证。硬件故障(诸如硬盘故障)一发生,并且在注意到特定的段丢失之前,在群集内的每个卷就将扫描在磁盘上的其日志,以便寻找具有作为其提示的针对故障的卷的卷标识符的段。因此,在等待群集的任何正常的完整性检测发生之前,任何丢失的段可以被标识并且可以被尽可能快地重新生成。
[0028] 存储群集示例
[0029] 如上文所提及的那样,本发明应用于数字化对象,即以数字形式表示的任何类型的信息。例如,数字对象可以是信息的电子表示,诸如计算机文件、文件组,文件标识符的组或者数据或数据库信息的收集。这样的其他的数据的收集包括来自数字音频或视频流或者剪辑、数字照片、扫描的纸质文档、语音信息、CAD/CAM设计、MRI或X射线数据、来自消息记录或文件的流、来自系统的审计或状态日志的日志条目、电子邮件存档、检查图像等。本文经常使用术语“计算机文件”来包含信息任何的电子表示。
[0030] 本发明可以使用任何合适的计算机硬件和软件来实现,并且可以被实现在包含任何数量的网络节点的存储群集上。优选地,每个节点包括CPU(或多个CPU)、操作系统、到其他节点的通信链路(或至少到中央路由)以及经常被称为卷的任何数量的内部硬盘驱动或固态驱动(如,从零到N个)。通常,每个节点包括至少一个驱动,并且可以存在硬盘驱动连同固态驱动的任何组合。存储群集通常是固定内容的群集,意味着其被用于备份、长期存储、归档等,并且通常不被用于每天访问的计算机文件。经常被称为WORM(一次写入,多次读取)存储,这意味着一旦计算机文件或数字对象被写入群集,它就不能被改变。(当然,所述文件可以被删除,并且所述计算机文件的修改的版本也可以被存储在群集内。)群集可以实现为独立节点的冗余阵列(RAIN),意味着每个节点运行其自己的操作系统并且做出关于在群集内的存储的独立的决定。可以在叶片(blade)、塔架、个人计算机和服务器上建立存储群集。替代地,在单个计算机箱内的多核处理器可以支持在每个核上运行的虚拟存储节点,意味着具有多个节点的存储群集可以存在于单个计算机箱中。进一步地,在单个物理箱内部的计算机系统可以包含多个CPU,在这种情况下,每个CPU可以表示节点,并且存储群集可以被实现在单个物理箱内。
[0031] 图1图示了针对本发明的操作的环境100。包括了存储群集120、客户端应用130、管理控制台140、任何数量的计算机节点10-50以及中央路由器170。如上文提及的那样,计算机节点通常是优选地包括至少一个CPU和任何数量磁盘驱动160、固态驱动或具有两种类型的混合驱动的物理文件服务器。在一个特定实施例中,存储群集120可以进一步被逻辑地或物理地划分为子群集。例如,节点40和50可以被视为一个子群集,而节点10、20和30可以被视为第二子群集。在一个子群集定位于不同于另一子群集的地理位置中的情况下,将群集划分为子群集可以是有优势的。
[0032] 每个节点实现诸如Debian Linux的操作系统并且执行进程来管理在节点间的点对点通信,以执行健康处理,并且代表节点及其卷做出独立的决定。每个节点也包括管理软件,并且其状态可以经由在因特网上的web浏览器查看。在一个特定的RAIN实施例中,每个节点是具有1百万兆字节或更多的串行ATA磁盘存储容量和标准以太网联网的1U服务器(例如x86计算机)。每个节点有IP地址并且可以使用基于IP的LAN、MAN或WAN被物理互连。因此,每个节点可以使用路由器170或其他类似的网络交换机与单个节点交谈或者向在存储群集内的所有节点广播信息(多播)。
[0033] 每个节点包括管理模块用于处理来自客户端应用的外部请求(例如来自客户端130的SCSP请求)、在节点之间的复制请求(例如interSCSP请求)以及其他节点间协议通信(竞价,针对信息的请求等)。健康处理模块管理每个节点的数字内容。管理控制台140优选地是链接到存储群集的Web服务器,其允许对在任何合适的因特网连接上的每个节点的访问。每个节点实现冗余管理控制台,其可以被用于查看和管理整个群集。在某些实施例中,所有节点被视为平等并且通过向在群集内的其他所有节点周期性广播(或“多播”)它们的相关信息来彼此通信。
[0034] 在一个实施例中,可以使用从Texas的Austin的Caringo, Inc.的可获得的内容存储软件(如本文所述修改的那样)以及任何合适的计算机硬件来实现存储群集。在该实施例中,存储群集实现固定内容的内容可寻址的存储,并且每个数字对象在群集内由使用随机数生成器针对该数字对象生成的随机数(通用独特标识符,或UUID)独特地寻址。可以使用散列函数来验证每个数字对象的内容。当在群集中存储数字对象时,客户端软件应用接收UUID,并且通过向群集供应所述UUID来取回数字对象。软件应用使用标准HTTP1.1与CAStor群集通信,并且更具体地,使用被称为简单内容存储协议(SCSP)的标准的简化的子集。使用该标准接口,诸如电子邮件、企业内容管理、健康保健应用、Web浏览器、Web 2.0站点、照片共享、社交媒体站点、安全视频、视频编辑等的客户端应用可以访问CAStor存储群集,以便存储文件、取回文件或删除文件。进一步地,针对浏览器、JAVA、Python、C ++和其他软件环境,直接HTPP访问是可用的。
[0035] 在一个实施例中,按以下方法将数字对象存储在特定节点上。每个节点包括在RAM列表中的磁盘索引,其中数字流包括基于其独特标识符存储在磁盘上的对象。例如,索引的第一列列出了对象的独特标识符,第二列列出了流开始于哪个扇区,并且第三列列出该流的长度或其在哪个扇区结束。流可以包括数字对象以及相关的元数据。相应地,将被存储在节点上的对象可以被简单地顺序地写入磁盘,并且它们的位置被记录在RAM索引中。或者,对象可以使用任何合适的存储算法被存储在磁盘上的任何位置,并且对象的位置也将被记录在索引中。当对象将被读取或删除时,可以通过查阅该索引来寻找其在磁盘上的位置。为了促进在重新启动节点时建立该RAM索引,被存储在永久存储记录内的节点的日志记录无论何时对象被添加或删除,并且包括针对对象的独特标识符、其开始扇区、其以扇区或字节为单位的长度以及如下所述的其他信息。相应地,当节点被重新启动时,在日志中的信息被读取并且被用于在RAM中创建磁盘索引。代替使用日志,建立索引的另一技术是在重新启动时读取整个磁盘以便收集必需的信息,尽管这将更费时。
[0036] 如在上文引用的“Two Level  Addressing in  Storage  Clusters”和“Elimination of Duplicates in Storage Clusters”中描述的那样,对象可以被存储并且删除重复项。
[0037] 擦除集合示例
[0038] 图2图示了使用5:7擦除编码的针对对象的示例擦除集合200。如示出的那样,原始对象的数据被分离为五个数据段(k1-k5)210-218,从其生成两个奇偶校验段(p1和p2)220和222。在一个实施例中,数据被写入,并且在条(st1-st9)231-239中生成奇偶校验。例如,第一条231由原始数据251-255组成,从其生成奇偶校验数据256和257。任何剩余的数据形成于最终剩余条(rem)240中,并且散列元数据可以被存储于部分270的每个段的末尾。
[0039] 如之前提及的那样,将被存储于群集内的对象(或流)可以被分成给定大小的若干擦除集合,为了性能选择所述大小。例如,非常大的对象可以被分成若干擦除集合。在擦除集合内,使用条写入K个数据段和P个奇偶校验段,其中固定大小的数据块被连续写入K个数据段中的每个,并且然后生成奇偶校验块并将其写入P个奇偶校验段的每个,每个条(跨K+P个段)充当擦除编码单元。在段中的最后一条(例如,剩余条240)可以具有可以被容易地计算的较小的块大小。条通常被写入直到输入数据被耗尽为止,或者直到擦除集合的给定大小被填满为止,后续的数据开始新的擦除集合。
[0040] 在具体的实施例中,来自单个写入操作的数据以固定大小的块(例如32k字节)被写入跨擦除集合的全部K个段的条中。换言之,块1、K+1、2K+1等被写入第一段210,块2、K+2、2K+2等被写入第二段212,等等。P个奇偶校验块被同步地生成,作为每条数据生成的一部分,并且被递增地写入在每条的末尾处。条带化(striping)允许以可预测的存储器开销同步生成奇偶校验段,并且还允许分块编码的流的写入,其在写入操作的开始处通常不提供内容长度。当然,原始数据对象不需要被分成带以便执行擦除编码,但是这提供了某种效率,因为可以针对每个条生成奇偶校验段并且然后移动到下一条。替代地,如果不使用条带化,则第一数据段210将包括在数据对象内的第一个数据块,第二数据段212将包括数据块的下一个集合,等等。在该集合中的每个段的末尾处是针对每个段的元数据270,其包括针对该段的MD5散列值。例如,每个散列值为16字节并且在没有分隔符的情况下写入。
[0041] 擦除集合的每个段是不可改变的流,每个都具有其自己的独特标识符,正如群集的任何其他流那样。每个擦除段也包含附加报头280,其包含关于在擦除集合中的其他段的元数据,诸如其清单的独特标识符,并且所有的数据的独特标识符和奇偶校验段按次序。每个段的自己的独特标识符将标识在其同胞的集合中的位置。针对每个段的报头也将包括系统元数据,诸如段定位在其处的卷标识符以及针对擦除集合的下一段的可能的卷标识符(卷提示)。例如,段k4包括段k5定位在其处的卷标识符,段p2包括段k1定位在其处的卷标识符等。优选地,作为较大流(表示单个对象)的一部分的每个擦除集合将具有相同的擦除编码,例如针对所有擦除集合的5:7编码。
[0042] 在写入操作期间,示出的七个段中的每个将使用群集的七个不同节点被并行地写入,因此提供节点或卷可能故障的数据保护。一旦段被写入卷中,就可以像在群集内的任何其他流一样处理它(除了卷和其内容、其恢复过程以及其不需要被复制的事实之外)。
[0043] 清单示例
[0044] 图3呈现了可以被用于本发明实施例的示例清单300。如之前所提及的那样,一旦擦除编码已经被用于将数据对象编码为任何数量的段(取决于所使用的编码),针对那些段的独特标识符就可以被存储于清单内(其自身是存储于群集内的对象,并具有自己的独特标识符)用于之后取回。
[0045] 被包括在每个清单内的是元数据部分310、至少一个擦除集合340和任何数量的其他擦除集合380。当然,在清单内表示的擦除集合的数量取决于数据对象的大小、每个段的大小以及所使用的编码方案。清单的部分312提供了所使用的擦除编码算法的名称及其版本号。具体擦除编码在部分314中示出,在段内的每个数据块的大小(条的宽度)在部分316中示出。在该元数据部分中的其他信息包括对象被写入的时间、其独特标识符、其所有权以及由应用指定的元数据。
[0046] 第一擦除集合(或者唯一的擦除集合)的表示包括其大小342、被用于该擦除集合的擦除编码344、段宽度346(以字节为单位)以及总的段大小348(以字节为单位)。诸如编码和段宽度的信息也可以在每个擦除集合内以及在元数据部分310中存在以便提供灵活性,或者这样的数据仅可以在一个区域中存在。
[0047] 第一擦除集合也包括在该擦除集合中的针对每个段的独特标识符。例如,部分350示出在第一擦除集合中的段的独特标识符。如所提及的那样,清单可包含一个或多个擦除集合。在该情况下,可以包括第二擦除集合380的表示以及任何数量的其他擦除集合的表示。第二擦除集合示出了编码的大小(其可以不同于第一集合),以及与第一擦除集合类似的信息。第二擦除集合可以使用与第一集合相同的编码以及段宽度和段大小,但是这不是一般的要求。
[0048] 任何附加的擦除集合将包括针对被包括在该擦除集合内的所有段的独特标识符。优选地,清单它们自己被复制,并且不被擦除编码。这将不会损伤空间效率,因为清单仅使用数据对象的空间的针对其是清单的一小部分。另外,为了提供相同的保护以防止在擦除集合的擦除编码时的同时的磁盘故障,使用K:M (P=M-K)编码的数据对象的清单应具有至少为P+1的重复的总次数。
[0049] 向群集写入数字对象
[0050] 图4A和4B是描述了客户端应用如何向存储群集写入文件(数字对象)的流程图。在步骤404中,任何合适的客户端应用130期望在存储群集120中存储数据对象(诸如任何计算机文件、数字图像、数字电影、健康记录等)。客户端应用发现或获得在群集内的节点10-50中的一个的IP地址并选择该节点作为主要访问节点(PAN),以该节点开始存储过程。通常,客户端应用将访问被用于其写入的下一请求的最后一个节点。客户端应用向PAN发送存储数字对象的请求。在一个实施例中,该请求是HTTP POST请求,其包括报头,长度以数字对象的字节为单位,以及对象自身。从PAN到客户端的对该请求的响应将是以下内容中的一个:是(yes),PAN可以促进存储所述对象;否(no),这有更好的节点来存储所述对象;或者,否(no),在该群集内没有节点可以存储该对象。
[0051] 假设PAN将促进存储对象,客户端已经传递了将在该时刻被存储的数字对象,尽管可能要等到被选择用于存储的次级访问节点(SAN)来传递对象。如果对象最初没有被传递,则客户端可以传递对象元数据,诸如对象的大小、期望长期或短期存储,以及该对象在未来是否将被频繁访问(所有这些都可以有助于存储节点的选择),以及可选的所述对象的文件名。某些客户端要求针对所述客户端在群集内存储的对象使用分层或任意的文件名,并且在这些情况下,散列值可以从这样的文件名导出并且被用作独特标识符。
[0052] 虽然,与本发明更相关的是可以被用于确定是使用复制还是擦除编码存储对象的对象元数据。在写入请求的情况下,或者在对象元数据中,客户端应用可以指定该对象应当使用复制或擦除编码被存储(并且也可以指定特定的擦除编码)。事实上,客户端可以指定使用复制或擦除编码存储将被写入的所有对象。在没有来自客户端的具体指令情况下,本发明可以使用各种信息的任何,以便决定针对对象是选择复制还是选择擦除编码。例如,对象的大小可以被使用(使用擦除编码被存储超出某个长度的对象),对象的类型可以被使用(图像文件、文本信息、健康记录等),对象所有权以及预期的寿命。在下文讨论被用于确定何时以及是否在写入之后转换对象的附加的元数据。
[0053] 在步骤408中,一旦次级访问节点(SAN)已经被选择,SAN就决定是使用复制还是擦除编码以便存储当前对象。如上文所提及的那样,SAN可以使用来自客户端应用的指令或者可以使用基于对象元数据的任何合适的规则以便做出该决定。在一个特定实施例中,数字对象的大小被用作标准,或者具体地,大小小于10兆字节的对象将被复制,但是任何较大的对象将使用擦除编码被存储。一般地,可以被用于确定是使用复制还是擦除编码的信息包括:由群集管理员设置的存储群集的任何规则或设置;对象本身或其元数据的任何固有属性;以及询问的性质或来自客户端应用的任何指令。如果选择复制,则在步骤412中SAN从在群集内的节点请求并接收任何数量的写入竞价,用于所述数字对象的写入。
[0054] 如果SAN具有最低的竞价,则它通过发送“继续”消息回到客户端应用来响应。在响应于此,客户端向SAN发送数字对象,并且SAN存储数字对象,计算独特标识符,并向客户端应用返回该标识符。另一方面,如果SAN竞价失败,则SAN将客户端应用重新导向到具有最低竞价的节点,该节点然后将处理所述请求。客户端应用然后向该节点发送相同的写入请求,并且节点通过发送“继续”消息回到客户端应用来响应。响应于此,客户端向节点发送数字对象,并且节点存储数字对象,计算独特标识符并且将该标识符返回给客户端应用。可以如由此通过引用而并入的标题为“Adaptive Power Conservation”的申请No.12/839,071中描述的那样执行写入竞价的计算。替代地,数字对象可以如上文在标题为“Two Level Addressing in Storage Clusters”的申请中描述的那样被写入。在对象已经被写入之后,其可以立即被复制到不同的节点,次数多达所需要的,或者群集可以等待周期性完整性检测,以便复制对象,。
[0055] 另一方面,如果擦除编码被选择用于在群集内存储对象,则在步骤416中,SAN发行针对来自在存储群集内的所有节点的写入竞价的请求。一旦SAN已经确定将被使用的具体的擦除编码(K:M,基于客户端指令、对象元数据或者群集系统设置或常量),它然后就将选择M个节点来用于存储数字对象的数据和奇偶校验段。优选地,SAN选择具有最低成本的竞价的节点,尽管也可以使用其他技术,诸如最佳性能、最低功耗或其他标准。
[0056] 在一个实施例中,为了减小险,可以在物理分离的不同的子群集内选择节点,以便确保如果一个子群集丢失,则可以从在剩余的子群集内的段重新生成整个对象。例如,给定三个子群集,对象以4:6编码,将使得其段是分布式的,使得两个被存储在三个子群集中的每个中。任何一个子群集的丢失留下四个段,足以重新构建所述对象。针对不同数量的子群集,类似的方案是可能的。
[0057] 接下来,在步骤420中,存储对象的第一数据段的第一节点将被指定,并且该节点将执行多个步骤,以便准备在不同节点上的到数据和奇偶校验段中的对象的擦除编码。例如,SAN将为在擦除集合中的所有数据和奇偶校验段选择独特标识符(例如使用随机数生成器),将向M个节点接受者设立分块编码的POSTS,并且将在写入的开始处确定最大的段大小,其将限制该擦除集合的大小。可以通过参考存储群集设置来确定最大的段大小。每个节点响应于SAN,返回针对其段的卷信息。
[0058] 接下来,在步骤424中,客户端应用开始向SAN传送数据对象,所述SAN将把数据按条写入在不同节点上的每个数据段,并且将使用合适的擦除编码算法计算奇偶校验段的数据。在一个实施例中,已经发现Zfec算法是工作良好的。例如,参照图2并假设5:7编码,接收的对象的第一32k块将被写入在第一节点(SAN)上的数据段210,第二32k块将被写入在第二个节点上的数据段212,等。在第五数据块已经被写入第五节点之后,将计算两个奇偶校验块,并将其存储在群集中的最后两个被选择的节点中的段220和222中。继续从客户端应用读取数字对象,并且所述数字对象被逐条写入在存储群集中的M个被选择的节点,直到达到了对象的末尾或者达到了段的末尾为止,测试428。如果存在将被写入的不完整的数据块,则剩余的条240可以被写入,如示出的那样。一旦到达段的末尾(但是在对象中的剩余数据仍然需要被写入)或者整个对象已经被写入M个段,则控制移动到图4B的步骤432。
[0059] 接下来,在步骤432中,SAN基于每个段的数据可选地针对每个段计算散列值,并向正在向它们的卷写入段的所有被选择的节点发送这些值270(例如)作为尾随数据。每个节点将比较来自SAN的该接收的散列值与在磁盘上其针对其已经在它的卷中的一个上存储的段计算的一个。
[0060] 接下来,在步骤436中,将针对每个段确定和存储擦除编码的卷提示。例如,在其处存储段216的卷标识符将被写入段214的系统元数据,因此确保以环状方式,每个段存储下一个段的可能的卷标识符。优选地,当使用POST请求写入每个段时,从SAN传输卷提示。另外,卷提示也可以被写入每个卷的日志中。换言之,一旦擦除集合已经被写入到任何数量的节点,针对在其处已经存储了给定段的特定卷的日志条目将被更新以包括在其处存储对象的下一段的卷标识符。
[0061] 步骤440确定了是否存在来自数字对象的更多数据以写入到存储群集中。如果是这样的话,则在步骤444中,新的擦除集合开始。在这种情况下,SAN将请求来自整个群集的写入竞价,以便确定将接受数据和奇偶校验段被写入到它们的卷的M个节点。控制然后移动到步骤416,以便针对该数字对象写入下一擦除集合。
[0062] 如果不存在更多的数据来写入,则在步骤448中,针对该擦除集合的清单被写入。如图3中所示,清单将包括元数据部分和针对擦除集合中的每个的部分。例如,针对每个擦除集合的每个段计算独特标识符(散列值、随机数等)并且所述独特标识符被存储在部分
350中。该独特标识符可在步骤416中或之后(随机数的情况下)计算,或者在步骤428中或之后(散列值的情况下)计算。清单将被写入到群集中的任何节点并且像被写入到存储群集中的任何流一样被对待。换言之,将针对清单计算独特标识符,并且清单将被复制到在群集内的不同节点。优选地,清单在群集内总共被复制P+1次。最后,针对清单的独特标识符被返回到客户端应用,使得客户端应用在执行读取操作时,可以在未来访问其数字对象。
[0063] 从群集读取数字对象
[0064] 图5是描述了客户端应用如何从存储群集读取数字对象的流程图。有利地,客户端应用不需要知道存储群集使用哪种技术(复制或擦除编码)来存储数字对象。通过简单地针对数字对象使用独特标识符(由存储群集先前供应),客户端应用可以在不需要依赖任何外部数据库或控制系统的情况下从群集取回对象。事实上,客户端应用将不知道独特标识符是表示在群集内已经被复制的对象,还是表示指示已经使用擦除编码来在群集中存储对象的清单。
[0065] 在步骤504中,客户端应用可以做出存储群集的请求以返回被独特标识符所标识的特定数字对象。这可以使用SCSP FET请求或类似的HTTP协议来实现。客户端应用向存储群集中的任何节点(其变成主要访问节点)供应标识符。接下来,在步骤508中,PAN向在群集内的所有节点广播消息,寻找具有特定独特标识符的对象。在该点处,独特标识符是否表示实际的对象或清单对于PAN也是透明的。
[0066] 由于实际对象和清单两者将在存储群集内被复制,所以PAN将接收对其广播请求的多个响应。在一个实施例中,具有对象(或清单)的复制品的每个节点计算读取竞价(读取数字对象的成本);PAN选择具有最低读取竞价的节点,将客户端应用重新导向到该节点,并且该节点然后变成二级访问节点(SAN)。通过查看找到的对象(实际对象或者对象的清单)的系统元数据,SAN将知道已经使用了复制还是擦除编码。
[0067] 相应地,在步骤510中,SAN确定是否它持有实际数字对象(因为已经使用复制)或者是否它持有实际数字对象的清单(因为已经使用擦除编码)。如果已经使用复制,则在步骤512中,SAN可以简单地向请求的客户端应用返回数字对象并且所述方法结束。替代地,如果已经使用擦除编码并且SAN持有清单,则在步骤516中,SAN开始请求群集的段的过程,以便重新装配所请求的数字对象。使用清单的元数据,SAN知道所使用的擦除编码算法以及具体的擦除编码(例如5:7)。优选地,由于仅第一K个数据段对于重新装配数字对象是必须的,所以SAN使用在清单的部分350中找到的独特标识符广播仅针对第一K个数据段的请求。如果成功,则控制移动到步骤528。
[0068] 然而,如果任何这些第一K个数据段丢失(步骤520),则将广播针对任何所需的奇偶校验段的请求。例如,如果原始数据段中的两个丢失,则必须使用来自清单的独特标识符广播针对奇偶校验段中的两个的请求。如果找到了所需要的数量的奇偶校验段,则在步骤524中,使用合适的擦除编码算法以及找到的奇偶校验段重新生成丢失的数据段(或多个段)。在一个实施例中,丢失段的散列值将被计算并与原始值比较。或者,也可能通过将所生成的块作为输入与来自段1到(K-1)的块一起使用来生成块K并且将该块相对于原始的进行比较,以验证针对每个条的数据。虽然,如果不能找到K个段,则错误消息被返回到客户端应用。
[0069] 假设K个段被找到或者被生成,则在步骤528中,SAN确定(使用清单)是否存在将获得的另一擦除集合。如果不是这样的话,则控制移动到步骤532。如果是这样的话,则控制移动到步骤516,并且SAN使用在针对清单的第二擦除集合的相应部分中找到的独特标识符,开始请求第二擦除集合的必需的段的过程。在步骤532和536中,SAN整理针对其已经取回的每个擦除集合数据和/或奇偶校验段,以便重新构建原始数据对象。例如,当在群集内的节点上找到必需的K个段时,SAN将数据从这些段读取到其存储器中,并应用适当的擦除编码算法以便在SAN上重新构建原始数据对象。优选地,随着对象的每个条被取回或重新构建,该数据经由HTTP被逐字节地馈送到客户端应用。如果存在多于一个的擦除集合,则SAN使用下一擦除集合来重新构建数字对象的下一部分,并且将下一擦除集合的字节反馈到客户端应用。替代地,SAN可在将对象发送回客户端之前,在其自己的存储器中装配整个对象。
[0070] 从卷故障恢复
[0071] 图6是描述了存储群集如何从卷故障恢复的流程图。如上文提及的那样,存储群集包括任何数量的计算机节点,每个节点具有任何数量的硬盘或固态硬盘,其被称为卷。存储群集通常通过在不同的节点上存储对象的不同复制品(当复制被使用时)或通过在不同的节点上存储对象的各种数据和奇偶校验段(当擦除编码被使用时)来实现数据冗余。因此,如果节点的磁盘故障,则任何数量对象的多个复制品和段将丢失,因此降低整个存储群集的所谓数据冗余。进一步地,判断存储群集的质量不仅通过其可以承担多少卷的丢失,而且通过当卷故障时群集可以恢复丢失的数据的快速程度。相应地,图6呈现了一种技术,其当存在使用复制(复制品)和擦除编码(段)存储的对象的混合时,不仅可以处理故障的卷恢复,而且可以尽可能快的恢复丢失的段。如果整个节点故障,则对已经故障的节点上的每个卷执行以下技术。
[0072] 在步骤604中,群集的节点注意到其磁盘中的一个已经故障。在一个实例中,一旦在正常业务过程中节点已经与卷通信,该节点就将希望周期性地从该卷得到消息。如果不是这样的话,则节点将向其所有的卷广播消息寻找丢失的卷。如果不存在响应,则该节点假设该卷已经故障。在另一实例中,由于维护、群集的移动等,存储群集可以被完全关闭。当群集被恢复时,可能卷将故障但是节点可能不会注意到,因为它之前没有从该卷得到消息。在这种情况下,节点的健康处理模块可以协助。健康处理模块周期性地检查在每个卷上的所有流的完整性;当其检测到特定流的卷提示(卷的独特标识符)时,它将寻找该卷。如果没有找到,则节点将再次假设该卷已经故障。用于检测卷已经故障的其他技术可以被使用。
[0073] 接下来,在步骤608中,一旦已经获得了已经发生故障的卷的独特标识符,在群集内的每个节点就被导向以扫描其正在运转的所有的卷,以便标识包括针对丢失的卷的卷提示的流。优选地,已经标识其丢失的卷的节点向所有其他的节点发送广播消息(包括卷标识符)请求搜索具有针对丢失的卷的提示的流。此外,出于有效性,节点将并行执行搜索。在一个实施例中,每个卷已经记录在磁盘上的日志被扫描,并且每个流表示被分析以确定其包含的卷提示。因为表示擦除编码的对象的段的在日志中的每个流表示包括针对下一段的卷标识符,所以包括针对丢失的卷的卷标识符的任何这样的被标识的流也将指示在丢失的卷上的段。例如,如果图2的段222的流表示包含卷提示,该卷提示是针对丢失的卷的卷标识符,则这意味着段210在该卷上并且需要被重新生成。另外,在日志中被复制的流的表示将包括针对该流的所有复制品指示卷标识符的卷提示。针对每个流,所述日志通常包括指示该流是否表示被复制的对象或擦除编码的对象的类型信息。
[0074] 在另一实施例中,这些卷提示可以被存储在段的系统元数据280(或者被复制的流的元数据)中。例如,段216的系统元数据包括指示在其处存储了段218的卷标识符的卷提示。每个节点可以可能扫描其卷寻找在磁盘上的每个流的系统元数据,但是该技术将是较慢的。然后可以从该系统元数据读取卷提示。再次,指示故障的卷的在特定段中的卷提示指示下一段丢失。当节点标识段丢失时,其可以通过查看先前的段的元数据280并取回针对所有同胞段的独特标识符来为丢失的段确定独特标识符。为了寻找针对重新生成丢失的段所必须的任何段,这些同胞段的独特标识符可以被使用。
[0075] 一旦每个节点已经完成扫描其日志(或者其在磁盘上的流),每个节点就将具有曾经在故障的卷上的丢失流的列表。因为存储群集包括使用复制和擦除编码存储的对象,所以这些丢失的流中的某些代表被复制的对象,而这些流中的某些代表擦除编码的对象的丢失的段。
[0076] 针对丢失的复制的流(如果有),在步骤612中,每个节点通过请求来自其他节点的复制流的竞价来复制丢失的流,并且然后将控制传送到所选择的节点。假设擦除编码的对象的至少一个段从给定节点丢失,则在步骤616中(使用在步骤608中获得的独特标识符)给定的节点请求其他节点针对哪个节点可以供应重新生成丢失的段所必需的K个段进行竞价。一旦获胜竞价被接收并且节点被标识可以供应所述K个段,给定的节点就请求针对重新生成和存储所述丢失的段的节点的竞价。
[0077] 相应地,在步骤620中,给定的节点请求来自在群集内的节点的竞价用于特定节点重新生成丢失的段。一旦选择该节点,该节点就使用在步骤616中标识的K个段重新生成丢失的段。可以使用适当的擦除编码算法执行该重新生成。在一个实施例中,重新生成丢失的段消耗在来自K个段的条中的数据,而目标条被计算并写入,以便重新生成丢失的段。
[0078] 在步骤624中,节点在其卷中的一个上存储段。如果存在被给定的节点标识的任何更多丢失的段,则控制移动到步骤616并且节点再次如先前描述的那样请求针对丢失的段的竞价。由于在步骤608中,在群集内的每个节点将扫描其卷,寻找丢失的段,所以每个节点也将并行地执行步骤612到628,假设每个节点已经标识了丢失的流。
[0079] 擦除编码的段的重新定位
[0080] 一旦段被写入到存储群集并且被提供以独特标识符,就可以像在群集中任何其他流一样管理它,包括复制的流。换言之,独立于在擦除集合中的其他段并且在没有被移动的段的可用性的任何损失的情况下,健康处理模块决定将段从一个卷移动到另一个,或者从一个节点移动到另一个。例如,如果段218被移动到不同的卷,则在段216中的卷提示将被更新以指示针对段218的新的卷。当段217被重新定位时,系统知道其所有的同胞段(以及它们的独特标识符),因为段218的元数据280包括按顺序的所有同胞段的独特标识符。上游段,段216,可以使用其独特标识符从群集内被取回,并且一旦针对段218新的卷标识符已知,该新的卷标识符就可以被写入到段216的元数据部分280中,作为针对段218新的位置的卷提示。替代地,在其日志中的段216的流表示可以被更新以包括新的卷标识符。
[0081] 针对重新定位的段的卷提示的更新可以在重新定位发生时被执行或者可以在之后的时间处由健康处理模块执行。该更新的优势在于段可以在群集内被重新定位而不损失可用性,并且无需任何额外的控制计算机或者控制数据库以跟踪在群集内的段。
[0082] 擦除编码的对象转换为复制,反之亦然
[0083] 本发明的一个实施例能够将存储于群集内的数字对象从一种格式转换为另一种。例如,使用5:7擦除编码存储的对象可以被转换为6:10编码,擦除编码的对象可以被转换为使用复制存储,并且使用复制存储的对象可以被转换为使用擦除编码存储。是否将对象转换为不同的格式以及何时进行可以由对象元数据、存储群集默认设置或两者的组合来指示。
[0084] 如上文所提及的那样,被提供以来自客户端应用的对象的用户元数据可以提供关于应当如何存储对象的信息,并且也可指示对象应当何时被转换为一种格式或另一种,如上文刚刚描述的那样。例如,用户元数据可以指示在具体的时间帧内或在特定的未来时间处,该对象应当被转换为不同的格式。或者,存储群集的设置或规则也可以指示对象应当在特定的时间或多个时间处被转换,具有某个大小的对象应当被周期性地或者在特定时间处转换,或者某个比例的对象应当被转换。群集可以甚至接受来自改变群集设置或指示针对在群集内的一个或多个对象转换应当如何以及何时发生的管理员的人工输入。特殊的转换模块可以被用于执行转换,或者这样的功能可以被并入群集的健康处理模块。
[0085] 图7是描述了其中在存储群集中的对象可以从一种存储格式被转换为另一种的实施例的流程图。尽管该流程图处理单个对象,但是在群集内的任何数量的对象可以使用该技术被转换。针对在群集内的对象的独特标识符保持不变,使得客户端应用可以使用其被最初提供的相同的独特标识符取回该对象。针对具有随机数作为独特标识符的对象,在转换之后,该随机数保持针对对象的标识符。在客户端应用针对对象供应独特名称的情况下,群集可以使用该名称的散列值作为独特标识符,并且在转换之后该散列值保持标识符。
[0086] 对象的“版本”的概念促进针对新的、被转换的对象保留原始的独特标识符。每个对象包括时间戳,其指示它何时被创建;当对象被转换时,它将具有与原始对象相同的独特标识符,并且新的对象被给予晚于原始对象的时间戳。以这种方式,两个独特标识符都可以在相同时间处存在于群集内,然而群集通过参考时间戳,知道哪个对象是当前的、有效的对象。具有比其“孪生子”早的时间戳的对象可以在任何时间处被删除,因为不需要它。
[0087] 在步骤704中,针对对象(或针对任何数量的对象)的相关转换信息被存储于存储群集内。如上文所提及的那样,可以从客户端应用接收每个对象,其中用户元数据指示对象应当如何被转换、对象应当何时被转换等。当对象被写入群集时,该用户元数据连同每个对象一起被存储。该元数据被存储在擦除编码的对象的清单中。
[0088] 附加地,存储群集设置和规则可以为在群集内的对象指示默认转换设置。这些设置和规则可以被存储在群集的指定的对象中,或者可以被包括在节点启动期间节点提供的信息中,或者可以由在其处运行节点的网络上的指定的源提供。例如,设置可以要求在特定的日期之前将所有节点从一个擦除编码格式转换为另一个,可以要求一旦对象达到某个寿命,可以要求针对超过时间段的所有对象的从复制到擦除编码的转换,可以要求超过某个大小的对象在特定的寿命或日期之前(或随着时间段逐渐地)被转换为擦除编码等。此外,管理员可输入设置或命令,指示针对一个或多个对象,转换应当如何及何时发生。
[0089] 在步骤708中,针对特定对象检测触发条件,指示应当将该对象从一种格式转换为另一种。可以以许多不同方式检测该触发条件。例如,在对于在群集内的对象的迭代的过程中,当健康处理模块涉及该对象时,健康处理模块将针对特定对象评审对象元数据。如果满足条件(例如,“在特定的日期之前或者在特定的日期处,使用该特定的擦除编码格式转换为擦除编码”),则将如下文所述的那样转换对象。或者,每当出于任何原因涉及或访问对象,就评审其用户元数据以查看否满足触发条件。替代地,存储群集其自身周期性地评审其群集设置和规则以确定是否已经经过了时间或日期,指示根据群集设置一个或多个对象应该被转换。当然,来自群集管理员的任何人工输入将立即起作用,并且可以指示触发条件。
[0090] 当触发条件指示对象(当前使用复制存储)应当被转换为擦除编码时,步骤712导致结果。针对对象的独特标识符被获得(从对象元数据、群集设置、管理员输入或其他)并且群集确定在其上存在对象的复制品的节点。在步骤716中,该节点从其磁盘中的一个读取对象到存储器中。接下来,在步骤720中,所述节点使用根据用户元数据、系统元数据、群集设置或管理员输入确定的特定的擦除编码格式向群集写入对象。可以参照图4A和4B,具体参照步骤416-448,如上文讨论的那样执行该步骤。以擦除编码写入的这个新对象被供应以与被用于在步骤716中读取的原始复制品的独特标识符相同的独特标识符用于其清单。在步骤724中,原始对象和任何复制品可以被健康处理模块立即或者稍后删除。健康处理模块确定具有比新转换的对象早的时间戳的独特标识符的任何复制品可以被删除。
[0091] 当触发条件指示对象(当前使用擦除编码存储)应被转换为使用复制存储时,步骤732导致结果。针对对象的独特标识符被获得(从对象元数据、群集设置、管理员输入或其他)并且群集确定在其上存在针对擦除编码的对象的清单的节点。在步骤736中,该节点从群集中将对象读取到存储器中。可以参照图5,具体参照步骤516-532,如上文讨论的那样执行这个步骤。接下来,在步骤740中,该节点按照连续的流(而不是按照擦除编码段)将对象写入到群集的节点。可以通过例如贯穿群集广播针对写入竞价的请求,并且然后向具有获胜竞价的节点写入流来执行该写入。或者,可以使用其他技术来选择向特定的节点或台(desk)来向其写入对象。按照单个流被写入的这个新对象被供应以与被用于在步骤736中读取的原始清单的独特标识符相同的独特标识符。在步骤744中,原始对象可以被健康处理模块立即或稍后删除。健康处理模块确定具有比新转换的对象早的时间戳的独特标识符的任何清单(及其相关联的段)可以被删除。在步骤748中,新写入的对象可以被复制以在群集内创建任何数量的复制品,并且该复制可以立即发生或在健康处理模块遍历这个对象时随时间发生。
[0092] 当触发条件指示对象(当前使用擦除编码存储)应当被转换为新的擦除编码时,步骤752导致结果。对象的独特标识符从对象元数据被获得,并且群集确定在其上存在针对擦除编码的对象的清单的节点。在步骤756中,该节点将对象从群集读取到存储器中。可以参照图5,具体参照步骤516-532,如上文讨论的那样执行这个步骤。接下来,在步骤760中,该节点使用根据用户元数据、系统元数据、群集设置或管理员输入所确定的新的擦除编码格式向群集写入对象。可以参照图4A和4B,具体参照步骤416-448,如上文讨论的那样执行这个步骤。以新的擦除编码写入的这个对象被供应以与被用于在步骤756中读取原始对象的独特标识符相同的独特标识符用于其清单。在步骤764中,原始对象可以被健康处理模块立即或者稍后删除。健康处理模块确定具有比新转换的对象早的时间戳的独特标识符的任何清单可以被删除。
[0093] 跨群集数字对象的管理
[0094] 本发明的另一实施例能够将数字对象从一个存储群集移动到另一存储群集,并且将对象转换为由新的群集所需要的格式或转换为在对象的用户元数据中需要的格式。例如,在第一群集中使用5:7擦除编码存储的对象当被移动到第二群集时可以被转换为6:10的编码,擦除编码对象当被移动到第二群集时可以被转换为使用复制存储,或者在第一群集中使用复制存储的对象当被移动时可以被转换为使用擦除编码存储。是否将一个对象转换为不同的格式可以由用户元数据、存储群集默认设置、两者的组合、来自外部软件产品的指令或者群集管理员指定。有利地,在第一群集中的对象的独特标识符也被保留用于第二群集。
[0095] 图8是描述了其中在一个存储群集中的对象可以被移动到第二存储群集并且从一种存储格式转换到另一种的一个实施例的流程图。尽管该图处理单个对象,但是可以使用该技术移动在群集内的任何数量的对象。优选地,针对在第一群集内的对象的独特标识符针对在第二群集中的该对象保持相同,使得客户端应用可以使用相同的独特标识符从第二群集取回该对象。例如,独特标识符可以是由客户端应用供应的随机数或对象名称的散列值。
[0096] 在步骤804中,产生指令以将对象从源群集复制(或移动)到目标群集。该对象可以被复制到目标群集用于备份目的(在源群集中留下原始的)或者该对象可以被简单地移动到目标群集并删除原始的。该指令可以源于任何外部软件产品、客户端应用,源于群集本身内或者源于群集管理员。在一个实施例中,从Caringo Inc.可获得的软件产品“Content Router”被用于生成指令以将对象从源群集复制到目标群集。该指令包括将被复制的对象的标识,诸如在源群集内的其独特标识符。
[0097] 可以从源群集以多种不同方式复制对象。例如,源群集可以读取对象并且然后将它“推送”到目标群集,或者目标群集可以从源群集“拉取”对象。在一个实施例中,在步骤808中,首先在目标群集中选择目标节点来执行在目标群集内的对象写入。可以通过使用竞价过程或其他技术随机地选择目标节点。一旦被选择,目标节点就被提供以针对将被复制对象的独特标识符以及针对源群集的联系信息。例如,目标节点可以被提供以针对源群集整体的通信地址,被提供以在群集内的中央或协调节点的地址,或者优选地,在源群集内的任何节点的IP地址。
[0098] 在步骤812中,在目标群集内确定任何相关的转换信息。例如,指定复制对象应当如何存储在目标群集内(即使用复制或擦除编码)的任何默认设置或规则被标识。如果没有默认设置相关,则可以从被包含在将被复制的对象内的用户元数据获取转换信息。替代地,复制对象的指令可以包括转换信息。
[0099] 在步骤816中,将对象从源群集复制到目标群集。目标节点通过使用提供的IP地址联系源群集的任何节点来发起对象的复制,并且提供针对所述对象的独特标识符。然后可以将对象从源群集传送到目标节点的存储器。例如,可以如上文参照图5所解释的那样执行该步骤,其中目标节点充当客户端应用。一旦目标节点接收该对象(或当目标节点被接收并且该对象),它就将使用上文已经确定的合适的转换信息将该节点写入目标群集。换言之,该对象将按照连续流(复制)被写入,或将使用擦除编码被写入。例如,可以如上文参照图4A和4B描述的那样执行该写入步骤,其中目标节点充当次级访问节点。针对复制,目标节点可以向在目标群集内的其他节点征求竞价,或者可以将对象写入到其自己的磁盘中的一个。在擦除编码的情况下,段将被写入到在目标群集内的多个节点。优选地,在目标群集中的复制的对象保留它在源群集中具有的相同的独特标识符。一旦该对象已经被复制到目标群集,它就可以被保留在源群集中或在未来时间处被删除。
[0100] 计算机系统实施例
[0101] 图9A和9B图示了适于实现本发明的实施例的计算机系统900。图9A示出了计算机系统的一种可能的物理形式。当然,计算机系统可以具有许多物理形式,包括集成电路、印刷电路板、小型手持设备(诸如移动电话或PDA)、个人计算机或超级计算机。计算机系统900包括监视器902、显示器904、外壳906、磁盘驱动908、键盘910和鼠标912。磁盘914是被用于向和从计算机系统900传送数据的计算机可读媒介。
[0102] 图9B是针对计算机系统900的框图的示例。附接到系统总线920的是各种各样的子系统。(一个或多个)处理器922(也被称为中央处理单元,或CPU)耦合到包括存储器924的存储设备。存储器924包括随机访问存储器(RAM)和只读存储器(ROM)。如本领域中众所周知的那样,ROM的作用是将数据和指令单向传送到CPU,并且RAM通常被用于以双向方式传送数据和指令。这两种类型的存储器都可以包括以下描述的任何合适的计算机可读介质。固定盘926也双向耦合到CPU 922;它提供附加的数据存储容量并且也可以包括以下描述的任何计算机可读介质。固定盘926可以被用于存储程序、数据等等,并且通常是比主存储器慢的次级存储介质(诸如硬盘)。将理解,在适当的情况下,在固定盘926内保留的信息可以在存储器924中以标准的方式作为虚拟存储器被并入。可移除盘914可以采取以下所述的计算机可读介质的任何形式。
[0103] CPU 922也耦合到各种输入/输出设备,诸如显示器904、键盘910、鼠标912和扬声器930。一般地,输入/输出设备可以是以下内容中的任何:视频显示器、轨迹球、鼠标、键盘、麦克风、触敏显示器、传感读卡器、磁带或纸带阅读器、平板、指示笔、语音或手写识别器、生物特征阅读器或其他计算机。CPU 922可以使用网络接口940可选地连接到另一计算机或电信网络。在具有这样的网络接口的情况下,可以预期CPU在执行上述方法步骤的过程中可以从网络接收信息,或者可以将信息输出到网络。更进一步地,本发明的方法实施例可以仅在CPU 922上执行或者可以在诸如因特网的网络上连同共享一部分处理的远程CPU一起执行。
[0104] 另外,本发明的实施例进一步涉及具有在其上具有用于执行各种计算机实现的操作的计算机代码的计算机可读介质的计算机存储产品。该介质和计算机代码可以是那些出于本发明的目的专设计和构建的,或者它们可以是众所周知的种类,并且对于在计算机软件领域中的那些技术人员是可获得的。计算机可读介质的示例包括但不限于:磁介质,诸如硬盘、软盘和磁带;光学介质,诸如CD-ROM和全息设备;磁光介质,诸如光磁盘;以及专门配置以存储和执行程序代码的硬件设备,诸如专用集成电路(ASIC)、可编程逻辑器件(PLD)以及ROM和RAM设备。计算机代码的示例包括机器代码,诸如由编译器产生的,以及包含由使用翻译器的计算机执行的高级代码的文件。
[0105] 虽然出于清楚理解的目的已经以某种细节描述了上述发明,但是显然,某些改变和修改可以在所附权利要求书的范围内实行。因此,已描述的实施例应被视为说明性而不是限制性的,并且本发明不应限于本文给出的细节,而是应当由以下的权利要求书及其等同物的全部范围来限定。
QQ群二维码
意见反馈