适用于基于哈希的多节点备份系统的数据备份方法及装置与流程

文档序号:21029789发布日期:2020-06-09 20:08阅读:289来源:国知局
适用于基于哈希的多节点备份系统的数据备份方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种适用于基于哈希的多节点备份系统的数据备份方法。



背景技术:

在基于哈希的备份系统中,根据不同的切片算法,备份的原始数据会被切分成许多个数据切片。这些数据切片和他们对应的哈希值会被分散地存储在备份系统的数据节点中,并最终组织成一个默克尔(merkel)树的形式来保存。在备份系统中,查询到哈希值的存在就意味着它所关联的数据块的存在。如图1所示,多个备份merkel树可能会引用相同的数据块;但是,数据块本身只会被系统存储一次,所以备份系统具有高效的磁盘利用率。

备份系统的一种主要的容灾方法就是远程复制,它允许用户把目标复制备份数据从一个源备份服务器(即源数据节点)复制到另一个目的备份服务器(目的数据节点,也可以称为远端服务器或远端备份服务器)。当源备份服务器发生了任何导致数据丢失或数据不可用错误时,用户可以从远端备份服务器将数据恢复回来。图2示出了目前远程复制功能的实现流程,在图2中,n大于0,为源备份服务器存储节点的数目,m大于0,为目的备份服务器存储节点的数目。

在当前的远程复制功能实现中,当预设的复制时间到达或者用户手动触发了数据复制的时候,源系统的控制节点会为每一个需要复制的备份客户端创建一个复制会话,它们会被用于复制这个客户端的目标复制备份数据到远端服务器。不同的备份系统,可能会有不同的可并发执行的复制会话数目限制。

虽然当前的实现方式简单并满足了复制功能的需要,但是它还是具有以下的缺陷以至于大大地影响了复制的性能,具体地:

1、工作量在集群中是不平衡的,如图2所示,所有的复制会话都是在集群的控制节点上创建并运行的。这就对控制节点的cpu和内存性能提出了很高的性能要求,可能会成为性能瓶颈。

2、数据块的复制会分为两步:第一步是从源数据节点到源控制节点;第二步是源控制节点到远端服务器。其中的第一步是不必要且费时的;同时,也增加了复制出错的概率。

3、站在数据去重的角度上,多个复制会话互相独立地工作会导致一定程度的冗余工作量。例如:对于那些支持源端数据去重的备份系统来说,在真实数据被复制到目的备份服务器之前,源数据节点会先通过一条查询命令来查看这块数据的哈希是否在远端服务器已经存在了。如果哈希已经存在了,那么对应的数据块也是存在的,也就不需要再把整个数据块给发送到远端服务器。但是,在现有技术中,多个复制会话会独立地处理他们自己的备份,如果某些数据块(哈希)被多个备份引用的话,他们可能会被查询多次。更糟糕的情况会发生在那些依赖服务器端去重的产品上,因为大量的重复数据传输会造成功能耗时急剧增加。

综上所述,目前复制实现方式具有以下缺点:所有工作都是在源端控制节点上执行的,导致复制效率低下。控制节点上的cpu繁忙度将非常高,成为复制效果的瓶颈。而存储节点上计算能力被完全地浪费。多个复制会话相互独立的执行,无法避免冗余的数据查询和传输。源端数据节点和源端控制节点间的数据传输是不必要的,将导致额外的复制时间和增加复制失败的可能性。因此,目前急需一种数据备份方法来解决上述问题。



技术实现要素:

本发明实施例提供一种适用于基于哈希的多节点备份系统的数据备份方法,用以解决现有技术中的上述至少一个问题。

本发明实施例提供一种适用于基于哈希的多节点备份系统的数据备份方法,在数据节点中执行以下处理:

遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器;

将不存在于远端服务器的数据块在本地保存为作业文件;

根据作业文件并发地进行多个目标复制备份数据的复制。

本发明实施例还提供一种适用于基于哈希的多节点备份系统的数据备份装置,设置于数据节点中,包括:

统计记录模块,用于遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器;

保存模块,用于将不存在于远端服务器的数据块在本地保存为作业文件;

复制模块,用于根据作业文件并发地进行多个目标复制备份数据的复制。

本发明实施例还提供一种适用于基于哈希的多节点备份系统的数据备份装置,设置于数据节点中,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,计算机程序被处理器执行时实现上述适用于基于哈希的多节点备份系统的数据备份方法的步骤。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有信息传递的实现程序,程序被处理器执行时实现上述适用于基于哈希的多节点备份系统的数据备份方法的步骤。

采用本发明实施例,避免了不必要的数据传输,极大地提升了复制的效率。复制的粒度从整个目标复制备份数据减小为了单独的数据块,避免了大量重复的数据查询和数据传输。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是现有技术的多个备份引用相同的数据块的示意图;

图2是现有技术的远程复制功能实现的示意图;

图3是本发明实施例的适用于基于哈希的多节点备份系统的数据备份方法的流程图;

图4是本发明实施例的特定数据结构的示意图;

图5是本发明实施例的作业文件的结构的示意图;

图6是本发明实施例的新复制功能实现的示意图;

图7是本发明实施例的用于目的服务器端垃圾回收中的新的哈希记录标志位的示意图;

图8是本发明实施例的安排各个源服务器的复制时间以避免相互干扰的示意图;

图9是本发明装置实施例一的适用于基于哈希的多节点备份系统的数据备份装置的示意图;

图10是本发明装置实施例二的适用于基于哈希的多节点备份系统的数据备份装置的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

方法实施例

根据本发明的实施例,提供了一种适用于基于哈希的多节点备份系统的数据备份方法,包括确定数据块是否需要被传输的数据挖掘的步骤(步骤301和步骤302)和数据复制(步骤303)的步骤,可用于优化基于哈希的多节点备份系统之间的数据复制。本发明实施例的所有处理均是在数据节点中执行,具体地,在基于哈希的备份系统中,备份会被组织成一颗merkel树,所有的数据切片会被均匀的存储在多个数据节点中。那么,自然地,数据复制就应该从源数据节点发起,而不是控制节点。当所有的数据块被传输到目的服务器后,代表被复制的目标复制备份数据的merkel树也就自动地建立起来了。

图3是本发明实施例的适用于基于哈希的多节点备份系统的数据备份方法的流程图,如图3所示,根据本发明实施例的适用于基于哈希的多节点备份系统的数据备份方法具体包括:

步骤301,遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器;

步骤302,将不存在于远端服务器的数据块在本地保存为作业文件;

步骤303,根据作业文件并发地进行多个目标复制备份数据的复制。

以下结合附图,对本发明实施例的上述各个步骤进行详细说明。

在步骤301中,为了方便遍历各个目标复制备份数据,可以预先对计划要复制到远端服务器的目标复制备份数据进行编号,并基于编号遍历本地存储的目标复制备份数据。此外,如图4所示,还可以采用预定数据结构记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器,其中,预定数据结构的键为数据块的哈希,键的键值为哈希引用对象,哈希引用对象采用一个比特标志位标识哈希及其对应的数据块是否已经存在于远端服务器,采用一个比特位图标识哪些目标复制备份数据引用了该数据块,在一个比特位图的长度不足以记录下所有引用了同一数据块的目标复制备份数据时,采用指针指向对应的下一个哈希引用对象。在本发明实施例中,对于被目标复制备份数据所引用的数据块,如果当前还没有以其哈希为键的数据存储于统计数据中时,向远端服务器发送哈希是否存在查询消息(即下述哈希是否存在消息(is_hash_present)),并根据查询结果对该数据块进行统计,其中,如果该哈希值已经存在于远端服务器,则属于该数据块下层的所有子孙数据块也存在于远端服务器,则根据查询结果对该数据块下层的的子孙数据块进行统计。

具体地,图4展示了的预定数据结构即map数据结构,map数据结构将用来记录统计数据,并被保存在缓存中。其中,数据结构的键是数据块的哈希,而值是一个名为哈希引用对象(hash_ref_obj)的数据结构,它包含以下信息,如图4所示,structhash_ref_obj{bitis_present_on_target_server;bitmapbackups_bitmap;hash_ref_obj*next;};具体地:

1、一个一比特长度的标志位,用来表示一个哈希及它对应的数据块是否已经存在于远端服务器。对于每一个被该备份所引用的数据块,如果当前还没有以它的哈希为键的数据存放于统计数据中,需要发送一条哈希是否存在消息(is_hash_present)到远端服务器去查询该哈希是否已经存在。特别地,如果一个数据块已经被证实在远端服务器是存在的,那么基于merkel树的特性,在merkel树结构中,属于该数据块下层的所有子孙数据块也一定是存在的,所以,这些子孙数据块的查询结果可以直接被放入到统计数据中。

2、一个比特位图,用于记录哪些备份引用了这个数据块。根据不同的系统规模,该比特位图会有不同的长度。例如,32字节长度的位图可以最多表示有256个备份引用了某一个数据块。

3、指向下一个哈希引用对象(hash_ref_obj)数据结构的指针。这个指针主要用于在超大规模的系统中,一个比特位图的长度不足以记录下所有引用了同一数据块的备份时使用。

需要说明的是,上述处理可以在多个目标复制备份数据上并发地执行。

在步骤302中,作业文件包括:哈希及其对应的可变字节长度的备份引用位图,其中,备份引用位图为引用该数据块的目标复制备份数据的比特位图。

也就是说,在步骤302中,一旦遍历并查询完成,只有那些被确认了不存在于远端服务器的数据块记录会被保存成作业文件,保存在各个数据节点上。图5展示了作业文件的格式。在作业文件中,上述的比特位图的长度会根据真实的引用情况被调整。例如,如果一个数据块被8个备份所引用,那么1个字节的比特位图就足够了。作业文件的大小不会影响服务器的性能。以32个字节长的比特位图为例,520mb的文件就可以存储十亿条记录。

在步骤303中,根据作业文件并发地进行多个目标复制备份数据的复制具体包括:

在作业文件中保存传输失败的数据块记录,也就是说,1.不把对应于传输失败的数据块的记录从作业文件中删除,并读取该数据块的备份引用位图backups_bitmap,并将备份引用位图backups_bitmap以广播的形式发送到其他数据节点;

当接收到广播后,根据接收到的备份引用位图backups_bitmap,根据公式1更新本地预先设置的忽略匹配位skip_match_bits的值:

skip_match_bits=skip_match_bits│backups_bitmap公式1;

其中,skip_match_bits表示忽略匹配位,backups_bitmap表示备份引用位图;

在根据作业文件发送某一数据块前,根据公式2对该数据块的备份引用位图与忽略匹配位进行比较:

still_referred_by_other_backups=(~(backups_bitmap&skip_match_bits))&backups_bitmap公式2;

其中,still_referred_by_other_backups表示仍然被其他备份引用;

如果比较结果still_referred_by_other_backups不等于零,则正常传输该数据块,否则,不传输该数据块;也就是说,如果比较结果still_referred_by_other_backups不等于零,说明这个数据块不仅是被已经发生传输错误的备份所引用,还被其他有效的备份所引用。那么这个数据块,就会被正常的传输。否则,复制过程就会跳过这个数据块,因为它只被发生错误的备份所引用,已经不需要再复制它了。

将复制失败的目标复制备份数据反馈给用户。如果将目标复制备份数据进行了编号,可以将复制失败的目标复制备份数据的编号反馈给用户。

在步骤303之后,成功地传输了所有的数据块表示整个复制过程是成功的。如果有收尾工作的话,例如封装备份,更新数据库等,就可以随之进行了。如果复制发生了错误,复制失败的备份的编号会被通知给用户。

图6展示了新的复制功能的实现。基于某些现有的负载均衡算法,远端备份服务器会合理地分配目的数据节点给源数据节点进行连接并发送数据。在图6中,用实线框住的hx代表远端服务器上已经存在此哈希,不需要再次复制哈希对应的数据块到远端服务器,用虚线框住的hx代表远端服务器不存在此哈希,需要复制哈希对应的数据块到远端服务器。

在步骤303中,可以在n+1天根据作业文件并发地进行多个目标复制备份数据的复制,其中,在第n天完成作业文件的保存。

具体地,在支持源端去重的备份系统中,为了进一步提高复制功能的用户体验和降低复制所需时间,上述数据挖掘算法还可以从整个复制过程中剥离出来。数据挖掘的过程可以在比预设的复制开始时间至少提前一天进行。为了使以下描述清晰易理解,假设数据挖掘已经在第n天完成,并且预设的复制时间是在第(n+1)天。两者的时间间隔可以根据具体的生产环境相应地调整。如果两次复制之间都有大量的新数据产生,数据计算过程无法在一天之内完成,用户可以延长时间间隔到两天及以上,并相应地调整计划复制时间。

这里,需要讨论一个特别的场景。几乎所有的基于哈希的备份系统都支持垃圾回收功能,它用来回收那些被已经过期的,无效的数据占用的磁盘空间。因为垃圾回收机制会改变目的复制服务器上的数据,所以如何正确地安排垃圾回收和数据挖掘的执行次序是至关重要的。为了保证查询结果的准确性,本方案会遵守以下原则:

1、在第n天,在远端服务器上的垃圾回收完成后,再向远端服务器发送查询消息。也就是说,在第n天,只有当目的服务器上的垃圾回收完成后,源存储节点才会发送is_hash_present(哈希是否存在)消息到目的服务器查询数据块的存在与否。否则,在垃圾回收中删除的数据块会导致之前的查询结果无效。

2、由于在源数据节点上针对每个备份执行数据挖掘算法的时间和真正的数据复制之间有一天的时间间隔,如果目的服务器上的某些数据块在查询当日是有效的,而在复制当日是过期的话,这样也会造成查询结果的不准确,导致该复制的数据没有被复制,这样会造成数据丢失。因此,目的备份服务器上的垃圾回收机制也要有相应的措施来处理这种情况。

了解垃圾回收是如何工作的有助于更好地理解本专利是如何处理以上两种场景的。首先,垃圾回收会为每个哈希值设置一个初始化值为零的引用计数,它代表了这个哈希以及它对应的数据块被备份数据引用的次数;然后,它会遍历每一个处于有效状态的备份数据,增加它所引用的每个哈希的引用计数。最后,那些引用计数为零的,也就是没有被任何有效备份所引用的哈希及其数据块占用的空间将会被回收重用。上述工作可能会被重复执行,直到没有零引用的哈希存在。

为了保证在第n天得到的查询结果在真实数据复制发生当日,也就是第(n+1)天,还是有效的,为每一个哈希记录引入了一个名为“stillvalidonreplication”(复制时仍然有效)的新标志位。在目的备份服务器执行这个特殊垃圾回收的时候,为那些将会在第(n+1)天过期而成为无效的备份单独计数。如果一个哈希记录只被这些即将过期的备份所引用,那么它的“stillvalidonreplication”标志位会被设置为零,意味着该哈希在复制发生时是无效的。因此在被源端查询时,该哈希会返回不存在,因此需要再次传输。但是对应的数据块并不会被回收,毕竟当前他们还是有效的。最终,只有那些在第(n+1)天,也就是复制发生的当天,仍然有效的哈希记录的stillvalidonreplication(复制时仍然有效)标志位才会被设置为1。图7展示了一种可行的哈希记录数据结构。具体处理步骤如下:

步骤1,将记录的哈希设置一个复制时仍然有效标志位;

步骤2,在第n天执行垃圾回收操作时,将在n+1天即将过期而成为无效目标复制备份数据的进行特殊计数;

步骤3,根据特殊计数,如果一个记录的哈希只被在n+1天即将过期的目标复制备份数据所引用时,将复制时仍然有效标志位设置为零;

步骤4,在接收到哈希是否存在查询消息时,如果复制时仍然有效标志位为零,则返回哈希不存在消息,否则,回复哈希存在消息;

步骤5,在垃圾回收完成后,发送垃圾回收完成通知。

从上面的处理可以看出,有了这个提前计算的标志位,当源端存储节点查询哈希对应的数据块在复制当日是否已经存在的时候,目的服务器会根据这一标志位返回结果。

当所有的目的服务器都执行完了特殊垃圾回收,所有的源端服务器会得到通知,开始并行的进行查询工作。在第(n+1)天,预定的复制工作将在所有的源端数据节点上,根据生成的工作文件并行地展开。

对于那些在数据挖掘查询后才新创建的备份,仍然可以按照原有的方式进行复制。

如果用户有多台源服务器连接到同一台目的备份服务器,为了避免相互干扰,推荐的最佳方式时以一种合理的方式安排各个源服务器的复制时间。图8展示了一种可行的安排方式。

综上,借助于本发明实施例的技术方案:

避免了不必要的数据传输,极大地提升了复制的效率。备份数据块将会在源端数据节点和目的端数据节点间直接传输,源端控制节点将不再是性能瓶颈。

复制的粒度从整个备份数据减小为了单独的数据块。通过数据挖掘查询,会找到那些被多个备份共享的数据块,这些共享数据块只会被查询和传输一次,避免了大量重复的数据查询和数据传输。

用于为每个源端数据节点产生作业文件的数据挖掘算法可以从复制过程中剥离出来,减少复制所需时间,为用户提供更好的使用体验。

传输数据的查询结果是准确的。可能会影响查询准确性的多个场景,比如垃圾回收,都被考虑到了。

装置实施例一

根据本发明的实施例,提供了一种适用于基于哈希的多节点备份系统的数据备份装置,设置于数据节点中,包括确定数据块是否需要被传输的数据挖掘的模块(统计记录模块90和保存模块92)和复制模块94,可用于优化基于哈希的多节点备份系统之间的数据复制。本发明实施例的所有处理均是在数据节点中执行,具体地,在基于哈希的备份系统中,备份会被组织成一颗merkel树,所有的数据切片会被均匀的存储在多个数据节点中。那么,自然地,数据复制就应该从源数据节点发起,而不是控制节点。当所有的数据块被传输到目的服务器后,代表被复制的目标复制备份数据的merkel树也就自动地建立起来了。

图9是本发明装置实施例一的适用于基于哈希的多节点备份系统的数据备份装置的示意图,如图9所示,根据本发明实施例的适用于基于哈希的多节点备份系统的数据备份装置具体包括:

统计记录模块90,用于遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及所述数据块是否存在于远端服务器;

保存模块92,用于将不存在于远端服务器的数据块在本地保存为作业文件;

复制模块94,用于根据所述作业文件并发地进行多个目标复制备份数据的复制。

以下结合附图,对本发明实施例的上述各个步骤进行详细说明。

在保存模块92中,为了方便遍历各个目标复制备份数据,可以预先对计划要复制到远端服务器的目标复制备份数据进行编号,并基于编号遍历本地存储的目标复制备份数据。此外,如图4所示,还可以采用预定数据结构记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器,其中,预定数据结构的键为数据块的哈希,键的键值为哈希引用对象,哈希引用对象采用一个比特标志位标识哈希及其对应的数据块是否已经存在于远端服务器,采用一个比特位图标识哪些目标复制备份数据引用了该数据块,在一个比特位图的长度不足以记录下所有引用了同一数据块的目标复制备份数据时,采用指针指向对应的下一个哈希引用对象。在本发明实施例中,对于被目标复制备份数据所引用的数据块,如果当前还没有以其哈希为键的数据存储于统计数据中时,向远端服务器发送哈希是否存在查询消息(即下述哈希是否存在消息(is_hash_present)),并根据查询结果对该数据块进行统计,其中,如果该哈希值已经存在于远端服务器,则属于该数据块下层的所有子孙数据块也存在于远端服务器,则根据查询结果对该数据块下层的子孙数据块进行统计。

具体地,图4展示了的预定数据结构即map数据结构,map数据结构将用来记录统计数据,并被保存在缓存中。其中,数据结构的键是数据块的哈希,而值是一个名为哈希引用对象(hash_ref_obj)的数据结构,它包含以下信息:

1、一个一比特长度的标志位,用来表示一个哈希及它对应的数据块是否已经存在于远端服务器。对于每一个被该备份所引用的数据块,如果当前还没有以它的哈希为键的数据存放于统计数据中,需要发送一条哈希是否存在消息(is_hash_present)到远端服务器去查询该哈希是否已经存在。特别地,如果一个数据块已经被证实在远端服务器是存在的,那么基于merkel树的特性,在merkel树结构中,属于该数据块下层的所有子孙数据块也一定是存在的,所以,这些子孙数据块的查询结果可以直接被放入到统计数据中。

2、一个比特位图,用于记录哪些备份引用了这个数据块。根据不同的系统规模,该比特位图会有不同的长度。例如,32字节长度的位图可以最多表示有256个备份引用了某一个数据块。

3、指向下一个哈希引用对象(hash_ref_obj)数据结构的指针。这个指针主要用于在超大规模的系统中,一个比特位图的长度不足以记录下所有引用了同一数据块的备份时使用。

需要说明的是,上述处理可以在多个目标复制备份数据上并发地执行。

在保存模块92中,作业文件包括:哈希及其对应的可变字节长度的备份引用位图,其中,备份引用位图为引用该数据块的目标复制备份数据的比特位图。

也就是说,在保存模块92中,一旦遍历并查询完成,只有那些被确认了不存在于远端服务器的数据块记录会被保存成作业文件,保存在各个数据节点上。图5展示了作业文件的格式。在作业文件中,上述的比特位图的长度会根据真实的引用情况被调整。例如,如果一个数据块被8个备份所引用,那么1个字节的比特位图就足够了。作业文件的大小不会影响服务器的性能。以32个字节长的比特位图为例,520mb的文件就可以存储十亿条记录。

在复制模块94中,根据作业文件并发地进行多个目标复制备份数据的复制具体包括:

在作业文件中保存传输失败的数据块记录,也就是说,1.不把对应于传输失败的数据块的记录从作业文件中删除,并读取该数据块的备份引用位图backups_bitmap,并将备份引用位图backups_bitmap以广播的形式发送到其他数据节点;

当接收到广播后,根据接收到的备份引用位图backups_bitmap,根据公式1更新本地预先设置的忽略匹配位skip_match_bits的值:

skip_match_bits=skip_match_bits│backups_bitmap公式1;

其中,skip_match_bits表示忽略匹配位,backups_bitmap表示备份引用位图;

在根据作业文件发送某一数据块前,根据公式2对该数据块的备份引用位图与忽略匹配位进行比较:

still_referred_by_other_backups=(~(backups_bitmap&skip_match_bits))&backups_bitmap公式2;

其中,still_referred_by_other_backups表示仍然被其他备份引用;

如果比较结果still_referred_by_other_backups不等于零,则正常传输该数据块,否则,不传输该数据块;也就是说,如果比较结果still_referred_by_other_backups不等于零,说明这个数据块不仅是被已经发生传输错误的备份所引用,还被其他有效的备份所引用。那么这个数据块,就会被正常的传输。否则,复制过程就会跳过这个数据块,因为它只被发生错误的备份所引用,已经不需要再复制它了。

将复制失败的目标复制备份数据反馈给用户。如果将目标复制备份数据进行了编号,可以将复制失败的目标复制备份数据的编号反馈给用户。

复制模块94成功地传输了所有的数据块表示整个复制过程是成功的。如果有收尾工作的话,例如封装备份,更新数据库等,就可以随之进行了。如果复制发生了错误,复制失败的备份的编号会被通知给用户。

图6展示了新的复制功能的实现。基于某些现有的负载均衡算法,远端备份服务器会合理地分配目的数据节点给源数据节点进行连接并发送数据。在图6中,用实线框住的hx代表远端服务器上已经存在此哈希,不需要再次复制哈希对应的数据块到远端服务器,用虚线框住的hx代表远端服务器不存在此哈希,需要复制哈希对应的数据块到远端服务器。

在复制模块94中,可以在n+1天根据作业文件并发地进行多个目标复制备份数据的复制,其中,在第n天完成作业文件的保存。

具体地,在支持源端去重的备份系统中,为了进一步提高复制功能的用户体验和降低复制所需时间,上述数据挖掘算法还可以从整个复制过程中剥离出来。数据挖掘的过程可以在比预设的复制开始时间至少提前一天进行。为了使以下描述清晰易理解,假设数据挖掘已经在第n天完成,并且预设的复制时间是在第(n+1)天。两者的时间间隔可以根据具体的生产环境相应地调整。如果两次复制之间都有大量的新数据产生,数据计算过程无法在一天之内完成,用户可以延长时间间隔到两天及以上,并相应地调整计划复制时间。

这里,需要讨论一个特别的场景。几乎所有的基于哈希的备份系统都支持垃圾回收功能,它用来回收那些被已经过期的,无效的数据占用的磁盘空间。因为垃圾回收机制会改变目的复制服务器上的数据,所以如何正确地安排垃圾回收和数据挖掘的执行次序是至关重要的。为了保证查询结果的准确性,本方案会遵守以下原则:

1、在第n天,在远端服务器上的垃圾回收完成后,再向远端服务器发送查询消息。也就是说,在第n天,只有当目的服务器上的垃圾回收完成后,源存储节点才会发送is_hash_present(哈希是否存在)消息到目的服务器查询数据块的存在与否。否则,在垃圾回收中删除的数据块会导致之前的查询结果无效。

2、由于在源数据节点上针对每个备份执行数据挖掘算法的时间和真正的数据复制之间有一天的时间间隔,如果目的服务器上的某些数据块在查询当日是有效的,而在复制当日是过期的话,这样也会造成查询结果的不准确,导致该复制的数据没有被复制,这样会造成数据丢失。因此,目的备份服务器上的垃圾回收机制也要有相应的措施来处理这种情况。

了解垃圾回收是如何工作的有助于更好地理解本专利是如何处理以上两种场景的。首先,垃圾回收会为每个哈希值设置一个初始化值为零的引用计数,它代表了这个哈希以及它对应的数据块被备份数据引用的次数;然后,它会遍历每一个处于有效状态的备份数据,增加它所引用的每个哈希的引用计数。最后,那些引用计数为零的,也就是没有被任何有效备份所引用的哈希及其数据块占用的空间将会被回收重用。上述工作可能会被重复执行,直到没有零引用的哈希存在。

为了保证在第n天得到的查询结果在真实数据复制发生当日,也就是第(n+1)天,还是有效的,本发明实施例的装置还包括一个回收模块,回收模块为每一个哈希记录引入了一个名为“stillvalidonreplication”(复制时仍然有效)的新标志位。在目的备份服务器执行这个特殊垃圾回收的时候,为那些将会在第(n+1)天过期而成为无效的备份单独计数。如果一个哈希记录只被这些即将过期的备份所引用,那么它的“stillvalidonreplication”标志位会被设置为零,意味着该哈希在复制发生时是无效的。因此在被源端查询时,该哈希会返回不存在,因此需要再次传输。但是对应的数据块并不会被回收,毕竟当前他们还是有效的。最终,只有那些在第(n+1)天,也就是复制发生的当天,仍然有效的哈希记录的stillvalidonreplication(复制时仍然有效)标志位才会被设置为1。图7展示了一种可行的哈希记录数据结构,回收模块具体用于:

将记录的哈希设置一个复制时仍然有效标志位;

在第n天执行垃圾回收操作时,将在n+1天即将过期而成为无效目标复制备份数据的进行特殊计数;

根据特殊计数,如果一个记录的哈希只被在n+1天即将过期的目标复制备份数据所引用时,将复制时仍然有效标志位设置为零;

在接收到哈希是否存在查询消息时,如果复制时仍然有效标志位为零,则返回哈希不存在消息,否则,回复哈希存在消息;

在垃圾回收完成后,发送垃圾回收完成通知。

从上面的处理可以看出,有了这个提前计算的标志位,当源端存储节点查询哈希对应的数据块在复制当日是否已经存在的时候,目的服务器会根据这一标志位返回结果。

当所有的目的服务器都执行完了特殊垃圾回收,所有的源端服务器会得到通知,开始并行的进行查询工作。在第(n+1)天,预定的复制工作将在所有的源端数据节点上,根据生成的工作文件并行地展开。

对于那些在数据挖掘查询后才新创建的备份,仍然可以按照原有的方式进行复制。

如果用户有多台源服务器连接到同一台目的备份服务器,为了避免相互干扰,推荐的最佳方式时以一种合理的方式安排各个源服务器的复制时间。图8展示了一种可行的安排方式。

综上,借助于本发明实施例的技术方案:

避免了不必要的数据传输,极大地提升了复制的效率。备份数据块将会在源端数据节点和目的端数据节点间直接传输,源端控制节点将不再是性能瓶颈。

复制的粒度从整个备份数据减小为了单独的数据块。通过数据挖掘查询,会找到那些被多个备份共享的数据块,这些共享数据块只会被查询和传输一次,避免了大量重复的数据查询和数据传输。

用于为每个源端数据节点产生作业文件的数据挖掘算法可以从复制过程中剥离出来,减少复制所需时间,为用户提供更好的使用体验。

传输数据的查询结果是准确的。可能会影响查询准确性的多个场景,比如垃圾回收,都被考虑到了。

装置实施例二

本发明实施例提供一种适用于基于哈希的多节点备份系统的数据备份装置,设置于数据节点中,如图10所示,包括:存储器1010、处理器1020及存储在所述存储器1010上并可在所述处理器1020上运行的计算机程序,所述计算机程序被所述处理器1020执行时实现如下方法步骤:

步骤301,遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器;

步骤302,将不存在于远端服务器的数据块在本地保存为作业文件;

步骤303,根据作业文件并发地进行多个目标复制备份数据的复制。

以下结合附图,对本发明实施例的上述各个步骤进行详细说明。

在步骤301中,为了方便遍历各个目标复制备份数据,可以预先对计划要复制到远端服务器的目标复制备份数据进行编号,并基于编号遍历本地存储的目标复制备份数据。此外,如图4所示,还可以采用预定数据结构记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器,其中,预定数据结构的键为数据块的哈希,键的键值为哈希引用对象,哈希引用对象采用一个比特标志位标识哈希及其对应的数据块是否已经存在于远端服务器,采用一个比特位图标识哪些目标复制备份数据引用了该数据块,在一个比特位图的长度不足以记录下所有引用了同一数据块的目标复制备份数据时,采用指针指向对应的下一个哈希引用对象。在本发明实施例中,对于被目标复制备份数据所引用的数据块,如果当前还没有以其哈希为键的数据存储于统计数据中时,向远端服务器发送哈希是否存在查询消息(即下述哈希是否存在消息(is_hash_present)),并根据查询结果对该数据块进行统计,其中,如果该哈希值已经存在于远端服务器,则属于该数据块下层的所有子孙数据块也存在于远端服务器,则根据查询结果对该数据块下层的子孙数据块进行统计。

具体地,图4展示了的预定数据结构即map数据结构,map数据结构将用来记录统计数据,并被保存在缓存中。其中,数据结构的键是数据块的哈希,而值是一个名为哈希引用对象(hash_ref_obj)的数据结构,它包含以下信息:

1、一个一比特长度的标志位,用来表示一个哈希及它对应的数据块是否已经存在于远端服务器。对于每一个被该备份所引用的数据块,如果当前还没有以它的哈希为键的数据存放于统计数据中,需要发送一条哈希是否存在消息(is_hash_present)到远端服务器去查询该哈希是否已经存在。特别地,如果一个数据块已经被证实在远端服务器是存在的,那么基于merkel树的特性,在merkel树结构中,属于该数据块下层的所有子孙数据块也一定是存在的,所以,这些子孙数据块的查询结果可以直接被放入到统计数据中。

2、一个比特位图,用于记录哪些备份引用了这个数据块。根据不同的系统规模,该比特位图会有不同的长度。例如,32字节长度的位图可以最多表示有256个备份引用了某一个数据块。

3、指向下一个哈希引用对象(hash_ref_obj)数据结构的指针。这个指针主要用于在超大规模的系统中,一个比特位图的长度不足以记录下所有引用了同一数据块的备份时使用。

需要说明的是,上述处理可以在多个目标复制备份数据上并发地执行。

在步骤302中,作业文件包括:哈希及其对应的可变字节长度的备份引用位图,其中,备份引用位图为引用该数据块的目标复制备份数据的比特位图。

也就是说,在步骤302中,一旦遍历并查询完成,只有那些被确认了不存在于远端服务器的数据块记录会被保存成作业文件,保存在各个数据节点上。图5展示了作业文件的格式。在作业文件中,上述的比特位图的长度会根据真实的引用情况被调整。例如,如果一个数据块被8个备份所引用,那么1个字节的比特位图就足够了。作业文件的大小不会影响服务器的性能。以32个字节长的比特位图为例,520mb的文件就可以存储十亿条记录。

在步骤303中,根据作业文件并发地进行多个目标复制备份数据的复制具体包括:

在作业文件中保存传输失败的数据块记录,也就是说,1.不把对应于传输失败的数据块的记录从作业文件中删除,并读取该数据块的备份引用位图backups_bitmap,并将备份引用位图backups_bitmap以广播的形式发送到其他数据节点;

当接收到广播后,根据接收到的备份引用位图backups_bitmap,根据公式1更新本地预先设置的忽略匹配位skip_match_bits的值:

skip_match_bits=skip_match_bits│backups_bitmap公式1;

其中,skip_match_bits表示忽略匹配位,backups_bitmap表示备份引用位图;

在根据作业文件发送某一数据块前,根据公式2对该数据块的备份引用位图与忽略匹配位进行比较:

still_referred_by_other_backups=(~(backups_bitmap&skip_match_bits))&backups_bitmap公式2;

其中,still_referred_by_other_backups表示仍然被其他备份引用;

如果比较结果still_referred_by_other_backups不等于零,则正常传输该数据块,否则,不传输该数据块;也就是说,如果比较结果still_referred_by_other_backups不等于零,说明这个数据块不仅是被已经发生传输错误的备份所引用,还被其他有效的备份所引用。那么这个数据块,就会被正常的传输。否则,复制过程就会跳过这个数据块,因为它只被发生错误的备份所引用,已经不需要再复制它了。

将复制失败的目标复制备份数据反馈给用户。如果将目标复制备份数据进行了编号,可以将复制失败的目标复制备份数据的编号反馈给用户。

在步骤303之后,成功地传输了所有的数据块表示整个复制过程是成功的。如果有收尾工作的话,例如封装备份,更新数据库等,就可以随之进行了。如果复制发生了错误,复制失败的备份的编号会被通知给用户。

图6展示了新的复制功能的实现。基于某些现有的负载均衡算法,远端备份服务器会合理地分配目的数据节点给源数据节点进行连接并发送数据。在图6中,用实线框住的hx代表远端服务器上已经存在此哈希,不需要再次复制哈希对应的数据块到远端服务器,用虚线框住的hx代表远端服务器不存在此哈希,需要复制哈希对应的数据块到远端服务器。

在步骤303中,可以在n+1天根据作业文件并发地进行多个目标复制备份数据的复制,其中,在第n天完成作业文件的保存。

具体地,在支持源端去重的备份系统中,为了进一步提高复制功能的用户体验和降低复制所需时间,上述数据挖掘算法还可以从整个复制过程中剥离出来。数据挖掘的过程可以在比预设的复制开始时间至少提前一天进行。为了使以下描述清晰易理解,假设数据挖掘已经在第n天完成,并且预设的复制时间是在第(n+1)天。两者的时间间隔可以根据具体的生产环境相应地调整。如果两次复制之间都有大量的新数据产生,数据计算过程无法在一天之内完成,用户可以延长时间间隔到两天及以上,并相应地调整计划复制时间。

这里,需要讨论一个特别的场景。几乎所有的基于哈希的备份系统都支持垃圾回收功能,它用来回收那些被已经过期的,无效的数据占用的磁盘空间。因为垃圾回收机制会改变目的复制服务器上的数据,所以如何正确地安排垃圾回收和数据挖掘的执行次序是至关重要的。为了保证查询结果的准确性,本方案会遵守以下原则:

1、在第n天,在远端服务器上的垃圾回收完成后,再向远端服务器发送查询消息。也就是说,在第n天,只有当目的服务器上的垃圾回收完成后,源存储节点才会发送is_hash_present(哈希是否存在)消息到目的服务器查询数据块的存在与否。否则,在垃圾回收中删除的数据块会导致之前的查询结果无效。

2、由于在源数据节点上针对每个备份执行数据挖掘算法的时间和真正的数据复制之间有一天的时间间隔,如果目的服务器上的某些数据块在查询当日是有效的,而在复制当日是过期的话,这样也会造成查询结果的不准确,导致该复制的数据没有被复制,这样会造成数据丢失。因此,目的备份服务器上的垃圾回收机制也要有相应的措施来处理这种情况。

了解垃圾回收是如何工作的有助于更好地理解本专利是如何处理以上两种场景的。首先,垃圾回收会为每个哈希值设置一个初始化值为零的引用计数,它代表了这个哈希以及它对应的数据块被备份数据引用的次数;然后,它会遍历每一个处于有效状态的备份数据,增加它所引用的每个哈希的引用计数。最后,那些引用计数为零的,也就是没有被任何有效备份所引用的哈希及其数据块占用的空间将会被回收重用。上述工作可能会被重复执行,直到没有零引用的哈希存在。

为了保证在第n天得到的查询结果在真实数据复制发生当日,也就是第(n+1)天,还是有效的,为每一个哈希记录引入了一个名为“stillvalidonreplication”(复制时仍然有效)的新标志位。在目的备份服务器执行这个特殊垃圾回收的时候,为那些将会在第(n+1)天过期而成为无效的备份单独计数。如果一个哈希记录只被这些即将过期的备份所引用,那么它的“stillvalidonreplication”标志位会被设置为零,意味着该哈希在复制发生时是无效的。因此在被源端查询时,该哈希会返回不存在,因此需要再次传输。但是对应的数据块并不会被回收,毕竟当前他们还是有效的。最终,只有那些在第(n+1)天,也就是复制发生的当天,仍然有效的哈希记录的stillvalidonreplication(复制时仍然有效)标志位才会被设置为1。图7展示了一种可行的哈希记录数据结构。具体处理步骤如下:

步骤1,将记录的哈希设置一个复制时仍然有效标志位;

步骤2,在第n天执行垃圾回收操作时,将在n+1天即将过期而成为无效目标复制备份数据的进行特殊计数;

步骤3,根据特殊计数,如果一个记录的哈希只被在n+1天即将过期的目标复制备份数据所引用时,将复制时仍然有效标志位设置为零;

步骤4,在接收到哈希是否存在查询消息时,如果复制时仍然有效标志位为零,则返回哈希不存在消息,否则,回复哈希存在消息;

步骤5,在垃圾回收完成后,发送垃圾回收完成通知。

从上面的处理可以看出,有了这个提前计算的标志位,当源端存储节点查询哈希对应的数据块在复制当日是否已经存在的时候,目的服务器会根据这一标志位返回结果。

当所有的目的服务器都执行完了特殊垃圾回收,所有的源端服务器会得到通知,开始并行的进行查询工作。在第(n+1)天,预定的复制工作将在所有的源端数据节点上,根据生成的工作文件并行地展开。

对于那些在数据挖掘查询后才新创建的备份,仍然可以按照原有的方式进行复制。

如果用户有多台源服务器连接到同一台目的备份服务器,为了避免相互干扰,推荐的最佳方式时以一种合理的方式安排各个源服务器的复制时间。图8展示了一种可行的安排方式。

综上,借助于本发明实施例的技术方案:

避免了不必要的数据传输,极大地提升了复制的效率。备份数据块将会在源端数据节点和目的端数据节点间直接传输,源端控制节点将不再是性能瓶颈。

复制的粒度从整个备份数据减小为了单独的数据块。通过数据挖掘查询,会找到那些被多个备份共享的数据块,这些共享数据块只会被查询和传输一次,避免了大量重复的数据查询和数据传输。

用于为每个源端数据节点产生作业文件的数据挖掘算法可以从复制过程中剥离出来,减少复制所需时间,为用户提供更好的使用体验。

传输数据的查询结果是准确的。可能会影响查询准确性的多个场景,比如垃圾回收,都被考虑到了。

装置实施例三

本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传输的实现程序,所述程序被处理器1020执行时实现如下方法步骤:

步骤301,遍历本地存储的目标复制备份数据,统计并记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器;

步骤302,将不存在于远端服务器的数据块在本地保存为作业文件;

步骤303,根据作业文件并发地进行多个目标复制备份数据的复制。

以下结合附图,对本发明实施例的上述各个步骤进行详细说明。

在步骤301中,为了方便遍历各个目标复制备份数据,可以预先对计划要复制导远端服务器的目标复制备份数据进行编号,并基于编号遍历本地存储的目标复制备份数据。此外,如图4所示,还可以采用预定数据结构记录各个目标复制备份数据所引用的数据块以及数据块是否存在于远端服务器,其中,预定数据结构的键为数据块的哈希,键的键值为哈希引用对象,哈希引用对象采用一个比特标志位标识哈希及其对应的数据块是否已经存在于远端服务器,采用一个比特位图标识哪些目标复制备份数据引用了该数据块,在一个比特位图的长度不足以记录下所有引用了同一数据块的目标复制备份数据时,采用指针指向对应的下一个哈希引用对象。在本发明实施例中,对于被目标复制备份数据所引用的数据块,如果当前还没有以其哈希为键的数据存储于统计数据中时,向远端服务器发送哈希是否存在查询消息(即下述哈希是否存在消息(is_hash_present)),并根据查询结果对该数据块进行统计,其中,如果该哈希值已经存在于远端服务器,则属于该数据块下层的所有子孙数据块也存在于远端服务器,则根据查询结果对该数据块下层的子孙数据块进行统计。

具体地,图4展示了的预定数据结构即map数据结构,map数据结构将用来记录统计数据,并被保存在缓存中。其中,数据结构的键是数据块的哈希,而值是一个名为哈希引用对象(hash_ref_obj)的数据结构,它包含以下信息:

1、一个一比特长度的标志位,用来表示一个哈希及它对应的数据块是否已经存在于远端服务器。对于每一个被该备份所引用的数据块,如果当前还没有以它的哈希为键的数据存放于统计数据中,需要发送一条哈希是否存在消息(is_hash_present)到远端服务器去查询该哈希是否已经存在。特别地,如果一个数据块已经被证实在远端服务器是存在的,那么基于merkel树的特性,在merkel树结构中,属于该数据块下层的所有子孙数据块也一定是存在的,所以,这些子孙数据块的查询结果可以直接被放入到统计数据中。

2、一个比特位图,用于记录哪些备份引用了这个数据块。根据不同的系统规模,该比特位图会有不同的长度。例如,32字节长度的位图可以最多表示有256个备份引用了某一个数据块。

3、指向下一个哈希引用对象(hash_ref_obj)数据结构的指针。这个指针主要用于在超大规模的系统中,一个比特位图的长度不足以记录下所有引用了同一数据块的备份时使用。

需要说明的是,上述处理可以在多个目标复制备份数据上并发地执行。

在步骤302中,作业文件包括:哈希及其对应的可变字节长度的备份引用位图,其中,备份引用位图为引用该数据块的目标复制备份数据的比特位图。

也就是说,在步骤302中,一旦遍历并查询完成,只有那些被确认了不存在于远端服务器的数据块记录会被保存成作业文件,保存在各个数据节点上。图5展示了作业文件的格式。在作业文件中,上述的比特位图的长度会根据真实的引用情况被调整。例如,如果一个数据块被8个备份所引用,那么1个字节的比特位图就足够了。作业文件的大小不会影响服务器的性能。以32个字节长的比特位图为例,520mb的文件就可以存储十亿条记录。

在步骤303中,根据作业文件并发地进行多个目标复制备份数据的复制具体包括:

在作业文件中保存传输失败的数据块记录,也就是说,1.不把对应于传输失败的数据块的记录从作业文件中删除,并读取该数据块的备份引用位图backups_bitmap,并将备份引用位图backups_bitmap以广播的形式发送到其他数据节点;

当接收到广播后,根据接收到的备份引用位图backups_bitmap,根据公式1更新本地预先设置的忽略匹配位skip_match_bits的值:

skip_match_bits=skip_match_bits│backups_bitmap公式1;

其中,skip_match_bits表示忽略匹配位,backups_bitmap表示备份引用位图;

在根据作业文件发送某一数据块前,根据公式2对该数据块的备份引用位图与忽略匹配位进行比较:

still_referred_by_other_backups=(~(backups_bitmap&skip_match_bits))&backups_bitmap公式2;

其中,still_referred_by_other_backups表示仍然被其他备份引用;

如果比较结果still_referred_by_other_backups不等于零,则正常传输该数据块,否则,不传输该数据块;也就是说,如果比较结果still_referred_by_other_backups不等于零,说明这个数据块不仅是被已经发生传输错误的备份所引用,还被其他有效的备份所引用。那么这个数据块,就会被正常的传输。否则,复制过程就会跳过这个数据块,因为它只被发生错误的备份所引用,已经不需要再复制它了。

将复制失败的目标复制备份数据反馈给用户。如果将目标复制备份数据进行了编号,可以将复制失败的目标复制备份数据的编号反馈给用户。

在步骤303之后,成功地传输了所有的数据块表示整个复制过程是成功的。如果有收尾工作的话,例如封装备份,更新数据库等,就可以随之进行了。如果复制发生了错误,复制失败的备份的编号会被通知给用户。

图6展示了新的复制功能的实现。基于某些现有的负载均衡算法,远端备份服务器会合理地分配目的数据节点给源数据节点进行连接并发送数据。在图6中,用实线框住的hx代表远端服务器上已经存在此哈希,不需要再次复制哈希对应的数据块到远端服务器,用虚线框住的hx代表远端服务器不存在此哈希,需要复制哈希对应的数据块到远端服务器。

在步骤303中,可以在n+1天根据作业文件并发地进行多个目标复制备份数据的复制,其中,在第n天完成作业文件的保存。

具体地,在支持源端去重的备份系统中,为了进一步提高复制功能的用户体验和降低复制所需时间,上述数据挖掘算法还可以从整个复制过程中剥离出来。数据挖掘的过程可以在比预设的复制开始时间至少提前一天进行。为了使以下描述清晰易理解,假设数据挖掘已经在第n天完成,并且预设的复制时间是在第(n+1)天。两者的时间间隔可以根据具体的生产环境相应地调整。如果两次复制之间都有大量的新数据产生,数据计算过程无法在一天之内完成,用户可以延长时间间隔到两天及以上,并相应地调整计划复制时间。

这里,需要讨论一个特别的场景。几乎所有的基于哈希的备份系统都支持垃圾回收功能,它用来回收那些被已经过期的,无效的数据占用的磁盘空间。因为垃圾回收机制会改变目的复制服务器上的数据,所以如何正确地安排垃圾回收和数据挖掘的执行次序是至关重要的。为了保证查询结果的准确性,本方案会遵守以下原则:

1、在第n天,在远端服务器上的垃圾回收完成后,再向远端服务器发送查询消息。也就是说,在第n天,只有当目的服务器上的垃圾回收完成后,源存储节点才会发送is_hash_present(哈希是否存在)消息到目的服务器查询数据块的存在与否。否则,在垃圾回收中删除的数据块会导致之前的查询结果无效。

2、由于在源数据节点上针对每个备份执行数据挖掘算法的时间和真正的数据复制之间有一天的时间间隔,如果目的服务器上的某些数据块在查询当日是有效的,而在复制当日是过期的话,这样也会造成查询结果的不准确,导致该复制的数据没有被复制,这样会造成数据丢失。因此,目的备份服务器上的垃圾回收机制也要有相应的措施来处理这种情况。

了解垃圾回收是如何工作的有助于更好地理解本专利是如何处理以上两种场景的。首先,垃圾回收会为每个哈希值设置一个初始化值为零的引用计数,它代表了这个哈希以及它对应的数据块被备份数据引用的次数;然后,它会遍历每一个处于有效状态的备份数据,增加它所引用的每个哈希的引用计数。最后,那些引用计数为零的,也就是没有被任何有效备份所引用的哈希及其数据块占用的空间将会被回收重用。上述工作可能会被重复执行,直到没有零引用的哈希存在。

为了保证在第n天得到的查询结果在真实数据复制发生当日,也就是第(n+1)天,还是有效的,为每一个哈希记录引入了一个名为“stillvalidonreplication”(复制时仍然有效)的新标志位。在目的备份服务器执行这个特殊垃圾回收的时候,为那些将会在第(n+1)天过期而成为无效的备份单独计数。如果一个哈希记录只被这些即将过期的备份所引用,那么它的“stillvalidonreplication”标志位会被设置为零,意味着该哈希在复制发生时是无效的。因此在被源端查询时,该哈希会返回不存在,因此需要再次传输。但是对应的数据块并不会被回收,毕竟当前他们还是有效的。最终,只有那些在第(n+1)天,也就是复制发生的当天,仍然有效的哈希记录的stillvalidonreplication(复制时仍然有效)标志位才会被设置为1。图7展示了一种可行的哈希记录数据结构。具体处理步骤如下:

步骤1,将记录的哈希设置一个复制时仍然有效标志位;

步骤2,在第n天执行垃圾回收操作时,将在n+1天即将过期而成为无效目标复制备份数据的进行特殊计数;

步骤3,根据特殊计数,如果一个记录的哈希只被在n+1天即将过期的目标复制备份数据所引用时,将复制时仍然有效标志位设置为零;

步骤4,在接收到哈希是否存在查询消息时,如果复制时仍然有效标志位为零,则返回哈希不存在消息,否则,回复哈希存在消息;

步骤5,在垃圾回收完成后,发送垃圾回收完成通知。

从上面的处理可以看出,有了这个提前计算的标志位,当源端存储节点查询哈希对应的数据块在复制当日是否已经存在的时候,目的服务器会根据这一标志位返回结果。

当所有的目的服务器都执行完了特殊垃圾回收,所有的源端服务器会得到通知,开始并行的进行查询工作。在第(n+1)天,预定的复制工作将在所有的源端数据节点上,根据生成的工作文件并行地展开。

对于那些在数据挖掘查询后才新创建的备份,仍然可以按照原有的方式进行复制。

如果用户有多台源服务器连接到同一台目的备份服务器,为了避免相互干扰,推荐的最佳方式时以一种合理的方式安排各个源服务器的复制时间。图8展示了一种可行的安排方式。

综上,借助于本发明实施例的技术方案:

避免了不必要的数据传输,极大地提升了复制的效率。备份数据块将会在源端数据节点和目的端数据节点间直接传输,源端控制节点将不再是性能瓶颈。

复制的粒度从整个备份数据减小为了单独的数据块。通过数据挖掘查询,会找到那些被多个备份共享的数据块,这些共享数据块只会被查询和传输一次,避免了大量重复的数据查询和数据传输。

用于为每个源端数据节点产生作业文件的数据挖掘算法可以从复制过程中剥离出来,减少复制所需时间,为用户提供更好的使用体验。

传输数据的查询结果是准确的。可能会影响查询准确性的多个场景,比如垃圾回收,都被考虑到了。

本实施例所述计算机可读存储介质包括但不限于为:rom、ram、磁盘或光盘等。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1