一种数据迁移方法、装置、设备和存储介质与流程

文档序号:25584965发布日期:2021-06-22 16:58阅读:92来源:国知局
一种数据迁移方法、装置、设备和存储介质与流程

本发明涉及数据存储领域,具体涉及一种数据迁移方法、装置、设备和存储介质。



背景技术:

相关技术中,对正在提供线上服务的数据进行迁移时,通常是先将源存储端上存储的目标对象(即待迁移对象)的全量数据复制到目的存储端,然后将目标对象的访问路由从源存储端切换至目的存储端,以使访问路由切换完成之后,访问目标对象的访问请求被路由至目的存储端进行处理。但是,在访问路由的切换期间,如果接收到访问目标对象的访问请求,该访问目标对象的访问请求仍然会被路由至源存储端,此时,源存储端拒绝所有访问目标对象的访问请求。

因此,对正在提供线上服务的数据进行迁移时,总存在一段时间(即目标对象访问路由的切换期间)不能对外提供服务。这不仅损害了数据侧的服务能力,还降低了用户侧的用户体验。



技术实现要素:

本发明实施例提供一种数据迁移方法、装置、设备和存储介质,可以提升数据侧的服务能力和用户侧的用户体验。

本发明实施例提供一种数据迁移方法,包括:

响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;

当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,

当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;

当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

本发明实施例还提供一种数据迁移装置,包括:

全量复制单元,用于响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;

增量同步单元,用于当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,

请求缓存单元,用于当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;

路由切换单元,用于当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在一些实施例中,所述全量复制单元,包括:

参数查询子单元,用于响应于触发的数据迁移指令,查询所述源存储端的第一迁移环境参数和所述目的存储端的第二迁移环境参数;

结果确定子单元,用于根据所述第一迁移环境参数和所述第二迁移环境参数,确定查询结果;

全量复制子单元,用于基于所述查询结果,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,所述全量复制子单元,还用于基于所述查询结果,清洗所述目的存储端中的脏数据;当所述目的存储端中的脏数据清洗完成后,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,所述请求缓存单元,包括:

进度监测子单元,用于当所述目标对象的增量数据同步开始后,监测所述目标对象的增量数据的同步进度;

第一缓存子单元,用于当监测到所述同步进度达到预设的第一阈值时,将所述目标访问请求存储至缓存中。

在一些实施例中,所述路由切换单元,包括:

第一检测子单元,用于当监测到所述同步进度达到完成后,确定目标访问请求的缓存状态;

路由修改子单元,用于当所述目标访问请求被成功存储至所述缓存中时,将所述目标对象的访问路由的终点修改为所述目的存储端。

在一些实施例中,所述请求缓存单元,包括:

第二缓存子单元,用于按照所述目标访问请求的时序,将所述目标访问请求存储至所述缓存中的缓存队列中;

所述装置还包括:

缓存监测单元,用于监测所述缓存队列的缓存状态;

强制处理单元,用于基于所述缓存状态,强制处理所述缓存队列中队头的至少一个目标访问请求。

在一些实施例中,所述装置还包括:

第一监测单元,用于监测所述源存储端的工作状态;

第一清洗单元,用于当所述源存储端的工作状态为故障状态时,则清洗所述目的存储端的脏数据;

第一回滚单元,用于当所述目的存储端中的脏数据清洗完成后,若监测到所述源存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,所述装置还包括:

第二监测单元,用于监测所述目的存储端的工作状态;以及当监测到所述目的存储端的工作状态为故障状态时,则继续监测所述目的存储端的工作状态;

第二回滚单元,用于当再次监测到所述目的存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,所述装置还包括:

异常处理单元,用于当所述将所述目标对象的访问路由的终点修改为所述目的存储端失败后,将所述缓存中的目标访问请求发送至所述源存储端,并返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端。

在一些实施例中,所述装置还包括:

缓存锁定单元,用于在执行所述将所述目标对象的访问路由的终点修改为所述目的存储端的期间,锁定所述缓存,并监测所述锁定所述缓存的锁定状态;

第三回滚单元,用于当监测到所述锁定状态为锁定失败,则返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端;

缓存释放单元,用于当监测到所述锁定状态为锁定成功,在所述将所述目标对象的访问路由的终点修改为所述目的存储端成功后,释放所述缓存。

在一些实施例中,所述源存储端包括源端主节点和源端备份节点,所述源端备份节点中存储的数据是所述源端主节点中存储数的数据的备份数据,所述目标对象的访问路由的终点为所述源端主节点;

全量复制单元,还用于响应于触发的数据迁移指令,将存储在源端备份节点中的目标对象的全量数据复制至目的存储端;

增量同步单元,还用于将所述源端主节点中的所述目标对象的增量数据同步至所述目的存储端。

本发明实施例还提供一种电子设备,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本发明实施例所提供的任一种数据迁移方法中的步骤。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种数据迁移方法中的步骤。

在相关技术中,在对线上数据进行迁移时,先将待迁移的目标对象的全量数据从源存储端迁移至目的存储端,然后将访问目标对象的访问路由的终点从源存储端切换至目的存储端,但在进行路由切换的期间,该访问目标对象的访问请求仍然会被路由至源存储端,此时,源存储端会拒绝所有访问目标对象的访问请求。这损害了数据侧的服务能力和用户侧的用户体验。

本发明实施例可以响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在本发明中,在迁移目标对象的数据时,先将目标对象的全量数据迁移至目的存储端,在此期间,访问目标对象的目标访问请求仍然被路由至源存储端,源存储端并不拒绝目标访问请求,因此目标对象会产生增量数据;然后在目标对象的全量数据同步完成后,将目标对象的增量数据同步至目的存储端,并在进行增量数据同步后,将访问目标对象的目标访问请求缓存至缓存中,直至源存储端和目的存储端中目标对象的数据完全一致后,即目标对象的增量数据同步完成后,将目标对象的访问路由的终点修改为目的存储端,以使后续新的访问目标对象的访问请求被路由至目的存储端进行处理,并将缓存中的目标访问请求发送至目的存储端,以使目的存储端处理目标访问请求,从而使得数据侧不停止线上服务地完成目标对象的迁移,能够持续为访问目标对象的访问请求提供服务。由此,本方案可以提升数据侧的服务能力和用户侧的用户体验。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1a是本发明实施例提供的分布式存储系统应用于区块链系统的结构示意图;

图1b是本发明实施例提供的区块结构(blockstructure)的示意图;

图1c是本发明实施例提供的数据迁移方法的场景示意图;

图1d是本发明实施例提供的数据迁移方法的流程示意图;

图2a是本发明实施例提供的数据迁移方法应用在分布式存储系统中的示意图;

图2b是本发明实施例提供的数据迁移方法应用在分布式存储系统中的第一流程图;

图2c是本发明实施例提供的数据迁移方法应用在分布式存储系统中的第二流程图

图2d是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统状态图;

图2e是本发明实施例提供的数据迁移方法应用在分布式存储系统中数据迁移第一示意图;

图2f是本发明实施例提供的数据迁移方法应用在分布式存储系统中数据迁移第二示意图;

图2g是本发明实施例提供的数据迁移方法应用在分布式存储系统中数据迁移第三示意图;

图2h是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中访问路由切换示意图;

图2i是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存的第一示意图;

图2j是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存的第二示意图;

图2k是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存的第三示意图;

图2l是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存的第四示意图;

图2m是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存的第五示意图;

图2n是本发明实施例提供的数据迁移方法应用在分布式存储系统中系统中缓存存储访问请求的结构示意图;

图2o是本发明实施例提供的数据迁移方法应用在分布式存储系统中切换访问路由的逻辑状态图;

图3a是本发明实施例提供的数据迁移装置的第一种结构示意图;

图3b是本发明实施例提供的数据迁移装置的第二种结构示意图;

图3c是本发明实施例提供的数据迁移装置的第三种结构示意图;

图3d是本发明实施例提供的数据迁移装置的第四种结构示意图;

图4是本发明实施例提供的电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例提供一种数据迁移方法、装置、电子设备和存储介质,以提升数据侧的服务能力和用户侧的用户体验。

其中,该数据迁移装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(personalcomputer,pc)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

在一些实施例中,该数据迁移装置还可以集成在多个电子设备中,比如,数据迁移装置可以集成在多个服务器中,由多个服务器来实现本发明的数据迁移方法。

在一些实施例中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

在一些实施例中,服务器也可以以终端的形式来实现。

云存储(cloudstorage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。

目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(id,identity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。

存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(raid,redundantarrayofindependentdisk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。

如本申请所公开的数据迁移方法或装置,其中多个服务器可组成为一区块链,而服务器为区块链上的节点。

本发明实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式存储系统。

以分布式存储系统为区块链系统为例,参见图1a,图1a是本发明实施例提供的分布式存储系统100应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点(p2p,peertopeer)网络,p2p协议是一个运行在传输控制协议(tcp,transmissioncontrolprotocol)协议之上的应用层协议。在分布式存储系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。

参见图1a示出的区块链系统中各节点的功能,涉及的功能包括:

1)路由,节点具有的基本功能,用于支持节点之间的通信。

节点除具有路由功能外,还可以具有以下功能:

2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。

例如,应用实现的业务包括:

2.1)钱包,用于提供进行电子货币的交易的功能,包括发起交易(即,将当前交易的交易记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认交易有效的响应,将交易的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币;

2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。

2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的交易,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于交易的合约,还可以执行对接收的信息进行处理的合约。

3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。

参见图1b,图1b是本发明实施例提供的区块结构(blockstructure)一个可选的示意图,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。

例如,参考图1c,该电子设备可以是服务器,也可以是云服务器,采用了云计算技术,还可以是区块链上的节点。该服务器可以是数据中心(即数据侧)的控制设备,同时该服务器还可以是数据侧直接与客户端进行交互的接入端,服务器在接收到用户终端发送的数据访问请求后,会确定该访问请求所访问的目标数据对应的目标存储地址,然后根据目标存储地址将该访问请求路由至对应存储节点(或存储设备中)。该服务器响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。

在本实施例中,提供了一种数据迁移方法,如图1d所示,该数据迁移方法的具体流程可以如下:

101、响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

数据迁移指令指示了应当进行迁移的数据(即目标对象)、源存储端以及目的存储端。其中,源存储端是存储目标对象的存储端,目的存储端是目标对象准备迁入的存储端。数据迁移指令用于指示将源存储端中的目标对象迁移至目的存储端中。

源存储端和目的存储端可以是分布式存储系统中的存储节点,也可以是数据库服务器或服务器集群,还可以是存储数据的电子设备,亦可以是用于存储数据的介质。

数据迁移指令是在满足预设条件时被触发的。预设条件可以是检测到源存储端的存储容量满载,还可以是检测到目的存储端的存储容量出现冗余,也可以是检测到当前时间点是预设时间点,以可以是当目的存储端作为新的存储节点加入数据侧时。当触发数据迁移指令的预设条件是检测到源存储端的存储容量满载和/或检测到目的存储端的存储容量出现大量冗余时,是为了将源存储端中的部分或全部数据迁入目的存储端中,以缓解源存储端的数据存储压力。

当预设条件是检测当前时间点是预设时间点时,例如预设时间点是每天凌晨2点,在每天的凌晨2点触发数据迁移指令,以将将源存储端中的数据同时迁移写入到至少一个目的存储端中,所述至少一个目的存储端中的数据保持一致,从而实现对源存储端中的数据进行备份的目的。

当目的存储端作为新的存储节点加入数据侧时,可以触发数据迁移指令,以指示将源存储端中的部分或全部数据迁移至目的存储端中,以实现充分利用存储资源以及缓解源存储端的数据存储压力。

当然,上述示例的触发数据迁移指令的条件只是优选地示例,不应当将其理解为对本申请的保护范围的限制,触发数据迁移指令的方式并不局限于此,还可以是其他的触发方式。例如,是数据管理员手动输入的数据迁移指令。

在目标对象未迁移之前,仍然由源存储端为访问目标对象的目标访问请求进行服务,即在接收到针对访问目标对象的目标访问请求后,该目标访问请求会被路由至源存储端,由源存储端返回相应的结果和/或对源存储端中的目标对象执行相应的数据操作,所述数据操作包括增加数据、删除数据、修改数据和查询数据。即此时目标对象的访问路由的终点仍然是源存储端。其中,目标对象的访问路由是访问目标对象的目标访问请求从用户端传输至源存储端的路径信息,此时数据尚未迁移,路径的终点仍然是源存储端,即此时访问路由的终点仍然是源存储端。

当数据迁移指令被触发后,将目标对象的全量数据从源存储端复制到目的存储端,在复制目标对象的全量数据的过程中,不对目标对象的访问路由作任何操作,以使在复制目标对象的全量数据的过程中接收到的目标访问请求,仍然会被发送至源存储端,由源存储端向目标访问请求提供数据服务,从而实现在复制目标对象的全量数据的过程中不损害数据侧的数据服务以及用户侧的数据访问体验。

102、当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,

103、当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求。

因为在步骤101复制目标对象的全量数据的过程中,为了实现不停止向用户侧提供数据服务,源存储端并未拒绝访问目标对象的目标访问请求,因此存储在源存储端中的目标对象将产生更新数据,即增量数据。如果不将源存储端中的目标对象的增量数据同步至目的存储端,那么后续切换至目的存储端为用户提供数据服务时,用户访问目的存储端中的目标对象的数据,会发现数据出现了回档现象,即用户会发现部分数据退回到了某个历史时间点的状态,例如目标对象是游戏数据,用户会发现游戏进度退回之前的历史进度。在这里对于用户而言,实质上是目标对象的数据“退回”到目标对象的全量数据复制开始的时刻,而丢失了目标对象的全量数据复制开始的时刻以后的增量数据。

因此,为了保证迁移至目的存储端的目标对象与源存储端中的目标对象的数据一致性,以及后续切换至目的存储端为用户提供服务时,用户不会感知到数据出现回档现象还需要将目标对象的增量数据也同步至目的存储端。且应当从目标对象的全量数据复制开始的时刻以后抓取目标对象的更新数据,即目标对象的增量数据,并将增量数据同步至目的存储端,才能保证数据迁移前后的一致性以及用户不会感知到数据出现回档现象。

在目标对象的增量数据同步开始后,且在将目标对象的访问路由的终点从源存储端切换至目的存储端之前,目标对象的访问路由的终点仍然是源存储端,也就是说,此时接收到的目标访问请求,仍然会被路由至源存储端。如果一直源源不断地将目标访问请求发送至源存储端进行处理,那么源存储端中的目标对象的增量数据永远不能完全同步至目的存储端。

因此,在目标对象的增量数据同步开始后,将访问目标对象的目标访问请求暂时存储至缓存中,即暂时不对缓存中的目标访问请求进行服务,以等待源存储端和目的存储端中的目标对象的数据完全一致后,即目标对象的增量数据同步完成后,进入访问路由切换阶段,即开始执行步骤104。

104、当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

当目标对象的增量数据同步完成后,即源存储端和目的存储端中的目标对象的数据完全一致后,将目标对象的访问路由的终点修改为目的存储端,以使后续新接收到的访问目标对象的访问请求被发送至目的存储端进行处理,由目的存储端为新的访问目标对象的访问请求提供数据服务。

同时,将缓存中缓存的目标访问请求强制发送至目的存储端进行处理,由目的存储端为这些本该由源存储端提供数据服务的访问请求进行数据服务,从而实现在整个数据迁移过程中,不拒绝数据访问请求。

本发明实施例提供的数据迁移方案可以应用在各种线上服务系统的数据迁移场景中,比如游戏服务商的不停服合服(多个游戏服务器或服务器集群中的数据合并至一个游戏服务器或服务器集群中)、线上商城的不停服搬迁(线上商城理货时需要将某类商品相关的数据迁移至一个服务器或服务器集群中)、线上社交服务商的不停服数据库扩容。以游戏服务商的不停服合服为例,若出于运营需要,游戏服务商准备将两个或多个地域的服务器或服务器集群进行合并(俗称的“合服”)时,即需要将两个或多个地域的服务器或服务器集群上的数据迁移至一个服务器或服务器集群,如何实现不停服完成合服是很多游戏服务商渴望解决的技术问题。采用本发明实施例提供的方案,当游戏服务商需要合服时,将存储在准备停服的服务器中的目标对象的全量数据复制至目的服务器中,所述目标对象的访问路由的终点为所述准备停服的服务器;当所述目标对象的全量数据复制完成后,将所述准备停服的服务器中的所述目标对象的增量数据同步至所述目的服务器,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标游戏业务请求存储至缓存中,所述目标游戏业务请求是访问所述目标对象且路由终点指向所述准备停服的服务器的游戏业务请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的服务器,以及,将所述缓存中的目标游戏业务请求发送至所述目的服务器,以使所述目的服务器处理所述目标游戏业务请求,在合服期间,并不停止对游戏玩家提供游戏业务服务,进一步提升了游戏服务商的服务能力,以及游戏玩家的用户体验。

通过本发明实施例提供的方法可以适用于各种类型的数据库的数据迁移,比如,本发明实施例可以适用于传统的单一存储节点数据库的数据迁移,也适用于新型的分布式存储数据库的数据迁移。本发明实施例既可以适用于关系型数据库的数据迁移,也适用于非关系型数据库的数据迁移。本发明实施例还可以适用于数据库中的各种类型数据迁移,例如图、表、多媒体等等。

由上可知,本发明实施例可以响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在本发明中,在迁移目标对象的数据时,先将目标对象的全量数据迁移至目的存储端,在此期间,访问目标对象的目标访问请求仍然被路由至源存储端,源存储端并不拒绝目标访问请求,因此目标对象会产生增量数据;然后在目标对象的全量数据同步完成后,将目标对象的增量数据同步至目的存储端,并在进行增量数据同步后,将访问目标对象的目标访问请求缓存至缓存中,直至源存储端和目的存储端中目标对象的数据完全一致后,即目标对象的增量数据同步完成后,将目标对象的访问路由的终点修改为目的存储端,以使后续新的访问目标对象的访问请求被路由至目的存储端进行处理,并将缓存中的目标访问请求发送至目的存储端,以使目的存储端处理目标访问请求,从而使得数据侧不停止线上服务地完成目标对象的迁移,能够持续为访问目标对象的访问请求提供服务。

在数据迁移的过程中,并不停止对外提供数据服务,即不拒绝数据访问请求,数据迁移对于用户侧而言不透明,用户侧不能感知到数据服务侧的数据迁移。由此,本方案可以提升数据侧的服务能力和用户侧的用户体验。

根据上述实施例所描述的方法,以下将作进一步详细说明。

在本实施例中,将以分布式存储系统为例,对本发明实施例的方法进行详细说明,显然本方案的数据迁移方法不仅仅适用于分布式存储系统中,不应当将以下的示例性说明理解为对本申请的具体限制。

如图2a所示,本方案的数据迁移方法应用于分布式存储系统的场景示意图,为了更加便于理解,以该分布式存储系统是键值(key-value)型存储为例进行说明,但应当说明,这并不是对本发明保护范围的具体限制。

在键值型存储系统中,用键(key)对数据值(value)进行标识,且全局中的每个key是唯一的,也即全局中的所有key是互不重复的。

键值(key-value)型存储系统通常包含查询接口、新增/修改接口、删除接口,具体如下:

get(key)【查询接口】:获取以“key”作为标识存储的数据值“value”,若“key”不存在则获取失败。

set(key,value)【新增/修改接口】:将“value”存储至数据库中,并且标识符为“key”,以便后续可以用标识符“key”来获取数据“value”。如果在该标识符“key”下已经有数据了,那么原数据将被替换。

delete(key)【删除接口】:删除标识符“key”标识的数据。

在本实施例中,所述分布式存储系统包括接入层、管理层和存储层。接入层中设置有多个接入节点,管理层中设置有多个管理节点,存储层中设置有多个存储节点。

其中,每个存储节点均设置有主节点(src节点)和备份节点(srcslave节点)。通常是主节点用于对外提供数据服务,而备份节点是主节点的备份,主节点会周期性将数据备份至备份节点中,但主备节点之间可以进行相互切换。

示例性地,监测主节点的工作状态以及网络连接状态,当监测到主节点的工作状态为故障状态和/或监测到主节点网络连接为拥塞状态时,启用备份节点对外提供数据服务,并将路由至主节点的数据访问请求路由至对应的备份节点,以使备份节点处理数据访问请求;并持续性地监测主节点的工作状态以及网络连接状态,当重新监测到主节点的工作状态为正常状态且网络连接状态为通畅状态时,将启用备份节点后产生的更新数据同步至主节点中;当同步完成后(即主节点和备份节点中的数据一致后),重新启用主节点对外提供数据服务,并停止备份节点对外提供数据服务,并将新到达的数据访问请求路由至主节点,以使主节点处理新到达的数据访问请求。以实现当主节点出现故障时,数据侧仍然能够对外提供数据服务,以保证数据侧的高可用性,以及当主节点网络拥塞时,数据侧也能及时响应用户侧的数据访问请求,以保证用户侧的高体验性。

而在键值型的分布式存储系统中,原始数据会被拆分成多个数据子集,多个数据子集会尽可能均衡地存储到多个存储节点上,其中,将多个数据子集会尽可能均衡地分布到多个存储节点上的技术就是数据分片(sharding)。每个存储节点上存储的分片用分片号(shardid)进行标识,每个分片上可以承载一条或多条数据(value)。而在键值型分布式存储系统中,每条数据(value)用键值(key)进行标识,在进行数据分片时,会根据每条数据值(value)对应的键值(key)确定对应的哈希值(hashcode),在完成数据分片——即将原始数据集均匀分布到多个存储节点上后,自然也就确定了每个分片上的所有数据(所有value)对应的哈希值集合,即确定了每个分片对应的哈希取值范围(range,又称为哈希号段)。

因此在对键值型的分布式存储系统进行数据访问(包括查询、新增、修改、删除)时,示例性地,可以获取键值“key”;然后,确定键值“key”对应的哈希值“hashcode”;接着,根据哈希值“hashcode”,确定该键值“key”对应的数据值“value”的存储节点;最后,在确定出的存储节点上利用该键值“key”访问该键值“key”对应的数据值“value”。其中,在利用该键值“key”在确定出的存储节点上进行访问时,可以调用上述的查询接口、新增/修改接口、删除接口进行相应的具体操作。即在键值型分布式存储系统中,在进行数据访问时,需要先定位至存储所访问的数据的存储节点,再在定位的存储节点上进行访问操作。

其中,每个接入节点上运行有接入线程(tcaproxy),管理节点中运行有控制线程(tcapcenter),存储节点中运行有存储线程(tcapsvr)。

接入节点中的接入线程是直接与用户终端进行交互接口,用于接收数据访问请求,并将数据访问请求路由至数据访问请求所访问的数据的存储节点,存储节点中的存储线程在接收到访问请求后,依据访问请求的指令对相应的数据执行增删改查操作,并将操作结果返回给接入线程,接入线程将操作结果传递给用户终端。控制线程响应于不同的控制指令以控制整个分布式存储系统,例如控制线程响应于扩/缩容指令,控制存储层扩/缩容(即增删节点),以实现分布式存储系统存储容量的伸缩,又例如控制线程响应于资源调度指令,控制接入层资源调度,以实现最大化高效率利用接入层中所有接入节点的资源,在例如控制线程响应于数据迁移指令,控制在存储层节点之间进行数据迁移,以实现在存储节点之间的进行数据迁移。

在本实施例中,将以控制线程响应于数据迁移指令,控制分布式存储系统的存储层进行数据迁移为例进行说明。

如图2b所示,示出了本实施例的数据迁移方法的流程。如图2c所示,示出了本实施例的的数据迁移方法应用于图2a所示的分布式存储系统的主要阶段。如图2d所示,示出了数据迁移的状态。下面结合图2a至图2d对本发明的实施例进行详细说明。

如图2b所示,一种数据迁移方法的流程如下:

201、响应于触发的数据迁移指令,查询所述源存储端的第一迁移环境参数和所述目的存储端的第二迁移环境参数。

数据迁移指令用于指示将目标对象(即待迁移的数据)从源存储端迁移至目的存储端。源存储端是存储所述目标对象的存储端,目的存储端是目标对象准备迁入的存储端。

示例性地,在图2a所示的分布式存储系统中,源存储端是源存储端主节点和源存储端备份节点,目的存储端是目的存储端主节点和目的存储端备份节点。当源存储端主节点的容量满载时,或目的存储端主节点的容量出现大量冗余,或检测到系统的时间到达预设时间点时,或目的存储端作为备份节点加入存储层时,系统触发数据迁移指令。管理层分配一目标管理节点响应该数据迁移指令,则运行在该目标管理节点中的控制线程(tcapcenter)响应于触发的数据迁移指令,查询所述源存储端的第一迁移环境参数和所述目的存储端的第二迁移环境参数。

第一环境参数包括源存储端中的源端存储线程(srctcapsvr)的工作状态,源存储端中的主节点和备份节点中的数据相似性;第二环境参数包括目的存储端中的目的端存储线程(dsttcapsvr)的工作状态。

源端存储线程是运行在源存储端中、用于对源存储端中存储的数据进行访问操作的线程。示例性地,源端存储线程(srctcapsvr)接收接入节点中的接入线程(tcaproxy)路由至运行该源端存储线程的存储节点的数据访问请求,对运行该源端存储线程的存储节点内的数据进行访问操作,或者是接收管理节点中的控制线程(tcapcenter)传入至运行该源端存储线程的存储节点的控制指令,对运行该源端存储线程的存储节点内的数据进行相应操作,例如响应于数据迁移指令,将源存储端中存储的数据发送至目的存储端。

目的端存储线程是运行在目的存储端中、用于对目的存储端中存储的数据进行访问操作的线程。示例性地,目的端存储线程(dsttcapsvr)接收接入节点中的接入线程(tcaproxy)路由至运行该目的端存储线程的存储节点的数据访问请求,对运行该目的端存储线程的存储节点内的数据进行访问操作,或者是接收管理节点中的控制线程(tcapcenter)传入至运行该目的端存储线程的存储节点的控制指令,对运行该目的端存储线程的存储节点内的数据进行相应操作,例如响应于数据迁移指令,接收源存储端发送的数据。

线程的工作状态包括忙碌状态和空闲状态。当线程处于忙碌状态时表示线程正在处理任务,当线程处于空闲状态时表示线程当前无任务处理。处于空闲状态中的线程会被挂起或进入休眠状态,以等待新的任务到达。但线程运行中——即使在空闲状态中的线程——是会占用运算资源的,若线程长时间处于空闲状态而不进行任务处理,就会造成所占用的运算资源的浪费,因此系统通常会设置空闲状态的线程的存活时长,当线程处于空闲状态的时长达到存活时长时,就会注销该空闲状态的线程,即线程失活。

源端存储线程是用于对源存储端中的数据进行直接操作的对象,目的端存储线程是用于对目的存储端中的数据进行直接操作的对象,因此在进行数据迁移前,需要保证源存储端中存在处于空闲状态的源端存储线程以及目的存储端中存在处于空闲状态的目的端存储线程,以用于在数据迁移的过程中进行数据操作,才能保证数据迁移的顺利进行。故,当数据迁移指令被触发后,需要查询源端存储线程的工作状态和目的端存储线程的工作状态。

示例性地,在图2a所示的分布式存储系统中,就是查询源存储端主节点和源存储端备份节点中各自所运行的源端存储线程的工作状态,以及目的存储端主节点和目的存储端备份节点中各自所运行的目的端存储线程的工作状态。

源存储端中的主节点和备份节点中的数据相似性用于表征源存储端中的主节点和备份节点中的数据的相同程度。

在一些实施例中,示例性地,在图2a所示的分布式存储系统中,为了实现不停止对外提供数据服务地完成数据迁移,主要分了两阶段:第一阶段(全量数据复制阶段),从源存储端备份节点将目标对象的全量数据复制至目的存储端主节点(对应于后续步骤203);第二阶段(增量数据同步阶段),从源存储端主节点将目标对象的增量数据复制至目的存储端主节点(对应于后续步骤204)。这样做的有益之处在于:在第一阶段时的这段时间内,从源存储端备份节点将目标对象的全量数据复制至目的存储端主节点,存储端主节点仍然对外提供数据服务(主备短暂性地分离,即在这段时间内源存储端主节点中的更新数据不往源存储端备份节点中同步),不仅实现了主节点不停止对外提供数据服务,还可以有效避免这段时间内对外提供数据服务时主节点产生的增量数据对备份节点中全量数据复制造成干扰,影响全量数据的正确复制;在全量数据复制完成后,再将目标对象全量数据复制开始后产生的增量数据同步至目的存储端主节点即可。因此,在进行全量数据复制前,要先检查源存储端主节点和源存储端备份节点中的数据的相似性,保证源存储端主节点和源存储端备份节点中的数据基本一致,才能保证增量数据同步阶段同步的数据恰好是全量数据复制阶段迁移的数据的更新数据,否则将导致最终迁移至目的存储端主节点中的数据是错误的。在图2a所示的分布式存储系统中,即查询源存储端主节点和源存储端备份节点中的数据的相似性。

示例性地,在图2a所示的分布式存储系统中,目标管理节点中的控制线程(tcapcenter)在响应了数据迁移指令后,如图2c所示的第①阶段,控制线程(tcapcenter)还要通知接入层中的所有接入节点中的接入线程(tcaproxy)即将进入数据迁移中,以使接入线程(tcaproxy)将路由状态切换为初始化状态(wait),在初始化状态时等待控制线程查询源存储端的第一迁移环境参数和目的存储端的第二迁移环境参数。也即如图2d所示的“检查搬迁环境”。在一些实施例中,目的存储端可以是多个(图2a中虽然只示例了一个目的存储端,但这是一种示例,本领域技术人员基于说明书和其他附图可以获知多个目的存储端所对应的方案,因此不应当将图2a中示例的一个存储端解释为对本申请保护范围的限制),即可以是将源存储端上的数据迁移至多个目的存储端上,因此在查询目的存储端的第二环境参数时应当是查询所有目的存储端的第二环境参数。将目的存储端设置为多个,源存储端同步将数据迁移至多个目的存储端中,可以有效地提高数据迁移的效率。

示例性地,如图2e的左侧表格所示,在源端分片号(srcshradid)为20000(第4列)的源存储端上存储有哈希号段(range)为0-10000(第1列)所对应的数据,在未进行数据迁移时,这些数据仍然可以正常访问,因此其路由状态(status)是正常(normal)状态(第2列)。

响应于数据迁移指令,决定将其中哈希号段(range)为3333-10000所对应的数据同步迁移至两个目的存储中,或者是响应于数据迁移指令,决定将其中哈希号段(range)为0-10000所对应的数据均布到源存储端和两个目的存储端中(实质上将其中哈希号段(range)为3333-10000所对应的数据同步迁移至两个目的存储中),即在本实施例中,目标对象是哈希号段为3333-10000所对应的数据。

在分布式存储系统中,通常是将数据均布到各个节点上(即数据分片),如图2e的右侧表格所示,基于分布式存储系统的数据分片技术,重新计算出两个新的目的存储端的目的端分片号(dstshardid)为20001和20002(第3列),以及将哈希号段为3333-6666所对应的数据迁移至目的端分片号为20001的目的存储端中,将哈希号段为6666-10000号段的数据迁移至目的端分片号为20002的目的存储端中(结合第1列和第3列),因为哈希号段为0-3333所对应的数据并不迁移,仍然可以正常访问,因此其路由状态(status)是正常状态(normal),而哈希号段为3333-10000所对应的数据准备迁移至目的端分片号(dstshardid)为20001和20002的两个目的存储端中,因此将其路由状态(status)置为初始化状态(wait),以等待进行数据迁移。

示例性地,在初始化状态时,需要查询源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点各自所运行的源端存储线程的工作状态,源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中的数据的相似性,以及目的端分片号(dstshardid)为20001和20002的两个目的存储端主节点所运行的目的端存储线程的工作状态。

202、根据所述第一迁移环境参数和所述第二迁移环境参数,确定查询结果。

若查询到源存储端中的源端存储线程存活,且源存储端中的主节点和备份节点中的数据相似性大于或等于预设的阈值,且目的存储端中的目的端存储线程存活,则确定查询结果是迁移环境允许数据迁移。

若查询到源存储端中的源端存储线程失活,源存储端中的主节点和备份节点中的数据相似性小于预设的阈值,和/或,目的存储端中的目的端存储线程失活,则确定查询结果是迁移环境不允许数据迁移。

示例性地,在图2a所示的分布式存储系统中,若查询到源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中各自运行的源端存储线程存活,且源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中的数据相似性大于或等于预设的阈值,且目的端分片号(dstshardid)为20001和20002的两个目的存储端中的主节点和备份节点中各自运行的目的端存储线程存活,则确定查询结果是迁移环境允许数据迁移。

反之,若查询到源端分片号(srcshradid)为20000的源存储端中的主节点和/或备份节点中各自运行的源端存储线程失活,源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中的数据相似性小于预设的阈值,和/或,源端分片号(srcshradid)为20000的两个目的存储端中任一一个目的存储端的主节点中运行的目的端存储线程失活,则确定查询结果是迁移环境不允许数据迁移。

203、基于所述查询结果,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

若查询结果是允许数据迁移,则将存储在源存储端中的目标对象的全量数据复制至目的存储端。

若查询结果是不允许数据迁移,则拒绝进行数据迁移,并周期性地重新查询第一迁移环境参数和第二迁移环境参数,直至根据查询到的述第一迁移环境参数和第二迁移环境参数,确定的查询结果是迁移环境允许数据迁移,再将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,示例性地,在图2a所示的分布式存储系统中,为了实现不停止对外提供数据服务地完成数据迁移,主要分了两阶段:第一阶段(全量数据复制阶段),从源存储端备份节点将目标对象的全量数据复制至目的存储端主节点(对应于该步骤203);第二阶段(增量数据同步阶段),从源存储端主节点将目标对象的增量数据复制至目的存储端主节点(对应于后续步骤204)。这样做的有益之处在于:在第一阶段时的这段时间内,从源存储端备份节点将目标对象的全量数据复制至目的存储端主节点,存储端主节点仍然对外提供数据服务(主备短暂性地分离,即在这段时间内源存储端主节点中的更新数据不往源存储端备份节点中同步),不仅实现了主节点不停止对外提供数据服务,还可以有效避免这段时间内对外提供数据服务时主节点产生的增量数据对备份节点中全量数据复制造成干扰,影响全量数据的正确复制;在全量数据复制完成后,再将目标对象全量数据复制开始后产生的增量数据同步至目的存储端主节点即可。因此,在进行全量数据复制前,若查询结果中包括源存储端中的主节点和备份节点中的数据相似性小于预设的阈值,说明源存储端中的主节点和备份节点中的数据存在较大差异,因此将源存储端中的主节点中的数据重新备份至源存储端中的备份节点中,以保证增量数据同步阶段同步的数据恰好是全量数据复制阶段迁移的数据的更新数据(对应于步骤204)。

在进行数据迁移前,先对迁移环境进行检查,只有迁移环境允许数据迁移时才进行数据迁移,从而有效避免因迁移环境不允许数据迁移导致数据迁移失败,提高数据迁移成功率。

示例性地,在图2a所示的分布式存储系统中,,若查询结果是允许数据迁移,如图2c所示的第②阶段,则目标管理节点中的控制线程通知接入层中的接入节点中接入线程将路由状态(status)从初始化状态(wait)切换至迁移中状态(move),即图2d所示的“请求proxy(接入线程)设置路由为move状态”,若状态切换失败,则返回“检查搬迁环境”。之后,如图2c所示的第③阶段,目标管理节点中的控制线程通知存储层中的源端存储节点中源端存储线程将目标对象发往至存储层中的目的端存储节点中。在一些实施例中,是从源存储端的备份节点中将目标对象的全量数据同步至目的存储端的主节点中,即图2d所示的“请求slave(源存储端备份节点)开始全量数据搬迁”,正式进入图2c所示的第④阶段“数据迁移”。目标对象的全量数据开始后,监测目标对象的全量数据搬迁状态,即2d所示的“处理搬迁状态上报请求”,若监测到目标对象的全量数据复制过程中出现异常(即复制失败),则返回“检查搬迁环境”,若监测到目标对象的全量数据复制成功,则进入下一阶段“binlog同步状态”,即开始执行后续步骤204。

目标对象的全量数据,即确定的某一状态时目标对象的所有数据。示例性地,在开始进行数据迁移时刻时,哈希号段为3333-10000所对应的所有数据即哈希号段为3333-10000的全量数据。

示例性地,若查询到源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中各自运行的源端存储线程存活,且源端分片号(srcshradid)为20000的源存储端中的主节点和备份节点中的数据相似性大于或等于预设的阈值,且目的端分片号(dstshardid)为20001和20002的两个目的存储端中的主节点和备份节点中各自运行的目的端存储线程存活,则确定查询结果是迁移环境允许数据迁移。如图2f所示,从源端分片号(srcshradid)为20000的源存储端中的备份节点(srcslave)中将哈希号段为3333-6666所对应的数据的全量复制至目的端分片号(dstshardid)为20001的存储端(dst)中的主节点中的,从源端分片号(srcshradid)为20000的源存储端中的备份节点(srcslave)中将哈希号段为6666-10000所对应的数据的全量复制至目的端分片号(dstshardid)为20002的存储端(dst)中的主节点中的。

在一些实施例中,示例性地,全量数据复制时,将目标对象划分成多个页,并为每个页编订页码(offset),每次复制一个页内的数据至对应的目的存储端,从而分批次完成目标对象的全量数据复制。

在一些实施例中,为了使目的存储端中的存储的数据能更好的为用户侧提供数据服务,当查询结果是允许数据迁移时,还需要检查目的存储端中是否存在脏数据,当存在脏数据时,需要对脏数据进行清洗,即步骤203包括:

2031、基于所述查询结果,清洗所述目的存储端中的脏数据。

目的存储端中所有与目标对象完全无关的数据均可以称为脏数据,包括未能完整记录的数据、非法写入目的存储中的数据和/或无法进行访问的无效数据,这些脏数据会干扰数据侧的正常服务,应当将这些脏数据剔除,常用的方法就是脏数据清洗,最直接的方式就是对目的存储端进行格式化处理,当然也还可以是对目的端中的数据进行重新检查和校验,删除其中的未能完整记录的不完整数据、非法写入目的存储中的数据和/或无法进行访问的无效数据。

当查询结果是迁移环境允许数据迁移时,则对目的存储端中的脏数据进行清洗。

示例性地,在图2a所示的分布式存储系统中,当查询结果是迁移环境允许数据迁移时,目标管理节点中的控制线程通知存储层中的目的端存储节点中目的端存储线程对脏数据进行清洗,即图2d所示的“请求目的存储端master(目的端主节点)开始清理脏数据”。当开始进行脏数据清洗后,监测脏数据清理状态,即2d所示的“处理脏数据清理状态上报请求”,若监测到脏数据清洗成功,则进入下一阶段“初始状态对象”。

在一些实施例中,在图2a所示的分布式存储系统中,在进行脏数据清洗时,需要对目的存储端中的主节点和备份节点中的脏数据均进行清洗。示例性地,当检测到目的端分片号(dstshardid)为20002的存储端(dst)中存在脏数据,则可以先对目的端分片号(dstshardid)为20002的存储端的主节点中的脏数据进行清洗,并格式化目的端分片号(dstshardid)为20002的存储端的备份节点,在目的端分片号(dstshardid)为20002的存储端的主节点清洗完成后,重新将目的端分片号(dstshardid)为20002的存储端的主节点中的数据备份至目的端分片号(dstshardid)为20002的存储端的备份节点中。

2032、当所述目的存储端中的脏数据清洗完成后,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

示例性地,在图2a所示的分布式存储系统中,当脏数据清洗完成后,目标管理节点中的控制线程通知接入线程将路由状态(status)从初始化状态(wait)切换为迁移中状态(move),然后开始进行数据迁移,即将存储在源存储端中的目标对象的全量数据复制至目的存储端,例如将哈希号段为3333-6666所对应的数据的全量迁移至目的端分片号为20001的目的存储端,将哈希号段为6666-10000所对应的数据的全量迁移至目的端分片号为20002的目的存储端。

204、当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据。

因为在步骤203复制目标对象的全量数据的过程中,为了实现不停止向用户侧提供数据服务,是从源存储端的备份节点中将目标对象的全量数据复制至目的存储端中,源存储端主节点并未拒绝访问目标对象的目标访问请求,因此存储在源存储端主节点中的目标对象将产生更新数据,即增量数据。如果不将源存储端主节点中的目标对象的增量数据同步至目的存储端,那么后续切换至目的存储端为用户提供数据服务时,用户访问目的存储端中的目标对象的数据,会发现数据出现了回档现象,即用户会发现部分数据退回到了某个历史时间点的状态,例如目标对象是游戏数据,用户会发现游戏进度退回之前的历史进度。在这里对于用户而言,实质上是目标对象的数据“退回”到目标对象的全量数据复制开始的时刻,而丢失了目标对象的全量数据复制开始的时刻以后的增量数据。

因此,为了保证迁移至目的存储端的目标对象与源存储端中的目标对象的数据一致性,以及后续切换至目的存储端为用户提供服务时,用户不会感知到数据出现回档现象还需要将目标对象的增量数据也同步至目的存储端。

示例性地,在将哈希号段为3333-6666所对应的数据的全量迁移至目的端分片号为20001的目的存储端,以及将哈希号段为6666-10000所对应的数据的全量迁移至目的端分片号为20002的目的存储端的时间段中,源存储端的主节点哈希号段为3333-10000所对应的数据中必然存在部分数据进行了更新,即哈希号段为3333-10000所对应的数据产生了增量数据,因此还需要将这部分增量数据也同步至相应的目的存储端中,具体的,如图2g需要将哈希号段为3333-6666所对应的数据的增量数据同步至目的端分片号为20001的目的存储端,将哈希号段为6666-10000所对应的数据的增量数据同步至目的端分片号为20002的目的存储端。

在一些实施例中,如图2a所示,所述源存储端包括源端主节点和源端备份节点,所述源端备份节点中存储的数据是所述源端主节点中存储数的数据的备份数据,所述目标对象的访问路由的终点为所述源端主节点,即源端主节点仍然对外提供数据服务;在执行将存储在源存储端中的目标对象的全量数据复制至目的存储端时,是将存储在源端备份节点中的目标对象的全量数据复制至目的存储端;在执行将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端时,是将所述源端主节点中的所述目标对象的增量数据同步至所述目的存储端。如图2g所示,从源端分片号(srcshradid)为20000的源存储端中的主节点(src)中将哈希号段为3333-6666所对应的数据的增量同步至目的端分片号(dstshardid)为20001的存储端(dst)中的主节点中的,从源端分片号(srcshradid)为20000的源存储端中的主节点(src)中将哈希号段为6666-10000所对应的数据的增量同步至目的端分片号(dstshardid)为20002的存储端(dst)中的主节点中的。因为在进行全量复制阶段,源存储端主节点仍然对外提供数据服务,会导致源存储端主节点中的数据产生更新,全量复制阶段从源存储端的备份节点中进行复制,可以避免访问目标对象的访问请求对全量数据复制的干扰,减少数据迁移出错的概率。

在数据存储系统中存在一种binlog日志,binlog日志是基于事务来记录的二进制日志,其中按照时间顺序详细记录了对数据存储系统的具体操作。binlog日志自存储系统创建时即存在,从对数据存储系统写入第一条数据即开始进行记录,并对后续增加新数据、修改或删除旧数据均进行记录。

示例性地,在图2a所示的分布式存储系统中,在进行增量数据同步(具体地执行过程在图2g中进行了示意)时是基于源存储端的binlog日志进行同步的。源存储端的binlog日志按照时间顺序记录了所有的数据操作记录,且每条操作记录都有一个唯一的序号(sequence)标识,且序号呈自递增增长。

记目标对象中的第一条数据值“value”存入源存储端的时刻为t0,并记目标对象的全量数据复制开始时刻为t,且假设时刻t时binlog日志共记录了n条事务(数据操作)。那么这n条事务实质上就反映了目标对象的全量数据,故,目标对象的全量数据复制相当于是迁移了(全量数据复制的开始时刻对应的)序号(sequence)为n(包括n在内)之前操作记录对应的写入数据。如前述示例,在一些实施例中,在进行目标对象的全量数据复制时,是从源存储端的备份节点中进行的,应当说明的是,并不是在目的存储端中写入目标对象后,就立即删除源存储端中的目标对象,也不是将从源存储端的备份节点中的目标对象剪切后拷贝至目的存储端中,而是先在源存储端的备份节点中创建目标对象在时刻t时的快照数据,将该快照数据写入目的存储端中,以便在数据迁移中若出现异常(如目的存储端宕机)时,源存储端仍然存在相应的备份数据用于回滚。其中,快照数据就是记录时刻t时源源存储端的备份节点中的数据的状态,通俗理解,就是对t时源源存储端的备份节点中的数据状态拍个照,得到t时源源存储端的备份节点中的数据的状态照片,基于该状态照片,在目标存储端中写入相同状态的数据,即完成了目标对象的全量数据复制。

在对目标对象的全量数据开始复制后,源存储端主节点并不对外停止数据服务,当接收到新的数据访问请求后,将在序号(sequence)为n之后(对应于时刻t之后)继续自增序号,并基于自增地序号开始记录新的数据操作,例如在时刻t之后的时刻t1接到第一个新的数据访问请求,则记录该数据访问请求的数据操作的序号为n+1条。

因此在进行全量数据复制时,记录全量数据复制的开始时刻t,或全量数据对应的操作记录中的最大序列号n。在进行增量数据同步时,就可以直接将binlog日志中从n+1序号开始的操作记录对应的数据(或全量数据复制的开始时刻t之后的操作记录对应的数据)同步至目的存储端即可,具体地,是依据binlog日志中从n+1序号的操作记录所操作的数据的哈希值(hashcode),对目的存储端中同一哈希值(hashcode)的数据进行同样的操作,即实现了将从全量数据复制开始时目标对象产生的增量数据也同步至目的存储端。

在进行全量数据复制和增量数据同步时,均是按照在源存储端中binlog日志中的binlog序列号(sequence)的顺序进行。源存储端中的源端存储线程在源存储端中查询每一个binlog序列号对应的数据记录,然后发送给目的存储端,目的存储端中的目的存储端存储线程在接收到数据记录后,写入目的存储端中,并向源端存储线程返回写入成功,然后源存储端中的源端存储线程读取下一个binlog序列号对应的数据记录,并重新执行上述步骤,直至目标对象的全量数据和增量数据都同步至目的存储端。以保证数据的有序性。

如果从源存储端中读取一条数据记录发送给目的存储端,等待目的存储端返回成功响应后,再从源存储端中读取一条数据记录发送给目的存储端,等待目的存储端返回成功响应后,再接着重复上述步骤复制下一条数据记录,显得迁移效率低下。为了提升数据迁移的效率,在源存储端中设置循环序列,每读取一个binlog序列号对应的数据,就将该binlog序列号对应的数据存入循环序列中,循环队列中的数据记录滑动地形式发送至目的存储端,即按序持续不断地往目的存储端发送目标对象的数据记录,不用等待接收到上一条数据记录对应的成功响应后再发送下一条数据记录,并监测目的存储端是否返回每个binlog序列号对应的数据的成功响应。从而在一定程度上提升数据同步的并发性,以提高数据迁移效率。

当所述循环队列满载时,将等待循环队列的队头的binlog序列号对应的数据的成功响应返回后,才允许循环队列继续发送队列中的数据记录至目的存储端。

目的存储端的目的端存储线程在接收到数据记录后,会先确定该数据记录对应的哈希值,并将该数据记录存储至该哈希值标识的存储位上。在目的存储端中,不论目的存储端中该哈希值标识的存储位上是否存在数据记录,都将新接收到数据记录写入该哈希值所标识的存储位上。即源存储端只使用一个循环队列,控制该循环队列中的数据记录的发送速率,从而控制增量数据同步的进度,无需考虑到每个目的存储端的中相应的哈希值标识的存储位上会否存在数据记录,即以源存储端中的数据为准,实现将源存储端中的数据正确同步至目的存储端中。

在一些实施例中,在全量数据复制阶段和增量数据同步阶段,均支持暂停再继续,即在全量数据复制时能够响应于第一暂停复制指令暂停全量数据复制,响应于继续复制指令继续全量数据复制,在增量数据同步阶段响应于第二暂停指令暂停增量数据同步,响应于继续复制指令继续增量数据复制。全量数据复制阶段记录最近一次迁移完成的页码(offset),当暂停后继续开始复制的时候,从记录的offset开始继续进行全量数据复制。增量数据同步阶段记录最近一次迁移完成的binlog序列号,当暂停后继续开始同步的时候,从记录的binlog序列号开始继续进行增量数据同步。

在一些实施例中,当基于binlog日志进行增量同步时,若因为binlog中的某条操作记录同步执行失败导致数据迁移事务挂起,则从最近一次增量数据同步成功的binlog序列号m的下一个序号m+1开始对应的操作记录开始,继续进行增量数据同步。

在一些实施例中,当目的端存储线程在将目标对象的数据写入目的存储端的主节点中时,还会同步或异步写入目的存储端的备份节点中,以实现对迁移的目标对象的备份。应当说明的是,若在全量数据复制阶段和增量数据同步阶段,若源存储端的主备节点进行了切换,则在源存储端的主备节点切换完成后,返回步骤201,并清洗掉目的存储端中的脏数据,重新开始进行数据迁移。

示例性地,在图2a所示的分布式存储系统中,当开始进行增量数据同步时,即进入图2d所示的“binlog同步状态对象”中“请求源存储端主节点(master)开始同步binlog”。当在目标对象的增量数据同步开始后,监测目标对象的增量数据搬迁状态,即2d所示的“处理binlog同步状态上报请求”,若监测到目标对象的增量数据同步过程中出现异常(即同步失败),则返回“检查搬迁环境”以及“请求目的存储端master开始清理脏数据”,若监测到目标对象的增量数据同步成功,则进入下一阶段“请求proxy设置路由为cache状态”,即开始执行后续步骤206。

205、当所述目标对象的增量数据同步开始后,监测所述目标对象的增量数据的同步进度。

206、当监测到所述同步进度达到预设的第一阈值时,将所述目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求。

第一阈值是根据历史数据访问请求量预先设定的经验值,示例性地,因为当监测到同步进度达到预设的第一阈值时,将开始缓存数据访问请求,当数据访问请求量较大时,如果将第一阈值设定的过大,将导致需要较大的缓存容量缓存数据访问请求,如果将第一阈值设定的过小,将可能导致缓存难以存储较大访问量的数据访问请求。因此,可以根据历史数据访问请求量预先设定第一阈值,以确定开始缓存目标访问请求的时机。

当监测目标对象的增量数据的同步进度达到预设的第一阈值时,开始缓存目标访问请求,以准备切换目的对象的访问路由,以在数据侧表现为暂缓对目标访问请求进行服务。通过预先设定增量数据的同步进度达到第一阈值时再缓存目标访问请求,相较于步骤增量数据同步开始时就开始缓存目标访问请求,可以有效降低缓存所需的容量,以免缓存开销过大,造成缓存容量不足以缓存目标访问请求。

在一些实施例中,示例性地,在增量数据同步时,确定最近成功写入目的存储端的数据记录的binlog序列号y与源存储端中的binlog日志中的最大binlog序列号z的第一差值,并确定源存储端中的binlog日志中的全量数据复制开始时刻t对应的binlog序列号n和与源存储端中的binlog日志中的最大binlog序列号z的第二差值,基于所述第一差值和第二差值的比值确定增量数据的同步进度。当差值小于预设的第一阈值时,即目标对象的增量数据的同步进度小于预设的第一阈值,开始缓存目标访问请求。示例性地,如图2h中的(1)部分所示,此时接入线程(tcaproxy)将目标访问请求暂时缓存至缓存(cachebuffer)中,而不发往分片号为20000的源存储端的主节点(src)中。

示例性地,在图2a所示的分布式存储系统中,当开始进行增量数据同步时,即进入图2d所示的“准备切换路由状态对象”中“请求proxy(接入线程)设置路由为cache状态”,对应于图2c中的第⑤阶段“即将迁移完成”和第⑥阶段“请求缓存中(cache)”,控制线程(tcapcenter)通知接入层中的接入线程(tcaproxy)即将路由状态(status)设置为“请求缓存中(cache)”,并开始将新接收到的目标访问请求存储至缓存中。并且,控制线程(tcapcenter)通知通知存储层中的源存储端主节点完成剩下的增量数据同步,即图2d所示的“请求master(源存储端主节点)完成同步binlog”。在一些实施例中,步骤206,所述将目标访问请求存储至缓存中,包括:

2061、将所述目标访问请求存储至所述缓存中的缓存队列中。

在一些实施例中,如图2n所示,示出了缓存的结构,从左侧缓存的头部(buffer_start)开始缓存数据访问请求,当接收到一个数据访问请求就在该数据访问请求(request1)的头部依次加上校验数据合法性magic字段、反映接收到访问请求的时刻的time字段、以及反映该访问请求的长度length字段,然后将其放入缓存中的对头(head)。当接收到下一个数据访问请求(request2),同样在该数据访问请求(request2)的头部依次加上校验数据合法性magic字段、反映接收到访问请求的时刻的time字段、以及反映该访问请求的长度length字段,然后将其放入缓存中,直至缓存饱和,即最后一个数据访问请求的request字段抵近缓存的尾部(buffer_end)。且下一个数据访问请求request2的magic字段紧挨着与上一个数据访问请求request2的request字段,以实现从缓存中连续的申请的存储空间存储目标访问请求。以实现接入线程按照所述目标访问请求的时序,将所述目标访问请求存储至所述缓存中的缓存队列中。

所述方法还包括:

2062、监测所述缓存队列的缓存状态。

缓存状态包括缓存队列的缓存容量和存入访问请求的存入时长。

2063、基于所述缓存状态,强制处理所述缓存队列中的至少一个目标访问请求。

在一些实施例中,基于所述缓存状态,示例性地,当监测到缓存容量满载和/或存入时长超出预设时长,强制处理所述缓存队列中对头的至少一个目标访问请求,即丢弃这些请求,然后给客户端返回错误或者超时响应。

缓存设计如下:在接入节点预先分配一块缓存。当接收到目标访问请求后,根据请求的大小,从缓存中连续的申请存储空间存储访问请求;且缓存采用缓存队列实现。之所以采用队列方式,是因为缓存的目标访问请求必须要按序处理,即先缓存的请求先处理,后缓存的请求后处理。

下面结合图2i至图2m对上述缓存设计进行说明,应当说明的是,图2i至图2m所示的缓存结构中均以左侧为缓存的头部(即缓存队列的队头),右侧为缓存的尾部(即缓存队列的队尾)。

例如,如图2i所示,先申请了一块10m的缓存,接收到第一个目标访问请求是2kb,则申请2kb的缓存空间缓存该目标访问请求,如图2j所示。再接收到第二个、第三个……目标访问请求,则依次连续的申请缓存空间依序缓存这些目标访问请求。如图2k所示,直至缓存饱和,剩余的0.5kb空间不足以缓存新的请求,即不再能缓存新的请求,然后强制处理掉缓存中先缓存的请求,即强制处理掉缓存队列的对头的数据访问请求(例如是上述图2n中示例的request1),并释放掉处理掉的请求的缓存空间,如图2l所示,即从缓存的头部释放出1.5kb的空间。然后再在释放出的1.5kb缓存空间中申请1kb存储空间缓存新到达数据量大小为1kb的请求,如图2m所示。

207、当监测到所述同步进度达到完成后,确定目标访问请求的缓存状态。

在一些实施例中,源存储端记录当前同步的增量数据记录的binlog序列号(current_sequence),然后读取下一条binlog记录,当读取的binlog记录的sequence大于等于current_sequence时,就认为binlog同步已经完成,即增量数据同步完成。

示例性地,在增量数据同步完成后,目标管理节点中的控制线程通知所有接入线程开始缓存目标访问请求,每个接入线程将接收到的目标访问请求存储至缓存中后,会向控制线程返回缓存成功的响应消息,当控制线程接收到所有的接入线程返回的缓存成功的响应消息后,确定所有目标访问请求的缓存状态均为缓存成功。

208、当所述目标访问请求被成功存储至所述缓存中时,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

当目标对象的增量数据同步完成后,即源存储端和目的存储端中的目标对象的数据完全一致后,将目标对象的访问路由的终点修改为目的存储端,以使后续新接收到的访问目标对象的访问请求被发送至目的存储端进行处理,由目的存储端为新的访问目标对象的访问请求提供数据服务。

同时,将缓存中缓存的目标访问请求强制发送至目的存储端进行处理,由目的存储端为这些本该由源存储端提供数据服务的访问请求进行数据服务,从而实现在整个数据迁移过程中,不拒绝数据访问请求。

示例性地,如图2h中的(2)部分所示,此时接入线程(tcaproxy)将目缓存(cachebuffer)中缓存的访问分片号为20001上的数据的目标访问请求发往分片号为20001的目的存储端的主节点(dst)中、访问分片号为20002上的数据的目标访问请求发往分片号为20002的目的存储端的主节点(dst)中。

接入线程先缓存新的目标访问请求,直至所有的目标访问请求均被存储至缓存中,控制线程通知接入线程切换目标对象的访问路由的终点至目的存储端。示例性地,下面结合图2o进行详细说明控制线程当获知目标对象的增量数据同步进度达到第一阈值时,是如何控制系统将目标对象的路由终点从源存储端切换至目的存储端:

a、控制线程(tcapcenter,即图2o中的center)将存储系统中目标对象的路由状态修改为cache状态;

b、控制线程通知接入线程(tcaproxy,即图2o中的proxy)将路由状态修改为cache状态;

c、接入线程响应控制线程的通知,将路由状态修改为cache状态;

d、接入线程创建与缓存之间的缓存通道(cache通道),并通过缓存通道将目标访问请求缓存至缓存中;

e、接入线程向源存储端主节点中的存储线程(srctcapsvr,即图2o中的src)发送染色包请求;

其中,染色包请求是用于指示源存储端主节点中存储线程确认所有已经接收到的目标访问请求的处理状态,当所有存储线程确认自己所收到的目标访问请求均处理完成,即确认整个系统中不存在尚未处理的目标访问请求,目标对象不会再产生新的增量数据,则生成染色响应包。

f、源存储端主节点中存储线程向接入线程返回所有染色响应包,以通知接入线程开始缓存目标访问请求;

g、接入线程通知控制线程已经开始缓存目标访问请求;

h、控制线程通知源存储端主节点中存储线程完成剩余的增量数据同步,即将源存储端主节点的binlog日志中的剩余操作记录同步至目的存储端中;

i、当增量数据同步完成后,源存储端主节点中存储线程通知控制线程增量数据同步完成;

j、控制线程通知接入线程锁定缓存,禁止自动释放缓存;

k、接入线程锁定缓存;

l、接入线程通知控制线程缓存锁定成功;

m、控制线程将存储系统中目标对象的路由状态修改为normal状态,并将目标对象的访问路由的终点修改为目的存储端;

应当说明的是,直到所有接入线程都通知控制线程锁定成功后,控制线程才会尝试进入路由切换开始状态,如果有接入线程超过预设时长未能返回锁定成功的消息或只有部分接入线程返回锁定成功的消息,则尝试通知接入线程回滚cache状态,并继续缓存目标访问请求。

n、控制线程通知接入线程将路由状态修改为normal状态;

o、接入线程响应控制线程的通知,将路由状态修改为normal状态,并将缓存中的目标访问请求发送至目的存储端,以释放缓存。

当然,访问路由并不一定能切换成功,当所述将所述目标对象的访问路由的终点修改为所述目的存储端失败后,将所述缓存中的目标访问请求发送至所述源存储端,并返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端。示例性地,目标管理节点中的控制线程(tcapcenter)将请求接入线程(tcaproxy)将路由状态(status)从缓存中(cache)状态回滚至迁移中(move)状态,如图2c所示的“请求proxy(接入线程)设置路由为move(迁移中)状态”。即返回增量数据同步阶段,重新进行增量数据同步。

将所述缓存中的目标访问请求发送至所述目的存储端后,所述目的存储端处理这些来自于缓存中的目标访问请求,以及后续新到达的访问请求,所述新到达的访问请求是所述目标对象的路由的终点修改为所述目的存储端后接收到的访问请求。

示例性地,在图2a所示的分布式存储系统中,当路由切换完成后,目标管理节点中的控制线程(tcapcenter)将请求接入线程(tcaproxy)将路由状态(status)设置路由为正常(normal)状态,即图2d所示“请求proxy(接入线程)设置路由为normal(正常)状态”,也即图2c所示的第⑦阶段“正常状态(normal)”。在一些实施例中,209、在执行所述将所述目标对象的访问路由的终点修改为所述目的存储端的期间,锁定所述缓存,并监测所述锁定所述缓存的锁定状态;

基于前述步骤2061至步骤2063,当监测到缓存容量满载和/或存入时长超出预设时长,强制处理所述缓存队列中对头的至少一个目标访问请求,即释放缓存中的部分空间,但进入路由切换时,不允许缓存再自动释放存储空间,以保证能够顺利为已缓存的目标访问请求提供数据服务,因此需要锁定缓存,不允许缓存再强制处理所述缓存队列的目标访问请求,即不允许缓存再自动释放存储空间。缓存状态包括锁定成功和锁定失败,锁定成功是指缓存在指定时间段内未释放存储空间,锁定失败是指缓存在指定时间段内释放了存储空间,。

210、当监测到所述锁定状态为锁定失败,则返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端;

锁定失败是指监测到缓存又自动释放了存储空间,即缓存中的部分目标访问请求被强制处理了,需要重新返回增量数据同步阶段。

211、当监测到所述锁定状态为锁定成功,在所述将所述目标对象的访问路由的终点修改为所述目的存储端成功后,还包括:释放所述缓存。

在将目标对象的访问路由的终点修改为目的存储端的期间,必须保证缓存一直锁定成功,以便在访问路由未能切换成功时,将所缓存中的目标访问请求发送至源存储端进行处理,以实现无损失地为用户侧提供数据服务。因此,在切换访问路由的过程中,不能释放缓存中的目标访问请求,以免访问路由切换失败时,缓存中的目标访问请求丢失,导致数据服务受损,这将损害数据侧的服务能力和用户侧的用户体验。

当在将目标对象的访问路由的终点修改为目的存储端的期间,缓存一直是锁定成功,在将目标对象的访问路由的终点修改为目的存储端成功后,释放所述缓存,即将缓存中的请求发送至目的存储端进行处理,以腾出缓存的存储空间用于下一次数据迁移。

在进行数据迁移的过程,为了保证数据迁移的顺利完成,还需要保证源存储端和目的存储端一直处于正常的工作状态中,因此,在一些实施例中,还包括:

213、监测所述源存储端的工作状态;,

214、当所述源存储端的工作状态为故障状态时,则清洗所述目的存储端的脏数据;

故障状态是指源存储端出现了故障,导致数据迁移过程中出现了异常,未能完成数据迁移,使得目的存储端中写入的数据是不完整或缺失的,即在目的存储端中产生了脏数据,因此需要将目的存储端中脏数据清洗掉,以等待源存储端恢复正常后,重新开始进行数据迁移。

215、所述目的存储端中的脏数据清洗完成后,若监测到所述源存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

以及,

216、监测所述目的存储端的工作状态;

217、当监测到所述目的存储端的工作状态为故障状态时,则继续监测所述目的存储端的工作状态;

218、当再次监测到所述目的存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,管理节点还会监测源存储端和目的存储端的工作状态,即数据迁移的过程中,若监测到源存储端或目的存储端出现故障,则从头开始重新进行数据迁移。

由上可知,本发明实施例监测源存储端和目的存储端的工作状态,并基于源存储端和目的存储端的工作状态适时调整数据迁移的步骤,以保证数据迁移的顺利完成。

在本发明中,在迁移目标对象的数据时,先将目标对象的全量数据迁移至目的存储端,在此期间,访问目标对象的目标访问请求仍然被路由至源存储端,源存储端并不拒绝目标访问请求,因此目标对象会产生增量数据;然后在目标对象的全量数据同步完成后,将目标对象的增量数据同步至目的存储端,并在进行增量数据同步后,将访问目标对象的目标访问请求缓存至缓存中,直至源存储端和目的存储端中目标对象的数据完全一致后,即目标对象的增量数据同步完成后,将目标对象的访问路由的终点修改为目的存储端,以使后续新的访问目标对象的访问请求被路由至目的存储端进行处理,并将缓存中的目标访问请求发送至目的存储端,以使目的存储端处理目标访问请求,从而使得数据侧不停止线上服务地完成目标对象的迁移,能够持续为访问目标对象的访问请求提供服务。

在数据迁移的过程中,并不停止对外提供数据服务,即不拒绝数据访问请求,数据迁移对于用户侧而言不透明,用户侧不能感知到数据服务侧的数据迁移。由此,本方案可以提升数据侧的服务能力和用户侧的用户体验。

为了更好地实施以上方法,本发明实施例还提供一种数据迁移装置,该数据迁移装置具体可以集成在电子设备中,该电子设备可以为终数据库、服务器等设备。其中,终数据库可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

比如,在本实施例中,将以数据迁移装置具体集成在服务器中为例,对本发明实施例的方法进行详细说明。

例如,如图3a所示的数据迁移装置的第一种结构示意图,该数据迁移装置可以包括全量复制单元301、增量同步单元302、请求缓存单元303以及路由切换单元304,如下:

(一)全量复制单元301:

全量复制单元301,用于响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端,所述目标对象的访问路由的终点为所述源存储端。

在一些实施例中,参考图3b所示的数据迁移装置的第二种结构示意图,全量复制单元301可以包括参数查询子单元3011、结果确定子单元3012以及全量复制子单元3013,如下:

(1)参数查询子单元3011:

参数查询子单元3011,用于响应于触发的数据迁移指令,查询所述源存储端的第一迁移环境参数和所述目的存储端的第二迁移环境参数。

(2)结果确定子单元3012:

结果确定子单元3012,用于根据所述第一迁移环境参数和所述第二迁移环境参数,确定查询结果。

(3)全量复制子单元3013:

全量复制子单元3013,用于基于所述查询结果,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,全量复制子单元3013具体可以用于执行以下步骤:

基于所述查询结果,清洗所述目的存储端中的脏数据。

当所述目的存储端中的脏数据清洗完成后,将存储在源存储端中的目标对象的全量数据复制至目的存储端。

(二)增量同步单元302:

增量同步单元302,用于当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据。

(三)请求缓存单元303:

请求缓存单元303,用于当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求。

在一些实施例中,参考图3c所示的数据迁移装置的第三种结构示意图,请求缓存单元303可以包括进度监测子单元3031以及第一缓存子单元3032,如下:

(1)进度监测子单元3031:

进度监测子单元3031,用于当所述目标对象的增量数据同步开始后,监测所述目标对象的增量数据的同步进度;

(2)第一缓存子单元3032:

第一缓存子单元3032,用于当监测到所述同步进度达到预设的第一阈值时,将所述目标访问请求存储至缓存中。

(四)路由切换单元304:

路由切换单元304,用于当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在一些实施例中,参考图3d所示的数据迁移装置的第四种结构示意图,路由切换单元304可以包括第一检测子单元3041以及路由修改子单元3042,如下:

(1)第一检测子单元3041:

第一检测子单元3041,用于当监测到所述同步进度达到完成后,确定目标访问请求的缓存状态;

(2)路由修改子单元3042:

路由修改子单元3042,用于当所述目标访问请求被成功存储至所述缓存中时,将所述目标对象的访问路由的终点修改为所述目的存储端。

在一些实施例中,该数据迁移装置还包括缓存监测单元305以及强制处理单元306,如下:

(五)请求缓存单元303:

请求缓存单元303还包括:

第二缓存子单元3033,用于按照所述目标访问请求的时序,将所述目标访问请求存储至所述缓存中的缓存队列中。

(六)缓存监测单元305:

缓存监测单元305,用于监测所述缓存队列的缓存状态。

(七)强制处理单元306

强制处理单元306,用于基于所述缓存状态,强制处理所述缓存队列中队头的至少一个目标访问请求。

在一些实施例中,该数据迁移装置还包括第一监测单元307、第一清洗单元308以及第一回滚单元309,如下:

(八)第一监测单元307:

第一监测单元307,用于监测所述源存储端的工作状态。

(九)第一清洗单元308:

第一清洗单元308,用于当所述源存储端的工作状态为故障状态时,则清洗所述目的存储端的脏数据。

(十)第一回滚单元309:

第一回滚单元309,用于当所述目的存储端中的脏数据清洗完成后,若监测到所述源存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,该数据迁移装置还包括第二监测单元311以及第二回滚单元312,如下:

(十一)第二监测单元311:

第二监测单元311,用于监测所述目的存储端的工作状态;以及当监测到所述目的存储端的工作状态为故障状态时,则继续监测所述目的存储端的工作状态。

(十二)第二回滚单元312:

第二回滚单元312,用于当再次监测到所述目的存储端的工作状态为正常状态时,则返回执行步骤:将存储在源存储端中的目标对象的全量数据复制至目的存储端。

在一些实施例中,该数据迁移装置还包括异常处理单元313,如下:

(十三)异常处理单元313:

异常处理单元313,用于当所述将所述目标对象的访问路由的终点修改为所述目的存储端失败后,将所述缓存中的目标访问请求发送至所述源存储端,并返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端。

在一些实施例中,该数据迁移装置还包括缓存锁定单元314、第三回滚单元315以及缓存释放单元316,如下:

(十四)缓存锁定单元314:

缓存锁定单314,用于在执行所述将所述目标对象的访问路由的终点修改为所述目的存储端的期间,锁定所述缓存,并监测所述锁定所述缓存的锁定状态;

(十五)第三回滚单元315:

第三回滚单元315,用于当监测到所述锁定状态为锁定失败,则返回执行步骤:将所述源存储端中的目标对象的增量数据同步至所述目的存储端;

(十六)缓存释放单元316:

缓存释放单316,用于当监测到所述锁定状态为锁定成功,在所述将所述目标对象的访问路由的终点修改为所述目的存储端成功后,释放所述缓存。

在一些实施例中,所述源存储端包括源端主节点和源端备份节点,所述源端备份节点中存储的数据是所述源端主节点中存储数的数据的备份数据,所述目标对象的访问路由的终点为所述源端主节点;全量复制单元301,还用于响应于触发的数据迁移指令,将存储在源端主节点中的目标对象的全量数据复制至目的存储端;增量同步单元302,还用于将所述源端备份节点中的所述目标对象的增量数据同步至所述目的存储端。

具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。

由上可知,本实施例的数据迁移装置可以响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在本发明中,在迁移目标对象的数据时,先将目标对象的全量数据迁移至目的存储端,在此期间,访问目标对象的目标访问请求仍然被路由至源存储端,源存储端并不拒绝目标访问请求,因此目标对象会产生增量数据;然后在目标对象的全量数据同步完成后,将目标对象的增量数据同步至目的存储端,并在进行增量数据同步后,将访问目标对象的目标访问请求缓存至缓存中,直至源存储端和目的存储端中目标对象的数据完全一致后,即目标对象的增量数据同步完成后,将目标对象的访问路由的终点修改为目的存储端,以使后续新的访问目标对象的访问请求被路由至目的存储端进行处理,并将缓存中的目标访问请求发送至目的存储端,以使目的存储端处理目标访问请求,从而使得数据侧不停止线上服务地完成目标对象的迁移,能够持续为访问目标对象的访问请求提供服务。由此,本方案可以提升数据侧的服务能力和用户侧的用户体验。

本发明实施例还提供一种电子设备,该电子设备可以为终数据库、服务器等设备。其中,终数据库可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑,等等;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,等等。

在一些实施例中,该数据迁移装置还可以集成在多个电子设备中,比如,数据迁移装置可以集成在多个服务器中,由多个服务器来实现本发明的数据迁移方法。

在本实施例中,将以本实施例的电子设备是服务器为例进行详细描述,比如,如图4所示,其示出了本发明实施例所涉及的服务器的结构示意图,具体来讲:

该服务器可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403、输入模块404以及通信模块405等部件。本领域技术人员可以理解,图4中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

处理器401是该服务器的控制中心,利用各种接口和线路连接整个sss的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。在一些实施例中,处理器401可包括一个或多个处理核心;在一些实施例中,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。

存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。

服务器还包括给各个部件供电的电源403,在一些实施例中,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

该服务器还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

该服务器还可包括通信模块405,在一些实施例中通信模块405可以包括无线模块,服务器可以通过该通信模块405的无线模块进行短距离无线传输,从而为用户提供了无线的宽带互联网访问。比如,该通信模块405可以用于帮助用户收发电子邮件、浏览网页和访问流式媒体等。

尽管未示出,服务器还可以包括显示单元等,在此不再赘述。具体在本实施例中,服务器中的处理器401会按照如下的指令,将一个或一个以上的应用程序的线程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:

响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;

当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,

当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;

当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

由上可知,在本申请实施例中,响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

在本发明中,在迁移目标对象的数据时,先将目标对象的全量数据迁移至目的存储端,在此期间,访问目标对象的目标访问请求仍然被路由至源存储端,源存储端并不拒绝目标访问请求,因此目标对象会产生增量数据;然后在目标对象的全量数据同步完成后,将目标对象的增量数据同步至目的存储端,并在进行增量数据同步后,将访问目标对象的目标访问请求缓存至缓存中,直至源存储端和目的存储端中目标对象的数据完全一致后,即目标对象的增量数据同步完成后,将目标对象的访问路由的终点修改为目的存储端,以使后续新的访问目标对象的访问请求被路由至目的存储端进行处理,并将缓存中的目标访问请求发送至目的存储端,以使目的存储端处理目标访问请求,从而使得数据侧不停止线上服务地完成目标对象的迁移,能够持续为访问目标对象的访问请求提供服务。由此,本方案可以提升数据侧的服务能力和用户侧的用户体验。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种数据迁移方法中的步骤。例如,该指令可以执行如下步骤:

响应于触发的数据迁移指令,将存储在源存储端中的目标对象的全量数据复制至目的存储端;

当所述目标对象的全量数据复制完成后,将所述源存储端中的所述目标对象的增量数据同步至所述目的存储端,所述增量数据是所述目标对象的全量数据复制开始的时刻以后所述目标对象新增加的更新数据;以及,

当所述目标对象的增量数据同步开始后,将目标访问请求存储至缓存中,所述目标访问请求是访问所述目标对象且路由终点指向所述源存储端的访问请求;

当所述目标对象的增量数据同步完成后,将所述目标对象的访问路由的终点修改为所述目的存储端,以及,将所述缓存中的目标访问请求发送至所述目的存储端,以使所述目的存储端处理所述目标访问请求。

其中,该存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、磁盘或光盘等。

根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中提供的数据迁移方面或者数据迁移方面的各种可选实现方式中提供的方法。

由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种数据迁移方法中的步骤,因此,可以实现本发明实施例所提供的任一种数据迁移方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

以上对本发明实施例所提供的一种数据迁移方法、装置、电子设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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