用于数据去重复的可扩展流水线的制作方法

文档序号:6443128阅读:613来源:国知局
专利名称:用于数据去重复的可扩展流水线的制作方法
技术领域
本发明涉及用于数据去重复的可扩展流水线。
背景技术
数据去重复(有时也称为数据优化)指的是检测、唯一地标识以及消除存储系统中的冗余数据从而减少需要被存储在盘上或需要通过网络进行传送的数据的物理字节量, 而不会损害原始数据的保真性和完整性。通过减少存储和/或传送数据所需的资源,数据去重复因此导致硬件和功率成本(用于存储)以及数据管理成本(例如,降低备份成本) 的节约。随着数字存储的数据的数量增长,这些成本节约变得重要。数据去重复通常使用用于消除持久存储的文件内部及其之间的冗余性的技术的组合。一种此类技术用于标识一个或多个文件中的数据的相同区域,并在物理上只存储一个唯一区域(块),同时维护与关于此数据的所有重复出现的文件相关联地维护对该块的引用。另一技术是例如通过存储经压缩的块来将数据去重复与压缩混合。就数据去重复存在许多困难、折衷、和抉择,包括在一些环境中,给定可用时间和资源,有过多的数据要在单个操作中全部去重复,由此,要对哪些数据去重复以及如何随时间发起渐进式的去重复作出考虑。此外,并非所有可被去重复的数据都因去重复而产生均等的节省(益处),并且因此存在做了大量工作而获得很少价值的可能。数据去重复的其他方面(包括文件选择、数据安全性问题、不同类型的分块化、不同类型的压缩等等)也需要被处理,以便以提供所需结果的方式完成数据去重复。

发明内容
提供本发明内容以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些代表性概念。本发明内容不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在以限制所要求保护的主题的范围的任何方式来使用。简言之,本文中描述的主题的各个方面涉及模块化数据去重复流水线藉由其执行数据去重复的技术,该流水线包括结合地操作的若干阶段/模块。在每个阶段,流水线允许替代、选择或扩展(将新的模块添加到阶段)模块。此流水线便于确保数据处理、异步处理、 批处理、和并行处理。流水线是可基于通过内部和外部反馈来调整的,例如,通过选择模块来提升去重复质量、性能和/或吞吐量(其中内部反馈是指基于由流水线发现的数据或文件属性进行调整,而外部反馈是指基于传递到流水线的外部信息(例如,在许多机器上的先前的去重复的数据的统计信息)进行调整)。在一个实现中,流水线包括扫描阶段/模块,其标识可用于去重复的文件列表; 以及选择阶段/模块,其选择落在去重复的范围和策略内的文件。还包括分块化阶段/模块,其执行分块化;以及散列化模块,其生成唯一地标识每个块的全局散列。还可包括压缩块(其可在散列化之前或之后)的压缩阶段/模块。提交阶段/模块提交引用数据。在一个方面,扫描阶段包括选择文件来经由流水线进行去重复的匍匐器
4(groveler) 0匍匐器可访问策略来确定选择哪些文件来进行去重复。例如,此阶段/模块检查所存储文件的命名空间,并(使用一个或多个各种准则)产生要去重复的候选文件流。 这可包括最大化来自去重复的节省,最小化去重复对系统的性能的影响等等。匍匐器可通过将文件的快照处理成所选文件的日志以进行进一步去重复处理来对文件的快照进行操作。耦合至或链接至扫描阶段的选择阶段可在提供文件以经由流水线进行进一步去重复处理之前访问策略来对文件执行过滤、排名、排序和编组(例如,基于文件的属性和/或统计属性)。数据去重复流水线包括分块化阶段,其经由一个或多个模块/分块化算法来将文件的数据分割成块。在一个方面,分块化算法选择器诸如基于文件数据和/或文件元数据从可用分块化算法中选择要使用的分块化算法。去重复检测阶段对每个块确定该块是否已存储于块存储中。可使用压缩模块,其压缩接下来将被提交的块。更具体地,块压缩是一个选项,并且可使用基于块数据、块元数据、文件数据和/或文件元数据从可用分块化算法中选取的所选压缩算法。提交阶段将未被检测为已存储于块存储中的块提交到块存储,并且提交已存储到块存储中的块的引用数据。可例如在不同机器(虚拟和/或物理)上异步和/或并行地对文件的不同的子集执行分块化、压缩和/或提交。一般而言,流水线模型能实现对数据的异步处理,一般导致性能和可缩放性优点。在一个方面,要分块化的文件可被列入队列以进行批处理。得到的块可能类似地被列入队列,以由流水线的一个或多个后继模块来进行批处理。类似的批量化技术也可用于块,从而导致分块化处理。在一个方面,流水线以安全方式耦合至配置成主存所主存的模块的主存逻辑进程,所主存的模块诸如一个(或多个)分块化模块,或者访问文件数据或经分块化的文件数据的任何其他一个或多个模块。主存进程(hosting process)包括安全地访问数据以供所主存的模块来处理的数据访问组件。例如,安全进程可从原始进程获得复制文件句柄,并使用该复制文件句柄来访问数据。结合附图阅读以下具体实施方式
,本发明的其他优点会变得显而易见。


作为示例而非限制,在附图中示出了本发明,附图中相同的附图标记指示相同或相似的元素,附图中图1是表示用于数据去重复的可扩展流水线的示例组件/阶段的框图。图2是表示用于数据去重复的可扩展流水线的组件/阶段连同示例支持组件的附加细节的框图和数据流图。图3是表示可扩展流水线可如何被合并到数据去重复环境中的具有其他组件的数据去重复服务的框图。图4是各个组件之间的数据流/调用的表示,包括在数据去重复操作期间进行排队以支持对文件和数据的批处理的数据流/调用。图5是各个组件之间的数据流/调用的表示,包括在数据去重复操作期间用于获得重复文件句柄以提供安全数据处理的数据流/调用。
图6是表示数据去重复环境中匍匐器(groveler)如何经由基于两阶段日志的文件扫描来扫描文件的框图。图7是表示其中可实现此处描述的各种实施例的示例性非限制联网环境的框图。图8是表示其中可实现此处所描述各种实施例的一个或多个方面的示例性非限制计算系统或操作环境的框图。
具体实施例方式本文中描述的技术的各个方面通常涉及用于数据去重复的可扩展流水线,其中流水线的各个模块/阶段便于数据去重复,包括通过提供模块链接、模块选择、主存异步处理和/或并行处理的安全高效模块。通常,去重复所需的各种机制(例如,文件选择、分块化、 去重复检测、块的压缩和提交)在流水线中被各自模块化,该流水线具有替代各个模块的每一个、在其中进行选择和/或对其进行扩展的能力。在一个方面,流水线使用基于两阶段日志的算法来扫描文件,并选择文件以便基于属性,通过基于统计分析和反馈进行排序、排名和/或编组,来进行优化。所选的文件可以是异步的、成批的和/或并行处理的,以便进行数据去重复。此外,流水线的级适应于内部和外部反馈挂钩。应当理解的是,此处的任何示例均是非限制的。因此,本发明不限制于在此描述的任何具体的实施例、方面、概念、结构、功能或示例。相反,此处所描述的实施例、方面、概念、 结构、功能或示例中的任一个都是非限制性的,并且本发明一般能够以在计算和数据去重复处理方面提供好处和优点的各种方式来使用。图1和2示出了数据去重复流水线102的示例概念,该流水线包括着手对文件104 的去重复的处理的软件组件(或组件集合)。注意虽然在此文件被用作示例,但是去重复目标可包括非结构化、半结构化或结构化数据存储环境中的“数据流”的任意集合,例如,文件、数字文档、流、团块、表、数据库等等;流水线体系结构被设计成跨各种各样的数据存储通用和可重用。如本文中所描述的,流水线102包括与可扩展和/或可选择模块相对应的数个阶段。此外,(除了用于去重复检测之外的)模块可并行地操作,例如,以便于负载平衡。流水线体系结构还提供隔离以便于崩溃抵抗、安全性和资源管理。下面描述这些以及其他优点。通常,去重复将每个文件(或其他数据团块)分割成连续的小数据流序列(称为块),并且随后对于每个块,使用散列唯一地标识每个块,并在随后针对先前被插入到系统中的重复块的存在进行查找(经由散列索引)。当检测到重复块时,使用对现有块的引用来更新文件中对应于原始块的特定区域,且从文件丢弃该块。如果没有检测到重复,则块被保存到一个实现中的块存储(或其他合适的位置),被索引,且用对新的块的引用来更新文件,该新的块在随后被其他文件检测以供进行引用。流水线还可执行块的压缩。为了跟踪块,每个文件包含对其块的引用,并非文件数据,而是这些引用连同其在当前文件中的位置被存储到系统中,这在多个文件引用相同的一个块或多个块时消耗少得多的存储。在一个实现中,用具有引用相对应的块数据的重解析点和/或流的稀疏文件(若尚没有稀疏文件的话)来替代文件。重解析点和/或流包含足以允许在后继I/O检修期间对其相对应的文件数据进行重构的信息。用于链接文件和相对应的块的替换性实现是可行的。流水线102 (在图2中标示为10 和102b ;注意,文件系统相关模块102b可独立于流水线来考虑)包括文件系统相关阶段——被实现为每阶段一个或多个模块。这包括扫描阶段106 (包括扫描器/匍匐器模块224),其扫描存储卷2 等的文件104集合以确定哪些是要进行去重复的候选,一般是尚未被去重复的那些。其他策略和/或准则可被用于诸如不“特别对待”比方经加密文件,因为即便曾经有过将匹配另一文件的块,此类文件可能也是很少的。扫描阶段的输出基本上包括文件列表228,其由去重复流水线的下一阶段(包括选择阶段108)来动态地消费。文件系统匍匐器224由此标识要在此优化会话中优化的(一般尚未被去重复的) 文件,以输出由流水线的其他部分来动态地消费的列表228。匍匐器2 可通过迅速排除已优化的文件来以递增方式来工作,以使得其缩放性不会受到已优化的文件的显著影响。 匍匐器224能够提供一致的文件列表,诸如通过从所扫描的卷的快照进行读取,如以下所描述的。块102b还包括用于文件流访问的文件流传送接口(其提供对文件内容的安全访问),例如,用在以下描述的分块化和压缩模块中,(注意,分块化/散列化/压缩模块可能不具有对文件系统的直接访问(并且可能完全不与文件系统特征绑定)),由此此类模块可经由提供对文件系统的虚拟化访问的流传送接口集合来具有访问权。注意在去重复会话期间,可拍摄文件的快照,文件列表(228)可被临时存储到永久队列以便确保构建要扫描的文件列表的一致性,并且快照在不再被需要的时候被丢弃。 日志允许暂停和继续去重复过程和崩溃抵抗,同时最小化扫描影响并提供其他益处,例如, 允许进度/状态报告、估计整体数据大小(在计算诸如索引大小之类的数据结构时有用) 等。此两阶段过程的附加细节在以下参照图6来描述。一般而言,选择阶段108对候选进行过滤、排序和/或区分优先级(排名),以使得例如最可能产生高去重复增益的候选首先通过流水线被处理。文件还被编组成便于高效处理和/或以使得对最恰当的模块的最优选择将被用在流水线的进一步的级中。诸如文件名、类型、属性、盘上的位置等等文件属性和/或诸如随时间的文件操作的频率之类的统计属性数据可被用来为选择阶段108确定策略。一般而言,扫描阶段106 (匍匐器224)和选择阶段108(文件选择器/过滤等)通常在将文件馈送到流水线的其他部分之前根据策略驱动的准则来一起工作。与孤立地考虑每个文件以进行选择的静态过滤器不同,过滤可考虑整个数据集中的文件并且因此是数据集驱动的。例如,在相同时间段内改变的文件和/或具有类似路径/名称属性的文件可被过滤,类似地排名和/或编组在一起。外部数据也可用于过滤,诸如来自先前去重复的局部反馈或从其他去重复操作和实现学习的全局知识。排名分数可被指派给每个文件(而非简单包括/排除过滤决定)。此类计分便于排名以对哪些文件(或子文件)首先被处理进行区分优先级,以便尽可能快地提取大多数去重复节省。计分可基于机器学习技术,诸如使用按处理去重复结果加权的特征。基于文件属性(其可包括所指派的排名分数)进行编组是另一选项,其有助于进行成批化、并行化、 分割、分块化、存储器使用(例如,在RAM中为相同组保持相关数据/模块)等等。图2中还示出了文件流访问(模块)227,可通过低优先级I/O来藉由该文件流访问(模块)227完成文件访问,以最小化文件读取对底层系统的性能影响。文件流访问模块 227可使用诸如机会锁(oplock)之类的技术来确保只要某一其他外部应用程序尝试访问文件流水线就从该文件“退避(back-off)”并且关闭其句柄。由此,流水线模块中访问文件内容的其余部分(分块化、散列化、和压缩模块)更易于实现,因为它们不必由他们自身来实现退避逻辑。经由模块,以安全方式使用复制的文件句柄来实现文件流访问,该复制的文件句柄是从流水线进程被安全地传送到包含如以下所描述的那些模块的主存进程的。分块化阶段110(在给定实现中,其可按需包括或遵循文件解压)将文件内容分解成块;这些块可被压缩。可根据文件的结构、内容驱动的算法(例如,将媒体文件划分成媒体头部和媒体主体,该媒体主体进而可被分层地分割成一系列部分),或者通过使用基于在滑动窗上重复计算的快速散列化技术(这样的快速散列函数包括CRC和Rabin函数族)来对文件内容分块化的算法,来执行分块化,其中块是在散列函数和当前块大小/内容满足特定启发法时被选择的。对于被选择成要去重复的每个文件,流水线102的分块化阶段110可取决于可能涉及诸如文件扩展、头部信息等的文件属性的启发法来选择(图2的框230)分块化算法 ChA1-ChAm。例如,可为一个文件选择通用分块化算法,而另一文件可具有为其文件扩展所特有的分块化算法(诸如用于ZIP部分的分块化算法)。还可基于来自文件选择阶段108的暗示或基于内部或外部反馈120来选择分块化算法。在为当前文件选择了特定分块化算法之后,流水线的分块化阶段110执行分块化。分块化阶段准备包含文件相关元数据(诸如文件名称、大小等)的文件记录,其可由分块化算法来使用。实际分块化算法可在进程中被执行(若其执行是安全的),或者在分开的主存进程中执行(若存在安全性风险)。分开的主机还有助于资源监视以及流水线的可靠性和弹性;例如,如果分块化模块碰上“致命”失败,则流水线不会受到影响,且能够重启失败的模块。流水线能够跳过该文件并用重启的模块处理接下来的文件。如以下参照图3-5描述的,对于分开的主机,流水线(耦合到其的数据流传送初始化模块)可初始化表示用于文件的数据流的句柄的“数据流传送对象”。此句柄可被用于所主存的进程(hosted process)中的文件内容访问,其是安全的。分块化阶段110将文件记录插入到与所选分块化算法相关联的主存模块的恰当的输入队列。当此队列缓冲达到特定大小时,整个缓冲被发送到所主存的模块,以便进行批处理。所主存的模块使用以上初始化的文件句柄来对批中的每个文件执行分块化。分块化阶段的结果包括(每文件的)块列表232,其是使用一组“块记录”来传递的,这些块记录中的每一个包含描述块中的数据类型的相关联元数据。此类元数据的一个示例是作为分块化算法的执行的部分来计算的任何滚动散列。另一示例是块内的实际数据的压缩级别的指示符(例如,ZIP分块化模块将指令压缩选择器模块不压缩可能已被压缩的块)。注意对于所主存的进程执行,块被插入到恰当的“输出队列”以便进行处理,并在随后被成批地发送到流水线进程。可被成批地处理的块是由流水线的下一级(即,通过散列化唯一地标识每个块并在随后对去重复检测使用散列的去重复检测阶段)来消费,以提供其块已被插入到块存储中的块列表。注意如图2中经由框234和236表示的,去重复可被避免/块被整合(如果有过多的块的话)。更具体地,在将块添加到输出列表之前,如果有过多的块,则可执行额外的“块合并”。此步骤可基于特定的策略配置,这些策略配置限制每MB不多于X个块来作为不使I/O性能(例如,由于超过特定限制的额外寻求导致的)降级的方式,或者通过确保每文件特定最大数目个块、或每数据MB的最大块。替代性办法是在发出合并之前执行查找, 其可提供更细粒度的节省(但是招致关于去重复时间的惩罚)。在分块化之后,去重复检测阶段112确定块存储中是否已存在块。针对块计算的强散列被演算以在散列索引服务242中调用查找操作(框M0)。散列索引服务对已为去重复系统所知(或已被存储在去重复系统中)的唯一块中的一些或全部的散列进行索引。注意散列索引服务可包括流水线中用于散列计算的单独(可扩展)模块。例如, 一个这样的模块可使用加密强散列(诸如,SHA-256或SHA-512),其确保散列间极低可能性的冲突。此类模块的输入包括块“记录”,其包含对该块的引用,(诸如文件标识/元数据, 文件句柄),以及块在文件中的偏移量。散列化模块可使用以上所描述的文件流访问接口来安全地读取块,并且对内容进行散列化,从而产生后继阶段所需的强散列。此模块的输出 (串块散列)被追加到现有块元数据。如果散列索引服务242指示块已存在于块存储中,则块引用/计数(框M4)被添加到块存储模块M6/块存储M8。如果块尚未存在,则将该块作为新的块添加到块存储 M2。注意散列索引服务可用效率相关考虑因素来配置,这不必保证块尚未存储,并且块将在去重复系统中被复制一次以上是可能的。因而,如本文中所使用的,当散列服务确定块尚未存在于一个(或多个)块存储中,则这意味着其尚未存在,但只是合理的可能性,不一定是绝对保证。块存储模块246维护实际块的永久数据库。块存储模块246支持将新的块插入到块存储如果尚没有此类块),将引用数据添加(框M4)到块存储中的现有块(在检测到先前持久存储的块),以及提交一组块插入和/或块引用添加,如以下所描述的。块存储还可实现各种后台/维护作业,包括垃圾收集、数据/元数据检查等等。类似于每个其他模块,块存储模块246是可插入和可选择以及可扩展的。流水线 102可与多个块存储一起工作,并基于其属性来存储块。例如,流行的块可被存储在近线低等待时间的低规模存储,而块的其余部分可被存储在较高等待时间的高规模块存储中。被标记为“添加到块存储”的块可就压缩进行处理。压缩算法选择器(框250) 处理文件和块元数据(迄今由流水线提供)并可尝试确定对于此类型数据,哪个压缩算法 CA1-CAn(若有的话)最好地工作。在执行了任何压缩之后,运行时(例如,作为压缩阶段 114的部分)可验证是否作出了任何实质的节省;例如,如果经压缩的块比其未经压缩的形式更大,则存储未经压缩的(或可用不同的算法来再次尝试压缩)。压缩算法可基于策略、 文件类型等等来选择。为了将新的块添加到块存储M8,对于给定文件,可由与图2的模块252和2M相对应的提交模块(阶段)116来在两个阶段中完成此操作。首先,新的块被添加(例如,成批地)到块存储对2。第二,在已处理了文件块之后,块列表被“提交”到块存储M2。块定位符的列表被串行化成“流映射”自引用结构(其可由字节阵列来表示),其可在随后被用来创建块流。此新的块流的定位符被存储在与文件相关联的重解析点中。文件提交模块/阶段116用指向被去重复的数据的引用来事务性地替代每个文件。为此,文件提交模块接收其块已被插入到块存储中的文件列表。在一个实现中,每个块列表被封装到块ID流256 (由唯一流ID来标识),其被永久存储到与文件相关联的重解析点。在提交操作期间,文件提交模块用包含块流ID的ID和定位符的重解析点事务性地(即,在这些更新期间发生的崩溃并不使文件系统或逻辑文件内容处在不一致的状态)替代文件,即,包含流映射的块包括被用来组装当前文件及其逻辑偏移量的块列表。注意,文件系统更新可被成批地提交。例如,替代N个文件(N是数百、数千数量级的)的重解析点可继之以转储清除操作,该转储清除操作确保文件系统相对于优化之前的先前状态的文件系统级别的一致性。在去重复期间改变的文件能被忽略,因为匍匐 (grovel)/扫描是对快照进行的,并且可对失配估计时间戳,如以下所描述的。如以上所见的,数据去重复会话是完全可重入和可重启的(而不管处理中间发生的崩溃、重新引导、故障转移)。如容易理解的,流水线也能够与低系统资源(例如,低优先级I/O和低CPU资源)一起操作,并且流水线被设计成可靠地操作并维护数据一致性,而不管其下的硬件的可靠性。此外,数据去重复系统被设计成在所有其阶段中以高效异步/成批模式进行工作。模块的多个实例可被创建并且可并行地操作(或者在一个机器上或者在多个机器上),从而导致对硬件资源的更好的总体利用。例如,CPU密集的活动(分块化、散列化以及压缩)可通过作为流水线的部分实现的通用作业执行体系结构来跨多个CPU进行负载平衡。另外,对于多个卷,设计并行地支持多个数据去重复流水线的异步独立的执行。此外,流水线的各阶段也是外部可调整的,并且提供用于反馈120(图1)的挂钩, 即,流水线是可适应的,并且可基于已获得的知识在运行或进行将来运行的同时调节其策略、选择算法、参数等。反馈可以是内部(基于已处理的数据)和/或外部122(由外部实体提供的,例如,基于其他卷或其他机器上优化的数据)。图3-5提供了流水线组件及其在单个卷上的数据优化会话的示例中的主要交互, 以及用于经优化的文件的服务数据的附加细节。流水线在耦合至存储栈332的去重复服务 300中操作,该存储栈可被文件服务器客户机334(诸如通过SMB、NFS或其他协议访问文件的典型文件服务器客户机)访问。存储栈包括SRV,包括用于实现SMB栈(例如,SRV2. SYS) 的驱动器,用于为经优化的文件处理I/O路径的去重复驱动器,以及块存储M2,如以上所述的。在本文中的示例中,NTFS是为存储卷保持经去重复和未经去重复的文件的底层文件系统。去重复服务330可由管理客户机338来访问,该管理客户机338包括脚本、命令行、UI或者例如通过公共API远程或本地地管理当前机器上的去重复访问330的其他管理应用程序。还表示了服务器侧分支高速缓存服务组件340,其使用数据去重复服务330来为在分支高速缓存场景中被服务的文件生成块/签名。如在图3中表示的,去重复服务330包括管理/配置API模块342,其展示去重复服务330的管理API。此API还展示用于管理数据去重复的各方面的功能,诸如为文件去重复、工作负载管理等定义目录包括/排除规则。配置过滤器344包括维护永久配置状态 (诸如公开展示或私有的“调谐钮”、调度信息、策略设置等)的模块。流水线API展示可被其他外部组件调用的API集合346,这些其他外部组件(诸如分支高速缓存服务组件340) 消费流水线102的功能。策略引擎348包括用于管理卷或整体机器的策略设置的模块。此类策略设置可包括诸如为去重复而考虑的文件的最小年龄之类的策略。工作负载管理器350包括负责发起和协调多个后台管理作业/使服务保持在操作状态(这些作业中的一些可被手动地排除) 的模块。运行数据去重复流水线是这些作业中的一个,其通常是被调度的后台作业,但是可按需地运行。在执行结束时,工作负载管理器350可生成报告。工作负载管理器350定义用于优化工作负载的进程模型,并且在一个实现中假定流水线优化可在其自己的允许在扫描的并行化期间进行自然机器资源共享的单独的工作者进程(每扫描一个进程)中运行。 其他作业可包括垃圾收集,对块存储进行碎片整理,数据完整性检查,元数据检查等等。主存进程管理组件352通常负责管理(例如,创建,拆毁)用于数据操纵和数据解析算法的低优先级主存进程,诸如分块化模块。出于安全原因,这些模块在单独的低优先级进程中运行。流传送数据初始化模块3M包括用于准备对低优先级所主存的进程内的实际文件流的安全访问的效用模块。图3中还表示了压缩/解压模块356,在一个实现中,其包括用于处理块/缓冲的存储器内压缩和解压的共享库。压缩阶段114可在数据去重复期间被执行完成(如以上所述的),而解压是在读/写路径(脱水)阶段期间使用的。主存进程358包括被设计成以低优先级隔离方式主存模块的进程,诸如在单独的进程中运行的所主存的分块化模块。示例包括文件和块缓冲管理模块,其负责管理所主存的分块化模块的输入/输出缓冲,这些缓冲被用于最小化跨进程的通信量。其他示例包括所主存的分块化算法,其包括如以上所述的执行实际数据分块化的进程内模块,以及流传送数据访问模块,包括实现用于从所主存的进程内进行安全数据访问的API。注意出于安全原因,所主存的算法不具有对文件系统的直接访问权。数据去重复会话通常以调度为基础被调用。可对在去重复期间涉及的每个卷执行相同的去重复序列(被称为的“去重复会话”)。以下示例是就单个卷来描述的,但是应当理解,可并行地进行一个卷或多个卷和/或多个机器去重复。在实际去重复之前,流水线的初始化级可被执行,包括从配置管理器344读取最新的策略和配置设置,以及读取每卷持久状态,诸如位置指示符(用于散列索引)的最新的值。其他初始化动作包括对流水线模块进行实例化,包括所主存的分块化算法。在此级期间,启动所主存的进程,并且初始化输入/输出队列。而且,在此级期间,用例如从配置数据库读取的恰当的参数来配置流水线中的每个模块。此外,散列索引服务242被初始化,以加载其存储器内数据结构,以便准备好服务块散列查找请求,并且匍匐器模块被初始化以发起对当前卷的文件扫描。出于一致性原因,匍匐器可具有其自己的每模块初始化阶段,其可包括诸如创建卷的快照之类的操作。作为准备的部分,数据流传送初始化模块3M初始化表示用于文件的数据流的句柄的“数据流传送对象”。此句柄可被用于所主存的进程中的文件内容访问,如以下描述的。在优化会话期间,匍匐器2M扫描文件,根据策略驱动准则来过滤它们,并将其馈送到流水线102。从匍匐器提供的文件可能不是按实际扫描次序,因为选择模块108 (图1) 可根据不同的准则(诸如最后修改时间戳、文件类型等)对文件列表进行排序。对于被选择成要优化的每个文件,流水线例如取决于诸如文件扩展、头部信息等之类的文件属性来选择分块化算法,并且流水线102运行时(分块化阶段110)执行分块化。运行时准备包含文件记录,它包含可由分块化算法来使用的文件相关元数据(诸如文件名称、大小等)。实际分块化算法可在进程中被执行(若其执行是安全的),或者在分开的进程中执行(若存在安全性风险)。如果分块化算法被直接主存到相同的进程,则其被简单地执行。
11
如果在单独的主存进程中实现分块化算法,则通常执行异步/成批模式执行。为此,如图4中通常表示的,流水线运行时将文件记录插入到与所选/所主存的分块化算法 (例如,所主存的模块446)相关联的主存模块444(例如,对应于模块358)的恰当的输入队列440。如果此队列缓冲达到特定大小,则整个缓冲被发送到所主存的模块446,以便进行批处理。所主存的模块446使用以上初始化的文件句柄来对批中的每个文件执行分块化。 分块化执行的结果是块列表(每文件),为了所主存的进程的执行,其被放入块队列442以进行批处理。使用包含描述这些块中的数据类型的相关联元数据的一组“块记录”来传递回这些结果块。此类元数据的示例如上所述。由此,流水线102支持高性能异步/成批处理模型,其允许以允许对每个文件或块进行重复的跨进程转换的方式在主工作负载进程与所主存的进程之间的高效、异步/成批的文件/块的交换。此外,批可由不同机器并行地处理,由此提供可缩放性。在已执行分块化之后,流水线运行时102判定这些块是否已存在于块存储中。为此,运行时计算摘要散列(为块计算的)以在散列索引服务242中调用查找操作,并基于结果采取动作,如以上所描述的。如果块被标记以“添加到块存储”,则流水线可尝试执行压缩,其可包括执行压缩算法选择器230(图2和幻,如以上一般地描述的。还如以上所描述的,新的块按两个阶段添加到块存储,即,第一,新的块(或对现有块的引用)成批地被添加到块存储,并且第二, 在已处理文件块之后,块列表被“提交”到块存储。在一个实现中,块定位符列表被串行化成“流映射”字节阵列,其被用来创建块流;此新的块流的定位符被存储在重解析点中。在提交操作期间,流水线运行时还将用包含块流ID的ID和定位符的重解析点来事务性地替代文件,如上所述的。注意流水线在重新去重复的情形中以同样的方式起作用,该重新去重复指的是在初始去重复之后对经历写入(并由此不再是经去重复的)的文件再次进行去重复。在此情形中,仅对文件中的脏范围(例如,与自最后的优化起改变的数据相对应的范围)进行分块化,如在与本文同时提交并通过援引纳入于此的、题为“Partial Recall Of Deduplicated Files (对经去重复的文件的部分重调用)”的共同待批的美国专利申请(代理人案号331301. 01)中所描述的。如先前所描述的,主存体系结构确保从所主存的模块对文件内容的安全数据访问,因此所主存的模块仅对相关文件具有受控的只读访问。为此,数据流传送支持(框354) 在主(流水线主存)进程中提供执行文件句柄初始化的类,如图5中一般地表示的。此效用类实现获得仅可被目标进程访问的专用文件句柄的方法(例如,GetFileHandle([in] filePath, [in]targetProcessID, [out]duplicatedHandle)。在一个示例实现中,还提供了将文件句柄展示为所主存的进程中的IMream 550 的类。此实现了围绕通过模块主机接口在文件专用DDP _ATCH_ITEM中传递的只读文件句柄的存储器内IMream包装。此类的内部成员包括只读文件句柄、文件元数据和当前读取
偏移量。转到关于匍匐器2M的附加细节,在一个实现中,匍匐器2M经由基于两阶段日志的文件扫描来操作,如图6中一般地表示的,其允许排序、文件系统隔离、统计报告等等。一般而言,在去重复会话期间,文件的(VSS)快照660可由主匍匐器组件662拍摄,被记入日志到永久队列(日志)664,(并在随后丢弃快照)。日志664允许暂停和继续以及崩溃抵抗, 同时最小化扫描影响并提供其他益处,例如,允许进度/状态报告、估计整体数据大小(在计算诸如索引大小之类的数据结构时有用)、对要进行去重复的文件进行排序和区分优先级等。在每次运行之时,匍匐器2M枚举尚未被优化并满足当前策略专用优化准则的文件列表(例如,自最后更改起30天或更旧的文件)。在典型部署中,在紧接着实现对特定卷的去重复之后,所有文件将是尚未去重复的。在此情形中,去重复过程将开始递增地去重复这些文件(给定特定策略驱动的优化次序)。此执行模式是可重启的,这意味着如果任务因机器重新引导被取消或中断,则去重复在下次继续进行。注意存在文件被删除/触及同时分块化完成的可能性。系统可将原始文件ID和改变时间戳与实际改变之前的目标文件ID 和时间戳进行比较;如果存在失配,则对该特定文件中止去重复。因而,匍匐/扫描是由匍匐器线程666对日志文件664中的快照进行的。更具体地,匍匐器主组件662由流水线102创建,并接受来自流水线的控制调用,包括在初始化期间拍摄卷的快照。匍匐器线程666将条目追加到日志文件664,通常用以最小化快照的生命期(作为优化)。流水线从此日志文件664处得到服务。匍匐器线程666包括以可取决于底层文件系统的方式走查(walk)快照文件。在走查的同时,匍匐器线程666将条目追加到日志文件664。图6中还示出了流水线馈送器 (驱动器)线程668。此线程服务流水线,例如,其爬行日志文件664,构建文件对象中的必需的信息,并调用pipeline: :onFile(流水线文件上)回调。如所见的,使用日志文件664作为被分发到流水线的文件对象的中间位置是对整体匍匐进程的优化。日志文件特征最小化为卷上的匍匐会话拍摄的VSS快照的生命期,允许对文件扩展等进行排序(例如,如果需要按类型进行分区),以及收集匍匐会话中的文件的数目和总大小来报告进度。经由以上所描述的流水线和支持组件,去重复过程不维护持久状态(其本质上是无状态的,除了可能一种例外以外,例如,由匍匐器持久存储的“重启暗示”以向下一扫描作业指示在哪里重启扫描,以使得递增扫描无需例如每天从相同位置反复启动)。去重复过程可在任何时间被取消,例如,手动或在“退避”操作中。从事务的观点而言,去重复序列是崩溃一致的,因为任何点处的任何崩溃使得文件系统处于可用状态,而无需进行恢复。另外,去重复序列对于对底层卷的适度或突然的移除是稳定的;类似于其他服务,在其中文件 /卷句柄因拆卸而变得无效的情形中,去重复代码需要退避。而且如以上所描述的,流水线被设计成在其各阶段中以高效异步/成批模式工作,并且对于多个卷,并行地支持多个数据优化流水线的独立执行。流水线由此提供对去重复处理和算法选择的模块化可扩展设计,同时满足CPU和存储器利用需求,性能和吞吐量需求,以及经由对优化模块和并行处理的安全和高效主存来提供安全性。此外,流水线经由选择模块通过文件过滤、排名和编组来提供用于限制优化范围和区分优先级的方式。去重复由此可在实质阶段(例如,文件选择、优化、算法选择等)中得以改进。示例性联网以及分布式环境本领域技术人员可以理解,此处描述的各实施例和方法可结合任何计算机或其它客户机或服务器设备来实现,其可被部署为计算机网络的部分或在分布式计算环境中,并且可以被连接到任何类型一个或多个数据存储。在这一点上,此处描述的各实施例可在具有任何数量的存储器或存储单元的、并且任何数量的应用和进程跨任何数量的存储单元发生的任何计算机系统或环境中实现。这包括但不限于具有部署在具有远程或本地存储的网络环境或分布式计算环境中的服务器计算机和客户计算机的环境。分布式计算通过计算设备和系统之间的通信交换来提供计算机资源和服务的共享。这些资源和服务包括信息的交换、对于诸如文件之类的对象的高速缓存存储和盘存储。 这些资源和服务还包括多个处理单元之间的处理能力共享以便进行负载平衡、资源扩展、 处理专门化等等。分布式计算利用网络连接,从而允许客户机利用其集体力量来使整个企业受益。就此,各种设备可具有可如参考本发明的各实施例描述地参与资源管理机制的应用、对象或资源。图7提供了示例性的联网或分布式计算环境的示意图。该分布式计算环境包括计算对象710、712等以及计算对象或设备720、722、724、726、7观等,这些计算对象或设备可包括如由示例应用730、732、734、736、738表示的程序、方法、数据存储、可编程逻辑等。可以理解,计算对象710、712等以及计算对象或设备720、722、724、726、7观等可包括不同的设备,诸如个人数字助理(PDA)、音频/视频设备、移动电话、MP3播放器、个人计算机、膝上型计算机等。每个计算对象710、712等以及计算对象或设备720、722、724、726、7沘等可经由通信网络740直接或间接地与一个或多个其他计算对象710、712等以及计算对象或设备720、 722、724、726、7 等通信。尽管在图7中被示为单个元件,但通信网络740可包括向图7的系统提供服务的其他计算对象和计算设备和/或可表示未示出的多个互连网络。每个计算对象710、712等或计算对象或设备720、722、724、726、7观等还可以包含应用,诸如可以利用API或其他对象、软件、固件和/或硬件的、适于根据本发明的各实施例所提供的应用实现与其进行通信的应用730、732、734、736、738。存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可由有线或无线系统、本地网络或广泛分布的网络连接在一起。当前,许多网络被耦合至因特网,后者为广泛分布的计算提供了基础结构并包含许多不同的网络,但任何网络基础结构都可用于便于与如各实施例中所描述的系统的示例性通信。由此,可使用诸如客户机/服务器、对等、或混合体系结构之类的网络拓扑结构和网络基础结构的主机。“客户机”是使用与其无关的另一类或组的服务的一类或组中的成员。客户机可以是进程,例如,大致上是请求另一程序或进程所提供的服务的一组指令或任务。客户机进程使用所请求的服务,而无需“知道”关于其他程序或服务本身的任何工作细节。在客户机/服务器体系结构中,尤其在联网系统中,客户机通常是访问另一计算机(例如,服务器)所提供的共享网络资源的计算机。在图7的图示中,作为非限制性示例,计算对象或设备720、722、724、726、7观等可被认为是客户机而计算对象710、712等可被认为是服务器,其中计算对象710、712等担当提供数据服务的服务器,诸如从客户机计算对象或设备720、722、724、726、7观等接收数据、存储数据、处理数据、向客户机计算对象或设备720、722、724、726、7观等发送数据,但任何计算机都可取决于环境而被认为是客户机、服务器、或两者。服务器通常是可通过诸如因特网或无线网络基础架构之类的远程网络或本地网络访问的远程计算机系统。客户机进程可在第一计算机系统中活动,而服务器进程可在第二计算机系统中活动,它们通过通信介质相互通信,由此提供分布式功能并允许多个客户机利用服务器的信息收集能力。在通信网络740或总线是因特网的网络环境中,例如,计算对象710、712等可以是其他计算对象或设备720、722、724、726、7观等经由诸如超文本传输协议(HTTP)之类的多种已知协议中的任一种与其通信的Web服务器。计算对象710、712等作为服务器还可用作例如计算对象或设备720、722、724、726、7观等的客户机,这可以是如分布式计算环境的特性。示例性计算设备如上所述,有利地,本文所描述的技术可应用于任何设备。因此,应当理解,构想了结合各实施例使用的所有种类的手持式、便携式和其它计算设备和计算对象。因此,以下在图8中所述的通用远程计算机只是计算设备的一个示例。各实施例可部分地经由操作系统来实现,以供设备或对象的服务开发者使用和/ 或被包括在用于执行此处所述的各实施例的一个或多个功能方面的应用软件内。软件可以在由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的诸如程序模块等计算机可执行指令的通用上下文中描述。本领域的技术人员可以理解,计算机系统具有可用于传递数据的各种配置和协议,并且由此没有特定配置或协议应当被认为是限制性的。图8由此示出了其中可实现本文所述的各实施例的一个或多个方面的合适的计算系统环境800的一个示例,尽管如上所述,计算系统环境800仅为合适的计算环境的一个示例,并非对使用范围或功能提出任何限制。此外,也不应当将计算系统环境800解释为对在示例性计算系统环境800中所示的组件中的任何一个或其组合有任何依赖。参考图8,用于实现一个或多个实施例的示例性远程设备包括计算机810形式的通用计算设备。计算机810的组件可包括,但不限于,处理单元820、系统存储器830、以及将包括系统存储器的各种系统组件耦合到处理单元820的系统总线822。计算机810通常包括各种计算机可读介质,并且可以是可由计算机810访问的任何可用介质。系统存储器830可包括诸如只读存储器(ROM)和/或随机存取存储器(RAM) 之类的易失性和/或非易失性存储器形式的计算机存储介质。作为示例而非限制,系统存储器830还可包括操作系统、应用程序、其他程序模块、以及程序数据。用户可通过输入设备840向计算机810输入命令和信息。监视器或其他类型的显示设备也经由诸如输出接口 850之类的接口连接到系统总线822。除监视器以外,计算机还可包括诸如扬声器和打印机之类的其他外围输出设备,它们可通过输出接口 850连接。计算机810可使用到一个或多个其他远程计算机(诸如远程计算机870)的逻辑连接在联网或分布式环境中操作。远程计算机870可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点、或者任何其他远程媒体使用或传输设备,并且可包括以上关于计算机810所述的任何或全部元件。图8所示的逻辑连接包括诸如局域网(LAN) 或广域网(WAN)之类的网络872,但也可包括其他网络/总线。这些联网环境在家庭、办公室、企业范围的计算机网络、内联网和因特网中是常见的。
如上所述,尽管结合各种计算设备和网络体系结构描述了各示例性实施例,但基本概念可被应用于其中期望改进资源使用的效率的任何网络系统和任何计算设备或系统。而且,存在实现相同或相似功能的多种方法,例如适当的API、工具箱、驱动程序代码、操作系统、控件、独立或可下载软件对象等,它们使得应用和服务能够使用此处提供的技术。由此,此处的各实施例从API (或其他软件对象)的观点以及从实现如此处描述的一个或多个实施例的软件或硬件对象构想。由此,此处所述的各实施例可具有完全采用硬件、 部分采用硬件并且部分采用软件、以及采用软件的方面。本文中所使用的词语“示例性”意味着用作示例、实例、或说明。为避免疑惑,本文所公开的主题不限于这些示例。另外,在此所述的被描述为“示例性”的任意方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,在使用术语“包括”、“具有”、 “包含”和其他类似词语的程度上,为避免疑惑,这些术语旨在当用于权利要求中时以类似于术语“包括”作为开放的过渡词的方式是包含性的而不排除任何附加或其他元素。如所述的,此处所述的各种技术可结合硬件或软件或,在适当时,以两者的组合来实现。如此处所使用的,术语“组件”、“模块”、“系统”等同样旨在指计算机相关实体,或者是硬件、硬件和软件的组合、软件或者是执行中的软件。例如,组件可以是,但不限于,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可驻留在进程和/或执行的线程内,并且组件可位于一个计算机上和/或分布在两个或更多的计算机之间。如前所述的系统已经参考若干组件之间的交互来描述。可以理解,这些系统和组件可包括组件或指定的子组件、某些指定的组件或子组件和/或附加的组件,并且根据上述内容的各种置换和组合。子组件还可作为通信地耦合到其他组件的组件来实现,而不是被包括在父组件内(层次性)。另外,应注意到一个或多个组件可被组合成提供聚集功能的单个组件,或被分成若干单独的子组件,且诸如管理层等任何一个或多个中间层可被设置成通信耦合到这样的子组件以便提供集成功能。此处所述的任何组件也可与一个或多个此处未专门描述的但本领域技术人员一般已知的其他组件进行交互。鉴于本文所述的示例性系统,可根据参考各附图的流程图还可理解根据所述的主题来实现方法。尽管为了说明简洁起见,作为一系列框示出和描述的方法,但是应当理解, 各实施例不仅仅限于框的次序,因为一些框可以与此处所描绘和描述的框不同的次序发生和/或与其他框并发地发生。尽管经由流程图示出了非顺序或分支的流程,但可以理解,可实现达到相同或类似结果的各种其他分支、流程路径和框的次序。此外,某些示出的框在实现下文所述的方法中是可选的。结论尽管本发明易于作出各种修改和替换构造,但其某些说明性实施例在附图中示出并在上面被详细地描述。然而应当了解,这不旨在将本发明限于所公开的具体形式,而是相反地,旨在覆盖落入本发明的精神和范围之内的所有修改、替换构造和等效方案。除此处所述的各实施例以外,应当理解,可使用其他类似实施例,或者可对所述实施例作出修改和添加以便执行对应实施例的相同或等效功能而不背离这些实施例。此外, 多个处理芯片或多个设备可共享此处所述的一个或多个功能的性能,并且类似地,存储可跨多个设备实现。因此,本发明不应限于任何单个实施例,而是应当根据所附权利要求书的广度、精神和范围来解释。
权利要求
1.在计算环境中,一种系统包括数据去重复流水线(102),所述数据去重复流水线包括分块化阶段(110),其被配置成将文件的数据分割成块,其中所述分块化阶段包括各自对应于分块化算法的一个或多个模块,去重复检测阶段(112),其被配置成对每个块确定该块是否已被存储在去重复系统中,以及提交阶段(116),其将没有被所述去重复检测阶段确定为存储在所述去重复系统中的块提交到所述去重复系统,并且提交已被确定为被存储在所述去重复系统中的块的引用数据。
2.如权利要求1所述的系统,其特征在于,所述分块化阶段包括对所述文件的不同的子集并行地执行分块化的至少两个模块,或者其中所述提交阶段包括将块并行地存储在所述去重复系统的一个或多个块存储中的至少两个模块,或者其中,所述分块化阶段包括并行地对所述文件的不同的子集执行分块化的至少两个模块,并且所述提交阶段包括将块并行地存储到所述去重复系统的一个或多个块存储中的至少两个模块。
3.如权利要求1所述的系统,其特征在于,还包括压缩阶段,所述压缩阶段包括各自对应于在将所述块中的至少一个提交到所述去重复系统之前压缩该块的压缩算法的一个或多个模块,并且如果所述压缩阶段包括多个可用压缩算法,则所述系统还包括配置成从所述多个可用压缩算法中选择一压缩算法的压缩算法选择器。
4.如权利要求1所述的系统,其特征在于,还包括包含对所述块的不同的子集并行地执行压缩的至少两个模块的压缩阶段,或者包含对所述块的不同的子集并行地执行散列化的至少两个模块的散列化阶段,或者对所述块的不同的子集并行地执行压缩的至少两个模块以及对所述块的不同的子集并行地执行散列化的至少两个模块两者。
5.如权利要求1所述的系统,其特征在于,还包括扫描阶段,包括选择文件来经由所述流水线进行去重复的匍匐器,所述匍匐器被配置成访问策略来确定要选择哪些文件来进行去重复。
6.如权利要求5所述的系统,其特征在于,还包括选择阶段,所述选择阶段被配置成接收经由所述扫描阶段或另一机制或者两者来标识的文件,以及在提供所述文件来经由所述流水线进行进一步处理之前访问策略来对所述文件执行过滤、排名、排序或编组,或者对所述文件执行过滤、排名、排序或编组的任何组合。
7.如权利要求1所述的系统,其特征在于,所述流水线被配置成对多个文件执行批处理,所述多个文件被批量化到文件队列中或者其他成批的文件编组中,或者其中所述流水线被配置成对多个块执行批处理,所述多个块被批量化到块队列中或者其他成批的块编组中,或者其中所述流水线被配置成对多个文件执行批处理,所述多个文件被批量化到文件队列中或者其他成批的文件编组中,并且其中所述流水线被配置成对多个块执行批处理, 所述多个块被批量化到块队列中或者其他成批的块编组中。
8.一种在计算环境中的、至少部分地在至少一个处理器上执行的方法,包括接收要去重复的文件0 );在包括一个或多个分块化算法的模块化分块化阶段(110)中将所述文件的数据处理成块(230);将所述块(23 提供到索引阶段,所述索引阶段确定(MO)所述块中的每一个是否已存在于去重复系统中;如果块存储阶段中的每个块被确定为尚未存在于所述去重复系统中,则提交(254)该块,并且如果该块被确定为存在于所述去重复系统中,则提交该块的引用数据;以及提交(116)对所述文件的引用信息,所述引用信息对应于从该文件提取的所述一个或多个块。
9.如权利要求8所述的方法,其特征在于,还包括获得要去重复的一组候选文件的快照,扫描所述候选文件以选择要去重复的文件,以及将要去重复的所述文件记入日志,以及基于所述文件的属性、所述文件的统计属性、文件数据集的统计推导出的属性、内部反馈、 或外部反馈,或所述文件的属性、所述文件的统计属性、文件数据集的统计推导出的属性、 内部反馈、或外部反馈的任何组合来处理所述日志中的所述文件,以对所述文件执行过滤、 排名、排序或编组,或者对对所述文件执行过滤、排名、排序或编组的任何组合,并且输出所述文件以便被接收来进行进一步去重复处理。
10.一个或多个具有计算机可执行指令的计算机可读介质,所述计算机可执行指令在被执行时执行以下步骤,包括选择要进行数据去重复的文件0对,2观);对所述文件(440)进行排队以进行批处理;在包括一个或多个分块化算法的安全模块化分块化阶段中将所述文件处理成块(444, 446);对所述块(44 进行排队以进行批处理;处理所述块以确定(MO)每个块是否已存在于去重复系统中,并且若不是,则存储 (252)尚未存在于所述去重复系统中的每个块,并且若是,则存储(116)已存在的每个块的引用数据056);结合更新尚未存在于所述去重复系统中的每个块的索引,将所述一个或多个块或关于会话的块应用数据,或所述一个或多个块以及关于会话的块引用数据提交(254)到所述去重复系统;以及更新文件元数据以将所述文件与对所述一个或多个块的引用进行关联。
全文摘要
本发明描述了用于数据去重复的可扩展流水线。本公开涉及由模块化数据去重复流水线的各阶段/模块执行的数据去重复(优化)。在每个阶段,流水线允许替换、选择或扩展模块,例如,不同的算法可被用于基于正被处理的数据的类型来进行分块化或压缩。此流水线便于安全的数据处理、批处理、和并行处理。流水线是可基于反馈调整的,例如,通过选择模块来提升去重复质量、性能和/或吞吐量。还描述了例如基于文件和/或文件数据集的属性和/或统计属性和/或内部或外部反馈来对文件进行选择、过滤、排名、排序和/或编组,以进行去重复。
文档编号G06F17/30GK102567503SQ20111044018
公开日2012年7月11日 申请日期2011年12月15日 优先权日2010年12月16日
发明者A·M·埃尔-施密, J·R·本顿, P·A·奥尔泰安, R·卡拉赫 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1