一种动态扩缩容的数据迁移方法、设备、系统和介质转让专利

申请号 : CN202210766267.6

文献号 : CN115118604B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘明

申请人 : 杭州宇信数字科技有限公司

摘要 :

本发明实施例提供一种动态扩缩容的数据迁移方法、设备、系统和介质,该方法包括:确定待迁移分片路由映射表,包括一个或多个待迁移分片;根据待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片,循环执行封锁操作、迁移操作以及解锁操作,直至待迁移分片路由映射表中不存在等待迁移的待迁移分片;封锁操作包括根据当前迁移分片,封锁执行交易;迁移操作包括在封锁执行交易后,迁移当前迁移分片;解锁操作包括在完成当前迁移分片的数据迁移后,解锁执行交易。该方法通过采用分片路由映射表,多个层面的封锁交易的方式,能够实现对业务系统的应用并同时对数据节点动态扩缩容处理,保证对IT系统客户的业务交易无影响。

权利要求 :

1.一种动态扩缩容的数据迁移方法,其特征在于,所述方法包括:确定待迁移分片路由映射表,所述待迁移分片路由映射表包括一个或多个待迁移分片;

根据所述待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片,循环执行封锁操作、迁移操作以及解锁操作,直至所述待迁移分片路由映射表中不存在等待迁移的待迁移分片;

其中,所述封锁操作包括:根据所述当前迁移分片,封锁执行交易;所述迁移操作包括:在封锁所述执行交易后,迁移所述当前迁移分片;所述解锁操作包括:在完成所述当前迁移分片的数据迁移后,解锁所述执行交易;

所述确定待迁移分片路由映射表,包括:

根据当前活动分区的当前分片容器和各所述当前分片容器包含的分片,确定当前分片路由映射表;

根据所述当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表;

根据所述当前分片路由映射表和所述目标分片路由映射表,确定所述待迁移分片路由映射表;

所述根据所述当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表,具体包括:根据所述当前分片路由映射表,确定所述当前分片容器包含的分片个数的平均值;

将所述当前分片容器按照各所述分片容器包含的分片个数依次排序;

根据扩缩容任务以及所述分片个数的平均值,依次根据所述当前分片容器的排序确定所述当前分片容器中的分片与所述目标分片容器对应的迁移方向,并确定所述目标分片路由映射表。

2.根据权利要求1所述的动态扩缩容的数据迁移方法,其特征在于,所述根据所述当前迁移分片,封锁执行交易,包括:根据所述当前迁移分片,执行第一阶段交易封锁,所述第一阶段交易封锁包括:封锁与所述当前迁移分片相关的对外交易入口,并且延迟N秒等待正在执行中的交易处理完毕;

在成功执行所述第一阶段交易封锁后,执行第二阶段交易封锁,所述第二阶段交易封锁包括:分别封锁程序接口和数据库中与所述当前迁移分片相关的数据处理。

3.根据权利要求2所述的动态扩缩容的数据迁移方法,其特征在于,所述对外交易入口包括内部网关和外部网关;

所述封锁与所述当前迁移分片相关的对外交易入口,包括:对于所述当前迁移分片相关的所述内部网关和所述外部网关,封锁所有新发起的与分片数据修改相关的交易请求。

4.根据权利要求3所述的动态扩缩容的数据迁移方法,其特征在于,所述对外交易入口还包括对外消息队列和批处理任务;

所述封锁与所述当前迁移分片相关的对外交易入口,还包括:对于所述对外消息队列,在消息生产端通过所述待迁移分片路由映射表来封锁交易;

对于当前正在执行的批处理任务,通过在批处理方法切面中作封锁处理,并封锁新的批处理任务。

5.根据权利要求1所述的动态扩缩容的数据迁移方法,其特征在于,所述在封锁所述执行交易后,迁移所述当前迁移分片,具体包括:根据数据库表复制程序对所述当前迁移分片的分片数据执行库到库的数据复制,完成所述分片数据从当前分片容器到目标分片容器的复制;

若复制成功,则清除所述当前分片容器中的所述当前迁移分片的分片数据;

若复制失败,则终止当前操作,自动清除已迁移至新容器的数据。

6.根据权利要求2所述的动态扩缩容的数据迁移方法,其特征在于,在所述完成所述当前迁移分片的数据迁移后,解锁所述执行交易,包括:完成所述当前迁移分片的数据迁移后,执行第一阶段交易解锁,所述第一阶段交易解锁包括:首先解除对所述数据库的封锁,并删除所述当前迁移分片对应的所有数据记录;然后再解除对所述程序接口的封锁,从所述待迁移分片路由映射表中移除所述当前迁移分片,并且开放所述当前迁移分片的当前分片因子所对应交易的管制;

在成功执行所述第一阶段交易解锁后,执行第二阶段交易解锁,所述第二阶段交易解锁包括:解除对所述对外交易入口的封锁,并更新迁移处理状态。

7.根据权利要求1所述的动态扩缩容的数据迁移方法,其特征在于,在每一次执行所述依次选择各待迁移分片作为当前迁移分片之前还包括:判断当前执行状态是否满足迁移条件;

若满足迁移条件,则执行所述依次选择各待迁移分片作为当前迁移分片;

若不满足迁移条件,则自动暂停迁移处理,保存所述执行状态后挂起当前迁移任务,等到下一个迁移周期再返回执行所述判断当前执行状态是否满足迁移条件的步骤。

8.根据权利要求7所述的动态扩缩容的数据迁移方法,其特征在于,所述判断当前执行状态是否满足迁移条件,包括:判断当日剩余的迁移时间窗口是否充足;

和/或,判断当前迁移过程是否无异常。

9.一种动态扩缩容的数据迁移系统,其特征在于,包括:分片路由确定模块,用于确定待迁移分片路由映射表,所述待迁移分片路由映射表包括一个或多个待迁移分片;以及,分片迁移处理模块,用于根据所述待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片;依次控制封锁子模块、迁移子模块以及解锁子模块循环执行,直至所述待迁移分片路由映射表中不存在等待迁移的待迁移分片;

所述封锁子模块,用于根据所述当前迁移分片,封锁执行交易;

所述迁移子模块,用于在封锁所述执行交易后,迁移所述当前迁移分片;

所述解锁子模块,用于在完成所述当前迁移分片的数据迁移后,解锁所述执行交易;

所述分片路由确定模块,具体用于:

根据当前活动分区的当前分片容器和各所述当前分片容器包含的分片,确定当前分片路由映射表;

根据所述当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表;

根据所述当前分片路由映射表和所述目标分片路由映射表,确定待迁移分片路由映射表;

其中,所述根据所述当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表,具体包括:根据所述当前分片路由映射表,确定所述当前分片容器包含的分片个数的平均值;

将所述当前分片容器按照各所述分片容器包含的分片个数依次排序;

根据扩缩容任务以及所述分片个数的平均值,依次根据所述当前分片容器的排序确定所述当前分片容器中的分片与所述目标分片容器对应的迁移方向,并确定所述目标分片路由映射表。

10.根据权利要求9所述的系统,其特征在于,所述封锁子模块,具体用于:根据所述当前迁移分片,执行第一阶段交易封锁,第一阶段交易封锁包括:封锁与当前迁移分片相关的对外交易入口,并且延迟N秒等待正在执行中的交易处理完毕;

在成功执行第一阶段交易封锁后,执行第二阶段交易封锁,第二阶段交易封锁包括:分别封锁程序接口和数据库中与当前迁移分片相关的数据处理。

11.一种计算机设备,其特征在于,其包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至8中任一所述的动态扩缩容的数据迁移方法。

12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至8中任一所述的动态扩缩容的数据迁移方法。

说明书 :

一种动态扩缩容的数据迁移方法、设备、系统和介质

技术领域

[0001] 本发明涉及互联网相关技术领域,尤其是涉及一种动态扩缩容的数据迁移方法、设备、系统和介质。

背景技术

[0002] 随着互联网业务范围不断快速扩展,企业所部署的分布式系统的业务访问量、交易量、数据量会随着多种因素不断的波动,这其中包括数据量的陡增以及随着业务变化数据量放缓。因此需要对分布式系统进行动态的扩容或缩容,同时对已存储的数据进行动态迁移。
[0003] 为让IT系统能随时让硬件资源投入与活跃业务数据量的变化相匹配,则必须让IT系统具有动态横向扩展或收缩的能力,确保在不停止服务、不影响正常业务的前提下,完成主机节点增减。当前IT业内的数据分片方案完全依赖分布式数据库(如TiDB、GoldenDB),以及相关中间件(Shardingsphere、MyCat)。其在应用过程中普遍存在数据节点扩缩容处理复杂,且扩缩容过程对应用不透明业务不可控,特别是数据涉及范围、处理进度、异常处理等方面,会给运维带来较大的负担。

发明内容

[0004] 针对上述问题,本发明实施例的一个目的是提供一种动态扩缩容的数据迁移方法、设备、系统和介质,以结合实际业务需求,实现对应用以及数据节点作横向扩缩容的目标。
[0005] 为达上述目的,第一方面,本发明实施例提供了一种动态扩缩容的数据迁移方法,包括:
[0006] 确定待迁移分片路由映射表,所述待迁移分片路由映射表包括一个或多个待迁移分片;
[0007] 根据所述待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片,循环执行封锁操作、迁移操作以及解锁操作,直至所述待迁移分片路由映射表中不存在等待迁移的待迁移分片;
[0008] 其中,所述封锁操作包括:根据当前迁移分片,封锁执行交易;所述迁移操作包括:在封锁执行交易后,迁移当前迁移分片;所述解锁操作包括:在完成当前迁移分片的数据迁移后,解锁执行交易。
[0009] 进一步地,确定待迁移分片路由映射表,包括:
[0010] 根据当前活动分区的当前分片容器和各当前分片容器包含的分片,确定当前分片路由映射表;
[0011] 根据当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表;
[0012] 根据当前分片路由映射表和目标分片路由映射表,确定待迁移分片路由映射表。
[0013] 进一步地,根据当前分片路由映射表和目标分片容器,确定目标分片路由映射表,具体包括:
[0014] 根据当前分片路由映射表,确定当前分片容器包含的分片个数的平均值;
[0015] 将当前分片容器按照各分片容器包含的分片个数依次排序;
[0016] 根据扩缩容任务以及分片个数的平均值,依次根据当前分片容器的排序确定当前分片容器中的分片与目标分片容器对应的迁移方向,并确定目标分片路由映射表。
[0017] 进一步地,根据当前迁移分片,封锁执行交易,包括:
[0018] 根据当前迁移分片,执行第一阶段交易封锁,第一阶段交易封锁包括:封锁与当前迁移分片相关的对外交易入口,并且延迟N秒等待正在执行中的交易处理完毕;
[0019] 在成功执行第一阶段交易封锁后,执行第二阶段交易封锁,第二阶段交易封锁包括:分别封锁程序接口和数据库中与当前迁移分片相关的数据处理。
[0020] 进一步地,对外交易入口包括内部网关和外部网关;
[0021] 封锁与当前迁移分片相关的对外交易入口,包括:
[0022] 对于当前迁移分片相关的内部网关和外部网关,封锁所有新发起的与分片数据修改相关的交易请求。
[0023] 进一步地,对外交易入口还包括对外消息队列和批处理任务;
[0024] 封锁与当前迁移分片相关的对外交易入口,还包括:
[0025] 对于对外消息队列,在消息生产端通过所述待迁移分片路由映射表来封锁交易;
[0026] 对于当前正在执行的批处理任务,通过在批处理方法切面中作封锁处理,并封锁新的批处理任务。
[0027] 进一步地,在封锁所述执行交易后,迁移所述当前迁移分片,具体包括:
[0028] 根据数据库表复制程序对当前迁移分片的分片数据执行库到库的数据复制,完成分片数据从当前分片容器到目标分片容器的复制,
[0029] 若复制成功,则清除当前分片容器中的当前迁移分片的分片数据;
[0030] 若复制失败,则终止当前操作,自动清除已迁移至新容器的数据。
[0031] 进一步地,在完成当前迁移分片的数据迁移后,解锁执行交易,包括:
[0032] 完成当前迁移分片的数据迁移后,执行第一阶段交易解锁,所述第一阶段交易解锁包括:首先解除对数据库的封锁,并删除当前迁移分片对应的所有数据记录;然后再解除对程序接口的封锁,从待迁移分片路由映射表中移除当前迁移分片,并且开放当前迁移分片的当前分片因子所对应交易的管制;
[0033] 在成功执行第一阶段交易解锁后,执行第二阶段交易解锁,第二阶段交易解锁包括:解除对对外交易入口的封锁,并更新迁移处理状态。
[0034] 进一步地,在每一次执行依次选择各待迁移分片作为当前迁移分片之前还包括:
[0035] 判断当前执行状态是否满足迁移条件;
[0036] 若满足迁移条件,则执行依次选择各待迁移分片作为当前迁移分片;
[0037] 若不满足迁移条件,则自动暂停迁移处理,保存执行状态后挂起当前迁移任务,等到下一个迁移周期再返回执行判断当前执行状态是否满足迁移条件的步骤。
[0038] 进一步地,判断当前执行状态是否满足迁移条件,包括:
[0039] 判断当日剩余的迁移时间窗口是否充足;
[0040] 和/或,判断当前迁移过程是否无异常。
[0041] 第二方面,本发明实施例提供了一种动态扩缩容的数据迁移系统,包括:
[0042] 分片路由确定模块,用于确定待迁移分片路由映射表,待迁移分片路由映射表包括一个或多个待迁移分片;以及,
[0043] 分片迁移处理模块,用于根据待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片;依次控制封锁子模块、迁移子模块以及解锁子模块循环执行,直至待迁移分片路由映射表中不存在等待迁移的待迁移分片;
[0044] 封锁子模块,用于根据当前迁移分片,封锁执行交易;
[0045] 迁移子模块,用于在封锁执行交易后,迁移当前迁移分片;
[0046] 解锁子模块,用于在完成当前迁移分片的数据迁移后,解锁执行交易。
[0047] 进一步地,分片路由确定模块,具体用于:
[0048] 根据当前活动分区的当前分片容器和各所述当前分片容器包含的分片,确定当前分片路由映射表;
[0049] 根据所述当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表;
[0050] 根据所述当前分片路由映射表和所述目标分片路由映射表,确定待迁移分片路由映射表。
[0051] 进一步地,封锁子模块,具体用于:
[0052] 根据所述当前迁移分片,执行第一阶段交易封锁,第一阶段交易封锁包括:封锁与当前迁移分片相关的对外交易入口,并且延迟 N 秒等待正在执行中的交易处理完毕;
[0053] 在成功执行第一阶段交易封锁后,执行第二阶段交易封锁,第二阶段交易封锁包括:分别封锁程序接口和数据库中与当前迁移分片相关的数据处理。
[0054] 第三方面,本发明实施例提供了一种计算机设备,包括:
[0055] 一个或多个处理器;
[0056] 存储装置,用于存储一个或多个程序;
[0057] 当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述所述的动态扩缩容的数据迁移方法。
[0058] 第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的任意一种动态扩缩容的数据迁移方法。
[0059] 本发明实施例提供的动态扩缩容的数据迁移方法、设备、系统及计算机可读存储介质,具有如下有益效果:
[0060] 为保证扩缩容时数据迁移操作能最大限度不影响日间交易,采用一次只迁移一个分片数据,并封锁该分片对应服务的方式,避免在扩缩容封锁过程中停止所有服务,有效减少了因扩缩容过程影响的交易请求。
[0061] 为保证开始迁移分片数据时,能正常封锁新交易的发生,采用两阶封锁的方式进行,第一阶段的完全交易封锁直接在各个网关层处理,第二阶段的交易封锁分为在API与数据库两个层面进行处理。通过多个层面的封锁交易,尽可能保证正在迁移的数据的正确性与完整性。交易封锁尽可能在交易链靠前部执行,以减少封锁过程中各种异常场景复杂程度,同时也减少对客户体验影响。
[0062] 通过本发明实施例提供的动态扩缩容的数据迁移方法、设备、系统及计算机可读存储介质,能够实现对业务系统的应用以及数据节点动态扩缩容处理,提供了数据范围控制、扩缩容进度控制、可中断可回滚等特性,并保证对IT系统客户的业务交易无影响,对系统运维人员可控的目标。

附图说明

[0063] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0064] 图1是根据本发明实施例的动态扩缩容的数据迁移方法的示意性控制框图;
[0065] 图2是根据本发明实施例的动态扩缩容的数据迁移方法的示意性流程图;
[0066] 图3是图2中步骤S1对应操作的优选方式示意性流程图;
[0067] 图4是图3中步骤S12对应操作的优选方式示意性流程图;
[0068] 图5是根据本发明实施例的动态扩缩容的数据迁移方法的分片迁移示意图;
[0069] 图6是根据本发明实施例的步骤S21对应操作的优选方式的示意性流程图;
[0070] 图7是根据本发明实施例的步骤S23对应操作的优选方式的示意性流程图;
[0071] 图8是根据本发明实施例的动态扩缩容的数据迁移系统的结构示意图;
[0072] 图9是根据本发明实施例的扩缩容控制中心与周边业务服务以及基础支撑服务之间的应用场景示意图;
[0073] 图10是根据本发明实施例的计算机设备的示意性框图。

具体实施方式

[0074] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0075] 为了更好地理解本发明,下面结合图1至图10对本发明实施例提供的动态扩缩容的数据迁移方法、设备、系统及计算机可读存储介质进行详细描述。应注意,这些实施例并不是用来限制本发明公开的范围。
[0076] 图1是根据本发明实施例的动态扩缩容的数据迁移方法的示意性控制框图,图2是根据本发明实施例的动态扩缩容的数据迁移方法的示意性流程图,如图1和图2所示,本发明实施例的动态扩缩容的数据迁移方法可以应用于分布式系统中,具体的,所述动态扩缩容的数据迁移方法可配置于扩缩容控制中心。如图2所示,该方法具体可以包括:
[0077] 步骤S1:确定待迁移分片路由映射表,其包括一个或多个待迁移分片。
[0078] 具体的,在开始扩缩容时,通过扩缩容控制中心的配置中心,重新设定当前活动分区个数,开启扩缩容开关,激活分片容器的扩缩容任务。
[0079] 根据从配置中心获取到的当前分片容器个数,以及本次扩缩容所设定目标分片容器个数,确定需要迁移的待迁移分片路由映射表。其中,根据待迁移分片路由映射表可以得出哪些分片需要从已有分片容器迁移至其他分片容器中,对于扩容任务是迁移至新增分片容器,对于缩容任务则是从要释放的分片容器迁移至另一个已有分片容器。并以此为基础生成本次扩缩容的迁移任务明细清单,生成迁移任务明细清单的任务可由人工启动,后续步骤将依据此迁移任务明细清单中所列的任务,逐一分片地对数据进行迁移处理。
[0080] 具体的,如图1所述,在激活分片容器的扩缩容任务之后,确定激活分区与更新配置,从所确定的待迁移分片路由映射表中选取一个待迁移分片作为当前迁移分片。进行分片数据迁移之前,首先对当前迁移分片相关的网关封锁交易,之后再对当前迁移分片相关的各服务封锁分片交易,确定封锁完成后,再对当前迁移分片进行迁移。分片数据迁移完成后,首先对当前迁移分片相关的各服务解锁分片交易,再对当前迁移分片相关的网关解锁交易。完成解锁后,判断待迁移分片路由映射表中是否还存在待迁移分片,即是否尚有未迁移的分片,若存在,则继续判断当前执行状态是否满足迁移条件,若满足,则继续重新选取一个待迁移分片作为新的当前迁移分片,执行分片迁移任务;若不满足,则自动暂停迁移处理,保存所述执行状态后挂起当前任务,等待下一个迁移周期再重新继续确定所述当前迁移分片,并继续执行所述分片迁移任务。若待迁移分片路由映射表中已不存在待迁移分片,则扩缩容完毕。
[0081] 可选的,在一个实施例中,如图3所示,步骤S1具体可以包括:
[0082] S11:根据当前活动分区的当前分片容器和各当前分片容器包含的分片,确定当前分片路由映射表。
[0083] 表1
[0084]
[0085] 具体的,根据从配置中心获取的当前分片容器个数以及各分片容器包含的分片确定当前分片路由映射表,如表1所示,为部分分片路由映射表,表1示意性表示了当分片容器个数为4个时,对应不同的分片容器个数的四种不同情况。其中,分片路由映射表包括插槽ID与分片容器ID的映射关系。每一个数据分片对应一个插槽ID,总的插槽ID数由系统设置,为满足所有数据分片均能成功配置插槽ID,插槽ID数一般设置为远超过数据分片的个数。
[0086] S12:根据当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表。
[0087] 可选的,在本发明的一个实施例中,如图4所示,步骤S12具体可以包括:
[0088] S121:根据当前分片路由映射表,确定当前分片容器包含的分片个数的平均值。具体地,通过当前分片路由映射表,计算出当前活动分区的多个分片容器所包含的分片个数的平均值。例如,当前活动分区中包含n个分片容器,每个分片容器中包含的分片个数分别为M1,M2,...,Mn,则分片个数的平均值为:
[0089] ;
[0090] 其中,M取整数。
[0091] S122:将当前分片容器按照各分片容器包含的分片个数依次排序;
[0092] S123:根据扩缩容任务以及分片个数的平均值,依次根据当前分片容器的排序确定当前分片容器中的分片与目标分片容器对应的迁移方向,并确定目标分片路由映射表。
[0093] 具体的,对于扩容任务:(1)将当前分片容器按照各分片容器包含的分片个数由高到低依次排序,并按照分片个数由高到低的次序选择分片容器。(2)优先选取大于分片平均值且余数多的分片容器,依次按照排序从所选取的分片容器中循环地选取分片作为待迁移分片,其中,每次从一个所选取的分片容器中可以选取一个或多个分片作为待迁移分片,并按照排列顺序依次循环从多个分片容器中选取待迁移分片。(3)将所选取的待迁移分片依次对应到计划活动分区中的目标分片容器。将分片从分片数多的分片容器,向新增的分片容器或分片数少的分片容器中对应移动映射,使映射到目标分片容器中的分片个数尽量均匀分布。(4)根据待迁移分片与目标分片容器对应的移动映射关系,生成对应的目标分片路由映射表,直到目标分片路由映射表中新的分片容器中的分片数达到平均值或已无分片可迁移。
[0094] 针对缩容任务:(1)将当前分片容器按照各分片容器包含的分片个数由低到高依次排序,并按照分片个数由低到高的次序选择分片容器。(2)优先选取小于分片平均值的分片容器,依次按照排序从所选取的分片容器中循环的选取分片作为待迁移分片,其中,每次从一个所选取的分片容器中可以选取一个或多个分片作为待迁移分片,并按照排列顺序依次循环从多个分片容器中选取待迁移分片。(3)将所选取的待迁移分片依次对应到计划活动分区中的目标分片容器。将分片从分片数少的分片容器,向分片数不足分片平均值的分片容器中对应移动映射,使映射到目标分片容器中的分片个数尽量均匀分布。(4)根据待迁移分片与目标分片容器对应的移动映射关系,生成对应的目标分片路由映射表,直到目标分片路由映射表中分片容器中的分片数达到平均值或已无分片可迁移。
[0095] 具体的,图5是根据本发明实施例的动态扩缩容的数据迁移方法的分片迁移示意图,如图5所示,在扩容任务的迭代计算过程中,由步骤1中的一个分片容器A中包括的数据分片D1‑D8,可以扩容至步骤6中的分片容器A至分片容器F,且8个数据分片均匀地分布在扩容后的多个分片容器中。
[0096] 首先,由步骤1到步骤2,分片容器A中的8个数据分片分别选取分片D5,D6,D7,D8,迁移至分片容器B中,其中,当前的数据分片的迁移为迭代计算过程,不是实际的物理数据的迁移。
[0097] 在步骤3中,则分别选取分片容器A中的分片D4以及分片容器B中的D8,迁移至分片容器C中。由步骤3到步骤4,首先对分片容器A至分片容器C中的分片数量进行由高到低排序,然后依次选取较多数量的分片容器中的分片进行迁移。
[0098] 在步骤4中,分别选取分片容器A中的分片D3以及分片容器B中的分片D7作为迁移分片,迁移至新的分片容器D中,完成新的扩容,以此类推,依次循环直到步骤6,优先选取分片数多于平均值的分片容器向新的分片容器或分片数少的分片容器中迁移,并使扩容后的各个分片容器中的数据分片均匀的分布。
[0099] 在缩容任务中,由步骤6中的分片容器A至分片容器F,可以缩容至步骤1中的一个分片容器A中包括的数据分片D1‑D8。
[0100] 首先,由步骤6到步骤5,对分片容器A至分片容器F中的分片数量进行由低到高排序,然后依次选取较少数量的分片容器中的分片进行迁移。可以将分片容器F中的分片D6迁移至分片数量较少的分片容器A、分片容器B或分片容器E。
[0101] 然后,如图5所示,在步骤5中,则将分片D6迁移至分片容器B中。
[0102] 然后,由步骤5到步骤4,选取分片数量较少的分片容器A或分片容器E中的分片进行迁移,如图5所示,在步骤4中,则将分片容器E中的分片D2迁移至分片容器A中,进一步完成缩容任务,以此类推,依次循环直到步骤1,优选选取分片数少于平均值的分片容器向其他分片数少的分片容器中迁移,并使缩容后的各个分片容器中的数据分片均匀的分布。
[0103] 在图5中,分片键(ShardKey)又称为分片因子,分片因子是指用于对数据进行分片的业务字段及其值(例如客户标识号或者渠道号等),其用于计算当前业务数据应该属于哪个服务插槽、哪个分片容器。
[0104] 首先通过上述扩缩容计算,确定待移动分片以及分片容器之间的映射关系,即分片插槽ID与分片容器ID的映射关系,得到分片路由映射表,再通过分片路由映射表进行实际的物理数据迁移。
[0105] 在每次选取待迁移分片的过程中,将尽量从多个分片容器中选取待移动分片,以保证针对每个分片容器内而言,每次扩缩容所需迁移的数据量是最少。通过上述确定目标分片路由映射表的方法,能够确保分片在目标分片容器中均匀的分布,从而保持各服务器之间的所需的算力大体一致,有效的避免了硬件资源闲置,并且也便于自动化云平台对硬件资源的自动分配。通过所获得的目标分片路由映射表,存储了任意个分片容器下的分片与分片容器之间的关系,因此在扩缩容时可以直接获得从当前M个分片容器,该如何迁移分片至N个分片容器下。由于采用了分片路由映射表对数据分片与分片容器之间的关系进行存储,所以在迁移过程中可以不需要一次性必须将所有待迁移分片都完成迁移,可以通过在待迁移分片路由映射表上加标签的方式,区分出已迁移与尚未执行的分片,以实现数据的部分迁移,达到在线扩容的目标。
[0106] S13:根据当前分片路由映射表和目标分片路由映射表,确定待迁移分片路由映射表。
[0107] 具体的,通过对比当前分片路由映射表以及目标分片路由映射表的差异,将两个分片路由映射表之间的差异确定为待迁移分片路由映射表。其中,待迁移分片路由映射表也包括待迁移的数据分片与分片容器之间的映射关系。最后,按照所确定的待迁移分片路由映射表,对实际的物理数据分片进行迁移。
[0108] 步骤S2:根据待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片,循环执行如下封锁操作、迁移操作以及解锁操作,直至待迁移分片路由映射表中不存在等待迁移的待迁移分片。其中,所述封锁操作包括:根据所述当前迁移分片,封锁执行交易;所述迁移操作包括:在封锁所述执行交易后,迁移所述当前迁移分片;所述解锁操作包括:在完成所述当前迁移分片的数据迁移后,解锁所述执行交易。
[0109] 具体的,在当前确定的待迁移分片路由映射表中包含一个或多个待迁移分片,按照待迁移分片路由映射表的顺序,每次选取一个或多个待迁移分片作为当前迁移分片,优选的,可以选取一个待迁移分片作为当前迁移分片,准备开始后续扩容或者缩容的处理步骤,并且在扩缩容控制中心记录各个分片迁移执行状态数据,例如当前正在迁移哪个分片,还有哪些分片未迁移。并循环执行如下封锁操作、迁移操作以及解锁操作,直至待迁移分片路由映射表中不存在等待迁移的待迁移分片。
[0110] 在一些实施例中,步骤S2具体包括如下步骤S21、步骤S22和步骤S23:
[0111] 步骤S21:执行封锁操作,其包括根据当前迁移分片,封锁执行交易。
[0112] 可选的,封锁执行交易具体可以包括第一阶段交易封锁以及第二阶段交易封锁;在本发明的一个实施例中,如图6所示,步骤S21具体可以包括如下步骤S211和步骤S212:
[0113] S211:根据当前迁移分片,执行第一阶段交易封锁,第一阶段交易封锁包括:封锁与当前迁移分片相关的对外交易入口,并且延迟N秒等待正在执行中的交易处理完毕。
[0114] 第一阶段交易封锁属于系统入口封锁,一旦封锁成功后,将不让任何可能修改当前迁移分片的分片数据的新交易请求发生,其目地是尽量让各个服务中的在途交易,都能在数据迁移之前执行完毕。并且,让扩缩容控制中心能有足够的时间将迁移消息通知到所有服务,在第一阶段交易封锁中若当前系统不满足封锁条件,例如,当前有其它分片正在迁移过程中,或迁移的时间窗口已达到,或在执行过程中发生了异常,则自动解锁。
[0115] 对外交易入口可以包括内部网关和外部网关,封锁与当前迁移分片相关的对外交易入口,可以包括:对于当前迁移分片相关的内部网关以及外部网关,封锁所有新发起的与分片数据修改相关的交易请求。
[0116] 具体的,扩缩容控制中心在变更完活动参数时,发送封锁指令至各个交易网关服务,完全封闭与当前迁移分片的分片数据处理相关的所有交易,尤其是根据URL来匹配的更新类交易,避免新交易请求发生。并且,延迟N秒等待正在执行中的交易处理完毕,然后启动后续处理步骤。其中,这里的网关是指系统的入口之处,并非Zuul、BSP之类的特定网关,但无论何种网关,均需要能支持与配置中心的整合,具体的,可以选择Apollo为扩缩容控制中心内部的配置中心。
[0117] 为尽量减少扩缩容时对日常交易的影响,此时在网关上只封锁所有新发起的与当前迁移分片的分片数据修改相关的交易请求,并不封锁所有的服务。为有效区分交易请求,在网关上使用特定的交易封锁过滤器,例如ServletFilter,其通过URL配置项,例如URL通配定义与清单定义,来实现拦截并封锁交易请求。对于不在拦截范围内的交易请求,确保正常执行不受影响。
[0118] 对外交易入口还可以包括对外消息队列和批处理任务,封锁与当前迁移分片相关的对外交易入口,还可以包括:
[0119] 对于直接作为对外系统入口的对外消息队列,在消息生产端通过待迁移分片路由映射表来封锁交易。
[0120] 具体的,对于直接作为对外系统入口的消息队列,例如直接读取第三方文件或数据再进队列,其中,不包括系统内部服务间的内部消息队列,也不包括消息是经过网关处理后再入列的队列,在消息生产方通过消息入队处理的分片路由来封锁交易,确保在切换时不会有错误的消息投递处理。对于在消息队列生产端,对发送消息方法切面中作封锁处理,其中,所述发送消息方法切面即通过特定注解,在发送消息队列中标识出哪些是外系统的入口队列,并针对所标识的入口队列进行封锁,通过采用发送消息方法切面能够实现对当前的消息队列无侵入的封锁。当收到扩缩容控制中心发送的开始扩缩容开关变更为ON时,则直接通过抛出异常拒绝新消息继续入队处理。对于消息的消费端,在收到开始扩缩容开关更为ON时不作处理,让服务继续处理完毕,等待后续进行第二阶段交易封锁时再处理。对于系统内部服务间的消息队列,在第一阶段不作封锁,以尽量让其运行完毕。
[0121] 对于当前正在执行的批处理任务,通过在批处理方法切面中作封锁处理,并封锁新的批处理任务。
[0122] 具体的,当开始扩缩容开关变更为ON时,新的批处理任务不能启动,同时,如果当前有正执行的批处理任务且尚未完成,则不返回交易封锁成功标识,等待后续人员处理。通过在批处理任务的批处理方法切面中作封锁处理,其中,所述批处理方法切面即通过特定注解,在批处理任务中标识出哪些是外系统的入口,并针对所标识的入口进行封锁,通过采用批处理方法切面能够实现对当前的批处理任务无侵入的封锁。
[0123] 当开始扩缩容开关变更为ON时,将在系统各个服务所有对外交易入口进行交易封锁,包括对内部网关(UI页面)、外部网关、对外消息队列、批处理任务的封锁。但对于系统内部服务与服务之间的交易不作封锁,包括实时交易请求、以及内部服务间的消息队列,以避免影响在途交易能正常执行结束。
[0124] 在这一过程由系统管理人员在扩缩容控制中心界面上开启处理,在各个交易入口服务接收到开始扩缩容开关变更为ON时,自动触发执行封锁,交易入口服务在执行封锁成功之后,再将其已封锁状态反馈回到扩缩容控制中心中,使得扩缩容控制中心能准确判定封锁是否成功,并以此为条件来触发后续步骤。
[0125] 针对于上述所有交易形态,当在规定时间内,无法完成所有网关均实现第一阶段交易封锁时,扩缩容控制中心将判定扩缩容失败,自动重新放开所有网关的封锁,并记录相应操作日志。同时需要人工介入处理,将开始扩缩容开关状态变更为OFF,确认交易封锁的失败原因并排除,然后再重新开始处理。
[0126] S212:在成功执行第一阶段交易封锁后,执行第二阶段交易封锁,第二阶段交易封锁包括:分别封锁程序接口以及数据库中与当前迁移分片相关的数据处理。
[0127] 具体的,在第一阶段交易封锁交易成功之后,扩缩容控制中心将通知各个服务进入第二阶段交易封锁,分别从程序接口(API)与数据库(DB)两方面完全屏蔽与当前迁移分片的分片数据相关的处理。在API层将直接终止对分片号的交易处理,在DB层则调用数据库脚本,对待迁移的表生成锁定DB级写操作的触发器,确保数据在迁移期间不会被发生变化。
[0128] 第二阶段交易封锁属于对系统内部服务的深度封锁,由于微服务应用之间还有各种形式调用,且交易入口处并不一定包含分片因子,所以只封锁交易入口并不能保证内部服务间调用的封锁,其中,第二阶段交易封锁可以分为API封锁与DB封锁两个操作,通过这两个封锁之后可以保证后续交易对迁移处理过程中的数据不作任何改变,从而确保迁移前后数据的一致性。其中,分片因子指用于对数据进行分片的业务字段及其值(例如客户号、渠道号等),其用于计算当前业务数据应该属于哪个分片、哪个服务插槽、哪个分片容器。
[0129] 当前迁移分片的API封锁是第二阶段交易封锁的第一道关卡,用以保证分片迁移数据所对应的业务无论是从何处调用均不会被触发执行。API封锁是在所有交易需要获取分片路由时进行控制,即当进入第二阶段交易封锁时,通过第一阶段直接打开各个服务的第二阶段交易封锁标识,则封锁机制生效,扩缩容控制中心将判断当前发生交易是否为当前迁移分片,如果封锁机制生效且判断当前交易为当前迁移分片,则直接抛出异常终止当前交易处理。上述封锁方法可以直接在分片工具中实现,例如在ShardTools中的routeBiz方法实现,通过上述封锁方法所有关于当前迁移分片的分片容器服务的客户端均会被强制限制,直接使用异常强行阻断当前处理,对应分片容器服务的使用方需要按照下游服务异常进行处理。在整个分片扩缩容阶段中,分片工具中都将保留两份分片路由映射表,一份是扩缩容之前原始的分片路由映射表,另一份是当前已完成迁移的临时分片路由映射表,只有当所有待迁移分片迁移完毕之后,才释放临时分片路由映射表。为保证在扩缩容时不需重启正在中的运行服务,所有API接口(Restful接口)实例将在启动时提前动态生成(但其对应的服务不在运行),在系统中以备扩容时相应的服务已启动后再才能使用。
[0130] 当前迁移分片的分片DB封锁是第二阶段交易封锁的第二道关卡,用以保证当前迁移分片在迁移过程中涉及的所有数据表中的对应的记录在任何情况下都不会被修改。通过DB封锁,有效避免了与当前迁移分片不相关的交易或者分片工具对当前迁移分片的数据的修改,上述不相关的分片工具,例如不用ShardTools的工程。DB封锁是直接通过数据库触发器,来实现对当前迁移分片的表操作的封锁。
[0131] 当开启第二阶段交易封锁时,扩缩容控制中心负责为各个对应库的每张涉及分片的表,生成用于封锁的触发器3个脚本,包括新增事件、修改事件、删除事件封锁,在脚本中将根据存在的业务主表,例如借据表,根据其中的分片编号来判断当前DB操作涉及的记录是否为当前迁移分片,若为当前迁移分片则在触发器中抛出特定的自定义数据库异常,迫使应用程序终止处理。若当前迁移分片结束迁移时则只需删除表上对应的触发器脚本,即可完成对当前迁移分片的分片数据的解锁操作。
[0132] 此外,对于内部消息队列,在消息生产方,会通过当前迁移分片的API封锁机制避免新的消息进入队列,另一方面在消息消费方,当已经启动第二阶段交易封锁时,对于在队列中尚未处理的消息,若发现消息中包含的分片因子属于当前迁移分片,包括经过第一阶段交易封锁等待后仍未处理在途消息,则放入异常队列中暂不处理,或考虑仍放回原队列中,等待迁移结束后人工补偿处理。
[0133] 在所有关于当前迁移分片的相关服务的第二阶封锁成功之后,将成功状态或消息反馈到扩缩容控制中心,用以触发扩缩容的后续处理步骤。当超过一段时间仍没有更新为成功状态,则转人工处理。
[0134] 在执行扩缩容之前将对外提供的服务进行适当降级,封锁小部分客户的交易,以保证每个分片数据在迁移的性能以及迁移的正确性。由于系统中同时有多个服务在运行,所以选择使用两个阶段交易封锁的方式来尽量提升交易封锁的可靠性,即确保在封锁之后不会有任何交易去修改当前迁移分片的分片数据。
[0135] 为保证能够封锁新交易的发生,采用两阶封锁的方式对迁移分片进行的相关交易进行封锁,第一阶段的完全交易封锁直接在各个网关层处理,第二阶段的交易封锁分为在API与数据库两个层面进行处理。通过多个层面的封锁交易,尽可能保证正在迁移的数据的正确性与完整性。交易封锁尽可能在交易链靠前部执行,以减少封锁过程中各种异常场景复杂程度,同时也减少对客户体验影响。
[0136] 在一些实施例中,步骤S2具体包括步骤S22:执行迁移操作,其包括在封锁执行交易后,迁移所选取的单个当前迁移分片。
[0137] 可选的,在本发明的一个实施例中,步骤S22具体可以包括:
[0138] 根据数据库表复制程序对当前迁移分片的分片数据执行库到库的数据复制,完成分片数据从当前分片容器到目标分片容器的复制,若复制成功,则清除当前分片容器中的当前迁移分片的分片数据;若复制失败,则终止当前操作,自动清除已迁移至新容器的数据。若终止当前操作,和/或,自动清理已迁移至新容器的数据的处理动作也失败,则转人工处理。
[0139] 具体的,扩缩容控制中心在确认与当前迁移分片相关的交易已完成封锁之后,开始通过数据库表复制程序执行库到库的数据复制,其中,数据库表复制程序可以为DataX,若复制成功,则清理数据并继续处理。若复制失败则终止当前操作,并转人工处理,此时原始分片数据并未变动,因此直接恢复服务,然后目标分片容器中数据也需作必要的清理即可。其中,对于扩容任务的目标分片容器是增加新的分片容器,并对应增加新的服务器资源,而对于缩容任务,目标分片容器则对应为已有的部分当前分片容器。
[0140] 当前迁移分片对应的数据基于数据库表复制程序实现离线迁移,由于每次只迁移一个分片,所以可以保证受影响的用户数可控,以及受影响的时间可控。迁移针对已存储在业务主表中分片编号,例如借据表中的分片编号,将与该当前迁移分片的分片编号所有相关的表数据全部迁移至新的库中。
[0141] 在迁移开始之前,先基于当前迁移分片对应的业务主表,生成一张只有主表主键(例如借据号)以及分片编号两个字段的子表,例如TMP_SD_MIG_xxx,其中xxx可以为分片编号,并将当前迁移分片的主表业数据导入其中。在进行分片迁移时,无需关联查询业务主表的全量数据,只需要关联该子表查询当前迁移分片的数据即可。通过建立子表的方法一方面通过查询子表提升处理性能,另一方面也能够避免迁移处理对正常业务交易的影响。
[0142] 为保证扩缩容时,数据迁移操作能最大限度不影响日间交易,采用一次只迁移一个分片数据,并封锁该分片对应服务,避免在扩缩容封锁过程中停止所有服务,有效减少了因扩缩容过程影响的交易请求。
[0143] 在一些实施例中,步骤S2具体包括步骤S23:执行解锁操作,该解锁操作包括:在完成当前迁移分片的数据迁移后,解锁执行交易。
[0144] 可选的,解锁执行交易包括第一阶段交易解锁以及第二阶段交易解锁;在本发明的一个实施例中,如图7所示,步骤S23具体可以包括如下步骤:
[0145] S231:完成当前迁移分片的数据迁移后,执行第一阶段交易解锁,第一阶段交易解锁包括:首先解除对数据库的封锁,并删除当前迁移分片对应的所有数据记录;然后再解除对程序接口的封锁,从待迁移分片路由映射表中移除当前迁移分片,并且开放当前迁移分片的当前分片因子所对应交易的管制;
[0146] S232:在成功执行第一阶段交易解锁后,执行第二阶段交易解锁,第二阶段交易解锁包括:解除对对外交易入口的封锁,并更新迁移处理状态。
[0147] 具体的,在当前迁移分片迁移成功之后,先解除在DB层面的封锁,并删除当前分片对应的所有数据记录。然后,再解除在API层面的锁,从待迁移分片路由映射表中移除当前迁移分片,完全开放当前分片因子对应交易的管制。最后,解除对网关等交易入口的封锁,并更新迁移处理状态。
[0148] 可选的,根据本发明实施例提供的动态扩缩容的数据迁移方法,在每一次执行依次选择各待迁移分片作为当前迁移分片之前还包括:
[0149] 判断当前执行状态是否满足迁移条件;
[0150] 若满足迁移条件,则执行依次选择各待迁移分片作为当前迁移分片;
[0151] 若不满足迁移条件,则自动暂停迁移处理,保存执行状态后挂起当前迁移任务,等到下一个迁移周期再返回执行判断当前执行状态是否满足迁移条件的步骤。
[0152] 具体的,扩缩容控制中心判断待迁移分片路由映射表中还有尚未完成迁移的待迁移分片时,继续判断当前执行状态是否满足迁移条件,其中,包括:判断当日剩余的迁移时间窗口是否充足,和/或,判断当前迁移过程是否无异常。若当前执行状态满足迁移条件,则继续执行依次选择各待迁移分片作为当前迁移分片,并根据新确定的当前迁移分片,继续依次执行步骤S21至步骤S23,直至完成分片迁移任务。若当前执行状态不满足迁移条件,则自动暂停迁移处理,保存执行状态后挂起当前任务,等到下一个迁移周期再返回执行所述判断当前执行状态是否满足迁移条件的步骤。
[0153] 若扩缩容控制中心判断待迁移分片路由映射表中没有待迁移分片时,表明所有待迁移分片均已完成迁移,则可认为任务已结束处理,实现了系统资源的动态扩缩容。
[0154] 在本发明的一个实施例中,各个服务进程在收到扩缩容控制中心发出的扩缩容指令、成功处理指令以及失败处理指令时,在扩缩容控制中心仍使用例如配置中心(Apollo)的OpenAPI向扩缩容控制中心反馈自身的处理状态,其中包括基于Apollo本身的状态通知与存储功能,以便于扩缩容控制中心能准确实时掌握情况,用以决定后续的步骤处理。
[0155] 扩缩容控制中心通过例如配置中心的变更侦听接口,收集各服务进程的反馈状态,其中,反馈状态包括:
[0156] (1)是否收到变容基本参数(扩缩容开关、目标分区数、当前迁移分片ID);
[0157] (2)A1:是否收到第一阶段交易封锁消息;
[0158] (3)A2:第一阶段交易封锁是否成功;
[0159] (4)A3:是否收到第二阶段交易封锁消息;
[0160] (5)A4:API封锁是否成功;
[0161] (6)A5:DB封锁是否成功;
[0162] (7)A6:迁移是否成功;
[0163] (8)A7:解锁是否成功;
[0164] 各服务反馈信息或消息将直接记录在例如配置中心(Apollo)中的命名空间(Namespace)内,扩缩容控制中心通过定时监控命名空间(Namespace),获取各个服务的反馈状态,来甄别分片迁移过程的整体状态。例如,在当前的反馈状态处于A2阶段,其影响各服务的活动个数为N时,其中N= Σ(各服务在A1阶段影响的活动进程数),只有收到上述N个A1阶段信息为确认状态才能确定第一阶段交易封锁已执行完毕,并将A2阶段信息表示为确认状态。其中一个服务有多少个活动进程通过注册中心(Eureka)获取。
[0165] 上文描述了根据本发明实施例的动态扩缩容的数据迁移方法,下面分别结合图8至图10描述根据本发明实施例的动态扩缩容的数据迁移系统及计算机设备。
[0166] 图8是根据本发明实施例的动态扩缩容的数据迁移系统的结构示意图。该动态扩缩容的数据迁移系统200例如可以应用于图9中所示的应用场景中。如图8所示,动态扩缩容的数据迁移系统200包括:
[0167] 分片路由确定模块210,用于确定待迁移分片路由映射表,其包括一个或多个待迁移分片;以及,
[0168] 分片迁移处理模块220,用于根据待迁移分片路由映射表依次选择各待迁移分片作为当前迁移分片;依次控制封锁子模块221、迁移子模块222以及解锁子模块223循环执行,直至待迁移分片路由映射表中不存在等待迁移的待迁移分片;
[0169] 封锁子模块221,用于根据待迁移分片路由映射表,封锁执行交易;
[0170] 迁移子模块222,用于封锁执行交易后,迁移当前迁移分片;
[0171] 解锁子模块223,用于完成当前迁移分片的数据迁移后,解锁执行交易。
[0172] 可选的,在本发明的一个实施例中,分片路由确定模块210具体用于:
[0173] 根据当前活动分区的当前分片容器和各当前分片容器包含的分片,确定当前分片路由映射表;
[0174] 根据当前分片路由映射表和计划活动分区的目标分片容器,确定目标分片路由映射表;
[0175] 根据当前分片路由映射表和目标分片路由映射表,确定待迁移分片路由映射表。
[0176] 可选的,在本发明的一个实施例中,分片路由确定模块210具体还用于:
[0177] 根据当前分片路由映射表,确定当前分片容器包含的分片个数的平均值;
[0178] 将当前分片容器按照各分片容器包含的分片个数依次排序;
[0179] 根据扩缩容任务以及分片个数的平均值,依次根据当前分片容器的排序确定当前分片容器中的分片与目标分片容器对应的迁移方向,并确定目标分片路由映射表。
[0180] 可选的,在本发明的一个实施例中,封锁子模块221具体用于:
[0181] 根据当前迁移分片,执行第一阶段交易封锁,第一阶段交易封锁包括:封锁与当前迁移分片相关的对外交易入口,并且延迟N秒等待正在执行中的交易处理完毕;
[0182] 在成功执行第一阶段交易封锁后,执行第二阶段交易封锁,第二阶段交易封锁包括:分别封锁程序接口和数据库中与当前迁移分片相关的数据处理。
[0183] 其中,可选的,对外交易入口包括内部网关和外部网关;
[0184] 封锁与当前迁移分片相关的对外交易入口,包括:对于当前迁移分片相关的内部网关和外部网关,封锁所有新发起的与分片数据修改相关的交易请求。
[0185] 其中,可选的,对外交易入口还包括对外消息队列和批处理任务;
[0186] 封锁与当前迁移分片相关的对外交易入口,还包括:对于对外消息队列,在消息生产端通过分片路由来封锁交易;对于当前正在执行的批处理任务,通过在批处理方法切面中作封锁处理,并封锁新的批处理任务。
[0187] 可选的,在本发明的一个实施例中,迁移子模块222具体用于:
[0188] 根据数据库表复制程序对当前迁移分片的分片数据执行库到库的数据复制,完成分片数据从当前分片容器到目标分片容器的复制;
[0189] 若复制成功,则清除当前分片容器中的当前迁移分片的分片数据;
[0190] 若复制失败,则终止当前操作,自动清除已迁移至新容器的数据。
[0191] 可选的,在本发明的一个实施例中,解锁子模块223具体用于:
[0192] 完成当前迁移分片的数据迁移后,执行第一阶段交易解锁,第一阶段交易解锁包括:首先解除对数据库的封锁,并删除当前迁移分片对应的所有数据记录;然后再解除对程序接口的封锁,从待迁移分片路由映射表中移除当前迁移分片,并且开放当前迁移分片的当前分片因子所对应交易的管制;
[0193] 在成功执行第一阶段交易解锁后,执行第二阶段交易解锁,第二阶段交易解锁包括:解除对对外交易入口的封锁,并更新迁移处理状态。
[0194] 可选的,在本发明的一个实施例中,在每一次执行依次选择各待迁移分片作为当前迁移分片之前,分片路由确定模块210具体还用于:
[0195] 判断当前执行状态是否满足迁移条件;
[0196] 若满足迁移条件,则执行依次选择各待迁移分片作为当前迁移分片;
[0197] 若不满足迁移条件,则自动暂停迁移处理,保存执行状态后挂起当前任务,等待下一个迁移周期再返回执行判断当前执行状态是否满足迁移条件的步骤。
[0198] 其中,可选的,判断当前执行状态是否满足迁移条件,包括:
[0199] 判断当日剩余的迁移时间窗口是否充足;
[0200] 和/或,判断当前迁移过程是否无异常。
[0201] 在本发明的一个实施例中,动态扩缩容的数据迁移系统中的分片路由确定模块210,分片迁移处理模块220以及解锁子模块223可以设置于扩缩容控制中心,扩缩容控制中心是一个独立的服务,用于对上述扩缩容流程进行总控与调度,过程状态存储、以及各个服务间分片数据迁移过程的整体协调处理。其包括以下功能:待迁移分片路由映射表管理、扩缩容过程监控、异常处理、消息同步、参数配置、过程状态存储。
[0202] 扩缩容控制中心与周边业务服务、以及基础支撑服务之间的逻辑关系如图9所示。扩缩容控制中心最终部署包括三个服务:
[0203] ShardCtrlMgr是扩缩容控制中心的核心服务,例如可以为动态扩缩容的数据迁移系统中的分片路由确定模块210;
[0204] ShardCtrlMgr‑Web为扩缩容控制中心的UI界面;
[0205] ShardMigrate是专用于完成数据分片迁移处理的服务,例如可以为动态扩缩容的数据迁移系统中的迁移子模块222;
[0206] 以及嵌入部署在各个服务(包括图9中的各服务器、网关和批处理任务)中负责作交易封锁和解锁、状态收集等处理的代理程序(Agent),例如可以为动态扩缩容的数据迁移系统中的封锁子模块221以及解锁子模块223。另外,扩缩容控制中心内可以使用配置中心(例如可以为开源的Apollo)、注册中心(例如可以为开源的Eureka)来实现扩缩容过程的参数同步与各分片容器服务状态感知。在图9中示意性的表示有两个数据库DB1、DB2来承载分片数据,现在将进行扩容增加一个新的数据库DB3来分担已有数据的存储。
[0207] 整个过程控制由扩缩容控制中心(ShardCtrlMgr)负责触发与过程监控,其负责将收到的系统管理员的扩缩容指令(对应于图9中的“操作”),转换成特定的标识配置项,例如扩缩容开关。然后通过配置中心 OpenAPI将上述扩缩容指令写入配置中心内指定的公共配置项分组中,并利用配置中心参数同步机制,将标识已变化的消息通知到分片容器服务的集群中的所有分片容器服务中,以触发后续的封锁处理。当分片容器服务重启后,可以从扩缩容控制中心获取各个分片数据的处理状态,以确定后续该如何处理。
[0208] 在各个分片容器服务通过内嵌的代理程序(Agent)自行侦听配置中心的消息,并从配置中心中读取指令、分片任务状态和自行作调度控制,以确保扩缩容控制中心不需要知道各个分片容器服务内部交易封锁的细节,从而降低与业务服务耦合度。
[0209] 当改变活动分区个数配置时,则需要尽快及时将参数变化的消息,推送至集群中的各个服务中去,以尽可能保持所有服务中参数的一致性。为此动态扩缩容的数据迁移系统基于配置中心的公共参数(以扩缩容控制中心为主Namespace,其他服务关联之)与配置中心的OpenAPI,向各个分片容器服务同步推送扩缩容开关、活动分区数等相关参数值。但由于不可能实现在同一时刻所有服务参数同时切换,所以在活动分区参数应用时需要严格区分当前分片容器个数、目标分片容器个数,以保证参数在切换瞬间中,所有在途交易不会因参数变化,而调用到错误的分区上。
[0210] 在扩缩容控制中心中通过配置中心接收到上述动态扩缩容的数据迁移方法确定的待迁移分片路由映射表,处理结果消息之后,初始化上述动态扩缩容的数据迁移方法中的扩缩容任务流程,按步骤启动后续处理逻辑。在从第一阶段交易封锁到第二阶段交易封锁时,也是基于配置中心推送机制通知集群中的各个服务开启封锁处理。
[0211] 当接收消息的服务在处理过程中发生重启或有新服务进程加入时,依然能够从配置中心中读取当前任务的状态,依据当前任务状态执行对应的处理,即封锁交易或解锁交易。将分片的关键参数活动分区个数不直接放在开发人员的工程配置中,而是放在配置中心中,并赋以必要的变更权限控制,以避免开发或测试时的错误配置引起不必要的问题。
[0212] 根据本发明实施例的动态扩缩容的数据迁移方法以及系统,通过采用分片路由映射表对数据分片与分片容器之间的关系进行存储,在迁移过程中能够不需要一次性完成所有待迁移分片的迁移任务,可以通过在分片路由映射表上加标签的方式,区分出已迁移与尚未执行的分片,以实现数据的部分迁移,达到在线扩容的目标。
[0213] 通过小量多次均匀的计算分片迁移路径,并以此确定分片路由映射表,确保分片均匀的分布,能保持各服务器之间的所需的算力大体一致,有效的避免了硬件资源闲置,同时也便于自动化云平台对硬件资源的自动分配。
[0214] 为保证开始迁移分片数据时,能正常封锁新交易的发生,采用两阶封锁的方式进行,第一阶段的完全交易封锁直接在各个网关层处理,第二阶段的交易封锁分为在API与数据库两个层面进行处理。通过多个层面的封锁交易,尽可能保证正在迁移的数据的正确性与完整性。交易封锁尽可能在交易链靠前部执行,以减少封锁过程中各种异常场景复杂程度,同时也减少对客户体验影响。
[0215] 为保证扩缩容时,数据迁移操作能最大限度不影响日间交易,采用一次只迁移一个分片数据,并封锁该分片对应服务的方式,避免在扩缩容封锁过程中停止所有服务,有效减少了因扩缩容过程影响的交易请求。
[0216] 为保证在扩缩容时不需重启正在中的运行服务,所有API接口(Restful接口)实例将在启动时提前动态生成(但其对应的服务不在运行),在系统中以备扩容时相应的服务已启动后再才能使用。
[0217] 通过支持断点继作,以实现任务暂停与从错误步骤开始重作。
[0218] 通过本发明实施例提供的动态扩缩容的数据迁移方法、系统及计算机设备,能够实现对业务系统的应用以及数据节点动态扩缩容处理,提供了数据范围控制、扩缩容进度控制、可中断可回滚等特性,并保证对IT系统客户的业务交易无影响,对系统运维人员可控的目标。
[0219] 本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时实现上述动态扩缩容的数据迁移方法的各步骤。
[0220] 所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0221] 图10是根据本发明实施例的计算机设备的示意性框图。该计算机设备执行动态扩缩容的数据迁移方法。如图10所示,计算机设备400包括输入设备401、输入接口402、中央处理器403、存储器404、输出接口405、以及输出设备406。其中,输入接口402、中央处理器403、存储器404、以及输出接口405通过总线410相互连接,输入设备401和输出设备406分别通过输入接口402和输出接口405与总线410连接,进而与计算机设备400的其他组件连接。
[0222] 具体地,输入设备401接收来自外部的输入信息,并通过输入接口402将输入信息传送到中央处理器403;中央处理器403基于存储器404中存储的计算机可执行指令对输入信息进行处理以生成输出信息,将输出信息临时或者永久地存储在存储器404中,然后通过输出接口405将输出信息传送到输出设备406;输出设备406将输出信息输出到计算机设备400的外部供用户使用。
[0223] 在一个实施例中,图10所示的计算机设备400可以被实现为一种动态扩缩容的数据迁移系统,该动态扩缩容的数据迁移系统可以包括:存储器,被配置为存储程序;处理器,被配置为运行存储器中存储的程序,以执行上述实施例描述的动态扩缩容的数据迁移方法。
[0224] 根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以从网络上被下载和安装,和/或从可拆卸存储介质被安装。
[0225] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令,当其在计算机上运行时,使得计算机执行上述各个实施例中描述的方法。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。
[0226] 以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0227] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使对应技术方案的本质脱离本发明各实施例技术方案的范围。