专利名称:存储系统的利记博彩app
技术领域:
本发明涉及存储系统,并且具体而言涉及具有重复存储消除功能的存储系统。
背景技术:
辅助存储系统的去重(deduplication)目前已在研究和商用应用中引起广泛关注。通过识别数据中相同的块并且仅存储这种块的单个副本,去重使得存储容量要求显著降低。以前的结果已经显示在备份数据中存在明显重复。这并不奇怪,因为相同系统的后续备份通常非常相似。去重存储系统在多个维度上不同。一些系统仅对相同的文件进行去重,而其他系统将文件分割成更小的块并且对这些块进行去重。本发明将关注块级别的去重,因为备份应用典型地对来自被备份到大型tar类的档案文件中的文件系统的单独的文件进行聚合。在文件级别上的去重将不会提供多少空间减少。块可以具有固定的或可变的尺寸,其中典型地由内容定义的组块产生尺寸可变的块。显示出使用内容定义的尺寸可变的块显著提高了去重效率。大部分系统消除相同的块,而一些系统仅需要块存储是类似的,并且有效地存储差异。虽然这可以提高去重效率,但是其需要从盘读取以前的块,这使得难以传递高的写吞吐量。本发明因此将关注本文中的相同的块的去重。(去重存储的概述)典型地通过由备份应用创建的长数据流提供备份存储系统。这些流典型地是档案文件或虚拟磁带图像。数据流被分割成块,并且针对每个块计算安全哈希(例如SHA-1)。然后将这些哈希值与以前存储在系统中的块的哈希值进行比较。由于极不可能找到安全哈希函数的哈希冲突,所以具有相同哈希值的块可以假设是相同的(所谓的通过哈希比较)。因此,如果找到具有相同哈希的块,则认为该块是重复的并且不存储该块。构成该数据流的全部块的标识符被存储并且可用于重构读取的原始数据流。引用列表非专利文献NPL I:DUBNICKI, C.,GRYZ, L.,HELDT, L.,KACZMARCZYK, Μ.,KILIAN, ff.,STRZELCZAK, P., SZCZEPKOWSKI, J., UNGUREANU, C., AND WELNICKI, Μ., HYDRAstor:a Scalable Secondary Storage。在 7th USENIX Conference on File and StorageTechnologyies(San Francisco, California, USA, February 2009)。NPL 2:ZHU, B.,LI, K.,AND PATTERSON, H.,Avoiding the disk bottleneck inthe data domain deduplication file system。在FAST’OS:the 6th USENIX Conferenceon File and Storage Technologyies (Berkeley, CA, USA,2008), USENIX Association,pp.1-14。NPL 3:BIRK, Y., Random raids with selective exploitation of redundancyfor high performance video servers,671—681。
NPL 4:UNGUREANU, C.,ARANYA, A.,GOKHALE, S.,RAGO, S.,ATKIN, B.,BOHRA, A.,DUBNICKI, C., AND CALKOffSKI, G., Hydrafs:A high-throughput file system for thehydrastor content addressable storage system。在 FAST’ 10:Proceedings of the8th USENIX Conference on File and Storage Technologies(Berkeley, CA, USA, 2010),USENIX Association, pp.225-239。NPL 5:DUBNICKI, C.,UNGUREANU, C.,AND KILIAN, ff.,FPN:A DistributedHash Table for Commercial Applications。 在 Proceedings of the ThirteenthInternational Symposium on High-Performance Distributed Computing(HPDC-132004)(Honolulu, Hawaii, June 2004),pp.120-128。NPL 6:BEN-OR, M., Another advantage of free choice(extended abstract):Completely asynchronous agreement protocols。 在 PODCJ 83:Proceedings of thesecond annual ACM symposium on Principles of distributed computing(New York,NY,USA,1983),ACM,pp.27-30。NPL 7:LAMPORT, L., The part-time parIlamentACM Trans.Comput.Syst.16,2(1998),133-169。
发明内容
技术问题(基于盘的去重的性能挑战)为了实现大规模去重存储系统,必须克服一些重大的性能挑战。大型系统存储太多的块,因而它们的哈希不适应主存储器。使用哈希的简单的盘上索引将由于进行索引查找而导致性能非常差,索引查找实际上是随机读取。一些系统通过临时存储全部输入块并且离线完成去重来解决该问题。由于预先已知全部新块,所以可以按照哈希次序重新排列哈希查找,并且可以成批地有效地执行查找。但是,离线去重需要用于临时块存储的大的、高性能的暂存区域。另一方面,内嵌(inline)去重系统可以避免将重复的块写在一起,从而在典型的重复性高的情况下提供更高的写性倉泛。大部分系统(如NPL I中公开的系统)通过依靠流局域性观察来解决该问题一典型而言,连续备份中的重复块按照在与来自原始备份的那些块相同的顺序出现。通过保留备份流的局域性,可以有效地预取许多重复块的哈希。通过使用存储器中的布隆过滤器,或者通过接受近似重复以便以一些重复可能性换取更好的性能,可以有效地识别非重复的块。另一个问题在于由于流分段而导致流读取性能降低。由于重复块被存储在与最新写入的块不同的位置中,所以看起来大的顺序读取被内在地分解成多个较短的读取。在进行精确去重的系统中,如果两个流被存储在该系统中,其中一个流是另一个流的随机置换,则该问题是固有的,这些流中的至少一个流将必须发出少量的、随机读取。实际上,允许有效去重的相同流局域性观察使得该最坏情况不可能发生。但是,随着分段典型地随着系统的年龄增长,应该注意内部局域性不要进一步被差的数据放置减少。(可缩放全局去重)
如NPL 2中描述的集中化系统例如在系统尺寸方面具有有限的可缩放性。可以建立多个独立的系统以对容量进行缩放,但是这阻碍了它们之间的去重,并且通过向孤立的存储岛安装备份增加了维护负担。一些系统(NPL I)通过基于哈希将块分配给存储节点来引入可缩放的全局范围的去重。这有效地将大型块索引分到全部节点上,其中每个节点负责哈希空间的一部分。虽然该架构在单客户端设置中提供可缩放性和良好的性能,但是当多个客户端同时读取或写入时可能出现性能问题。流局域性的降级由于块均匀地分布在全部节点上,所以每个节点平均接收按系统尺寸因子缩小的输入流的一部分。这导致大型系统中流局域性的显著降低——在原始流中出现的任意流局域性也将在每个节点之中按照该因子降低。读取回流的任意重要的部分需要该系统中的全部节点的参与。如果许多客户端试图同时读取回(不同的)流,则它们将必须在每个节点上竞争相同的资源。为了维持高吞吐量,存储节点将会需要与客户端的数量成正比的读取高速缓冲存储器尺寸——这被称为缓冲器激增问题(NPL 3)。流局域性中的降级使该问题更复杂,这降低了预取的效率。结果,在非常大型的系统中,原始流的顺序读取将退化成存储节点之中的随机读取。相同的问题适用于去重查找一现有的块的哈希的预取也将退化成随机读取。但是,对于去重而言负面影响较不明显,因为哈希比块数据小得多并且将更易于适应尺寸适中的高速缓冲存储器。对称网络吞吐量由于块到存储节点的均匀分布,全部节点从客户端接收大致相同数目的块。当客户端的数目增长时,网络吞吐量要求也增长,以容纳全部非重复块写入。结果,具有高的对称式点对点吞吐量的网络有必要对于该系统提供高的写入吞吐量。如下文将讨论的,针对大型系统建立这种网络是困难的。如此,本发明的一个示例性的目的在于防止具有去重的存储系统的性能恶化,这是如上文所述的要解决的问题。问题的解决方案根据本发明的一个方面,一种存储系统包括数据存储控制单元,该数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,该数据存储控制单元通过参考已被存储在该存储设备中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除。该数据存储控制单元在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。根据本发明的另一个方面,一种存储程序的计算机可读介质是存储如下程序的介质,其中该程序包括指令,该指令用于使信息处理设备实现数据存储控制单元,该数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,该数据存储控制单元通过参考已被存储在该存储设备中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除,其中该数据存储控制单元在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。根据本发明的另一个方面,一种数据存储方法是如下方法,该方法用于以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在该存储设备中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除。该方法包括在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。本发明的有益效果由于如上所述配置本发明,所以本发明能够改善具有去重的存储系统的性能。
图1是用于显示第一示例性实施方式中的指针块中的块地址类型的表;图2是用于显示该第一示例性实施方式中由于系统尺寸增大而导致的负载对写带宽的影响的图表;图3是用于显示该第一示例性实施方式中由于系统尺寸增大而导致的负载对写带宽的影响的图表;图4是用于显示包括第二示例性实施方式的存储系统的整个系统的配置的框图;图5是用于示意性地显示该第二示例性实施方式的存储系统的配置的框图;图6是用于显示该第二示例性实施方式的访问节点的配置的功能框图;图7是用于说明图5中公开的存储系统中的数据存储过程的方面的说明视图;图8是用于说明图5中公开的存储系统中的数据存储过程的该方面的说明视图;图9是用于说明图6中公开的存储系统中的数据获取过程的方面的说明视图;图10是用于说明图6中公开的存储系统中的数据获取过程的该方面的说明视图;图11是用于显示根据补充注释I的存储系统的配置的框图。
具体实施例方式<第一示例性实施方式>本发明引入了用于具有全局内嵌去重的可缩放存储系统的新的架构。通过将数据存储与对重复进行的索引分离,所提出的系统改进了现有系统的缺点:恢复性能随着系统尺寸的降级以及全部节点之间的统一带宽的要求。如下组织第一示例性实施方式。首先,将介绍设计该系统时考虑的要求和前提。然后,将描述实现那些要求的架构,并且将说明关于所提出的数据组织的关键操作。然后,将评价所提出的系统如何传递所需特征,并且将提供在它的设计期间面临的折中。(要求和前提)在描述所提出的系统架构之前,我们将概述其将运行的环境的要求和前提。(存储系统要求概述)存储系统的主要应用将是备份。为了最大化在去重方面的节省,存储系统将存储许多客户端系统的备份。该环境需要高的容量和可靠性,并且具有一些唯一的性能特点。由于备份必须在短的备份窗口中完成,所以非常高的聚合写吞吐量是必要的。该系统主要是用来写的——写数据比读数据频繁得多。读主要发生在当备份系统遇到故障时的恢复期间。由于恢复该系统的时间通常是至关重要的,所以合理高的读吞吐量是必要的。由于上述原因,由存储系统实现的去重应该满足以下标准:块级别相同的块尺寸可变的块,具有由内容定义的组块设置的块边界通过哈希比较精确内嵌分布式全局范围。为了保持成本低下,该系统应该由商用机器构造并且应该可缩放到多达100/1000个节点,对应于原存储的拍字节。接口系统必须向客户端机器提供工业标准的备份接口。在盘到盘备份的环境中,这通常是作为NAS (网络附属存储)或VTL (虚拟磁带库)输出的文件系统。由于NAS或VTL实现的细节与本发明的主题无关,因此我们将关注更简单的块存储接口,与NPL I中的描述类似。可以在该块存储之上建立文件系统,如NPL 4中所述的。简而言之,块存储允许存储数据的尺寸可变的块。块是不变的,并且它们可以通过由块存储生成的地址而被获取。通过向具有相同内容的块分配相同的地址来完成去重。可以使用特殊指针块将单独的数据块组织成大型数据流。这些块包括它们指向的块的地址——无论是常规数据块还是其他指针块。与常规的块类似,指针块是不变的并且对相同的块进行去重。可以构造叶子中具有常规数据块的指针块的树来表示数据流。该树的根部的指针块的地址足以获取整个流。
(网络模式)该存储系统需要内部网络来放大到所需要的大容量,并且连接数据源——即客户端备份机器。网络必须在存储系统的节点之间以及到数据源的链路上都提供高吞吐量。随着该系统的尺寸的增长,在全部节点之间建立具有高的聚合吞吐量的大型网络变得困难并且昂贵。传统而言,以分层次的方式建立大型数据中心中的网络,其中由第一级交换机(例如IG比特)连接单独的机器,并且由更快的第二级交换机(例如IOG比特)连接第一级交换机,以此类推。交换机之间的链路需要更快,以提供合理的聚合吞吐量,当使用更快的互连时这提高了网络硬件成本或者当绑定多个物理链路时这提高了线缆复杂度。当然,在小型系统中不出现分层次结构,其中在小型系统中全部节点可以连接到同一个第一级交换机,在全部节点之间可以获得相同的高吞吐量。并且,给定足够的资源,甚至可以从商用联网硬件构造聚合吞吐量高的大型网络。因此,该存储系统应该被适配为:交换机内吞吐量高但是聚合交换机间吞吐量较低的分层次网络,以及在任意两个节点之间可获得完整的横截面带宽的对称网络。(客户端系统性能限制)从该存储系统写入或读取的数据最终必须经过客户端机器(备份服务器)传递。每个客户端备份服务器具有用于源和宿数据的有限资源——本地盘或者网络连接变为瓶颈。因此对于存储系统而言没有必要针对单个流提供高吞吐量;单个客户端机器的资源将容易地被存储系统的少量(例如一打)节点超过。但是,当从多个客户端机器同时读/写多个流时,系统应该仍然提供良好的组合性能。(架构)(概况)本发明中提出的存储系统由以下类型的节点组成:访问节点,其作为到系统的网关并且连接客户端机器,存储节点,其实际上存储数据库,以及索引节点,其负责识别并且定位重复。可以可选择地将不同功能的节点组合在同一物理机器上,如果出于硬件考虑证明是有益的(例如功耗、冷却、数据中心空间使用)。为了满足上述要求,本发明提出实现以下设计目的的存储系统。局域性保留存储在存储节点的小的子集上将属于一个流的非重复块的序列紧密存储在一起。这保留了上述基于流的局域性,从而允许在恢复期间进行有效的顺序读取。这对于重复消除性能也是重要的,实现了重复块的哈希的有效预取。该方法与NPL I中所述的以前的嵌入全局去重系统不同。这些系统组合重复索引和块存储,迫使块在整个系统上均匀分布。虽然它们也试图在存储节点之中保留流局域性,但是初始分隔降低了它的效率。基于全局哈希的索引由于块写入的存储节点不再依赖于块的哈希,所以必须维持分离的块索引。基于块哈希,在系统中的全部索引节点上分隔该索引。在这里哈希是合适的,因为在哈希空间中无论如何都不存在局域性,并且其提供良好的可缩放性、并行性和负载平衡。存储容量平衡流局域性保留仅对于多达一些最大流长度有意义,这是由顺序盘访问的效率确定的。当在一个位置中累积了足够的顺序块之后,可以在别处存储其他的块。因此,给定流的非重复块没有写入的节点随时间改变。这有助于维持良好的容量平衡,防止一些存储节点比其他节点更快填满。不对称网络性能由于数据位置不是由块哈希确定的,所以所提出的系统自由地将数据节点上的数据靠近写入该数据的客户端设备保持。通过避免跨高等级交换机的数据传递以及相关的网络吞吐量瓶颈,这可以极大地提高非对称网络中的写带宽。仅需要向网络中的全部节点均匀地发送去重查询,但是它们小得多并且不需要大量的带宽。下文是构成该系统的逻辑组件的描述。(前端)前端向客户端输出文件系统、VTL或数据的类似图像。其将输入的写入流组块成尺寸可变的块并且提交它们以便去重和存储。其在访问节点上被主控。系统的该部分可以与NPL I中所述的HYDRAstor中出现的那部分相同。(DHT网络重叠)与分布式一致性组合的分布式哈希表用于实现网络重叠层。DHT是系统的可缩放性的基础。网络重置提供:对象位置的虚拟化,从而在面对故障和系统重配时允许逻辑对象到物理机器的有效映射故障检测和容忍负载平衡(假设对象在DHT的密钥空间中均匀分布)小的系统范围内的状态(全局状态)的传播和维持。(具有超节点的FPN)在本发明中使用的DHT是具有超节点的固定前缀网络(NPL 5)。在NPL I中已经描述了它在存储系统中的使用;在这里仅概述在该系统的环境中重叠的功能。重叠网络将密钥(哈希)映射到负责这些密钥的节点的集合。它被组织成超节点,每个超节点包括恒定数目的超节点组件。在物理节点(在该情况下是索引节点和存储
节点)上主控超节点组件。每个超节点的组件的数目-超节点基数(cardinality) (SNC)
对于FPN的给定实例是固定的。作为同一超节点的成员的组件被称为对。每个超节点负责哈希密钥空间的一部分;在超节点之间分隔哈希空间,从而整个空间被覆盖,并且在超节点之间的责任中不存在重叠。在超节点之中处理节点故障-给定超节点的全部组件持续探通(ping)彼此以
检测故障和传播状态改变。当节点故障时,由其余对恢复在该节点上主控的组件。NPL 6或7中描述的分布式一致性算法用于确保全部组件具有超节点的成员关系的一致的图像。为了维持用于一致性的法定个数(quorum),来自每个超节点的过半的SNC组件必须在全部时间存活。这还防止网络分隔导致“脑裂”操作。
FPN还提供负载平衡的等级。其试图在物理机器之间与在其上可用的资源成正比地扩展组件。基本前提是每个超节点将大致接收相同的负载(在使用的容量和每秒的请求方面)。还防止在同一物理节点上共置对等组件以提高故障容限。可以容易地使用不同的DHT实现来代替FPN,只要其可被扩展为提供容错性和全局状态广播。在本发明中具有超节点的FPN的使用是由其在HYDRAstor系统中的成功使用激发的。(数据和索引FPN)在该系统中存在DHT的两个分离的实例:“数据FPN”,其将逻辑数据位置映射到负责存储它们的存储节点。在存储节点上主控数据FPN的组件。该映射提供数据位置的虚拟化——逻辑位置在系统重配置或故障时不改变,即使主控该数据的存储节点改变。稍后将详细描述数据FPN。“索引FPN”,其将块哈希映射到维持用于该哈希的转换的索引节点。将该网络的组件放置在索引节点上。这在稍后详细讨论。对于索引节点和存储节点使用分离的FPN网络将允许在不同的硬件上放置这些类型的节点。例如,索引节点可能需要很多CPU功率、RAM和10PS,而存储节点将需要很多存储容量以及高的盘和网络吞吐量。即使这两个网络的组件被放置在同一物理机器上,通常可以在每个网络中独立地完成负载平衡,因为如上所示,它们利用不同的资源。并且,两个网络可以具有不同的超节点基数(分别是SNCiigl和SNCss),并且可以独立地增长(在它们之间无需使FPN分割同步)。(块存储)(数据组织概况)由数据FPN组件将存储在系统中的全部用户数据作为块来保持。将该块擦除编码成SNCss个分段,一些是原始的并且一些是冗余的。通过用户向数据分配的弹性(resilience)类别来确定原始和冗余分段的比例。当写入块时将块分配给数据FPN超节点。稍后将给出分配策略的细节。(同步运行(synchrun)和SCC)在数据FPN超节点之中,将存储块分组成同步运行。将属于同一块的分段放到同步运行的对应同步组件中。存在用于每个同步运行的SNCssA同步运行分量,其对应于分段号O到SNCiag-U同步运行是用于数据同步化操作的处理的原子单元——在后台维持操作期间块从不跨过同步边界。将整数个同步运行组件分组成同步运行组件容器(SCC) ;SCC被存储在存储节点数据盘上。SCC是仅能追加的——当写入整个SCC时,其变为不变的。后续后台操作仅可以通过重写SCC来修改它。完成同步运行组件到SCC的分组以限制需要被存储节点追踪的实体的数目一随着从系统删除块,同步运行的尺寸将缩小。通过在同步运行的尺寸减小时连结(concatenate)连续的同步运行,将SCC的尺寸大致维持在一个同步运行组件的初始尺寸(大约 64MB)。流运行(streamrun)
将大量连续的同步运行分组成流运行。该分组是静态的并且在分配同步运行时被确定的。流运行对应于来自相同的流的块的运行,其应该被保持在同一超节点中以获得良好的局域性——它们是存储平衡单元。在局域性保留和容量平衡质量之间存在折中,可以由流运行的尺寸来控制该折中。下文将更详细地探究该折中。(同步运行的标识)由64比特的标识符来标识每个同步运行。同步运行Id静态地确定同步运行所属的超节点。同步运行Id在逻辑上被分为3个部分:超节点区域前缀该超节点之中的流运行id该流运行之中的序列号用于序列号的比特的数目是固定的;被解释为超节点前缀的比特的数目随着系统增长以及数据FPN区域前缀的长度增加而增加。稍后将描述细节。(块标识和分段查找)向存储在系统中的全部块分配在同步运行中写入的它们的序列号。与同步运行Id组合的该序列号唯一地标识整个系统之中的块。(同步运程Id(SynchrunId)、块序列号(BlockSeqNum))对因此被称为唯一块地址。该地址从不重复使用,即使稍后该块被移除。(写发起者)对于在给定超节点中存储新块的请求一直经过该超节点的一个固定组件-写
发起者。该发起者负责在同步运行之中分配唯一块标识符并且与超节点的其它组件以及与索引FPN协调写操作。(SCC 索引)除了原分段数据之外,每个SCC存储属于该SCC的分段的元数据。该元数据包括块的哈希、它的唯一块id、尺寸以及该分段的数据在SCC中的位置等等。将该元数据与该数据分离地存储在SCC索引中。因此可以快速地读取并且更新SCC索引,而无需略过分段数据。如果已知SCC之中的分段的位置,则从SCC索引读取单独的块的元数据也是可能的。由于块删除,仅唯一块id自己不能确定分段位置;必须对其进行外部查找。(全局块索引)全局块索弓I是分布式哈希表,其将存储的块的哈希映射到它们的唯一块标识符(即(流运程Id,块序列号)对)。它被实现在索引FPN之上。基于块哈希密钥的前缀来分隔哈希表。负责存储给定块哈希的节点是主控索引FPN组件、区域对应于该哈希的节点。在索引节点之中,将映射存储在盘上哈希表中。全局块索引是容错的,在超节点的所有SNCgl个组件上复制每个区域。由于索引的尺寸,将索引存储在盘上。更新被缓存在存储器中并且被成批地应用在后台中。通过使用存储器中的布隆过滤器,该索引支持对于不存在块的廉价查询。对于已有块的查询需要一次随机盘读取。(压缩盘索引)
在每个存储节点之中,将全局块索引保持在被称为压缩盘索引(DCI)的盘上数据结构中。DCI需要以高性能标识非重复块。DCI可以被实现在标准盘之上,作为具有用于否定(非重复)查询的存储器中的布隆过滤器的盘上哈希表。这类似于NPL 2中所述的索引。在该解决方案中,将全部更新一转换插入和移除一放到存储器中的缓冲器中以避免进行随机写入。盘上哈希表、写缓冲器和布隆过滤器被分隔成桶(bucket),其中,每个桶对应于密钥空间的一部分。当写缓冲器开始填满时,后台扫掠操作按顺序处理每个桶:读取盘上哈希表桶应用来自写缓冲器的任意更新重建用于该桶的布隆过滤器部分向盘刷写更新的桶备选地,可以将索引存储在基于闪存的SSD上。这在最近的研究中已经进行了学习并且具有降低RAM消耗的优点和实质的功率节省的可能性。为了降低哈希表的尺寸,DCI不需要明确地存储整个密钥(块哈希)。在哈希表中有冲突的情况下,返回全部匹配转换。然后可以通过从合适的Scc索引(Scclndex)读取这些候选块的元数据并且检查完整的块哈希是否匹配来验证这些候选块。如果密钥的附加多个比特被存储在DCI中,则平均而言可以保持候选的数目接近I。(块索引更新)在将块成功地写入它的同步运行之后并且当块通过垃圾收集过程移除时,更新全局块索引。由于负责主控全局块索引中块的区域的索引节点通常与实际存储该块的存储节点不同,所以索引更新的谨慎的同步化是必要的。通过写发起者在数据FPN中写入块,对于每个最新写入块创建哈希密钥(Hashkey)到(同步运程Id、块序列号)的转换。向主控合适的块索引区域的索引节点发送该转换。然后将其存储在目的地索引节点的转换日志中,并且将在后台中将其写到的DCI中。只要转换持续处于转换日志中时,索引节点就对写发起者进行答复。由于转换插入请求可能丢失,所以每个写发起者维持已经被插入到全局块索引中的转换的(永久的)日志。周期性地重传来自日志的对转换的插入请求,直到从索引节点接收到成功的答复为止。索引节点可以接收重复的转换插入请求。因为(同步运程Id、块序列号)对于每个写入是唯一的,所以重复插入可以被安全地丢弃。重复插入将通常在它们仍然在DCI写缓冲器中时被检测,但是也可以在DCI扫掠上移除它们。(移除)仅由于垃圾收集而从全局块索引移除转换。在最简单的解决方案中,在完成垃圾收集之后可以根据剩余块重建整个全局块索引。下文所述的更复杂的解决方案也是可行的。为了垃圾收集的目的,系统的寿命被分割成被称为时期(epoch)的阶段。在一个时期中执行该系统中的全部块写入。当前时期号被维持在全局状态中,并且当垃圾收集过程开始时其被推进。仅在已经将来自时期η-1的全部块添加到GBI中之后时期可以推进到n+1。时期n中的垃圾收集仅移除直到时期n-2之前存储的块(即仅无疑已经在GBI中的那些块)。这些阶段有助于避免GBI转换更新、块移除和GBI转换移除之间的竞争。用时期号来对GBI插入请求(转换日志条目)盖时间戳;由于接收索引节点重复,丢弃来自太老的时期的请求。如果垃圾收集确定应该移除块,则发送对于它的转换的移除请求。也用当前时期对该请求盖时间戳。如果块曾经被再次存储,则其将处于不同的同步运行中并且因此其将是不同的转换。(哈希租用(lease))仅在转换的块已经被成功地存储在同步运行中之后才向全局块索引增加该转换。如果两个或更多客户端试图同时写入相同的块,则这可以导致竞争,并且可以存储相同的块的多个副本。为了防止该竞争,客户端要求在提交块以便存储之前从全局块索引租用块的哈希。取得的租用用信号向其他潜在写入者通知该块已经被写入并且他们应该与原始写入者同步。如果写入失败或者如果租用到期(例如因为用于处理该写入的原始访问节点停止响应),则当对于相同的哈希插入实际转换时返回该租用。(转换高速缓冲存储器)转换高速缓冲存储器是SCC索引的存储器中的高速缓冲存储,用于对已存储的块进行有效去重。其利用重复的块在数据流中的局域性(重复块的运行往往按照与它们原始存储的次序相同的次序而重新写入)。转换高速缓冲存储器位于访问节点上。当确定块是否重复时,每个访问节点参考它的本地转换高速缓冲存储器。可以通过从主控SCC索引的存储节点下载SCC索引,来填充高速缓冲存储器。由于高速缓冲存储器具有有限的容量,可以从高速缓冲存储器移除这样一种SCC索引,其中该SCC索引的转换最近未被使用。如果基础SCC改变,则存储在转换高速缓冲存储器中的SCC索引可能变得陈旧。由于在使用之前一直可以在存储节点处验证转换高速缓冲存储器的内容,所以如果验证失败则可以慢慢地从高速缓冲存储器丢弃它们。(操作)接下来,将描述如何在上文给出的数据组织中执行普通操作。(写入和重复消除)由访问节点的前端首先处理来自用户的写入,其中它们被分割为尺寸可变的块并且构成块的树。对于每个块,计算它的SHA-1哈希密钥,其将用于决定该块是唯一的还是重复的。(重复块)首先在转换高速缓冲存储器中查找块的哈希。如果存在于那里,则找到候选原始块的同步运行和唯一块id。使用同步运行id,向它的存储节点发送请求,以验证转换高速缓冲存储器条目不是陈旧的并且该块具有足够的弹性以便针对它而对写入去重。如果该验证通过,则写操作完成。如果在转换高速缓冲存储器中未发现块或者未通过验证,则向全局块索引发送对于块的哈希密钥的查询。通过经过DHT路由而将其传递到合适的索引节点。然后读取全局块索引,并且返回候选块位置集合。然后一个接一个地验证候选(实际上,平均而言仅一个候选)。对于每个候选,向主控该候选的同步运行的存储节点发送请求。使用唯一块id,从SCC索引查找并且读取分段元数据位置。分段元数据包括块的哈希,可以将其与新块的哈希进行比较。如果它们匹配并且块具有足够的弹性,则找到重复。否则检查其余候选。如果重复块被消除,则考虑原始块的SCC索引,以便读取到转换高速缓冲存储器中以加速后续重复消除。(唯一块)如果转换高速缓冲存储器不包括任意可用的条目,则参考全局块索引。由于布隆过滤器的使用,如果块尚未处于全局块索引中,则可以返回否定的回答而无需任意高概率的盘访问。如果没有找到候选或者全部候选块被拒绝,则该块是唯一的并且将被存储。访问节点维持用于每个正被写入的数据流的开放同步运行。全部新块被存储在该同步运行中。如果不存在用于流的开放同步运行或者超过了以前的同步运行容量,则分配新的同步运行。在选择用于块的开放同步运行之后,将块擦除编码到SNCssA分段中,并且向主控该开放同步运行的超节点的组件发送该分段。其中一个组件即写发起者负责同步化写操作。其发送用于插入用于正被存储到全局块索引的块的转换的请求。其收集对于SNCiagA分段的存储的确认,并且用成功或失败来答复访问节点。(同步运行分配)总是由负责同步运行的超节点的写发起者创建新的同步运行。写发起者知道哪些流运行以及那些流运行中的哪些同步运行是以前分配的,并且可以保证最新分配的同步运行具有唯一 id。在两种情况下,访问节点需要分配同步运行:在写入新的流的第一唯一块之前当以前的同步运行满了时。如果访问节点已经具有针于流开放的同步运行,则其将通常试图在相同的流运行中分配下一个同步运行。由于流运行Id确定了超节点,所以可以经过数据FPN向合适的写发起者发送分配请求。如果分配成功,则写发起者将指配下一个同步运行Id,并且将其返回给访问节点。访问节点然后将用该同步运行Id提交所有新的写入。如果因为流运行满了或者超节点空间不足分配失败,则访问节点需要分配新的流运行。为了分配新的流运行,访问节点首先选择新的超节点来主控它。通过在数据FPN中查找随机密钥并且向负责该密钥的写发起者发送分配请求来选择超节点。如果分配成功,则向访问节点返回新的流运行的第一同步运行的Id。否则,访问节点选择另一个超节点。可以修改该基本分配策略以提供诸如对于非对称网络的支持的特征。通常,针对每个客户端流分配分离的同步运行。但是,由于每个开放同步运行需要存储节点侧的一些资源,所以每个超节点的同时开放的流的数目存在限制。如果同时写入过多流,则同一同步运行将被多个流使用。该同步运行共享的负面效应在于在同一同步运行中将混合不相关的数据,从而减小了流局域性的正面效应。我们不希望在实践中同时写入的流的数目过大并且因此不意图对该情况进行优化。
(重复块的同时写入)如果多个访问节点同时试图写入相同的块,则可能存储相同的块的多个副本。使用全局块索引租用来防止这在实践中发生。总是在写入新块之前采取租用——可以在全局块索引查询没返回候选时自动地或者在全部候选被拒绝时明确地获得租用。租用包括正被写入的块的哈希和写入该块的访问节点的地址。如果在全局块索引查询期间找到关于请求的哈希的活动租用,则返回另一个访问节点正在同时写入相同的块的通知。后续写入者然后将联系原始访问节点并且进行等待直到原始块写入完成为止。当用于相同的哈希的转换被插入到GBI中时,当写操作失败时(例如由于空间不足)或者在一些超时之后(例如在访问节点失败的情况下),可以释放租用。仅由负责块的哈希的索引FPN超节点中的选定组件来许可租用。如果该组件在一些时间内在它的超节点中没有收到法定个数,则租用也将不被许可。当索引FPN组件失败或者与网络分隔时,这限制重复块被同时存储到短的时间窗的可能性。(读取)取决于在指针块中保持哪种类型的地址(下文将详细讨论),可以基于块的哈希密钥或块的唯一块id来读取块。可以通过读取足够多的分段来重构块。为了实际读取数据,首先需要查找SCC中的分段的偏移量。通过哈希的读取需要用于查找唯一块id的额外步骤。通过参考转换高速缓冲存储器和全局块索引,其可以如同去重那样完成。使用访问节点上的转换高速缓冲存储器来找到SCC偏移量。如果在高速缓冲存储器中找到唯一块id,则相关联条目已经包括数据偏移量。该偏移量可能是陈旧的,因此,当处理片段读取请求时在存储节点上验证该偏移量。如果在转换高速缓冲存储器中不存在用于分段的条目,则向主控该分段的同步运行的存储节点转发该分段读取请求。存储节点可以使用在转换高速缓冲存储器中找到的偏移量来直接读取数据。如果偏移量未知或无效,则必须读取SCC索引条目。在通常情况下,这仅需要在一个组件上完成,因为相同的块的分段通常以相同的偏移量存储在所有SNCiagA SCC中。如同在重复消除中,包括足够多的分段的SCC的索引被下载到转换高速缓冲存储器中,以加速将来的读取。仅需要读取原始分段来重构块。优选原始分段,因为根据它们来重构原始数据不需要擦除编码。但是,改为读取一些冗余分段以在盘之间更均匀地传播读取请求可能是有益的。(故障恢复)由合适的FPN层检测索引和存储节点的故障。在不同的索引/存储节点上(使用一致性)重建在故障节点上主控的FPN组件。选择这些节点以维持每个节点的组件的数目的良好平衡。当组件的位置改变时,从以前的位置传递或者从对等组件重构与该组件相关联的全部数据(分别是同步运行或全局块索引条目)。该重构过程在后台中进行。在索引FPN中,重复并且可以简单地复制全局块索引转换。在数据FPN中,通过读取其余分段、重构原始块、重编码丢失分段并且在新组件的位置写入丢失的SCC,来重构SCC。由于负载平衡,将典型地在多个节点上传播恢复的组件。数据重构因此将向多个节点并行写入,从而产生高的重建性能,并且快速地恢复想要的弹性等级。(删除和空间回收)使用分布式垃圾收集过程来完成块的删除。与NPL I中所述的相同的总体算法可以适用于该系统。分布式垃圾收集总而言之,在SCC索引中针对每个块维持引用计数器。块的引用计数器是引用该块的指针块的数目。仅由周期性的垃圾收集过程改变计数器值。垃圾收集使用全局状态机制全局同步化地在多个阶段中运行。在第一阶段中,对在最后一个垃圾收集之后写入的全部新的指针块进行处理,并且向主控被指向的块的存储节点发送计数器增加请求。当全部块都被处理之后,引用计数器更新通过唯一块id来分类,并且成批地应用于给定SCC中的全部块。然后,识别引用计数器为O的指针块。由于这些块将要被移除,所以向它们指向的全部块发送计数器减小请求。再次应用引用计数器更新,并且如果更多指针块被移除,则开始另一个减小阶段。被称为时期的对阶段的分割简化了具有块写入的全局块索引的同步化一在与块被写入的时期相同的时期中从不移除该块,并且推进到下一个时期需要全部未决的全局块索引更新完成。空间回收垃圾收集过程仅将块标记为死亡——从全局块索引移除它们的转换,并且针对它们不能消除新的重复,但是它们的存储尚未被释放。在后台中回收该空间,一次一个see。空间回收将减小同步运行的平均尺寸。为了防止每个SCC元数据的数量无限地增长,将连结连续的SCC以将平均SCC尺寸维持在界限之内。仅可以连结具有连续的同步运行的SCC。对于来自相同流运行的同步运行的连结给予优先权一如果不存在具有来自该流运行的数据的其他SCC,则来自不同流运行的同步运行仅可以被放置在一个SCC中。(系统增长)当向该系统增加新的存储节点并且它的容量增加时,FPN超节点的数目必须增加以便维持良好的负载平衡。这是通过增加区域前缀的长度来完成的——每个FPN组件被分割成具有更长的前缀的两个新组件。基于哈希密钥在新组件之间分割全局块索引条目。还在新的超节点之间分割同步运行。这是通过扩展被解释为区域前缀的同步运行标识符的比特的数目来完成的,其中流运行Id的最不重要比特被移动到区域前缀。例如,具有 id(前缀:流运行:序列号)01:0:0、01:1:0、01:2:0、01:3:0、01:4:0 和 01:5:0 的同步运行等效于分割之后的 010:0:0、011:0:0、010:1:0、011:1:0、010:2:0 和 011:2:0。结果,当系统增长时,同步运行以流运行的粒度均匀地分布在新的超节点之间。如果在分割之后属于不同超节点的同步运行被连结成单个SCC,则该SCC将通过后台操作而被分割。但是,这很少发生,因为优先权在流运行间连结之前被给予了流运行内连结。因此总是在新增加的节点上重新平衡组件(并且因此数据),以提供高的即时写带宽。(数据组织讨论和评价)(流运行尺寸的影响)流运行的尺寸确定了新的超节点将多频繁地针对数据流而被选择。存在与流运行尺寸的选择相关的折中。对于负载平衡而言经常切换到新的超节点(例如在每个同步运行之后)是好的,但是:导致数据在系统增长之后分散在超节点之间阻止盘降速。需要找到在每个同步运行之后切换和只有超节点满了之后才切换之间的恰当平衡。(容量平衡)超节点组件用于平衡系统中的容量利用率。与存储节点上存在的存储容量的数量成正比地向存储节点指配组件。由于一直是整个组件被传递,所以它们中的多个存在于每个存储节点上,使得平衡粒度较小。如果全部超节点大致具有相同的尺寸,则超节点组件级别的平衡产生平衡的容量利用率。流运行到超节点的统一随机分配防止形成超节点尺寸的任意显著的不平衡。即使在输入数据中和面对删除时出现关联,超节点仍然是平衡的。与通过哈希分布块的系统相比,收集单元相对大——在所提出的系统中分配整个流运行,其至少比块大3个量级。如果流运行太大,则如果使用到超节点的简单的统一分配,则系统的最大利用率将受损害。已完成用于评价分配单元尺寸的选择如何影响通过随机分配可实现的最大利用率的实验。向随机选择的超节点分配流运行,直到遇到完整的超节点为止。该实验假设48TB系统,其中每个超节点的尺寸是1.5TB。对于尺寸为64MB的流运行,超节点之间的不平衡平均是2%。利用严格的统一随机分配策略,当系统容量的98%被写入时,系统将变满。如果原始选择的超节点空间不足,则可以通过在不同的超节点中尝试分配来提高它。这允许新的写入达到几乎100%的利用率,同时数据删除平均而言将仍然不会导致显著的不平衡。(冗余和并行性)数据FPN的超节点基数确定:数据FPN的冗余一不到一半的活动FPN组件可能永久失败;否则一致性法定个数丢失可用的数据弹性类别的数目——擦除编码可被配置为产生从O到多达SNCss-1个冗余分段指配给单个流的并行的数量。每个块写入要求写入SNCssA分段,并且块读取要求至少读取该块的原始分段。因此,单个数据流实际上被剥离到SNCssA存储节点上。该剥离通过并行化基于多达SNCiis个存储盘的数据访问来提高每个流的吞吐量。可以增加SNCiag以针对更高的单个流的吞吐量而配置该系统。但是,过高的SNCia^f使流局域性和随机读取性能降级,因为必须访问许多盘来读取单个块。标准超节点基数值是12,其应该提供足够的并行性以使单个客户端的吞吐量饱和,同时维持良好的流局域性和随机读取性能。索引FPN的超节点基数可能更低,因为全局块索引转换被复制,未被擦除编码。通过基于哈希的负载分布内在地提供并行性。因此,在该情况下仅需要考虑网络存活性和可用性。(指针块中的块地址)指针块是引用以前存储的其他块的块。它们可以用于将各个数据块链接到如文件或整个文件系统快照的数据结构中。可以通过内容导出的哈希地址或通过依赖于位置的唯一块地址来访问系统中存储的每个块。这两个地址中的任意一个地址应该原则上被存储在指针块中。指针类型的选择伴随多个折中。在图1中概述了这些折中。地址尺寸哈希地址是与一些元数据(例如弹性类别)连结的块的内容的哈希。该地址必须足够大以使得能够在预计 尺寸的系统中可忽略哈希冲突。假设使用SHA-1哈希函数,哈希地址的尺寸是20个字节。唯一块地址是(同步运行Id,块序列号)对,其唯一地标识系统中的块。可以使该地址比哈希小得多——因为同步运行Id是对称指配的,所以不存在冲突的可能。唯一地标识块所需要的比特的数目依赖于在系统的寿命期间向系统写入的非重复的块的数目。即使假设极小的IK块尺寸并且每个同步运行216个块,64比特的同步运行标识符空间将不会被耗尽直到24°拍字节的非重复数据被写入系统为止。读取性能在读取块的数据之前必须查找块的位置。如果按照与最初写入块的次序相同的次序顺序地读取块,则将由转换高速缓冲存储器处理这些查找中的大部分查找,而无需任何盘访问。但是,转换高速缓冲存储器可能不包括用于流的前几个块的转换(直到预取了流的Scc索引为止),并且对于随机读取高速缓冲存储器完全无效。在这些情况下,必须完成昂贵的分段位置查找。如果指针块是哈希地址,则该查找将必须遍历全局块索弓丨,从而引发盘寻道(seek)。这对于唯一块地址而言是不必要的,因为所需要的同步运行Id被包括在该地址中。块再定位当使用静态的同步运行到超节点映射时,在一些情况下将块移动到不同的同步运行可能是有用的。可能有必要提高非对称网络中的负载平衡。如果在指针块中使用哈希地址,则块的同步运行可以改变而无需改变指向它的指针块的内容。另一方面,如果使用唯一块地址,则指向再分配的块的全部指针块将需要被更新。该更新将需要被一直传播到块树根,因为存储在指针块中的地址被包括在指针块的哈希的计算中。关于哈希查找的要求
通过块的哈希地址的读取块依赖于全局块索引中存在的它的转换。如果这是读取块的唯一方式,则系统将必须保证在块写入操作完成之前GBI被成功地更新。这将增加块写入操作的延迟或者需要哈希租用持续。系统复原如果系统经历了比其被配置要经受的故障更多的故障,则一些块可能变得不可读取。由于去重,包括不可读取的块的全部文件系统快照将受影响。在许多情况下,丢失的数据仍然存在于原始系统中且将利用下一个备份被写入系统。在新的同步运行中将再次存储该块,但是具有相同的哈希地址。如果指针块改为包括哈希地址以代替唯一块地址,则当读取原始指向不可读取的块的旧文件系统时也可以使用该新的块。实际上,重写丢失的块将自动“复原”该系统。具有线索(hint)的指针块通过将每个指针的哈希地址和唯一块地址二者都保持在指针块中,能够将哈希地址的益处(块再定位、系统复原)与唯一块地址的那些益处(更好的随机读取性能、对于哈希查找的更宽松的要求)组合。哈希地址将是权威性的并且仅它将影响指针块的哈希。唯一块地址将是用于避免全局块索引更新的线索,只要该线索是最新的。该线索可能变得陈旧(当指针块改变位置或者变得不可读取时),并且在这些情况下可以慢慢地更新该线索。该方法的负面效应在于其需要用于指针块的大部分存储容量。(唯一块写入的性能)如上所述,备份系统更通常被写入而不是读取,并且对于该系统的可行性而言高的写吞吐量是必要的。在本发明中提出的架构中,当唯一数据的每个流最初被写入时,其被剥离到SNCii$个盘上。另一方面,在进行基于哈希的块分布的系统中,在全部盘上统一地传播该写入。因此,在本发明中提出的系统提供了明显更低的单个流的写吞吐量。但是,如上所示,单客户端系统典型地无论如何不能利用该高吞吐量,因此我们发现该限制不重要。负载平衡在大型系统中,典型地将同时写入多个流。将随机地并且独立地针对每个流分配同步运行。因此,可以选择相同的超节点来主控多个同步运行,迫使多个流共享单个存储节点的吞吐量。通过在同步运行分配算法中使用多个随机选择,可以减轻负载不平衡。当选择新的超节点时,向d个随机选择的超节点发送查询,并且选择具有最少活动地写入的流运行数目的超节点。已经显示使用多个随机选择显著提高了随机化的负载平衡。图2和图3显示了负载不平衡如何随着系统尺寸增加而影响写带宽。对于不同数目的超节点和分配查询,仿真了 η个流运行到η个超节点的分配。注意到,超节点的数目总是与系统尺寸成正比。图2显示了分配给单个超节点的最大流运行数目的平均。如所期望的,仅使用一个附加分配查询显著地减少了超节点中的流运行的最大数目。但是,即使利用许多查询,也可以高概率找到具有多个活动流运行的超节点。流运行被分配给该超节点的流将经历降级的写吞吐量,直到该流运行被耗尽并且另一个流运行被分配为止。但是,图3显示了即使单独的流可能经历一些减速,该负载不平衡对于聚合写带宽的影响也不大。通过计数至少被分配了一个流运行的超节点的数目来计算写带宽(基本前提是单个流足以使一个超节点的吞吐量饱和)。利用10个查询,即使对于非常大的系统,实现的带宽也在最大值的5%以内。流分类在进行基于哈希的分布的系统中,在相同的存储容器中复用属于不同的流的写入。由于相同的流将不可能一起被读取,所以该复用的容器的读取是不够的,因为它们必须略过不必要的数据。在NPL I中使用流分类,以通过将来自流的数据接合成更大的组块来改善将来的读取。但是流分类要么增加延迟(如果它是在写入过程期间内嵌完成的),要么需要由后台过程按照分类的流的次序重写全部数据。在本发明中提出的架构避免将来自不同流的数据复用在一起,因为针对每个流创建分离的流运行。(读吞吐量)所提出的架构的主要动机在于通过保留更多流局域性来提高大型系统中的读吞吐量。(流局域性保留)流局域性在进行精确去重的存储系统中自然地降级。由于本文的关注点在于由存储系统的内部数据组织导致的额外降级,所以我们将不通过分析针对唯一数据块的流如何保留局域性而考虑去重的效果。最初,将输入流的同步运行尺寸的部分按顺序放在盘上。同步运行的期望的尺寸在从几个兆字节到数十兆字节的范围内,因而输入流的顺序读取将导致存储盘上的可忽略的少量寻道。删除可以从同步运行的中间移除块。垃圾收集随后将导致同步运行的尺寸缩小。在同步运行尺寸显著下降到足以影响顺序读取性能之前,将如上所述地连结连续的同步运行。连结将保留高达流运行的尺寸的数据的局域性。如果从仅剩余同步运行的一半的数据流的流运行尺寸的部分移除过多块,则连结将开始合并属于不同流的同步运行,并且对于原始流的局域性的保留将不再有效。在系统增长之后,已有数据被传递到新的节点以保持容量利用率平衡。但是,如上所示,流运行一直作为一个单元保持在一起。因此,流局域性不受新存储节点的添加的影响。(与基于哈希的块分布的比较)在基于哈希的块分布和本发明中提出的每个流的块分布两者中的读吞吐量都显著地依赖于写和读期间的访问形式。为了使得两个架构之间的折中更加可见,我们将分析这些系统在一些典型的情况中如何运作。单流写入、单流读取虽然在大型系统中极不可能发生但是最简单的情况是在数据流被初始存储并且是正被写入的唯一的流时,顺序读取数据流。在该情况下,基于哈希的分布非常有效,提供了全部节点的组合吞吐量。利用SNCiag个存储节点的并行,在本发明中提出的架构执行得足够好,其中假设SNCiagA存储节点的并行足以使单个客户端饱和。多流写入、单流读取
在实际系统中,多个流被同时写入并且它们中的仅一个稍后被读取回时的情况是可论证地相当典型的。当多个系统在共享备份窗口期间并行被备份并且随后仅其中一个系统遭受故障并且从备份中被恢复时,这可能容易出现。对于使用基于哈希的分布的系统而言,该情况是较不利的。由于属于全部流的块被统一地分布到相同的盘上容器,仅读取回一个流将需要寻道或略过其他块。NPL I试图通过当块在写缓冲器中等待提交时在写入期间在后台并且内嵌地根据流Id来分类容器中的块来解决该问题。该流分类的效率受到容器尺寸的限制。在本发明中提出的架构不受该问题影响,因为来自不同数据流的写入被存储在独立的容器中。在该情况下的读吞吐量仍然是SNCiag个存储节点的组合吞吐量。多流读取如果在多个备份系统的大规模故障之后并行恢复多个备份图像则可能同时读取回多个流。但是,当读取高度分段的去重流时,即使单个外部读取流也可能对于该系统看起来像多个流读取。在具有基于哈希的分布的系统中,全部存储节点有效地存储每个流的缩小的版本。这些缩小的流在的每一个必须被并行读取以重建整个流。每个存储节点必须服务于来自该系统中正被读取的每个流的访问。由于存储节点和访问节点二者都具有固定数量的用于对读取进行缓冲的存储器,所以必须利用增加同时读取的流的数目来使用更小的盘读取尺寸。使用小的盘读取显著地降低了吞吐量,从而最终将顺序读取降级成随机块读取。所提出的系统不受相同问题的损害,因为每个数据流被剥离到仅存储节点的小的集合上。但是,与基于哈希的分布不同,其受到不完美负载平衡的损害——这对于将要从存储节点的小集合读取的许多流而言是可能的,同时其他存储节点空闲。读取冗余分段以作为一些原始分段的交换,可以比通过擦除编码算法更高的CPU消耗为代价改善负载平衡。然而,对于大量同时读取流,读取性能显著高于使用基于哈希的块分布时的读取性能。(全局块索引更新)如上所述,全局块索引将哈希映射到块的唯一块地址(同步运行中的同步运行Id和序列号)。由于该决定,当数据位置改变或者垃圾收集完成时全局块索引转换无需改变——块地址仍然有效直到该块被移除为止。备选的解决方案将是保持SCC Id和块的偏移量处于该SCC中。这将可能通过避免(同步运行Id、序列号)到(SCCId、偏移量)的转换来改善随机读取性能。但是,其将需要在改变SCC中的分段的偏移量(空间回收、连结)的任意后台操作之后更新GBI转换,并且将因此增加索引节点上的负载。(对于非对称网络的支持)基于哈希的分布在全部存储节点上统一地传播数据流的块。因此,访问节点必须将相同数量的数据发送到每个存储节点。写入数据流的带宽将受到访问节点与存储节点之间的最慢网络链路的吞吐量的限制。在本发明中提出的架构中,访问节点在选择超节点并且因此它们存储数据的存储节点时具有更多的自由度。这可用于改善非对称系统中的写性能。如上所述,假设在本发明中,网络由节点组构成。组中的节点可以高的点对点吞吐量来通信,同时组之间的链路提供较低的每节点吞吐量。
访问节点将试图仅在它们自己的组中的存储节点上分配流运行,以避免使用用于写入的组间链路。由于流运行被分配给超节点而不是直接分配给存储节点,所以数据FPN密钥空间被分隔,使得数据FPN中的前缀的范围对应于一组节点。如果超节点被分配给一组节点,则全部它的组件被保持在属于该组的存储节点上。修改流运行分配算法以仅考虑与访问节点相同的组中的超节点。只有所选超节点满了时,才执行不受节点组约束的常规分配。该组的本地的分配策略消除了经过较慢链路的大部分带宽密集型数据传递。除非组系统的容量被耗尽,否则仅由与访问节点相同的组中的存储节点处理块写入。仍然统一地向全部索引节点发送GBI查询,但是它们并不消耗大量带宽。类似地,如果重复被存储在不同的组中,则当写入重复块时由转换高速缓冲存储器完成的Scc索引预取可以使用一些组间带宽。但是,由于Scc索引比数据的尺寸小,所以它们不应该超过组间吞吐量。在故障之后的数据重构也不需要太多组间带宽,因为全部超节点组件处于相同的组中。但是,该策略伴随一些折中。仅在单个节点组中完成容量平衡——如果一些客户端比其他客户端写入更多数据,则在它们的组中的空闲空间将比其他组中的空闲空间更快速地被耗尽。如果相同组中的存储节点的故障不是独立的,则系统的冗余可能减小,因为超节点的全部组件被放置到相同的节点组中。虽然新的写入不产生跨组的网络流量,但是对读取的影响依赖于去重形式。例如,当访问节点写入已经由连接到不同组的访问节点写入的数据时,数据仅被存储在原始组中。从第二访问节点读取数据将必须从该原始组传递全部数据。在该情况下,读取性能可能比在全部超节点上统一地散布数据更差。在本发明中主张不管最坏情况中的较低的读吞吐量,当考虑该网络的较低成本时,部署非对称网络可能有意义。首先,如果相同的客户端系统始终通过一个网络组中的访问节点被备份,则仅存在于该系统上的任意唯一数据将有可能被存储在该组中。将可以高吞吐量读取该数据。其次,故障客户端系统的恢复典型地涉及仅读取若干备份图像。如果同时读取极少量流,则组间链路应该足够快而不是瓶颈,即使数据被存储在其他节点组上。并且最终,从远程节点组读取数据无需与同时的写入竞争组间网络吞吐量。(对掠夺者(marauder)的延迟和弹性)与基于哈希的分布相比,所提出的架构可以对块写入引入更多的延迟,因为需要额外的网络跳来查询全局块索引。并且其可能对于多个相对慢的客户端具有更高的写延迟一需要更多的时间来容纳用于顺序写入的大缓冲器。这是不将来自不同流的块混合的结果。在进行统一的基于哈希的分布的系统中,来自全部流的块可以被累积到相同的写缓冲器中并且被顺序地刷写到盘。另一方面,在基于哈希的分布系统中所需的、可以显著地增加写延迟的任意内嵌的流分类在该系统中是不必要的。所提出的架构对于掠夺者更有弹性,其中该掠夺者是工作得足够快而没有被声明故障但是比其他节点操作得更慢的节点。在该架构中,仅访问具体节点的流受该节点的缓慢或故障影响。利用基于哈希的分布,由网络中最缓慢的节点确定整个系统的性能。因为仅若干存储节点正服务于代表单个流的写请求,所以能够请求流中的未处理的数据的明确的刷写以减小延迟。例如当处理这样一些客户端中的NFS同步请求时,这是有用的,其中该客户端通常阻止进一步操作直到以前提交的全部数据被写入为止。访问节点可以请求明确的高优先权的刷写,因为一次仅由一个流向一个同步运行发送写入。在基于哈希的分布的系统中这是不可行的,因为必须发送对于全部存储节点的请求。(同步运行到超节点的静态对动态分配)在本发明中提出的解决方案中,向超节点静态地分配同步运行。该分配仅基于同步运行Id并且在不改变同步运行的Id的情况下不改变。可以考虑同步运行到超节点的动态映射,其中必须查找同步运行的数据被存储到的存储节点并且该存储节点不是由同步运行Id静态地确定的。该动态映射的优点在于单独的超节点可以改变位置以适应系统中的改变。例如,在非对称网络中,同步运行可以被移动得更靠近最频繁地访问它们的访问节点。本发明决定在所提出的系统中不进行附加映射,因为其将引入额外的网络跳以用于同步运行到存储节点查找,从而增加读取延迟。(结论)本发明引入了用于高效的可缩放高性能内嵌去重的新架构,其将用于精确去重的基于DHT的全局块索引与流已知的顺序数据放置分离。以上描述已显示与现有解决方案相比,当同时读取的流的数目随着系统尺寸增长时,在本发明中提出的架构改善了大型系统中的读取性能。即使面临数据删除和节点添加,该系统也保留流局域性,同时维持存储节点之间的良好的容量平衡。当同时写入多个流时,其还避免了对来自不同流的块进行交织。 在对称网络中,基于哈希的分布提供略高的写吞吐量,但是以读取性能为显著的代价。即使出现同时读取,在本发明中提出的架构在非对称系统中也提供明显更高的写性能,但是读性能高度地依赖于访问形式。进行基于哈希的分布的现有系统在小型到中型系统中更有效,因为它们避免了负载平衡和热点的问题。但是,我们发现当需要高多流读取吞吐量时,在本发明中提出的架构更好地适用于大型安装。<第二示例性实施方式>将参考图4到图10来描述本发明的第二示例性实施方式。图4是用于显示整个系统的配置的框图。图5是用于示意性地显示存储系统的框图,并且图6是用于显示配置的功能框图。图7到图10是用于说明存储系统的操作的说明视图。这里的示例性实施方式显示了存储系统是这样一种系统的情况,该系统诸如是HYDRAstor并且通过连接多个服务器计算机来配置该系统。但是,本发明的存储系统不限于具有多个计算机的配置并且可以由一个计算机来配置。如图4中所示,本发明的存储系统10经由网络N被连接到用于控制备份过程的备份系统11。备份系统11获得存储在经由网络N连接的备份目标设备12中的备份目标数据(存储目标数据),并且请求存储系统10进行存储。因此,存储系统10将请求被存储的备份目标数据作为备份来存储。如图5中所示,示例性实施方式的存储系统10采用连接多个服务器计算机的配置。具体而言,存储系统10装配有充当用于控制存储系统10的存储/再生操作的服务器计算机的访问节点IOA(第一服务器)、充当装配有用于存储数据的存储设备的服务器计算机的存储节点IOB(第二服务器)以及用于存储表示数据存储目的地的索引数据的存储节点IOC (第三服务器)。访问节点IOA的数目、存储节点IOB的数目和存储节点IOC的数目不限于图5中所示的那些数目,并且可以采用连接更多节点10A、10B和IOC的配置。此外,此示例性实施方式的存储系统10具有分割存储目标数据并且将它们以分布式的方式存储在作为存储设备的存储节点IOB中的功能。存储系统10还具有通过使用用于表示存储目标数据(块数据)的特征的唯一哈希值来检查相同内容的数据是否已经被存储的功能,并且对于已经被存储的数据,通过引用该数据的存储位置来消除重复存储。下面将详细描述具体的存储过程。图6显示了存储系统10的配置。如该图中所示,构成存储系统10的访问节点IOA包括用于控制要存储的数据的读和写的数据存储控制单元21。应该注意到,通过安装在诸如图5中所示的访问节点IOA的CPU(中央处理器)的算术设备中的程序来配置数据存储控制单元21。例如,在存储在存储介质(例如CD-ROM)中的状态中向存储系统10提供上述程序。备选地,可以将程序存储在网络上的另一个服务器计算机的存储设备中,并且从其他服务器计算机经由网络向存储系统10提供该程序。后文将详细描述数据存储控制单元21的配置。首先,当数据存储控制单元21接收作为备份目标数据A的流数据的输入时,数据存储控制单元21将备份目标数据A分割成预定容量(例如64KB)的块数据D,如图7中所示。然后,基于该块数据D的数据内容,数据存储控制单元21计算用于表示该数据内容的唯一哈希值H(特征数据)。例如,通过使用预设的哈希函数来根据块数据D的数据内容计算哈希值H。然后,数据存储控制单元21执行重复确定以确定新近将要存储的块数据D是否已经被存储在存储节点IOB即存储设备中。此时,数据存储控制单元21检查块数据D的哈希值是否存在于最近已经在访问节点IOA中被读取的任何下述SCC索引B2中。如果块数据D的哈希值不存在于任何SCC索引B2中,则数据存储控制单元21随后检查新近将要存储的块数据D的哈希值是否存在于被存储在索引节点IOC中的全局块索引Cl中。此外,在SCC索引B2在访问节点IOA中未被读取的情况下,数据存储控制单元21还检查新近将要存储的块数据D的哈希值是否存在于被存储在索引节点IOC中的全局块索引Cl中。如果新近将要存储的块数据D的哈希值不存在于被存储在索引节点IOC中的全局块索引Cl中,则数据存储控制单元21最新将流数据的块数据保存在存储节点IOB中。将参考图7和图8具体描述数据存储控制单元21将块数据D存储在存储节点IOB中的方面。数据存储控制单元21顺序地将通过分割作为备份目标数据A的数据流而生成的块数据Dl等等存储在具体存储节点IOB中形成的SCC文件BI中。此时,数据存储控制单元21确定已用存储容量最低或者存在开放的SCC文件BI的存储节点IOB作为用于存储块数据Dl等等的具体存储节点10B。应该注意到,数据存储控制单元21可以借助其他方法来确定用于存储块数据Dl等等的存储节点10B。然后,数据存储控制单元21在SCC文件BI中存储将要存储的数据流的块数据D1、D2、D3等等的多个连续的单元。此时,数据存储控制单元21将SCC文件BI中的块数据Dl、D2、D3等等的各个单元的存储位置与存储的块数据D1、D2、D3等等的哈希值H相关联,并且将它们作为SCC索引B2(用于存储位置指定表)存储在用于存储块数据D1、D2、D3等等的存储节点IOB中。此外,数据存储控制单元21将作为用于指定用于存储块数据Dl、D2、D3的存储节点IOB的标识信息(存储设备标识信息)的ID (例如用于表示具体SCC文件BI中的特定区域的ID (见图8))与块数据D1、D2、D3的哈希值相关联,并且将它们存储在索引节点IOC中作为全局块索引Cl (存储设备指定表)。在这里,数据存储控制单元21应该将用于指定存储节点IOB的ID不与哈希值而是与哈希值的一部分相关联并且存储它们。此时,数据存储控制单元21以分布式的方式将全局块索引Cl存储在多个索引节点IOC中。为了以分布式的方式存储哈希值和ID,可以使用任意方法。由于如上所述地存储数据,所以将备份目标数据A的块数据D1、D2、D3等等的多个连续的单元连续地存储在同一存储节点IOB中,并且还将用于指示它们的存储位置的数据单元连续地存储在SCC索引B2中。由全局块索引Cl管理用于存储块数据D1、D2、D3等等的存储节点IOB (具体SCC文件BI中的特定区域)。应该注意到,实际地执行上述块数据Dl、D2、D3等等的存储过程,使得存储节点IOB (超节点)的组被用作具体存储节点10B,并且以分布式的方式存储块数据D1、D2、D3等等的各个单元。现在将参考图7来描述通过进一步分割块数据来存储块数据的方面。数据存储控制单元21如上所述地压缩新近将要存储的块数据D,并且如图7中所示地将该数据分割成具有预定容量的多个分段数据的片段。例如,如由图7中的附图标记EI到E9所示,数据存储控制单元21将数据分割成9个分段数据的片段(分割数据41)。此夕卜,数据存储控制单元21生成冗余数据使得即使通过分割获得的一些分段数据丢失了,也可以恢复原始数据,并且数据存储控制单元21将冗余数据存储在通过分割获得的分段数据41中。例如,如由图7中的附图标记EIO到E12所示,数据存储控制单元21增加3个分段数据(冗余数据42)。因此,数据存储控制单元21生成数据集合40,数据集合40包括由9个分割数据41和3个冗余数据构成的12个分段数据。然后数据存储控制单元21 —个接一个地分布并且存储分段数据,其中该分段数据将生成的数据集合组合成在作为超节点的存储节点IOB的组中形成的存储区域31。例如,如图7中所示,在生成12个分段数据El到E12的情况下,数据存储控制单元21将分段数据El到E12中的一个存储在形成在12个存储区域31中的数据存储文件Fl到F12(数据存储区域)中的一个数据存储文件中。接下来,将参考图9和图10来描述这样一种情况,其中在该情况中输入具有与上述数据流A数据内容几乎一致的数据内容的备份目标数据A’的数据流作为新的存储目标数据。首先,数据存储控制单元21执行重复确定以确定备份目标数据A’的块数据Dl是否已经被存储在作为存储设备的存储节点IOB中。此时,数据存储控制单元21检查在访问节点IA中是否已经读取SCC索引B2。在该情况下,由于尚未读取SCC索引B2,所以数据存储控制单元21检查新近将要存储的块数据Dl的哈希值(在这里是哈希值的一部分)是否存在于被存储在索引节点IOC中的全局块索引Cl中。如果新近将要存储的块数据Dl的哈希值(哈希值的一部分)存在于被存储在索引节点IOC中的全局块索引Cl中,则数据存储控制单元21指定与该哈希值(哈希值的一部分)相关联的存储节点IOB(具体SCC文件BI的区域),并且引用存储节点IOB中的SCC索引B2。数据存储控制单元21将存储在SCC索引B2中的哈希值与新近将要存储的块数据Dl的哈希值进行比较,并且如果它们匹配,则引用SCC索引B2并且将SCC文件BI中的块数据的存储位置称为新近将要存储的块数据Dl。因而,新近将要存储的块数据Dl自身实际上并没有被存储,并且可以消除重复存储。同时,数据存储控制单元21将如上所引用的、存储在存储节点IOB中的SCC索引B2读出到访问节点10A。然后,对于备份目标数据A’的后续块数据D2和D3,数据存储控制单元21将块数据D2和D3的哈希值与存储在被读出到访问节点IOA的SCC索引B2中的哈希值进行比较,并且如果它们匹配,则引用SCC索引B2并且将存储在SCC文件BI中的块数据的存储位置称为新近将要存储的块数据D2和D3。因此,新近将要存储的块数据D2和块数据D3自身实际上并没有被存储,并且可以消除重复存储。此外,可以更高的速度执行重复确定。如上所述,本发明包括多个存储节点10B,并且实现了分布式的方式的数据存储以便保持存储节点之间的容量的良好平衡。此外,根据本发明,还能够在索引节点IOB(超节点)的具体组中本地保持通过分割存储目标数据而生成的块数据的预定数量的连续单元。如此,可以更高的速度执行去重过程,并且此外,还可以更高的速度执行数据读取过程。<补充注释>上面公开的示例性实施方式的全部或一部分可以被描述为以下补充注释。下文将描述本发明的存储系统100的配置的概况(见图11)、用于存储程序的计算机可读介质以及数据存储方法。但是,本发明不限于下述配置。(补充注释I)一种存储系统100,包括:数据存储控制单元101,该数据存储控制单元101以分布式的方式在多个存储设备110中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备110中存储具有与已被存储在存储设备110中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在该存储设备110中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除,其中该数据存储控制单元101在该多个存储设备110中的特定存储设备110中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备110中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备110中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备110的存储设备标识信息和被存储在该特定存储设备110中的该块数据的该特征数据以作为存储设备110指定表。(补充注释2)根据补充注释I的存储系统,其中该数据存储控制单元基于通过分割新近将要存储的存储目标数据而生成的块数据的该特征数据来参考该存储设备指定表以便指定存储包括该块数据的该特征数据的该存储位置指定表的该特定存储设备,并且从该特定存储设备读出该存储位置指定表。(补充注释3)根据补充注释2的存储系统,其中该数据存储控制单元基于从该特定存储设备读出的该存储位置指定表来确定通过分割新近将要存储的该存储目标数据而生成的块数据是否已被存储在该存储设备中。
(补充注释4)根据补充注释3的存储系统,其中如果通过分割新近将要存储的该存储目标数据而生成的该块数据的该特征数据不存在于从该特定存储设备读出的该存储位置指定表中,则该数据存储控制单元通过基于通过分割新近将要存储的该存储目标数据而生成的该块数据的该特征数据来参考该存储设备指定表而指定存储包括该块数据的该特征数据的另一存储位置指定表的另一特定存储设备,并且从该另一特定存储设备读出该另一存储位置指定表。(补充注释5)根据补充注释I的存储系统,还包括:至少一个第一服务器,其控制将存储目标数据存储到多个存储设备中的操作,以及多个第二服务器,其构成该多个存储设备,其中该数据存储控制单元将该存储位置指定表从该第二服务器中的一个第二服务器读出到该第一服务器。(补充注释6)根据补充注释5的存储系统,还包括:多个第三服务器,其存储该存储设备指定表,其中该数据存储控制单元以分布式的方式在该多个第三服务器中存储该存储设备指定表。(补充注释7)一种存储程序的计算机可读介质,该程序包括指令,该指令用于使信息处理设备实现:数据存储控制单元,该数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在该存储设备中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除,其中该数据存储控制单元在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。(补充注释8)根据补充注释7的存储该程序的计算机可读介质,其中该数据存储控制单元基于通过分割新近将要存储的存储目标数据而生成的块数据的该特征数据来参考该存储设备指定表以便指定存储包括该块数据的该特征数据的该存储位置指定表的该特定存储设备,并且从该特定存储设备读出该存储位置指定表。(补充注释9)
一种数据存储方法,用于以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在该存储设备中的该存储目标数据作为该另一条存储目标数据来执行重复存储消除,该方法包括:在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,以及彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。(补充注释10)根据补充注释9的数据存储方法,还包括:基于通过分割新近将要存储的存储目标数据而生成的块数据的该特征数据来参考该存储设备指定表以便指定存储包括该块数据的该特征数据的该存储位置指定表的该特定存储设备,以及从该特定存储设备读出该存储位置指定表。
权利要求
1.一种存储系统,包括: 数据存储控制单元,所述数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在所述存储设备中的所述存储目标数据作为所述另一条存储目标数据来执行重复存储消除,其中 所述数据存储控制单元在所述多个存储设备中的特定存储设备中存储通过分割所述存储目标数据而生成的所述存储目标数据的块数据的多个连续单元,在所述特定存储设备中彼此关联地存储基于所述块数据的数据内容的特征数据和表示所述块数据在所述特定存储设备中的存储位置的存储位置信息,以作为存储位置指定表,并且彼此关联地存储用于标识所述特定存储设备的存储设备标识信息和被存储在所述特定存储设备中的所述块数据的所述特征数据,以作为存储设备指定表。
2.根据权利要求1所述的存储系统,其中 所述数据存储控制单元基于通过分割新近将要存储的存储目标数据而生成的块数据的所述特征数据来参考所述存储设备指定表,以便指定存储包括所述块数据的所述特征数据的所述存储位置指定表的所述特定存储设备,并且从所述特定存储设备读出所述存储位置指定表。
3.根据权利要求2所述的存储系统,其中 所述数据存储控制单元基于从所述特定存储设备读出的所述存储位置指定表,来确定通过分割新近将要存储的所述存储目标数据而生成的所述块数据是否已被存储在所述存储设备中。
4.根据权利要求3所述的存储系统,其中 如果通过分割新近将要存储的所述存储目标数据而生成的所述块数据的所述特征数据不存在于从所述特定存储设备读出的所述存储位置指定表中,则所述数据存储控制单元通过基于通过分割新近将要存储的所述存储目标数据而生成的所述块数据的所述特征数据来参考所述存储设备指定表,来指定存储包括所述块数据的所述特征数据的另一存储位置指定表的另一特定存储设备,并且从所述另一特定存储设备读出所述另一存储位置指定表。
5.根据权利要求1所述的存储系统,还包括: 至少一个第一服务器,所述至少一个第一服务器控制将存储目标数据存储到多个存储设备中的操作,以及 多个第二服务器,所述多个第二服务器构成所述多个存储设备,其中 所述数据存储控制单元将所述存储位置指定表从所述第二服务器中的一个第二服务器读出到所述第一服务器。
6.根据权利要求5所述的存储系统,还包括: 多个第三服务器,所述多个第三服务器存储所述存储设备指定表,其中 所述数据存储控制单元以分布式的方式在所述多个第三服务器中存储所述存储设备指定表。
7.一种存储程序的计算机可读介质,所述程序包括指令,所述指令用于使信息处理设备实现: 数据存储控制单元,所述数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在所述存储设备中的所述存储目标数据作为所述另一条存储目标数据来执行重复存储消除,其中 所述数据存储控制单元在所述多个存储设备中的特定存储设备中存储通过分割所述存储目标数据而生成的所述存储目标数据的块数据的多个连续单元,在所述特定存储设备中彼此关联地存储基于所述块数据的数据内容的特征数据和表示所述块数据在所述特定存储设备中的存储位置的存储位置信息,以作为存储位置指定表,并且彼此关联地存储用于标识所述特定存储设备的存储设备标识信息和被存储在所述特定存储设备中的所述块数据的所述特征数据,以作为存储设备指定表。
8.根据权利要求7所述的存储所述程序的计算机可读介质,其中 所述数据存储控制单元基于通过分割新近将要存储的存储目标数据而生成的块数据的所述特征数据来参考所述存储设备指定表,以便指定存储包括所述块数据的所述特征数据的所述存储位置指定表的所述特定存储设备,并且从所述特定存储设备读出所述存储位置指定表。
9.一种数据存储方法,用于以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且当试图在存储设备中存储具有与已被存储在存储设备中的存储目标数据的数据内容相同的数据内容的另一条存储目标数据时,通过参考已被存储在所述存储设备中的所述存储目标数据作为所述另一条存储目标数据来执行重复存储消除,所述方法包括: 在所述多个存储设备中的 特定存储设备中存储通过分割所述存储目标数据而生成的所述存储目标数据的块数据的多个连续单元,在所述特定存储设备中彼此关联地存储基于所述块数据的数据内容的特征数据和表示所述块数据在所述特定存储设备中的存储位置的存储位置信息,以作为存储位置指定表,以及彼此关联地存储用于标识所述特定存储设备的存储设备标识信息和被存储在所述特定存储设备中的所述块数据的所述特征数据,以作为存储设备指定表。
10.根据权利要求9所述的数据存储方法,还包括: 基于通过分割新近将要存储的存储目标数据而生成的块数据的所述特征数据来参考所述存储设备指定表,以便指定存储包括所述块数据的所述特征数据的所述存储位置指定表的所述特定存储设备,以及从所述特定存储设备读出所述存储位置指定表。
全文摘要
存储系统包括数据存储控制单元,该数据存储控制单元以分布式的方式在多个存储设备中存储通过分割存储目标数据而生成的块数据的多个单元,并且执行重复存储消除。该数据存储控制单元在该多个存储设备中的特定存储设备中存储通过分割该存储目标数据而生成的、该存储目标数据的块数据的多个连续单元,在该特定存储设备中彼此关联地存储基于该块数据的数据内容的特征数据和表示该块数据在该特定存储设备中的存储位置的存储位置信息以作为存储位置指定表,并且彼此关联地存储用于标识该特定存储设备的存储设备标识信息和被存储在该特定存储设备中的该块数据的该特征数据以作为存储设备指定表。
文档编号G06F3/06GK103098015SQ20118004325
公开日2013年5月8日 申请日期2011年9月21日 优先权日2010年9月30日
发明者M·韦尔尼克基, J·萨克泽普科维斯基, C·达布尼克基 申请人:日本电气株式会社