确定用于去重复的段边界的制作方法

文档序号:6498581阅读:206来源:国知局
确定用于去重复的段边界的制作方法
【专利摘要】接收散列的序列。每个散列对应于有待去重复的数据的数据组块。确定数据组块的先前存储的副本的位置,所述位置是基于散列来确定的。基于位置来确定数据组块的序列中的断点,所述断点形成数据组块段的边界。
【专利说明】确定用于去重复的段边界

【背景技术】
[0001]管理员力求高效管理文件服务器和文件服务器资源,同时保持网络受保护以防未经授权的用户而仍对经授权的用户来说可访问。将文件存储在服务器上而不是本地存储在用户的计算机上的实践已经造成相同数据存储在相同系统中的多个位置处以及甚至在相同服务器中的多个位置处。
[0002]去重复(deduplicat1n)是用于消除冗余数据、改善存储利用率和减小网络业务量的技术。基于存储的数据去重复检查大容量的数据并标识相同的整个文件或文件的章节,然后减少相同数据的实例的数目。例如,电子邮件系统可以包含相同的一兆字节文件附件的100个实例。每当电子邮件系统被备份时,都存储附件的100个实例中的每一个,这要求100兆字节的存储空间。利用数据去重复,仅存储附件的一个实例,因此节省99兆字节的存储空间。

【专利附图】

【附图说明】
[0003]为了详细描述本发明的示例性实施例,现在将对附图做出参考,在附图中:
图1A图示了用于确定段边界的系统;
图1B图示了用于确定段边界的系统;
图2图示了用于确定段边界的方法;
图3图示了用于确定段边界的存储设备;
图4A和4B示出了确定段边界的图。
[0004]标记法和命名法
如本文所使用的,术语“组块”是指数据流的连续子集。
[0005]如本文所使用的,术语“段”是指连续组块的群组。每个段具有两个边界,一个在它的开始处并且一个在它的结尾处。
[0006]如本文所使用的,术语“散列”是指使用散列函数创建的组块的标识。
[0007]如本文所使用的,术语“块”是指与其它文件或数据流交错的文件或数据流的划分。例如,交错数据可以包括la,2a,3a,lb,2b,lc,3b,2c,其中Ia是基础流一的第一块,Ib是基础流一的第二块,2a是基础流二的第一块等等。在一些情况下,块在长度上可以不同。
[0008]如本文所使用的,术语“去重复”是指在存储系统中或在存储节点处逻辑存储组块、段或数据的其它划分以使得在该系统或节点处存在每个唯一组块的仅一个物理副本(或者,在一些情况下,几个副本)的动作。例如,针对初始为空的存储节点去重复ABC、DBC和EBF (其中每个字母表示唯一组块)导致B的仅一个物理副本但是三个逻辑副本。具体地,如果针对存储位置去重复组块并且组块先前未被存储在存储位置处,则将组块物理存储在存储位置处。然而,如果针对存储位置去重复组块并且组块已经被存储在存储位置处,则不再次在存储位置处物理存储组块。在又一示例中,如果针对存储位置去重复多个组块并且组块中的仅一些已经被存储在存储位置处,则在去重复期间在存储位置处存储仅先前未被存储在存储位置处的组块。

【具体实施方式】
[0009]以下讨论涉及本发明的各种实施例。尽管这些实施例中的一个或多个可以是优选的,但是所公开的实施例不应当被解释为或以其它方式用作限制包括权利要求在内的本公开的范围。此外,本领域技术人员将理解,以下描述具有宽泛的应用,并且任何实施例的讨论仅仅意在例证该实施例,而不旨在暗示包括权利要求在内的本公开的范围受限于该实施例。
[0010]在基于组块的去重复期间,唯一的数据组块每一个都被物理存储一次,不论可能存在多少它们的逻辑副本。所接收的后续组块可以与所存储的组块比较,并且如果比较得到匹配,则匹配的组块不再次被物理存储。取而代之,匹配的组块可以被指向组块的单个物理副本的引用替代。访问引用的过程可以被重定向到所存储的组块的单个物理实例。以该方式使用引用导致存储节约。因为可以遍及系统多次出现相同组块,所以必须被存储在系统中或通过网络传送的数据量减少。然而,交错数据难以高效地去重复。
[0011]图1A图示了用于智能分段的系统100。交错数据是指通过交错来自不同基础源的数据而从不同基础源产生的数据流。例如,四个基础数据源A,B,C和D 180可以被交错以产生流adcccbadaaaadcb,其中a表示来自源A的数据块,b表示来自源B的数据块,c表示来自源C的数据块,并且d表示来自源D的数据块。
[0012]在不理解用于对流进行交错的格式的情况下,恢复基础源流是困难的。因为不同的备份代理由以不同方式交错数据的不同公司做出,并且因为交错的方法随时间改变,所以产生可去交错所有交错数据的系统可能不是划算的。因此,对于系统而言能够直接处置交错数据可以是有用的。
[0013]在去重复期间,可以在前端上或者在客户端199上实时创建组块的散列,所述前端与一个或多个去重复后端通信。例如,与可以是去重复后端节点116、120、122的一个或多个后端通信的前端118。在各种实施例中,前端和后端还包括其它计算设备或系统。数据组块是使用可基于大小或逻辑文件边界的组块化算法产生的数据流的连续子集。每个数据组块可以被输入到可用密码写的散列函数;例如MD5或SHA1。在图1A的示例中,组块I1,I2,13 I4分别导致散列A613F……,32B11……,4C23D……和35DFA……。在至少一些实施例中,每个组块可以近似是4千字节左右,并且每个散列可以近似是16到20字节。
[0014]取代为了去重复目的而比较组块,可以比较组块的散列。具体地,如果使用相同的散列化算法,则相同组块将产生相同的散列。因此,如果两个组块的散列相等,并且已经存储了一个组块,则另一组块无需被再次物理存储;这节省了存储空间。同样,如果散列相等,则基础组块自身可以被比较以核实重复,或者可以假设重复。此外,系统100可以包括一个或多个后端节点116、120、122。在至少一个实施方式中,不同后端节点116、120、122通常不存储相同组块。这样,节省了存储空间,因为相同组块未被存储在后端节点116、120、122之间,但是段(组块的群组)必须被路由到正确的后端节点116、120、122以被有效地去重复。
[0015]比较组块的散列可以被执行得比比较组块自身更加高效,特别是在使用索引和过滤器时。为了有助于比较过程,可以使用索引105和/或过滤器107来确定哪些组块被存储在后端节点116、120、122上的哪些存储位置106中。在至少一个实施方式中,索引105和/或过滤器107可以驻留在后端节点116、120、122上。在其它实施方式中,索引105和/或过滤器107可以以任何组合分布在前端节点118和/或后端节点116、120、122当中。此夕卜,每个后端节点116、120、122可以具有分离的索引105和/或过滤器107,因为不同数据被存储在每个后端节点116、120、122上。
[0016]在一些实施方式中,索引105包括将存储在该后端节点上的组块的散列(可能间接地)映射到包含那些组块的存储位置的数据结构。该数据结构可以是散列表。对于非稀疏索引,针对每一个所存储的组块创建条目。对于稀疏索引,针对存储在该后端节点上的组块的散列的仅有限一小部分创建条目。在至少一个实施例中,稀疏索引平均仅对每64个组块中的一个编索引。
[0017]在至少一个实施例中,过滤器107可以存在和被实现为布隆(Bloom)过滤器。布隆过滤器是用于近似集合成员资格的空间高效数据结构。也就是说,它表示集合,但是所表示的集合可以包含未被显式插入的元素。过滤器107可以表示存储在该后端节点处的组块集合的散列集合。在该实施方式中后端节点可以因此通过确定给定组块的散列是否是其过滤器107的成员来快速确定给定组块是否可能已经存储在该后端节点处。
[0018]在至少一个实施例中,并非在每组块基础上确定要针对哪个后端节点去重复组块(即,要将组块路由到哪个后端节点)。而是,一次一段(组块的连续群组)确定路由。数据组块的输入流可以被分成段,使得每个数据组块确切地属于一个段。图1A图示了组块I1和I2包括段130,并且组块I3和I4包括段132。在其它示例中,段可以包含数千个组块。段可以包括在交错流中邻近的组块的群组。段的边界为断点。如所图示的,段130与段132之间的断点处于12和I3之间。如图2的方法中详述的,可以基于先前存储的组块的位置确定流中的合适断点。在各种实施例中,由前端节点118、后端节点116、120、122、或前端节点118和后端节点116、120、122 二者确定断点。
[0019]尽管图1A仅示出一个前端118,但是系统可以包含多个前端,每一个前端实现类似的功能性。仅示出其中的一个的客户端199可以在长时间段内与相同的前端118通信。在一个实施方式中,前端118和后端节点116、120、122的功能性被组合在单个节点中。
[0020]图1B图示了系统100的硬件视图。在至少一个实施例中,系统100的组件可以分布在一个或多个网络114之上。具体地,用户可以与⑶I 110交互并通过网络114从管理控制台发射命令和其它信息以供前端节点118和后端节点116处理。显示器104可以是计算机监视器,并且用户可以经由键盘112和指点设备或计算机鼠标(未示出)操纵GUI。网络114可以包括诸如交换机之类的网络元件,并在至少一个实施例中可以是因特网。在至少一个实施例中,前端节点118包括执行散列化算法的处理器102。在另一实施例中,系统100包括多个前端节点。后端节点116包括可访问索引105和/或过滤器107的处理器108,并且处理器108可以耦合到存储位置106。系统100的硬件组件的许多配置和组合是可能的。在另一实施例中,系统100包括多个后端节点。
[0021]在至少一个实施例中,一个或多个客户端199通过所调度的命令而被周期性地备份。虚拟带库(“VLT”)或网络文件系统(“NFS”)协议可以被用作用于备份客户端199的协议。
[0022]图2图示了在202处开始且在210处结束的智能分段的方法200。在204处,接收散列的序列。例如,序列可以由前端节点118从针对去重复而调度的交错数据的顺序组块生成。交错数据的顺序组块可以已经通过对从客户端199接收的交错数据进行组块化以供去重复而产生在前端节点118上。组块化过程将交错数据分成数据组块的序列。散列的序列可以进而通过对每个数据组块进行散列化而生成。
[0023]可替换地,组块化和散列化可以由客户端199执行,并且可以仅将散列发送到前端节点118。其它变型是可能的。
[0024]如上所述,交错数据可以源自不同的源或流。例如,不同的线程可以将数据复用到单个文件中从而导致交错数据。每个散列对应于组块。在至少一个实施例中,所接收的散列的量对应于具有总计平均段长度的三倍的长度的组块。尽管使用交错数据作为示例讨论了系统,但是在至少一个示例中,非交错数据也被类似地处置。
[0025]在206处,确定数据组块的先前存储的副本的位置。在至少一个示例中,针对位置信息而对后端116、120、122做出查询,并且位置可以作为查询的结果而接收。在一个实施方式中,前端节点118可以向后端节点116、120、122广播散列的序列,所述后端节点116、120,122中的每一个然后可以确定其位置106中的哪些包含对应于所发送的散列的数据组块的副本并向前端节点118发送回所得到的位置信息。在一个节点实施方式中,该确定可以直接进行而无需节点之间的任何通信。
[0026]对于每个数据组块,可以确定哪些位置已经包含该数据组块的副本。该确定可以利用试探法。在一些实施方式中,该确定可以仅针对数据组块的子集而进行。
[0027]位置可以与后端节点的群组或集群或者特定后端节点一样通用,或者位置可以与组块容器(例如,存储组块的文件或盘部分)或具体后端节点上的其它特定位置一样专用。确定位置可以包括在诸如完整组块索引或稀疏索引之类的索引105或诸如布隆过滤器之类的集合或过滤器107中搜索散列中的一个或多个。所确定的位置可以是后端节点116、120,122的群组、特定的后端节点116、120、122、组块容器、储存器或存储节点。例如,每个后端节点可以向前端节点118返回组块容器标识号码的集合的列表,每个集合关于对应的散列/数据组块,并且组块容器标识号码标识其中存储该数据组块的副本的被存储在该后端节点处的组块容器。这些列表可以在前端节点118上被组合成单个列表,该单个列表针对每个数据组块给出标识包含该数据组块的副本的组块容器的组块容器ID/后端号码对。
[0028]在另一实施例中,所返回的信息仅标识该后端节点具有哪些数据组块的副本。同样,信息可以被组合以产生针对每个数据组块给出包含该数据组块的副本的后端节点的集合的列表。
[0029]在仅具有单个节点的又一实施例中,所确定的信息可以只由组块容器ID的集合的列表构成,因为不存在在不同后端节点之间进行区分的需要。如本领域技术人员所意识到的那样,存在可以传达位置信息的许多不同方式。
[0030]在208处,至少部分地基于确定的位置确定组块的序列中的断点。该断点可以用于形成数据组块段的边界。例如,如果尚未产生段,则第一段可以被生成为从序列的开始的数据组块到恰在所确定的断点之前的数据组块。可替换地,如果已经生成了一些段,则所生成的下一段可以由处于所生成的最后一段的结尾与新确定的断点之间的数据组块构成。
[0031]图2的每次迭代(202到210)可以确定新的断点并从而确定新的段。每次附加迭代可以重用先前迭代的工作或信息中的一些。例如,未被先前迭代形成到段中的数据组块的散列及其确定的位置可以被下一迭代再次考虑以便可能包括在所确定的下一段中。将数据组块的序列分成段的过程被称为分段。
[0032]确定断点可以包括部分地基于哪些数据组块在所确定的相同位置中具有副本来确定数据组块的序列中的区域并且然后基于该区域来确定数据组块的序列中的断点。例如,数据组块的序列中的区域可以被确定成使得具有每个区域的所确定的位置的数据组块的至少90%在单个位置中具有先前存储的副本。也就是说,对于每个区域,存在其中具有所确定的位置的数据组块的至少90%具有先前存储的副本的位置。接下来,可以基于区域来确定数据组块的序列中的断点。
[0033]对应于相同或类似位置的散列和组块可以被成组。例如,前端节点118可以将对应于一个位置的散列和对应数据组块成组为段,并可以将对应于不同位置的邻近散列和对应数据组块成组为另一段。这样,确定断点处于这两个段之间。
[0034]前端节点118可以针对后端节点之一,作为整体去重复新形成的段。也就是说,可以仅针对被包含在后端节点之一中的数据而不针对被包含在其它后端节点中的数据去重复该段。这与例如针对一个后端节点去重复段的第一半并且针对另一后端节点去重复该段的第二半形成对照。在至少一个实施例中,被包含在后端节点中的数据可以在附接到后端节点的储存器中,在后端节点的控制之下,或者是后端节点的首要责任而不是在物理上作为其一部分。
[0035]可以仅针对被包含在多个节点之一中的数据去重复段。在一个实施例中,所选取的后端节点116、120或122标识将针对其去重复段的存储位置106。
[0036]以上描述的系统可以被实现在具有足以处置置于计算机上的必要工作负载的处理能力、存储器资源和吞吐量能力的任何特定机器或计算机上。图3图示了适于实现本文所公开的一个或多个示例的特定计算机系统380。计算机系统380包括与存储器设备通信的一个或多个硬件处理器382 (其可以被称为中央处理器单元或CPU),所述存储器设备包括计算机可读存储设备388和输入/输出(I/O) 390设备。该一个或多个处理器可以被实现为一个或多个CPU芯片。
[0037]在各种实施例中,计算机可读存储设备388包括诸如易失性存储器(例如RAM)、非易失性储存器(例如闪存、硬盘驱动器、CD ROM等)或其组合之类的非暂时性存储设备。计算机可读存储设备388可以包括存储由(一个或多个)处理器382执行的软件或指令384的计算机或机器可读介质。本文所描述的一个或多个动作在指令384的执行期间由(一个或多个)处理器382执行。
[0038]图4A图示了确定区域的集合的一种方式的示例。这里,示出了 25个组块的序列。在各种示例中,可以一次处理数千个组块。对于每个组块,在该组块上方示出其确定的位置。例如,尚未确定组块号码I在任何位置106中具有副本。在至少一个示例中,它可以表示尚未被存储的新数据。可替换地,用于确定组块位置的试探法可能已经在这种情况下犯了错误。相比之下,已经确定组块号码2在位置5中。组块号码3也不具有确定的位置,但已经确定组块号码4到6在位置I中具有副本。注意,已经确定一些组块在多个位置中;例如,已经确定组块号码9和10在位置I和2 二者中具有副本。
[0039]以下示出组块是许多区域,Rl到R6。例如,区域Rl包括组块I到3,并且区域R2包括组块3到18。这些区域(R1-R6)是已经通过下述操作来确定的:找到最大连续子序列,使得每个子序列具有关联的位置并且该子序列中的每个数据组块要么使该位置作为它的确定的位置之一要么不具有确定的位置。例如,区域Rl的关联位置为5;它的组块之一(#2)使5作为它的确定的位置之一并且其它两个组块(# I和3)不具有确定的位置。类似地,R2的关联位置为1,R3和R6的关联位置为2,R4的关联位置为4,并且R5的关联位置为3。
[0040]这些区域中的每一个都是最大的,因为它不能够在不违反示例区域生成规则的情况下在任一方向上被扩展甚至一个组块。例如,组块4不能够被添加到区域R1,因为它具有确定的位置并且其确定的位置中没有一个为5。每个区域表示驻留在一个位置中的一长条数据;因此,区域中部处的断点将很可能导致去重复的损失。因为新的数据(例如没有位置的数据组块)能够被存储在任何地方而没有创建中间重复的风险,所以新的数据有效地像通配符一样操作,允许它作为任何区域的一部分,由此扩展该区域。
[0041]存在确定区域的许多方式。例如,区域无需最大,但可能被要求以具有确定的位置的数据组块结束。在另一示例中,为了应对噪声,可以允许区域并入有具有不包括区域的主要位置的确定的位置的少量数据组块。例如,在图4A中,如所示的,可能允许区域R2存在,即便确定了组块13位于位置5中。在另一示例中,可以存在对区域可以并入有多少这样的组块的限制;该限制可以是绝对的(例如不大于五个组块)或者相对的(例如具有确定的位置的数据组块中不大于10%可能具有除关联位置外的确定的位置)。
[0042]在另一示例中,可以以不同方式处置新的数据组块。取代将它们的位置视作能够属于任何区域的通配符,而是可以将它们视为位于具有确定的位置的左侧最接近的组块的确定的位置和具有确定的位置的右侧最接近的组块的确定的位置二者中。如果具有确定的位置的最接近组块太过遥远(例如超过离开距离的阈值),则可以忽略其确定的位置。因此,太过远离旧组块的新数据组块可以被视为不具有位置,并且因此,要么不可并入到区域中要么仅可并入到特殊区域中。在至少一个示例中,这样的特殊原因可以是仅包含远离旧数据组块的类似的新数据组块的一个。在另一示例中,新数据组块可以被视为在具有确定的位置的最接近的数据组块的确定的位置中。在图4A的情况下,可以将组块11视作其在位置1&2中,可以将组块13视作其在位置I中,并且可以将组块12视作取决于平局决胜规则而在位置1&2中、在I中或者这二者。
[0043]因为“打断”(即,确定边界)区域中部很可能导致重复,所以如果可能的话应当避免它。而且,较大区域而不是较小区域中部处的打断和更接近于区域中部的打断将很可能导致更多的重复。这样,这些情景也应当被最小化。通过将区域考虑在内,可以基于区域来确定高效的断点。高效的断点导致所存储的数据的更少重复。
[0044]存在确定边界的许多方式。一个示例涉及专注于保持最大区域,例如选择最大区域并且缩短与其重叠的其它区域的部分。缩短在这里意味着使较小区域恰好足够小以使得它不与最大区域重叠;如果较小区域被完全包含在最大区域中,这可能要求整个移除较小区域。在图4A的情况下,最大区域为R2。可以将Rl缩短到组块1-2,并且可以丢弃R3,因为它完全与R2重叠。可以将R4缩短到组块19-25。可以选择其余的下一最大区域并且重复过程,直到没有其余的区域重叠。对于图4A的该过程的结果被示出在图4B中。
[0045]潜在断点可以恰好处于图4B中的三个所得到的区域(Rl’、R2’和R4’ )中的每一个的第一组块之前和最后组块之后。在一个示例中,选取处于所要求的最小段大小和所要求的最大段大小之间的最早的这样的断点。如果没有这样的断点存在,则要么可以选取最大段大小,要么可以应用不将确定的组块位置考虑在内的备用分段方案。如果为了图4A的示例的目的,假设最小段大小8和最大段大小23,则将选取组块18与19之间的断点。第一生成段然后可以由组块I到18构成。组块19可以形成第二段的开始。注意,这将位置I中的数据一起置于单个段中,以及将位置4中的数据置于不同的单个段中。
[0046]该实施方式的许多变型是可能的。例如,取代缩短区域,规则可以包括丢弃阈值大小以下的最大区域并且按照所得到的潜在断点的关联区域有多大来对所得到的潜在断点进行优先化排序。只有在较高优先级断点落在最小和最大段大小要求之外时,才可能使用较低优先级断点。
[0047]在至少一个示例中,两个潜在断点被不属于任何区域的新数据分离。在这样的情况下,可以确定断点在两个潜在断点之间的任何地方而不影响哪些区域被打断。在各种示例中,不同规则将允许在区域之间的中部处或在区域端之一处的断点的选择。
[0048]以上讨论旨在说明本发明的原理和各种实施例。一旦以上公开内容被完全领会,大量变型和修改对本领域技术人员来说将变得显而易见。意图在于,随附的权利要求应被解释成涵盖所有这样的变型和修改。
【权利要求】
1.一种非暂时性计算机可读存储设备,包括可执行指令,所述可执行指令在被执行时使一个或多个处理器: 接收散列的序列,有待去重复的数据被分成数据组块的序列,散列的序列中的每个散列包括对应数据组块的散列; 确定所述数据组块的先前存储的副本的位置,所述位置是基于所述散列来确定的;以及 部分地基于确定的位置来确定数据组块的序列中的断点,所述断点形成数据组块段的边界。
2.权利要求1的设备,其中指令还使一个或多个处理器作为整体去重复段。
3.权利要求1的设备,其中指令还使一个或多个处理器仅针对被包含在多个节点之一中的数据去重复段。
4.权利要求1的设备,其中所述位置是通过在索引、稀疏索引、集合或布隆过滤器中搜索所述散列中的一个或多个来确定的。
5.权利要求1的设备,其中确定断点使一个或多个处理器: 部分地基于哪些数据组块在相同位置中具有副本来确定数据组块的序列中的区域; 基于所述区域来确定数据组块的序列中的断点。
6.权利要求5的设备,其中对于每个区域,存在其中具有确定的位置的数据组块的至少90%具有先前存储的副本的位置。
7.一种方法,包括: 由处理器接收散列的序列,有待去重复的数据被分成数据组块的序列,散列的序列中的每个散列包括对应数据组块的散列; 确定数据组块的先前存储的副本的位置;以及 部分地基于确定的位置来确定数据组块的序列中的断点,所述断点形成数据组块段的边界。
8.权利要求7的方法,还包括作为整体去重复段。
9.权利要求7的方法,其中确定的位置是组块容器、储存器或存储节点。
10.权利要求7的方法,其中所述位置是通过在索引、稀疏索引、集合或布隆过滤器中查找所述散列中的一个或多个来确定的。
11.权利要求7的方法,其中确定断点包括: 部分地基于哪些数据组块在相同的确定的位置中具有副本来确定数据组块的序列中的区域; 基于所述区域来确定数据组块的序列中的断点。
12.权利要求11的方法,其中对于每个区域,存在其中具有确定的位置的数据组块的至少90%具有先前存储的副本的位置。
13.权利要求11的方法,其中确定位置包括查询位置信息。
14.一种设备,包括: 一个或多个处理器; 耦合到处理器的存储器; 所述一个或多个处理器执行下述操作: 接收散列的序列,有待去重复的数据被分成数据组块的序列,散列的序列中的每个散列包括对应数据组块的散列; 确定数据组块的先前存储的副本的位置,所述位置是基于所述散列来确定的;以及 基于所述位置来确定数据组块的序列中的断点,所述断点形成数据组块段的边界。
15.权利要求14的设备,其中确定断点包括: 部分地基于哪些数据组块在相同的位置中具有副本来确定数据组块的序列中的区域; 基于所述区域来确定数据组块的序列中的断点。
【文档编号】G06F9/06GK104246720SQ201280072861
【公开日】2014年12月24日 申请日期:2012年5月1日 优先权日:2012年5月1日
【发明者】埃什希 K., M. 法尔金德 D., D. 利利布里奇 M. 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1