用于复制数据的方法、主设备以及从设备与流程

文档序号:16535797发布日期:2019-01-08 19:53阅读:340来源:国知局
用于复制数据的方法、主设备以及从设备与流程

本申请涉及存储领域,并且更具体地,涉及一种用于复制数据的方法、主设备以及从设备。



背景技术:

在数据复制技术的高速发展下,异步复制技术成为主流的数据复制技术。现有技术中,为了保证不同数据中心存储的同名数据,在经历主集群多线程多次覆盖以及跨地域的主集群和备集群之间的异步复制之后,能够在一定时间后,达到同名数据的最新版本数据的一致,在数据的元数据中增加元时钟(metaclock),基于元数据中的metaclock确定同名数据的不同版本的数据之间的覆盖关系,增加了元数据的数据量,进而增加了数据复制成本,影响数据复制的性能。因此,如何减小元数据的大小,提高复制数据的性能,成为亟待解决的问题。



技术实现要素:

本申请提供一种复制数据的方法和装置,能够减小元数据的大小,提高复制数据的性能。

第一方面,提供了一种用于复制数据的方法,包括:主设备向从设备发送第一请求消息,所述第一请求消息用于指令从设备获得第二数据,并将所述第二数据覆盖第一数据,所述主设备和所述从设备分别位于不同的数据中心,所述第一数据和所述第二数据为同名数据的两个不同版本的数据,所述第二数据的版本晚于所述第一数据的版本;

当所述从设备中保存的所述同名数据的最新版本为所述第一数据时,所述第一请求消息能够用于指令所述从设备获得所述第二数据,并覆盖所述第一数据,所述主设备接收所述从设备发送的第一应答消息,所述第一应答消息用于表明所述从设备成功复制所述第二数据;或者,

当所述从设备中保存的所述同名数据的最新版本不是所述第一数据,而是第三数据时,所述主设备接收所述从设备发送的第二请求消息,所述第二请求消息用于查询在所述主设备中,所述第二数据和所述第三数据的覆盖关系,其中,所述第三数据为所述同名数据的一个版本的数据;

所述主设备向所述从设备发送第二指示信息,所述第二指示信息用于指示在所述主设备中,所述第二数据和所述第三数据的覆盖关系,所述主设备接收所述从设备发送的第一应答消息,所述第一应答消息用于表明所述从设备成功复制所述第二数据。

上述复制数据可以理解为复制对象、复制文件或者复制块等。

根据本申请实施例提供的用于复制数据的方法,通过主设备向从设备发送的第一请求消息,进行第二数据异步复制,并根据该第一请求消息覆盖从设备中已保存的第一数据。第一数据为同名数据中旧版本的数据,而第二数据为同名数据中新版本的数据。也就是说,在主设备和从设备中每次执行复制时,均复制新版本的数据,最后能够达到最终一致性。且第二数据的元数据中不需要增加元时钟记载操作历史,减小元数据的大小,提高复制数据的性能。

当第一请求消息指令第二数据覆盖第一数据,而从设备中保存的同名数据的最新版本的数据不是第一数据,而保存的是第三数据时,从设备无法确定第二数据和第三数据的覆盖关系。

此时,增加回源校验机制,即,主设备接收从设备发送的用于查询第三数据和第二数据覆盖关系的第二请求消息,且主设备根据第三数据和第二数据在自身中的覆盖关系,向从设备发送第二指示信息,重新指示第三数据和第二数据的覆盖关系。能够保证数据复制时,主设备和从设备之间的最终一致性。

具体地,第二指示信息具体可以是第三数据第二数据的状态信息,或者,

当机器时钟可信时,第二指示信息具体可以是第三数据和第二数据的下盘时刻。其中,时钟可信指的是主设备和从设备所在的系统设有原子时钟,对于主设备侧的时钟信息从设备侧是接受的。能够为第二指示信息的可能的指示形式提供灵活选择性。

当第二数据在主设备中被第三数据覆盖的情况下,第二数据的状态为删除(被覆盖)状态,而第三数据为覆盖第二数据的数据,则,第三数据的状态为非删除(未被覆盖)状态;由于第二数据在主设备中被第三数据覆盖,则,第二数据在主设备中的下盘时刻早于第三数据的下盘时刻。

结合第一方面,在第一方面的某些实现方式中,所述第一请求消息包括第一指示信息,所述第一指示信息用于指示所述第二数据的版本晚于所述第一数据的版本。

根据本申请实施例提供的用于复制数据的方法,通过在上述第一请求消息中携带所述第二数据的版本晚于所述第一数据的版本的指示信息,使得从设备在接收到第一请求消息时,能够根据其中携带的第一指示信息判断第二数据和第一数据之间的覆盖关系。提高复制数据的准确性。

具体地,上述第一请求消息还包括第二数据,或者,包括第二数据的第一标识。

当第一请求消息包括第二数据时,从设备直接接收第二数据并保存第二数据。即,从设备获得第二数据的一种实现;

当第一请求消息包括第二数据的第一标识时,从设备根据该第二数据的第一标识从主设备中获取第二数据,并复制该第二数据。即,从设备获得第二数据的另一种实现。

具体地,第二数据的第一标识可以为第二数据的版本号,或者,其他能够指示第二数据的标识信息。

可选地,在一些实施例中,第一请求消息中可以不包括上述的第一指示信息,包括以下两种可能的情况:

情况一:上述主设备和从设备位于的不同的数据中心之间包括一个全局的调度器,该调度器能够为同名数据上传的每个版本的数据,分配一个全局唯一的第二标识,并且该第二标识为递增的序列,也就是说新版本的第二标识一定大于旧版本的第二标识。在此情况下,第一请求消息中可以仅仅包括第二数据的第二标识,或者,包括第二数据的第二标识和第二数据。

具体地,第一请求消息中仅仅包括第二数据的第二标识时,从设备根据该第二数据的第二标识从主设备中获取第二数据,并复制第二数据。即,从设备获得第二数据的一种实现。

或者,当第一请求消息中包括第二数据的第二标识和第二数据时,从设备直接接收第二数据并保存第二数据。即,从设备获得第二数据的另一种实现情况二:上述主设备和从设备位于的不同的数据中心之间包括一个全局的调度器,该调度器能够为同名数据上传的每个版本的数据,分配一个全局唯一的时钟(系统中存在原子钟),并且该时钟能够准确表示同名数据的每个版本的数据在主设备中的下盘时刻,也就是说新版本的时钟一定晚于旧版本的时钟。在此情况下,第一请求消息中可以仅仅包括第二数据的时钟信息,或者,包括第二数据的时钟信息和第二数据。

具体地,第一请求消息中仅仅包括第二数据的时钟信息时,从设备根据该第二数据的时钟信息从主设备中获取第二数据,并复制第二数据。即,从设备获得第二数据的一种实现。或者,当第一请求消息中包括第二数据的时钟信息和第二数据时,从设备直接接收第二数据并保存第二数据。即,从设备获得第二数据的另一种实现。

结合第一方面及其上述实现方式,在第一方面的另一种实现方式中,所述第一指示信息携带在所述第一请求消息的头域。

根据本申请实施例提供的用于复制数据的方法,第一指示信息可以携带在第一请求消息的头域。使得从设备接收到第一请求消息时,能够快速获得所述第二数据的版本晚于所述第一数据的版本,进而得知第一数据和第二数据的覆盖关系。

可选地,第一指示信息可以携带在第一请求消息的其他位置。

结合第一方面及其上述实现方式,在第一方面的另一种实现方式中,所述第一指示信息为所述第一数据的版本号。

根据本申请实施例提供的用于复制数据的方法,第一指示信息可以为第一数据的版本号。由于同名数据不同版本的数据的版本号能够唯一确定该版本号对应的数据,因此,第一指示信息为第一数据的版本号,能够提高从设备确定第一数据的准确性。

结合第一方面及其上述实现方式,在第一方面的另一种实现方式中,在所述主设备向从设备发送第一请求消息之前,所述方法还包括:所述主设备确定所述第二数据的状态,所述第二数据的状态为未被覆盖的状态。

根据本申请实施例提供的用于复制数据的方法,主设备针对第二数据发送第一请求消息指令从设备获取第二数据之前,判断第二数据的状态为未被覆盖状态,有需要针对第二数据发送第一请求消息。能够避免复制信息的冗余,节省信令开销。

第二方面,提供了一种用于复制数据的方法,包括:从设备接收主设备发送的第一请求消息,所述第一请求消息用于指令从设备获得第二数据,并将所述第二数据覆盖第一数据,所述主设备和所述从设备分别位于不同的数据中心,所述第一数据和所述第二数据为同名数据的两个不同版本的数据,所述第二数据的版本晚于所述第一数据的版本;

当所述从设备中保存的所述同名数据的最新版本为所述第一数据时,所述从设备根据所述第一请求消息,获得所述第二数据,并将第二数据覆盖本地已保存的所述第一数据;所述从设备向所述主设备发送第一应答消息,所述第一应答消息用于表明所述从设备成功复制所述第二数据;或者,

当所述从设备中保存的所述同名数据的最新版本不是所述第一数据,而是第三数据时,所述从设备向所述主设备发送第二请求消息,所述第二请求消息用于查询所述第二数据和所述第三数据的覆盖关系,其中,所述第三数据为所述同名数据的一个版本的数据;所述从设备接收所述主设备发送的第二指示信息,所述第二指示信息用于指示所述第二数据和所述第三数据的覆盖关系。

根据本申请实施例提供的用于复制数据的方法,通过从设备接收主设备发送的第一请求消息,进行第二数据异步复制,并根据该第一请求消息覆盖第一数据。第一数据为同名数据中旧版本的数据,而第二数据为同名数据中新版本的数据。也就是说,在主设备和从设备中每次执行复制时,均复制新版本的数据,最后能够达到最终一致性。且第二数据的元数据中不需要增加元时钟记载操作历史,减小元数据的大小,提高复制数据的性能。

当第一指示信息指示第二数据覆盖第一数据,而从设备中没有保存第一数据,而保存的是第三数据时,从设备无法确定第二数据和第三数据的覆盖关系。

此时,增加回源校验机制,即,从设备向主设备发送用于查询第三数据和第二数据覆盖关系的第二请求消息,且主设备根据第三数据和第二数据在自身中的覆盖关系,向从设备发送第二指示信息,重新指示第三数据和第二数据的覆盖关系。能够保证数据复制时,主设备和从设备之间的最终一致性。

第二指示信息具体可以是第三数据第二数据的状态信息,或者,第三数据和第二数据的下盘时刻。能够为第二指示信息的可能的指示形式提供灵活选择性。

具体地,当第二数据在主设备中被第三数据覆盖的情况下,第二数据的状态为删除(被覆盖)状态,而第三数据为覆盖第二数据的数据,则,第三数据的状态为非删除(未被覆盖)状态;由于第二数据在主设备中被第三数据覆盖,则,第二数据在主设备中的下盘时刻早于第三数据的下盘时刻。

结合第二方面,在第二方面的某些实现方式中,所述第一请求消息包括第一指示信息,所述第一指示信息用于指示所述第二数据的版本晚于所述第一数据的版本。

根据本申请实施例提供的用于复制数据的方法,通过在上述第一请求消息中携带所述第二数据的版本晚于所述第一数据的版本的指示信息,使得从设备在接收到第一请求消息时,能够根据其中携带的第一指示信息判断第二数据和第一数据之间的覆盖关系。提高复制数据的准确性。

结合第二方面及其上述实现方式,在第二方面的另一种实现方式中,所述第一指示信息携带在所述第一请求消息的头域。

根据本申请实施例提供的用于复制数据的方法,第一指示信息可以携带在第一请求消息的头域。使得从设备接收到第一请求消息时,能够快速获得第一数据和第二数据的覆盖关系。

可选地,第一指示信息可以携带在第一请求消息的其他位置。

结合第二方面及其上述实现方式,在第二方面的另一种实现方式中,所述第一指示信息为所述第一数据的版本号。

根据本申请实施例提供的用于复制数据的方法,第一指示信息可以为第一数据的版本号。由于同名数据不同版本的数据的版本号能够唯一确定该版本号对应的数据,因此,第一指示信息为第一数据的版本号,能够提高从设备确定第一数据的准确性。

第三方面,提供一种主设备,所述主设备包括用于执行上述第一方面及第一方面的任意可能的实现方式中的方法的各个单元。

第四方面,提供一种从设备,所述从设备包括用于执行上述第二方面及第二方面的任意可能的实现方式中的方法的各个单元。

第五方面,提供了一种主设备,包括至少一个处理器和至少一个存储器。该至少一个存储器用于存储计算机程序,该至少一个处理器用于从至少一个存储器中调用并运行该计算机程序,使得该主设备执行上述第一方面及第一方面的任意可能的实现方式中的方法,主设备还包括硬盘,该硬盘用于存储所述同名数据。

第六方面,提供了一种从设备,包括至少一个处理器和至少一个存储器。该至少一个存储器用于存储计算机程序,该至少一个处理器用于从存储器中调用并运行该计算机程序,使得该从设备执行上述第二方面及第二方面的任意可能的实现方式中的方法,该从设备还包括硬盘,该硬盘用于存储所述同名数据。

第七方面,提供了一种系统,包括第五方面的主设备以及第六方面的从设备。

第八方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述第一方面和第二方面中的方法。

需要说明的是,上述计算机程序代码可以全部或者部分存储在第一存储介质上,其中第一存储介质可以与处理器封装在一起的,也可以与处理器单独封装,本申请实施例对此不作具体限定。

第九方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述第一方面和第二方面中的方法。

本申请提出的用于复制数据的方法、主设备以及从设备,待复制的数据的元数据中不需要记载该数据的操作历史,能够减小元数据的大小,提高复制数据的性能。

附图说明

图1是适用本申请实施例提供的用于复制数据的方法的场景示意图。

图2是一种基于metaclock异步复制的方法示意图。

图3是另一种基于metaclock异步复制的方法示意图。

图4是本申请提出的一种用于复制数据的方法示意图。

图5是本申请提供的一种用于复制数据的方法具体实施例的示意图。

图6是本申请实施例的主设备的示意图。

图7是本申请另一实施例的主设备的示意性框图。

图8是本申请实施例的从设备的示意图。

图9是本申请另一实施例的从设备的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

本申请实施例的技术方案可以应用于不同的数据中心之间。

下面结合图1简单介绍本申请实施例所适用的场景。

图1是适用本申请实施例提供的用于复制数据的方法的场景示意图。包括110和120两个部分。

110为数据中心,具体地,包括如图1所示的数据中心111和数据中心112,本申请实施例中,数据中心111和数据中心112为两个不同的数据中心。

可选地,上述数据中心111和数据中心112可以位于两个不同的区域。

可选地,上述数据中心111和数据中心112可以为相同的区域中的不同的数据中心。

可以将数据中心111中的参与数据复制流程的设备称为主设备,将数据中心112中参与数据复制流程的设备称为从设备;或者,

也可以将数据中心111中的参与数据复制流程的设备称为从设备,将数据中心112所中参与数据复制流程的设备称为主设备。本申请对此并不限制。

应理解,本申请实施例中对于从设备的个数也不限制,可以是在多个从设备和一个主设备之间进行数据复制。

例如,图1中还包括多个数据中心,每个数据中心中包括一个从设备,在主设备和从设备之间进行数据复制。

还应理解,上述主设备以及从设备的称呼只是一种示例,不能限制本申请的保护范围。

例如,主设备还可以称为主节点、主集群、主区域(region)或主端等;从设备还可以称为从节点、从集群、从区域或从端等。

120为复制通道,用于支持主设备和从设备之间待复制数据的传输。

例如,由于业务原因,用户需要将数据从一个数据中心迁移至另一个数据中心,可以将迁移数据的数据中心中的迁出数据的设备称为上述主设备,将迁移数据的目的数据中心中的迁入数据的设备称为上述从设备。

应理解,图1中所示的主设备和从设备为集中元数据管理的最大可服务单元,例如,可以为包括处理器和存储器的网络设备或终端设备。

为了便于理解本申请实施例,下面简单介绍本申请实施例中将会涉及的基本概念。

异步复制(asynchronousreplication):以异步的形式开展对数据的复制动作,而不影响本地数据的下盘时延。其中,数据的下盘具体指的是:一种实现数据持久化的方式,例如,将数据从易失性的内存中存储到非易失性的硬盘上。

具体地,以异步的形式开展对数据的复制,主设备复制数据和进行数据的下盘为两个线程,互不影响。

例如,对于同名数据a,主设备首先接收到用户上传的同名数据a的第一个版本的数据,向从设备发送数据复制请求,请求从设备复制该同名数据a的第一个版本的数据,在主设备本地,进行该同名数据a的第一个版本的数据的下盘,与第一个版本的数据的复制之间独立。

应理解,上述主设备和从设备之间进行数据复制时,针对同名数据主设备和从设备中存储的数据希望能够达到最终一致性。

其中,最终一致性(finalconsistency)指的是:主设备和从设备中各自存储的两个同名数据,在经历主设备和从设备中针对同名数据不同版本的数据之间的多次覆盖,以及主设备和从设备之间的异步复制,能够保证一定时间后,主设备和从设备中的同名数据的最新版本一致。

同名数据指的是数据库中有名称相同的数据。

例如,当向数据库里面添加新的数据,如果数据库里有与待添加的数据同名的数据,则新的数据覆盖旧的数据。

应理解,上述数据的覆盖指的是同名数据的多个版本之间发生的覆盖,因为在非多版本的场景下,数据库中对于同名数据只能包括一个版本。而在主设备和/或从设备开启多版本时,不存在同名数据的多个版本的数据发生覆盖的情况。因为,主设备和/或从设备开启多版本时会保留同名数据的多个版本。

由上所述,应理解本申请中所涉及的数据复制,指的是跨数据中心的、未开启多版本场景的不同设备之间,针对同名数据的异步复制。

进一步地,主设备和从设备可以用元时钟(metaclock)存储同名数据不同版本数据的覆盖历史。

具体地,每条metaclock会保存历史数据的创建时间(包括逻辑时钟和机器时钟),以及当时的操作上下文。比较同名数据的两个版本的数据的两个metaclock列表,可以得出两个版本的数据的下盘时序。

应理解,上述主设备和从设备之间能够进行数据复制,是因为在跨数据中心的两个主设备和从设备之间,拥有能够可靠传输数据的协议实现或控制机制,屏蔽数据传输本身可能带来的一致性干扰因子。

并发事务(concurrentversion,cv):一种数据并发事务的乐观锁实现。其中,乐观锁(optimisticloc)是一种并发控制的方法。假设多个用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。

具体地,乐观锁,大多是基于数据版本(version)记录机制实现。数据版本指的是为数据增加一个版本标识。

例如,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

写前日志(write-aheadlogging,wal):是关系数据库系统中用于提供原子性和持久性的一系列技术。

在使用wal的系统中,所有的修改在提交之前都要先写入日志(log)文件中。log文件中通常包括恢复(redo)和撤销(undo)信息。

例如,假设一个程序在执行某些操作的过程中机器掉电了,在机器重新启动时,程序可能需要知道当时执行的操作是成功了还是部分成功或者是失败了。如果使用了wal,程序就可以检查log文件,并对突然掉电时计划执行的操作内容跟实际上执行的操作内容进行比较。在这个比较的基础上,程序就可以决定是撤销已做的操作还是继续完成已做的操作,或者是保持原样。

现有技术中,为了实现不同的数据中心中的主设备和从设备之间针对同名数据存储的数据的一致性,提出一种基于上述metaclock异步复制的方法。

具体地,metaclock包括同名数据的不同版本的数据创建时间(createtime)以及需求信息(requestinfo)等信息。

进一步地,同名数据不同版本数据的元数据中用metaclock字段存储对这份数据的n个操作历史,比较同名数据的不同版本的数据对应的元数据中的metaclock,来决定同名数据的不同版本的数据先后覆盖关系。

下面,以从设备接收到同名数据的两个版本的数据的复制请求,判断该两个版本的数据的先后覆盖关系为例,说明上述的基于metaclock异步复制的方法。

具体地,从设备比较该两个版本的数据的元数据中的metaclock分为两步:

第一步:从设备用基于公共子串的方式,合并同名数据的两个版本的数据的元数据中的metaclock,同名数据的两个版本的数据的元数据中的metaclock的非公共部分按照时间排序。

其中,公共子串指的是不同的子串,在各自的母串中都出现并且出现顺序与母串保持一致,称该不同的子串为不同母串的公共子串。

例如,子串bo,bg,lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,将子串bo,bg,lg称为公共子串。

第二步、从设备根据合并后的metaclock,判断,同名数据的两个版本的数据的元数据中的metaclock的先后次序。

下面结合图2简单介绍上述的基于metaclock异步复制的方法。

图2是一种基于metaclock异步复制的方法示意图。包括主设备、从设备。

具体地,主设备前后上传了同名数据的多个不同版本的数据。例如,包括两个版本的数据(如图2所示,数据v9和数据v8),数据v9覆盖了数据v8。即,主设备中同名数据的最新版本为数据v9。

v9为数据v9的版本号,其中,图2中v9后面括号里面的数据表示数据v9的元数据中包括的metaclock对应的时间戳(1、2、3、7)。

可以理解为,时刻“1”下盘的同名数据,被时刻“2”下盘的同名数据覆盖。同理,时刻“2”下盘的同名数据,被时刻“3”下盘的同名数据覆盖;时刻“3”下盘的同名数据,被时刻“7”下盘的同名数据覆盖。

v8为数据v8的版本号,其中,图2中v8后面括号里面的数据表示数据v8的元数据中包括的metaclock对应的时间戳(2、3、4、5、6)。

可以理解为,时刻“2”下盘的同名数据,被时刻“3”下盘的同名数据覆盖。同理,时刻“3”下盘的同名数据,被时刻“4”下盘的同名数据覆盖;时刻“4”下盘的同名数据,被时刻“5”下盘的同名数据覆盖;时刻“5”下盘的同名数据,被时刻“6”下盘的同名数据覆盖。

在主设备和从设备之间实现异步复制的流程主要为:

首先,主设备针对上述数据v9,向从设备发送第一复制数据请求消息,请求从设备复制数据v9;主设备针对上述数据v8,向从设备发送第二复制数据请求消息,请求从设备复制数据v8。

由上所述,由于数据v9为同名数据的新的版本的数据,因此在主设备中数据v9覆盖了数据v8。

可选地,主设备向从设备发送的第一复制数据请求消息先于第二复制数据请求消息发出,并且,第一复制数据请求消息先于第二复制数据请求消息到达从设备。

或者,主设备向从设备发送的第一复制数据请求消息先于第二复制数据请求消息发出,但是,第一复制数据请求消息晚于第二复制数据请求消息到达从设备。即,主设备向从设备发送的复制数据请求消息到达从设备的时序发生交叉。在此情况下,从设备根据第一复制数据请求消息携带的数据v9的元数据中的metaclock,以及第二复制数据请求消息携带的数据v8的元数据中的metaclock,来决定数据v9和数据v8先后覆盖关系。如果,从设备不进行数据v8和数据v9的元数据中的metaclock的比较,直接根据接收第一复制数据请求消息和第二复制数据请求消息的先后关系,来确定数据v9和数据v8的覆盖关系,会导致从设备中同名数据的最新版本为数据v8。

下面,详细介绍从设备如何通过比较数据v8和数据v9的元数据中的metaclock来决定数据v8和数据v9的覆盖关系。

首先,从设备用基于公共子串的合并方式,合并数据v8和数据v9的元数据中的metaclock。

如图2所示,数据v9的元数据中的metaclock对应的时间戳为:1、3、2、7;

数据v8的元数据中的metaclock对应的时间戳为:3、2、4、5、6。

则,二者的公共子串为:3、2,进而,首次合并结果为1、3、2。

其次,从设备将数据v8和数据v9的元数据中的metaclock的非公共部分按照时间排序。

最终结果为:1、3、2、4、5、6、7。由于时间戳“7”是数据v9的元数据中的metaclock对应的时间戳,同时,时间戳“7”是合并数据v8和数据v9的元数据中的metaclock结果中的最新时间戳。

从而,从设备判断数据v9为同名数据的最新的版本,将数据v8覆盖。

图2所示的基于metaclock异步复制的方法。存在以下缺点:

一、基于metaclock异步复制的方法,需要在同名数据的每个版本的数据的元数据中增加metaclock,增加了成本。

二、基于metaclock异步复制的方法,在异步复制的过程中主设备需要预读同名数据的各个版本的数据的元数据,进而影响异步复制的性能。

三、基于metaclock异步复制的方法,当主设备和/或从设备存储的metaclock的个数,超过主设备和/或从设备能够存储metaclock个数的上限时,异步复制的最终一致性得不到保障。

具体地,结合图3说明上述缺点中的第三点。

下面结合图3简单介绍,当主设备存储的metaclock的个数,超过主设备能够存储的metaclock个数的上限时,从设备如何确定同名数据的最新的版本。

下面结合图3简单介绍,当主设备存储的metaclock的个数超过metaclock存储个数的上限,且主设备接收同名数据的不同版本的数据发生时间跳变时,从设备如何确定同名数据的最新的版本。

图3是另一种基于metaclock异步复制的方法示意图。包括主设备、从设备。

假设,主设备发生时间跳变,根据metaclock的原则,数据v11可能作为最老的历史版本,然后主设备依次上传了11个数据,版本为v0-v11,假设v11最后到达从设备。主设备中metaclock列表的长度限制为11。同名数据的数据历史版本为v11-v9,当数据v10到达主设备时,数据v11将从metaclock列表例剔除。

从设备比较各个数据的元数据中的metaclock时,发现各个数据的元数据中的metaclock没有公共子串,开始比较各个数据的时间戳,认为数据v11为最大,应该覆盖其他数据,此时从设备根据时间戳的比较能够确定数据v11为同名数据的最新的版本,最终导致数据不一致。

为了解决图2或图3中异步数据复制的最终一致性方法存在的问题。本申请提出一种用于复制数据的方法,用于上述的异步数据复制时,能够减小数据的元数据大小,实现主设备和从设备之间数据的一致性。

下面结合图4和图5详细介绍本申请中的用于复制数据的方法。能够应用于至少两个数据中心中,下面以主设备和从设备分别位于两个不同的数据中心为例,简单介绍本申请中的用于复制数据的方法。

图4是本申请提出的一种用于复制数据的方法示意图。包括主设备、从设备以及s410-s450五个步骤,下面详细介绍这五个步骤。

具体地,本申请实施例中,所述的复制数据包括:对象复制、文件复制以及块复制等。

可选地,在本申请实施例提供的用于复制数据的方法中,可选地,主设备和从设备之间的数据复制针对的是需要复制的数据,也就是说,主设备在向从设备发送复制数据请求消息之前,会判断该数据是否需要复制。

具体地,图4包括s410,主设备确定第二数据的状态。

为了降低同名数据的多个版本的数据之间大量覆盖场景下,从设备和主设备之间的信息传输次数。

主设备在针对第二数据向从设备发送第一请求消息,指令从设备获取第二数据之前,确定所述第二数据的状态,当第二数据的状态为未被覆盖的状态时向从设备发送第一请求消息,指令从设备获取所述第二数据。其中,第二数据的为未被覆盖的状态也可以称为非删除的状态,第一请求消息也可以称为复制数据请求消息。

下面,为了不失一般性,以主设备根据同名数据的某个版本的数据的状态,确定是否针对该版本的数据发送复制数据请求消息为例,说明主设备根据某个版本的数据的状态决定是否发送复制数据请求消息的可行性。

其中,复制数据请求消息为上述的第一请求消息的一般性概括。应理解,上述第一请求消息为针对第二数据发送的复制数据请求消息。

具体地,主设备根据某个数据的状态,决定是否向从设备发送针对该数据的复制数据请求消息包括以下两种情况:

情况一:该数据在主设备中的状态为删除(deleted)(被覆盖)状态。即,在主设备中该数据已经被比该数据版本新的数据覆盖。主设备确定该数据的状态为deleted状态,则,主设备不再针对该数据发送复制数据请求消息。

例如,主设备接收到用户上传的针对同名数据a的一个版本的数据(称为第一数据),随后,主设备又接收到用户上传的针对同名数据a的另一个版本的数据(称为第二数据),第二数据为新的版本的数据,即,第二数据将第一数据覆盖。

当主设备准备向从设备发送针对第一数据的发送复制数据请求消息时,确定第一数据已经被覆盖了,处于删除状态。则,主设备不再向从设备发送针对第一数据的复制数据请求消息。

情况二:该数据在主设备中的状态为非删除(未被覆盖)状态,即,在主设备中该数据还未被覆盖。主设备确定该数据的状态为非删除状态,则,主设备会针对该数据发送复制数据请求消息。

例如,主设备接收到用户上传的针对同名数据a的一个版本的数据(称为第一数据),随后,主设备又接收到用户上传的针对同名数据a的另一个版本的数据(称为第二数据),第二数据为新的版本的数据,即,第二数据将第一数据覆盖。

当主设备准备向从设备发送针对第一数据的发送复制数据请求消息时,确定第一数据保存在主设备中,处于未删除状态,由于异步复制,此时第一数据还未被第二数据覆盖。则,主设备向从设备发送针对第一数据的复制数据请求消息。

应理解,在情况二所示的情况下,主设备准备向从设备发送针对第一数据的复制数据请求消息的时刻,可以是主设备接收用户上传的针对同名数据a的另一个版本的数据(称为第二数据)的时刻。即,主设备发送数据复制请求消息和接收用户上传数据为两个互不干扰的线程,可以同时进行。

具体地,主设备在确定该数据需要复制时,向从设备发送针对该数据的复制数据请求消息。

应理解,本申请实施例中,对于从设备的个数并不限制,主设备可以同时向多个从设备发送针对该数据的复制数据请求消息。

下面,以上述第二数据处于未被覆盖的状态时,主设备请求从设备复制该第二数据为例,详细介绍本申请实施例主设备如何请求从设备复制该第二数据。

具体地,图4包括s420,主设备向从设备发送第一请求消息。

当上述主设备发送第一请求消息,指令从设备获取第二数据,并将所述第二数据覆盖第一数据,包括以下几种情况:

情况一:上述第二数据为主设备第一次请求复制该同名数据的数据,在主设备中不存在同名数据不同版本的数据的覆盖动作。

可以理解为,第二数据为同名数据的第一个版本的数据。且,在主设备中没有其他版本的数据被该第二数据覆盖。则,上述第一请求消息无需指示从设备将第二数据覆盖某个数据。

从设备在接收到上述第一请求消息后,根据该第一请求消息直接复制第二数据。由于,第二数据为第一个请求被复制的数据,且,该第二数据未覆盖其他版本的数据,即,在从设备中不存在该第二数据所属的同名数据的其他版本的数据,所以,在从设备中,不会发生同名数据的不同版本的数据下盘的冲突。

例如,第二数据为用户向主设备上传的同名数据a的第一个版本的数据,具体地,第二数据的版本号为v2;主设备向从设备发送第一请求消息。则,从设备接收到该第一请求消息,将v2存储到同名数据a对应的元数据中,获得第二数据。

具体地,当第一请求消息中携带该第二数据时,从设备获得第二数据的一种可能为,直接接收第二数据并保存第二数据;或者,

当第一请求消息中未携带该第二数据,携带该第二数据的第一标识时,从设备获得第二数据的一种可能为,从设备能够根据该第二数据的第一标识从主设备中获取该第二数据,复制该第二数据。

应理解,上述的情况一中,由于不存在不同版本之间的覆盖,从设备和主设备中保存的同名数据的数据版本一致。本申请主要研究主设备和从设备中各自存储的同名数据,在经历主设备和从设备中针对同名数据不同版本的数据之间的多次覆盖,以及主设备和从设备之间的异步复制,如何保证主设备和从设备中的同名数据的最新版本一致,对情况一不做进一步研究。

情况二:主设备针对同名数据的不同版本的数据,多次发送复制数据请求消息。则,不同版本的数据之间存在覆盖动作。即,针对第二数据发送的第一请求消息,并不是主设备向从设备发送的第一次请求复制数据的消息。

若,从设备接收到该同名数据的不同版本的数据的复制数据请求消息的时序,跟主设备中该同名数据的不同版本的数据的下盘时序一致。

由于从设备中存在该同名数据的其他版本的数据,所以,当从设备根据复制数据请求消息存储元数据时,会发生冲突。

则,从设备重新读取从设备盘上同名数据的最新版本的数据,确定该最新版本的数据的版本号与接收到的复制数据请求消息中指示被覆盖的数据的版本号一致,从设备执行覆盖动作,复制该复制数据请求消息中携带的数据。

例如,在第一时刻,主设备下盘第一数据,该第一数据为该同名数据的一个版本的数据;在第二时刻,主设备下盘第二数据,该第二数据为该同名数据的另一个版本的数据,第一时刻早于第二时刻,则,第二数据为该同名数据的最新版本的数据。在主设备中第二数据覆盖第一数据。

并且,从设备在第三时刻接收到第二请求消息,请求获得第一数据;从设备在第四时刻接收到第一请求消息,请求获得第二数据,第三时刻早于第四时刻。

进而,从设备在第四时刻接收到第一请求消息,下盘第二数据的元数据时,由于从设备中已经存储第一数据,会发生冲突。从设备读取盘上同名数据的最新版本,确定盘上最新版本为第一数据,而第一请求消息指示第二数据覆盖从设备中已保存的第一数据。则,从设备确定第二数据为该同名数据最新版本的数据,执行覆盖动作。

应理解,情况二所示的为本申请中用于复制数据的方法,常见的情况。即,第一请求消息,指令从设备获取第二数据,并将第二数据覆盖第一数据时,从设备中保存的同名数据的最新版本的数据即为第一数据,从设备根据该第一请求消息能够完成第二数据的获取以及覆盖第一数据。

情况三:主设备针对同名数据的不同版本的数据,多次发送复制数据请求消息。则,不同版本的数据之间存在覆盖动作。即,针对第二数据发送的第一请求消息,并不是主设备向从设备发送的第一次请求复制数据的消息。

若,从设备接收到该同名数据的不同版本的数据的复制数据请求消息的时序,跟主设备中该同名数据的不同版本的数据的下盘时序不一致。

当从设备在下盘元数据时,接收到的复制数据请求消息中指示被覆盖的数据在从设备中不存在。此时,从设备无法判断接收到的复制数据请求消息中携带的待复制数据的元数据跟盘上数据的覆盖关系。

例如,在第一时刻,主设备下盘第一数据,该第一数据为该同名数据的一个版本的数据;在第二时刻,主设备下盘第二数据,该第二数据为该同名数据的另一个版本的数据,第一时刻早于第二时刻,则,第二数据为该同名数据的最新版本的数据。在主设备中第二数据覆盖第一数据。

并且,从设备在第四时刻接收到第二请求消息,指令获取第一数据;从设备在第三时刻接收到第一请求消息,指令获取第二数据,第三时刻早于第四时刻。

从设备在第三时刻接收到第一请求消息,第一请求消息指示被第二数据覆盖的数据为第一数据,从设备读取盘上同名数据的最新版本的数据,由于第三时刻早于第四时刻,也就是说第三时刻,第一数据的并未到达从设备,所以从设备中不存在第一数据,此时,从设备无法执行第二数据覆盖第一数据。此时,假设从设备盘上保存的同名数据的版本为第三数据,其中,第三数据与上述的第二数据和第一数据相异,为同名数据的另一个版本的数据。

在上述情况三下,从设备无法根据第一请求消息获取第二数据,并覆盖第一数据。也不能判断第三数据和第二数据的覆盖关系,进行第二数据的复制。此情况下,执行s430,从设备向主设备发送第二请求消息。

具体地,从设备接收到上述第一请求消息时,无法判断第三数据和第二数据的覆盖关系。此时,从设备向主设备发送第二请求消息,所述第二请求消息用于查询在所述主设备中,所述第二数据和所述第三数据的覆盖关系。

进一步地,执行s440,主设备向从设备发送第二指示信息。

具体地,所述第二指示信息用于指示在所述主设备中,所述第二数据和所述第三数据的覆盖关系。

可选地,在一些实施例中,所述第二指示信息包括:

所述第二数据和所述第三数据的状态的信息。即,主设备将第三数据和第二数据在主设备中的状态发送给从设备。

例如,第二数据在主设备中被第三数据覆盖。则,第二指示信息指示第二数据为删除状态,第三数据为非删除状态。

可选地,在一些实施例中,所述第二指示信息包括:

所述第二数据和所述第三数据分别在所述主设备中下盘时刻的信息。即,主设备将第三数据和第二数据在主设备中的下盘时刻信息发送给从设备。

例如,第二数据在主设备中的下盘时刻为第一时刻,第三数据在主设备中的下盘时刻为第二时刻。且第一时刻早于第二时刻。根据该时刻信息,能够确定在主设备中第三数据覆盖了第二数据。进而,从设备根据第二指示信息确定第三数据和第二数据的覆盖关系。

具体地,从设备接收到主设备发送的第二指示信息之后,根据第二指示信息能够确定第三数据和第二数据的覆盖关系。

例如,第二指示信息指示第三数据和第二数据在主设备中的状态:第二数据为删除状态,第三数据为非删除状态。则,从设备根据第二指示信息更新从设备盘上的元数据,将第三数据作为同名数据的最新版本的数据,不进行第二数据的复制;

或者,第二指示信息指示第三数据和第二数据在主设备中的状态:第三数据为删除状态,第二数据为非删除状态。则,从设备根据第二指示信息更新从设备盘上的元数据,将第二数据作为同名数据的最新版本的数据,并复制第二数据。

还例如,第二指示信息指示第三数据和第二数据分别在所述主设备中下盘时刻的信息:

第二数据的下盘时刻为第一时刻,第三数据的下盘时刻为第二时刻,且第一时刻早于第二时刻。则,从设备根据第二指示信息确定第三数据为同名数据的最新版本的数据,不进行第二数据的复制;或者,

第三数据的下盘时刻为第一时刻,第二数据的下盘时刻为第二时刻,且第一时刻早于第二时刻。则,从设备根据第二指示信息更新从设备盘上的元数据,将第二数据作为同名数据的最新版本的数据,并复制第二数据。

上述第一请求消息用于指令从设备获得第二数据,并将第二数据覆盖第一数据,其中,主设备和从设备位于不同的数据中心,第一数据和第二数据为同名数据的两个不同的版本的数据,且所述第二数据的版本晚于所述第一数据的版本。

具体地,第一请求消息中包括的信息可以为以下几种情况:

第一种情况:第一请求消息包括第一指示信息,该第一指示信息用于指示所述第二数据的版本晚于所述第一数据的版本。在此情况下,从设备根据第一指示信息确定第一数据和第二数据的覆盖关系。

具体地,该第一请求消息中还包括第二数据:

当第一请求消息中包括第二数据时,从设备接收到第一请求消息,首先根据第一指示信息判断第二数据覆盖的第一数据是否保存在本地的盘上。

可选地,当从设备的盘上保存的同名数据的最新版本为第一数据时,从设备直接接收第二数据,并保存第二数据。再根据第一指示信息覆盖从设备盘上的第一数据,完成第二数据的获得。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本不是第一数据,而是第三数据时,参照s420中的情况三,这里不再赘述。

具体地,该第一请求消息中包括第二数据的第一标识,且不包括第二数据:

当第一请求消息中包括第二数据的第一标识时,从设备接收到第一请求消息,首先根据第一指示信息判断第二数据覆盖的第一数据是否保存在本地的盘上。

可选地,当从设备的盘上保存的同名数据的最新版本为第一数据时。首先,从设备根据第一请求消息中的第二数据的第一标识,从主设备中获取第二数据,复制该第二数据,再根据第一指示信息覆盖从设备盘上的第一数据,完成第二数据的获得。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本不是第一数据,而是第三数据时,参照s420中的情况三,这里不再赘述。

具体地,上述第二数据的第一标识可以为第二数据的版本号,或者,为能够标识第二数据的其他标识信息。

第二种情况:第一请求消息不包括上述第一指示信息。第一请求消息中仅仅包括第二数据的第二标识。在此情况下,从设备根据第二数据的第二标识能够确定第一数据和第二数据的覆盖关系。

具体地,从设备根据第二数据的第二标识判断第一数据和第二数据的覆盖关系包括:

将上述多个数据中心的集合看成一个系统,系统中存在一个全局调度器(例如调度服务器),该全局调度器为同名数据不同版本的数据分配标识,数据的标识可以为全局唯一且单调递增的数列。

当从设备获取第二数据的第二标识时,比较第一数据的标识和第二数据的第二标识的大小,当第二数据的第二标识大于第一数据的标识,说明第二数据比第一数据更新,确定由第二数据覆盖第一数据。

应理解,第二种情况中第二数据的第二标识与第一种情况中第二数据的第一标识不同,第二种情况中第二数据的第二标识为全局递增数列中一个,不能随意为第二数据配置标识;而第一种情况中第二数据的第一标识仅仅为数据的唯一的标识。

具体地,该第一请求消息中可以还包括第二数据。,当从设备的盘上保存的同名数据的最新版本为第一数据时,首先从设备直接接收第二数据,并保存第二数据,再根据第二数据的第二标识大于第一数据的标识确定第二数据比第一数据更新,从而将第二数据覆盖盘上的第一数据。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本为不是第一数据,而是第三数据时,比较第二数据的第二标识与第三数据的标识的大小,若第二数据的第二标识较大,从设备直接接收第二数据,并保存第二数据。

具体地,该第一请求消息中可以不包括第二数据:可选地,当从设备的盘上保存的同名数据的最新版本为第一数据时,首先从设备根据第一请求消息中的第二数据的第二标识,从主设备中获取第二数据,并复制该第二数据。再根据第二数据的第二标识大于第一数据的标识确定第二数据比第一数据更新,从而将第二数据覆盖盘上的第一数据。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本为不是第一数据,而是第三数据时,比较第二数据的第二标识与第三数据的标识的大小,若第二数据的第二标识较大,首先从设备根据第一请求消息中的第二数据的第二标识,从主设备中获取第二数据,并复制该第二数据。再根据第二数据的第二标识大于第三数据的标识确定第二数据比第三数据更新,从而将第二数据覆盖盘上的第三一数据。

具体地,上述第二数据的第二标识可以为第二数据的版本号,或者,为能够标识第二数据的其他标识信息。

第三种情况:第一请求消息不包括上述第一指示信息。第一请求消息中仅仅包括第二数据的时钟信息。在此情况下,从设备根据第二数据的时钟信息能够确定第一数据和第二数据的覆盖关系。

具体地,从设备如何根据第二数据的时钟信息判断第一数据和第二数据的覆盖关系包括:

将上述多个数据中心的集合看成一个系统,系统中存在一个全局调度器(例如调度服务器),该全局调度器根据同名数据不同版本的数据的下盘时刻分配时钟信息,数据的时钟信息为全局唯一的,且与下盘时刻先后一一对应。可以理解为下盘早的数据的时钟信息指示早的时刻,下盘晚的数据的时钟信息指示晚的时刻,在此情况下,需要一个全局的时钟,从设备和主设备的时钟信息均以该全局时钟为准。

当从设备获取第二数据的时钟信息时,比较第一数据的时钟信息和第二数据的时钟信息的早晚,如果第二数据的时钟信息晚于第一数据的时钟信息,说明第二数据比第一数据更新,确定第二数据覆盖第一数据。

具体地,该第一请求消息中可以还包括第二数据:当从设备的盘上保存的同名数据的最新版本为第一数据时,首先从设备直接接收第二数据,并保存第二数据,再根据第二数据的时钟信息晚于第一数据的时钟信息确定第二数据比第一数据更新,从而将第二数据覆盖盘上的第一数据。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本为不是第一数据,而是第三数据时,比较第二数据的时钟信息与第三数据的时钟信息的早晚,若第二数据的时钟信息较晚,从设备直接接收第二数据,并保存第二数据。

具体地,该第一请求消息中可以不包括第二数据:当从设备的盘上保存的同名数据的最新版本为第一数据时,首先从设备根据第一请求消息中的第二数据的时钟信息,从主设备中获取第二数据,并复制该第二数据。再根据第二数据的时钟信息晚于第一数据的时钟信息确定第二数据比第一数据更新,从而将第二数据覆盖盘上的第一数据。进而,主设备中保存的同名数据的最新版本的数据为第二数据,从设备中保存的同名数据的最新版本的数据也为第二数据,达到最终一致性。

可选地,当从设备的盘上保存的同名数据的最新版本为不是第一数据,而是第三数据时,比较第二数据的时钟信息与第三数据的时钟信息的早晚,若第二数据的时钟信息较晚,首先从设备根据第一请求消息中的第二数据的时钟信息,从主设备中获取第二数据,并复制该第二数据。再根据第二数据的时钟信息晚于第三数据的时钟信息确定第二数据比第三数据更新,从而将第二数据覆盖盘上的第三数据。

下面,主要介绍第一请求消息为上述第一种情况下的所示的消息时,主设备和从设备之间的信令交互。

应理解,上述同名数据还包括其他版本的数据,上述第一数据和第二数据只是同名数据的多个版本的数据中,任意两个具有直接覆盖关系的数据。

具体地,上述第一数据的版本号为第一版本号,第二数据的版本号为第二版本号。

可选地,在一些实施例中,上述第一指示信息携带在所述第一请求消息的头域。

可选地,在另一些实施例中,第一指示信息为所述第一数据的版本号。

例如,第一指示信息为在第一请求消息的头域中携带第一数据的版本号(第一版本号)。为从设备提供,在主设备中第二数据覆盖的数据为版本号为第一版本号的第一数据的指示信息。

具体地,上述第一数据的版本号为v1,第二数据的版本号为v2。则,第一请求消息的头域中携带v1。

可选地,在一些实施例中,在主设备中上述第二数据并没有覆盖任何的数据。则,上述第一请求消息的头域置空。

具体地,上述第一请求消息的头域声明为覆盖版本号(covered_date)。

应理解,同名数据的每一个版本的数据都使用唯一的版本号标识。

s450,从设备向主设备发送第一应答消息。

具体地,所述第一应答消息用于表明所述从设备成功复制所述第二数据。

下面结合一个具体地的实施例,说明上述用于复制数据的方法。

具体地,在该实施例中,同名数据的各个版本的数据之间的覆盖关系由各个版本的数据的下盘先后决定,其中,元数据的下盘先后靠独占式的修改元数据里的cv控制。

图5是本申请提供的一种用于复制数据的方法具体实施例的示意图。包括用户、主设备、从设备以及s510-s590十二个步骤。

s510,用户上传同名数据的第一个版本的数据(称为第一数据,版本号为a)。

s511,用户上传同名数据的第二个版本的数据(称为第二数据,版本号为b)。

s512,用户上传同名数据的第三个版本的数据(称为第三数据,版本号为c)。

应理解,执行上述s510、s511以及s512的用户可以为同一个用户,也可以为不同的用户。

当上述用户同一个用户时,可以理解为该用户连续上传了同名数据的三个版本的数据;

当上述用户为不同的多个用户时,可以理解为该多个用户分别上传了同名数据的三个版本的数据,该多个用户可以同时上传同名数据,主设备根据接收同名数据的三个版本的数据的时间确定不同用户上传的同名数据的不同版本的数据的先后关系。

s520,主设备向从设备发送第三复制数据请求消息。

具体地,在本实施例中,假设主设备针对上述同名数据的三个不同的版本的数据均向从设备发送复制数据请求消息。

由于线程调度或者网络状态等不可控的因素。导致。主设备针对上述同名数据的第三个版本的数据(第三数据)的第三复制数据请求消息,优先到达从设备。

可选地,上述第三复制数据请求消息中携带该第三数据,且携带指示信息,指示第三数据在主设备中覆盖了第二数据。

可选地,上述第三复制数据请求消息中未携带该第三数据,携带第三数据的标识,从设备根据该第三数据的标识能够从主设备中获取第三数据。

由于第三复制数据请求消息,优先到达从设备。则,从设备中不存在第二数据,且从设备中没有该同名数据任何版本的数据,从设备将第三数据作为同名数据的最新版本下盘成功。

进一步地,执行s521,从设备向主设备发送第二应答消息,指示复制第三数据成功。

s530,主设备向从设备发送第二复制数据请求消息。

由于线程调度或者网络状态等不可控的因素。导致。主设备针对上述同名数据的第二个版本的数据(第二数据)的第二复制数据请求消息,在上述第三复制数据请求消息到达从设备之后到达从设备。

可选地,上述第二复制数据请求消息中携带该第二数据,且携带指示信息,指示第二数据在主设备中覆盖了第一数据。

可选地,上述第二复制数据请求消息中未携带该第二数据,携带第二数据的标识,从设备根据该第二数据的标识能够从主设备中获取第二数据。

由于,从设备中不存在第一数据,且在从设备中存在该同名数据的最新版本为第三数据。此时,从设备无法判断第二数据和第三数据哪个数据为同名数据的最新版本。执行s540,从设备向主设备发送查询消息。

该查询消息用于查询第二数据和第三数据在主设备中的覆盖关系。

s550,主设备向从设备发送第三指示信息。

该第三指示信息指示第二数据在主设备中已经被删除,第三数据为同名数据的最新版本的数据。

s560,从设备根据第三指示信息确定不保存第二数据。

进一步地,执行s561,从设备向主设备发送第三应答消息,指示复制第二数据成功。

s570,主设备向从设备发送第一复制数据请求消息。

由于线程调度或者网络状态等不可控的因素。导致。主设备针对上述同名数据的第一个版本的数据(第一数据)的第一复制数据请求消息,在上述第二复制数据请求消息到达从设备之后到达从设备。

应理解,上述第一复制数据请求消息中携带该第一数据,且该第一复制数据请求消息的头域置空。即,该第一复制数据请求消息未携带任何覆盖信息。从设备接收到该第一复制数据请求消息时,根据该第一复制数据请求消息确定第一数据为同名数据的最早的版本,而且,从设备中已经保存有第三数据。则,从设备删除第一数据。

进一步地,执行s571,从设备向主设备发送第四应答消息,指示复制第一数据成功。

具体地,图4和图5中的主设备和从设备可以是不同数据中心中的存储桶。主设备为源存储桶,从设备为目标存储桶。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

下面结合图6-图9介绍本申请实施例提供的主设备和从设备。

图6是本申请实施例主设备的示意图。图6所示的装置600包括接收单元610、处理单元620和发送单元630。其中,装置600可以用于执行图4和图5所示的方法中主设备执行的步骤。

发送单元630,用于向从设备发送第一请求消息,所述第一请求消息用于指令从设备获得第二数据,并将所述第二数据覆盖从设备中已保存的第一数据,所述主设备和所述从设备分别位于不同的数据中心,

所述第一数据和所述第二数据为同名数据的两个不同版本的数据,所述第二数据的版本晚于所述第一数据的版本。

接收单元610,用于接收所述从设备发送的第一应答消息,所述第一应答消息用于表明所述从设备成功复制所述第二数据。

具体地,所述第一请求消息中包括第一指示信息,所述第一指示信息用于指示第二数据的版本晚于所述第一数据的版本。

可选地,所述第一指示信息携带在所述第一请求消息的头域。

可选地,所述第一指示信息为所述第一数据的版本号。

具体地,当所述从设备中保存的同名数据的最新版本的数据不是第一数据,而是第三数据时,所述接收单元610,还用于接收所述从设备发送的第二请求消息,所述第二请求消息用于查询在所述主设备中,所述第二数据和所述第三数据的覆盖关系,其中,所述第三数据为所述同名数据的一个版本的数据;

所述发送单元630,还用于向所述从设备发送第二指示信息,所述第二指示信息用于指示在所述主设备中,所述第二数据和所述第三数据的覆盖关系。

具体地,所述第二指示信息包括:

所述第二数据和所述第三数据的状态的信息;或者,

所述第二数据和所述第三数据分别在所述主设备中下盘时刻的信息。

具体地,在发送单元630向从设备发送第一请求消息之前,所述装置还包括:处理单元620,用于确定所述第二数据的状态,所述第二数据的状态为未被覆盖的状态。

在可选的实施例中,上述装置600还可以是主设备700,具体地,所述处理单元620可以为处理器720,所述接收单元610以及发送单元630可以为输入输出接口730。所述主设备700还可以包括存储器710和硬盘740,具体如图7所示。

图7是本申请另一实施例的主设备的示意性框图。图7所示的主设备700可以包括:存储器710、处理器720、输入/输出接口730和硬盘740。其中,存储器710、处理器720和输入/输出接口730和硬盘740通过通信连接相连,该存储器710用于存储程序指令,该处理器720用于执行该存储器720存储的程序指令,以控制输入/输出接口730接收输入的数据和信息,输出操作结果等数据,输入/输出接口730接收的数据和信息可以存储在硬盘740中,例如,硬盘740用于存储同名数据。

应理解,在本申请实施例中,该处理器720可以采用通用的中央处理器(centralprocessingunit,cpu),微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例所提供的技术方案。

该存储器710可以包括只读存储器和随机存取存储器,并向处理器720提供指令和数据。处理器720的一部分还可以包括非易失性随机存取存储器。例如,处理器720还可以存储设备类型的信息。

在实现过程中,上述方法的各步骤可以通过处理器720中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器710,处理器720读取存储器710中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

图8是本申请实施例的从设备的示意图。图8所示的装置800包括接收单元810、处理单元820和发送单元830。其中,装置800可以用于执行图4和图5所示的方法中从设备执行的步骤。

接收单元810,用于接收主设备发送的第一请求消息,所述第一请求消息用于指令从设备获得第二数据,并将所述第二数据覆盖所述从设备中已保存的第一数据,所述主设备和所述从设备分别位于不同的数据中心,

所述第一数据和所述第二数据为同名数据的两个不同版本的数据,且所述第二数据的版本晚于所述第一数据的版本;

处理单元820,用于根据所述第一请求消息,获得所述第二数据,并将第二数据覆盖本地已保存的第一数据;

发送单元830,用于向所述主设备发送第一应答消息,所述第一应答消息用于表明所述从设备成功复制所述第二数据。

具体地,所述第一请求消息包括第一指示信息,所述第一指示信息用于指示第二数据的版本晚于所述第一数据的版本。

可选地,所述第一指示信息携带在所述第一请求消息的头域。

可选地,所述第一指示信息为所述第一数据的版本号。

可选地,当所述从设备中保存的同名数据的最新版本的数据不是第一数据,而是第三数据时,所述发送单元830,还用于向所述主设备发送第二请求消息,所述第二请求消息用于查询所述第二数据和所述第三数据的覆盖关系,其中,所述第三数据为所述同名数据的一个版本的数据;

所述接收单元810,还用于接收所述主设备发送的第二指示信息,所述第二指示信息用于指示所述第二数据和所述第三数据的覆盖关系。

具体地,所述第二指示信息包括:

所述第二数据和所述第三数据的状态的信息;或者,

所述第二数据和所述第三数据分别在所述主设备中下盘时刻的信息。

在可选的实施例中,上述装置800还可以是从设备900,具体地,所述处理单元820可以为处理器920,所述接收单元810以及发送单元830可以为输入输出接口930。所述从设备800还可以包括存储器910和硬盘940,具体如图9所示。

图9是本申请另一实施例的从设备的示意性框图。图9所示的从设备900可以包括:存储器910、处理器920、输入/输出接口930和硬盘940。其中,存储器910、处理器920、输入/输出接口930和硬盘940通过通信连接相连,该存储器910用于存储程序指令,该处理器920用于执行该存储器920存储的程序指令,以控制输入/输出接口930接收输入的数据和信息,输出操作结果等数据,输入/输出接口930接收的数据和信息可以存储在硬盘940中,例如,硬盘940用于存储复制的同名数据。

应理解,在本申请实施例中,该处理器920可以采用通用的中央处理器(centralprocessingunit,cpu),微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例所提供的技术方案。

该存储器910可以包括只读存储器和随机存取存储器,并向处理器920提供指令和数据。处理器920的一部分还可以包括非易失性随机存取存储器。例如,处理器920还可以存储设备类型的信息。

在实现过程中,上述方法的各步骤可以通过处理器920中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器910,处理器920读取存储器910中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

应理解,本申请实施例中,该处理器可以为中央处理单元(centralprocessingunit,cpu),该处理器还可以是其它通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

还应理解,本申请实施例中,硬盘(harddiskdrive,hdd)作为主设备和从设备的存储媒介之一,可以是固态硬盘(solidstatedisk,ssd)、机械硬盘(mechanicalharddisk)、混合硬盘(solidstateharddisk,sshd)等。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

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