一种分布式事务的流程保障方法及装置转让专利

申请号 : CN201910580564.X

文献号 : CN110288255A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张兵夏勇

申请人 : 深圳前海微众银行股份有限公司

摘要 :

本发明实施例涉及计算机技术领域,尤其涉及一种分布式事务的流程保障方法及装置,用以解决分布式事务异常处理机制缺乏灵活性的问题。本发明实施例包括:接收调用系统发送的处理请求;根据处理请求确定主流程以及N个子流程,N≥1;针对N个子流程中的任一子流程,将子流程向对应的子系统发送,以使子系统对子流程进行处理;对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、主流程类型以及子流程类型确定对应的异常处理策略;根据异常处理策略对子流程进行异常处理,异常处理包括对已经处理成功的子流程执行非对称反向操作,非对称反向操作为执行反向子流程,反向子流程与已经处理的子流程非对称。

权利要求 :

1.一种分布式事务的流程保障方法,其特征在于,包括:接收调用系统发送的处理请求;

根据所述处理请求确定主流程以及N个子流程,N≥1;

针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;

对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略;

根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。

2.如权利要求1所述的方法,其特征在于,所述N个子流程中包括异步子流程;所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:若所述子流程为异步子流程,则以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。

3.如权利要求2所述的方法,其特征在于,所述根据所述异常处理策略对子流程进行异常处理,包括:针对所述异步子流程,执行重试处理。

4.如权利要求1所述的方法,其特征在于,所述对N个子流程的处理过程进行监控,包括:对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;

所述根据所述异常处理策略对子流程进行异常处理,包括:针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;

针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;

若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;

若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。

5.如权利要求4所述的方法,其特征在于,所述若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理,包括:间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求;

若接收到所述子系统发送的处理成功结果,则对所述超时子流程以及所述超时子流程之前的子流程执行非对称反向操作;

若接收到所述子系统发送的处理失败结果,则对所述超时子流程之前的子流程执行非对称反向操作;

若接收到所述子系统发送的处理结果不明确反馈,则执行所述间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求的步骤。

6.如权利要求1所述的方法,其特征在于,所述接收调用系统发送的处理请求,包括:统计接收到的处理请求的数量;

若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。

7.如权利要求1至6任一项所述的方法,其特征在于,所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:接收子系统反馈的响应消息;

将所述响应消息格式化,得到响应报文;

将所述响应报文向所述调用系统发送。

8.一种分布式事务的流程保障装置,其特征在于,包括:收发单元,用于接收调用系统发送的处理请求;

配置单元,用于根据所述处理请求确定主流程以及N个子流程,N≥1;

所述收发单元,还用于针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;

监控单元,用于对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略;

异常处理单元,用于根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。

9.如权利要求8所述的装置,其特征在于,所述N个子流程中包括异步子流程;所述收发单元,还用于:针对所述异步子流程,以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。

10.如权利要求9所述的装置,其特征在于,所述异常处理单元,用于针对所述异步子流程,执行重试处理。

11.如权利要求8所述的装置,其特征在于,所述监控单元,用于对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;

所述异常处理单元,用于针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。

12.如权利要求11所述的装置,其特征在于,所述异常处理单元,用于:间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求;

若接收到所述子系统发送的处理成功结果,则对所述超时子流程以及所述超时子流程之前的子流程执行非对称反向操作;

若接收到所述子系统发送的处理失败结果,则对所述超时子流程之前的子流程执行非对称反向操作;

若接收到所述子系统发送的处理结果不明确反馈,则执行所述间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求的步骤。

13.如权利要求8所述的装置,其特征在于,所述收发单元,用于:统计接收到的处理请求的数量;

若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。

14.如权利要求8至13任一项所述的装置,其特征在于,所述收发单元,用于:接收子系统反馈的响应消息;

将所述响应消息格式化,得到响应报文;

将所述响应报文向所述调用系统发送。

15.一种电子设备,其特征在于,包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7任一所述的方法。

16.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1-7任一所述方法。

说明书 :

一种分布式事务的流程保障方法及装置

技术领域

[0001] 本发明涉及金融科技(Fintech)中的计算机技术领域,尤其涉及一种分布式事务的流程保障方法及装置。

背景技术

[0002] 随着金融科技,尤其是互联网科技金融的不断发展,越来越多的技术(如分布式、区块链Blockchain、人工智能等)应用在金融领域,但金融业也对技术提出了更高的要求,如针对分布式事务的事务保障过程。
[0003] 分布式事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。
[0004] 现有得到分布式事务处理方案通常是按照从子事务失败点逆向顺序冲正的方式回滚整个前置处理逻辑,无法做到冲正逻辑的灵活性和差异性。

发明内容

[0005] 本申请提供一种分布式事务的流程保障方法及装置,用以解决分布式事务异常处理机制缺乏灵活性的问题。
[0006] 本发明实施例提供的一种分布式事务的流程保障方法,包括:
[0007] 接收调用系统发送的处理请求;
[0008] 根据所述处理请求确定主流程以及N个子流程,N≥1;
[0009] 针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;
[0010] 对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略;
[0011] 根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。
[0012] 一种可选的实施例中,所述N个子流程中包括异步子流程;所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:
[0013] 针对所述异步子流程,以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。
[0014] 一种可选的实施例中,所述根据所述异常处理策略对子流程进行异常处理,包括:
[0015] 针对所述异步子流程,执行重试处理。
[0016] 一种可选的实施例中,所述对N个子流程的处理过程进行监控,包括:
[0017] 对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;
[0018] 所述根据所述异常处理策略对子流程进行异常处理,包括:
[0019] 针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;
[0020] 针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;
[0021] 若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;
[0022] 若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。
[0023] 一种可选的实施例中,所述若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理,包括:
[0024] 间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求;
[0025] 若接收到所述子系统发送的处理成功结果,则对所述超时子流程以及所述超时子流程之前的子流程执行非对称反向操作;
[0026] 若接收到所述子系统发送的处理失败结果,则对所述超时子流程之前的子流程执行非对称反向操作;
[0027] 若接收到所述子系统发送的处理结果不明确反馈,则执行所述间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求的步骤。
[0028] 一种可选的实施例中,所述接收调用系统发送的处理请求,包括:
[0029] 统计接收到的处理请求的数量;
[0030] 若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。
[0031] 一种可选的实施例中,所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:
[0032] 接收子系统反馈的响应消息;
[0033] 将所述响应消息格式化,得到响应报文;
[0034] 将所述响应报文向所述调用系统发送。
[0035] 一种分布式事务的流程保障装置,包括:
[0036] 收发单元,用于接收调用系统发送的处理请求;
[0037] 配置单元,用于根据所述处理请求确定主流程以及N个子流程,N≥1;
[0038] 所述收发单元,还用于针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;
[0039] 监控单元,用于对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略;
[0040] 异常处理单元,用于根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。
[0041] 一种可选的实施例中,所述N个子流程中包括异步子流程;所述收发单元,还用于:
[0042] 针对所述异步子流程,以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。
[0043] 一种可选的实施例中,所述异常处理单元,用于:
[0044] 针对所述异步子流程,执行重试处理。
[0045] 一种可选的实施例中,所述监控单元,用于对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;
[0046] 所述异常处理单元,用于针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。
[0047] 一种可选的实施例中,所述异常处理单元,用于:
[0048] 间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求;
[0049] 若接收到所述子系统发送的处理成功结果,则对所述超时子流程以及所述超时子流程之前的子流程执行非对称反向操作;
[0050] 若接收到所述子系统发送的处理失败结果,则对所述超时子流程之前的子流程执行非对称反向操作;
[0051] 若接收到所述子系统发送的处理结果不明确反馈,则执行所述间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求的步骤。
[0052] 一种可选的实施例中,所述收发单元,用于:
[0053] 统计接收到的处理请求的数量;
[0054] 若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。
[0055] 一种可选的实施例中,所述收发单元,用于:
[0056] 接收子系统反馈的响应消息;
[0057] 将所述响应消息格式化,得到响应报文;
[0058] 将所述响应报文向所述调用系统发送。
[0059] 本发明实施例还提供一种电子设备,包括:
[0060] 至少一个处理器;以及,
[0061] 与所述至少一个处理器通信连接的存储器;其中,
[0062] 所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。
[0063] 本发明实施例还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上所述的方法。
[0064] 本发明实施例中,接收调用系统发送的处理请求,对处理请求进行解析,匹配出对应的主流程和N个子流程。对于N个子流程,依次将子流程向对应子系统发送,以使子系统对子流程进行处理,同时对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、主流程类型以及子流程类型确定对应的异常处理策略。根据异常处理策略对子流程进行异常处理,其中,异常处理包括对已经处理成功的子流程执行非对称反向操作,这里的非对称反向操作为执行反向子流程,且反向子流程与已经处理的子流程非对称。本发明实施例中,对子流程的异常处理可以是对称式反向操作,也可以是非对称式反向操作,可以根据实际情况和场景灵活设置异常处理策略,从而灵活地解决分布式事务异常问题。

附图说明

[0065] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0066] 图1为本发明实施例提供的一种可能的系统构架的结构示意图;
[0067] 图2为本发明实施例提供的一种分布式事务的流程保障方法的流程示意图;
[0068] 图3为本发明具体实施例提供的对称式冲正的示意图;
[0069] 图4为本发明具体实施例提供的非对称式冲正的示意图;
[0070] 图5为本发明实施例提供的一种分布式事务的流程保障装置的结构示意图;
[0071] 图6为本发明实施例提供的电子设备的结构示意图。

具体实施方式

[0072] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0073] 如图1所示,本发明实施例所适用的一种系统架构,包括调用系统101、交易处理服务器102以及N个子系统103。其中,调用系统101可以为安装于终端上的客户端,也可以为安装于服务器上的操作系统,终端可以是手机、平板电脑或者是专用的手持设备等具有无线通信功能的电子设备,也可以是个人计算机(personal computer,简称PC),笔记本电脑,服务器等有线接入方式连接上网的设备。终端可以是一个独立的设备,也可以是多个终端所形成的终端集群。优选地,终端可以采用云计算技术进行信息处理。交易处理服务器102可以是计算机等网络设备,可以是一个独立的设备,也可以是多个服务器所形成的服务器集群。N个子系统103可以分别安装于N个服务器上,也可以安装于少于N个服务器上,即存在两个或多个子系统103安装于同一个服务器上的情况。优选地,交易处理服务器102以及N个子系统103可以采用云计算技术进行信息处理。
[0074] 调用系统101可以通过INTERNET网络与交易处理服务器102进行通信,也可以通过全球移动通信系统(Global System for Mobile Communications,简称GSM)、长期演进(long term evolution,简称LTE)系统等移动通信系统与服务器101进行通信。交易处理服务器102可以RMB的方式远程调用子系统103,也可以通过其它方式如RPC进行调用,也可以通过INTERNET网络、全球移动通信系统(Global System for Mobile Communications,简称GSM)、长期演进(long term evolution,简称LTE)系统等移动通信系统与子系统103进行通信。
[0075] 为了便于理解,下面对本发明实施例中可能涉及的名词进行定义和解释。
[0076] 存款组合交易系统:主要用于银行支撑消费场景下联动活期+和存款余额联动消费的交易接入系统,也可用于银行存款结合贷款联动消费,以及合作行存款账户与银行存款账户联动消费的场景。
[0077] 分布式子事务:构成一组分布式事务的一部分事务型处理逻辑,可以通过冲正或补偿方式使处理异常的情况回到处理前的状态或等价的状态。
[0078] 主交易:对应一组分布式的业务处理逻辑,可以由一个或多个同步或异步处理的子交易共同构成,并有主交易类型,处理状态,冲正状态,处理时间等关键性的属性。
[0079] 子交易:一组分布式的业务处理逻辑中拆分出来的一个业务处理子单元,对应到一次分布式子事务,可以是同步处理也可以是异步处理,具有处理状态,冲正状态,处理类型等多个业务属性。
[0080] 主动冲正交易:主交易的一种,由该发明的处理模型在分布式事务出现异常时自动产生的一种补偿处理机制,目的是让原主交易达到最终的业务一致性状态。
[0081] 流程决策控制器:本发明的构成部件,主要功能是基于输入信息项通过业务预先配置好的处理方式确定本次请求对应的分布式事务的形态,例如子事务的分拆和明确,远程系统接口的确定。系统可以根据预设的配置来改变业务处理的形态以适应业务变化的需求。
[0082] 异常探测:本模型在分布式事务出现异常时系统进行异常的识别。
[0083] 异常处理决策器:本模型在分布式事务异常出现并探测到后,根据异常的类型,结合预先配置好的异常处理控制参数生成对应的。
[0084] 反向操作:在数据处理过程中出现异常后,执行的补偿处理机制,为了让数据库中存储的数据达到最终一致性的状态。在本发明实施例的具体业务场景中,反向操包括回滚操作和/或冲正处理。反向操作中也包含一个或多个反向子流程,与正常处理的子流程成对称状或者非对称状。反向子流程在本发明实施例的具体业务场景中,为冲正子流程。
[0085] 现有技术中,为了实现分布式事务,一般会先固定好一组分布式事务,记为T1、T2、T3…Tn,其中Ti是平等的子事务。对应每个子事务会设置对应的补偿子事务C1、C2、C3…Cj,其中0
[0086] 为了解决上述问题,基于上述架构,本发明实施例提供了一种分布式事务的流程保障方法,如图2所示,本发明实施例提供的分布式事务的流程保障方法包括以下步骤:
[0087] 步骤201、接收调用系统发送的处理请求。
[0088] 具体实施过程中,系统提供可以对外调用的消息服务接口,接口可以设计为多个,每个接口定义了消息的结构和字段含义等配置信息,具体地,设置了对应的接口请求报文字段和响应报文字段的业务含义定义,还包括字段的类型、长度、是否必填、使用描述等说明。从而本发明实施例中的设备可以通过接口接收外部调用系统发送的处理请求,并通过接口向外部调用系统反馈响应报文。
[0089] 步骤202、根据所述处理请求确定主流程以及N个子流程,N≥1。
[0090] 具体实施过程中,一个新的处理请求进入后,通过解析处理请求的请求报文字段等信息,结合系统控制的配置业务字段,确定该处理请求是否为合法的请求,配置的字段可以为调用系统的ID、业务请求渠道号等等。
[0091] 一个合法的处理请求接收后,根据处理请求所携带的业务信息项,经过解析处理,将匹配出对应的主流程和子流程实例。本发明实施例中设计有主流程、子流程的类型定义,以及流程匹配工厂类。
[0092] 对于主流程而言,主要的业务信息项包括:请求的渠道、业务场景ID、合作方ID、摘要代码、借贷双方账号类型等,可以根据实际需要纵向或横向扩充,最后匹配得到主流程类型。
[0093] 子流程是在主流程类型确定后根据更多一些维度的业务信息项,确定的细分流程。举例来说,客户张三通过扫码支付,买了一杯咖啡30元。经解析后,主流程匹配结果是消费流程,而不是退款或其它。进而,子流程则会根据张三是否有银行理财账户来确定是否需要联动银行理财账户和银行卡。因此,同一个主流程下的子流程可能不一样。如果没有开通银行理财账户,那么子流程可能是银行卡单卡消费;如果开通了银行理财账户,那么子流程则是银行理财账户与银行卡的联动消费。子流程类型的匹配也是通过一个矩阵类设定的,根据业务需要不同可以横向和纵向扩充。
[0094] 步骤203、针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理。
[0095] 具体实施过程中,一个处理请求,会确定一个主流程和下挂的多个子流程,这是一个双层交易的模型。主流程主要用来跟踪控制整体分布式事务处理的进度和状态、冲正状态、异常信息等。子流程则会对应到一个具体的与远程系统的交互,同样设定有子流程状态、子流程的冲正状态、异常信息、远程调用类型等等信息。本发明实施例中可以按照子流程处理步骤以及对应的子流程的信息,通过远程调用工具将子流程的报文发送到相应的子系统进行远程事务处理。
[0096] 多个子流程之间可以是同步处理的也可以是异步处理的。以张三买咖啡的例子说明,假定张三银行卡余额为10元,同时也有理财产品的份额为100元,那么针对这次买咖啡的消费请求生成的主流程为消费流程,子流程则会包含:
[0097] 1、到银行理财系统冻结理财产品的份额20元;
[0098] 2、到存款核心系统进行分组一对一转账交易30元,其中10元从银行卡出金,20元从在途清算资金出金;
[0099] 3、到银行理财系统进行理财产品的份额赎回处理,并完成在途清算资金的清算处理。
[0100] 以上三个子流程中,子流程1和2是同步流程,也即需要即刻执行并等待返回结果。子流程3则是异步处理流程,可以等前面的同步子流程1和2都执行成功并返回了之后,再择机进行处理,并根据子流程的类型可以进行不同的处理。这样,可以让同步处理操作的时效性更高,提高系统的整体吞吐量。
[0101] 步骤204、对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略。
[0102] 具体来说,本发明实施例中的反向操作流程,同样采取主子流程模型的方式进行处理。同时反向操作流程的子流程和原流程的子流程可以是一一对应,我们称为对称式反向操作,也可以反向操作流程的子流程和原流程的子流程不一一对应的,但是反向子流程执行完的效果与全部原子流程未执行的效果等同,我们称之为非对称式反向操作。下面以冲正流程举例说明对称式反向操作和非对称式反向操作。
[0103] 对称式冲正:
[0104] 假如张三买咖啡时,自己银行余额有30元,足够买一杯咖啡,那么实际上的主流程为消费流程,子流程只有一个,即“核心一对一转账”,不需要联动银行理财账户,所有的消费金额均从银行卡出金。假定,存款核心从银行卡出金消费出现异常,但此时张三的银行卡中已转出金额30元,那么需要设置对应的冲正子流程,且冲正子流程也是一个,即“核心一对一冲正”,只需要到存款核心冲正原来的那笔消费交易即可。这种情况下,原流程和冲正流程是完全对称的,如图3所示。
[0105] 非对称式冲正:
[0106] 如果张三的银行卡余额为10元,不足30,银行理财产品中有100元,那么实际上的主流程为消费流程,子流程有三个,即“冻结理财产品”、“核心一对一转账”和“理财解冻并赎回”。但是在原流程完成后,外部发起了冲正交易,若是对称式冲正,需要针对三个子流程设置三个冲正子流程,即“理财产品解冻”、“核心一对一冲正”和“理财产品买入”,即向银行卡中退回10元,并重新买入20元的理财产品。而非对称式冲正,可以设置一个冲正子流程,例如为“核心一对一转账”,直接向银行卡中退回30元,那么对应的冲正子流程只有一个,而原子流程有三个,从而是非对称式的,如图4所示。此时对于张三而言,其资产并没有减少,即冲正后的效果与原子流程未执行的效果等同,而操作过程相较于对称式冲正,则极大地进行了简化。需要说明的是,非对称式冲正不仅为冲正子流程的数量与原子流程的数量不同,也可以是冲正子流程的数量与原子流程的数量一致,但不一一对应,例如上述例子中,可以分三笔,每笔向银行卡中退回10元,这种情况也属于非对称式冲正。
[0107] 步骤205、根据所述异常处理策略对子流程进行异常处理。所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向操作子流程,所述反向操作子流程与所述已经处理的子流程非对称。
[0108] 这里的反向操作,可以为对子流程的回滚操作,也可以为对子流程的冲正操作,也可以为对子流程的冲账操作。
[0109] 本发明实施例中,接收调用系统发送的处理请求,对处理请求进行解析,匹配出对应的主流程和N个子流程。对于N个子流程,依次将子流程向对应子系统发送,以使子系统对子流程进行处理,同时对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、主流程类型以及子流程类型确定对应的异常处理策略。根据异常处理策略对子流程进行异常处理,其中,异常处理包括对已经处理成功的子流程执行非对称反向操作,这里的非对称反向操作为执行反向子流程,且反向子流程与已经处理的子流程非对称。本发明实施例中,对子流程的异常处理可以是对称式反向操作,也可以是非对称式反向操作,可以根据实际情况和场景灵活设置异常处理策略,从而灵活地解决分布式事务异常问题。
[0110] 进一步地,为了控制消息流量,减少系统压力,本发明实施例中,所述接收调用系统发送的处理请求,包括:
[0111] 统计接收到的处理请求的数量;
[0112] 若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。
[0113] 具体实施过程中,将全天候监听接收到的处理请求的数量,接收到一个新的处理请求时,计数器变量增加1,同时,也可以根据接口的类型不同,设立不同的流量计数器,从而针对不同的请求类型或总的系统流量配置高流量预警值和最大值。当某类型请求的数量或总的处理请求的数量触发预警值时,可以提供消息预警;当达到最大值时,将限制响应报文立即返回给调用系统,以达到系统保护的目的。
[0114] 现有技术中,子系统提供异步处理的消息服务接口,但是一般分布式事务要求子系统同步反馈消息处理结果。为了解决这一问题,本发明实施例中,所述N个子流程中包括异步子流程;所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:
[0115] 针对所述异步子流程,以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。
[0116] 本发明实施例设置了异步转同步的实现机制,较好地解决了子系统的异步接口无法满足同步返回处理结果的要求。具体地,将异步子流程发送至对应的异步子系统之后,根据主流程的流水号调用异步子系统的远程结果查询接口,获取异步子流程的处理结果。如未超过异步子流程的超时时间,则等待一定的时间间隔后,重试远程结果查询接口的调用,直到获取具体的返回结果。此外,若到设定的异步子流程的超时时间仍未获取到结果,则直接认为该异步子流程超时异常,将进入到异常处理逻辑。
[0117] 进一步地,所述根据所述异常处理策略对子流程进行异常处理,包括:
[0118] 针对所述异步子流程,执行重试处理。
[0119] 具体地,由于异步子流程的执行不需同步返回处理结果,因此,针对异步子流程出现异常的情况,可以对该异步子流程执行重试处理。
[0120] 在主流程或者子流程的执行过程中,如果明确发生业务异常或者技术性的异常,例如,转账时发生的账务状态异常、数据库异常等,本发明实施例中,可以子流程立即执行冲正处理,也可以是转异步任务的处理,具体可以根据需要进行配置,配置表本身也可以进行横向或纵向的扩展以适应业务的需要。
[0121] 另一类异常则为超时类异常。所述对N个子流程的处理过程进行监控,包括:
[0122] 对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;
[0123] 所述根据所述异常处理策略对子流程进行异常处理,包括:
[0124] 针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;
[0125] 针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;
[0126] 若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;
[0127] 若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。
[0128] 具体实施过程中,超时类异常又分为以下不同的情况。本发明实施例中引入主流程超时时间和子流程超时时间。从接收到一个处理请求开始计时,到当前处理时间,主流程超时时间即针对上述时间段设置的一个系统阈值,用于判断一个主流程的执行是否出现超时的异常情况。如果主流程超过了设置的主流程超时时间,则对调用系统返回主流程超时的异常状态码,标识出该流程处于一个处理超时的中间状态。处理超时的中间状态对调用系统而言认为是处理失败,需要进行异常处理。具体地,需要获取超时子流程的处理状态,若超时子流程已经处理成功,则对于该超时子流程以及该超时子流程之前的已经处理成功的子流程,实施冲正处理,这里的冲正处理可以是对称式冲正也可以是非对称式冲正,最终使数据回到业务起始的等价状态。若超时子流程未处理成功,则对该超时子流程无需处理,只需对该超时子流程之前的已经处理成功的子流程实施冲正处理。而对于该超时子流程的处理状态不明确的,则对主流程转批量异步处理,例如,将需要批量异步处理的主流程集中起来,在每天固定的时间段进行处理状态的重新查询,再根据查询结果进行后续处理。将处理状态不明确的主流程转为批量异步处理方式进行持续的后续处理操作,可以确保异常交易的最终结果达到业务要求的一致性。
[0129] 批量异步处理是通过qrtz定时任务的方式来实现,针对不同类型的批量异步处理的主流程,可以配置不同的异步处理策略,例如任务的调度处理频度、调度的时间范围、调度处理的线程资源投入等。
[0130] 与主流程超时状态类似,子流程也设置有不同的超时状态的系统阈值。子流程的处理时间为从一个子流程发往对应的子系统那一刻开始计时,到当前的处理时间间隔。子流程超时即子流程的计时器所记录的耗时时长超过系统针对当前类型的子流程设置的超时时间系统阈值。不管主流程超时还是要求同步处理的子流程超时,都会影响请求的处理结果,系统将拦截到这些超时的异常并中断流程的执行,对外返回流程状态超时。
[0131] 此外,对于异步子流程出现超时类异常,由于该异步子流程的超时不影响当前请求的处理结果,因此,可以对异步子流程执行重试处理,这里的重试处理可以是发现异步子流程出现超时异常时,直接进行重试,也可以将该异步子流程执行批量异步处理,例如在每天固定的时间段内执行异步子流程的重试处理。当然,也可以根据配置对异步子流程执行冲正处理。
[0132] 进一步地,本发明实施例向调用系统提供格式一致的反馈结果。所述针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理之后,还包括:
[0133] 接收子系统反馈的响应消息;
[0134] 将所述响应消息格式化,得到响应报文;
[0135] 将所述响应报文向所述调用系统发送。
[0136] 举例来说,某调用系统向交易处理服务器发送交易处理请求,交易处理服务器处理请求超时,返回了超时状态。调用系统可能会根据超时的特定异常码再到交易处理服务器中查询交易的结果,则需要根据具体的交易状态信息将返回的响应消息进行加工处理。
[0137] 另外反馈的响应消息的包装可以尽量做到,出现系统变动特别是出现新的系统语义时,经过消息格式化后,对外提供一致的稳定的输出结果。例如:超时异常码对外反馈的是000960,因为业务的需求又接入了新的下游方子系统,但是新接入的子系统的超时异常码是一个新的值比如XXXTIMEOUT,那么将响应消息格式化则需要将XXXTIMEOUT转化包装成跟调用系统约定的超时异常码000960,从而调用系统也能够识别到。
[0138] 为了更清楚地理解本发明,下面以具体实施例对上述流程进行详细描述,本发明具体实施例中,具体场景为用户使用手机进行快捷支付,系统架构包括客户端、交易处理系统、存款核心系统和理财系统,其中,存款核心系统和理财系统分别为子交易对应的子系统。
[0139] 具体实施例的步骤如下所示,包括:
[0140] 步骤S501:客户端向交易处理系统发送快捷消费支付请求。
[0141] 步骤S502:交易处理系统解析快捷消费支付请求,向存款核心系统发送余额查询请求。
[0142] 步骤S503:交易处理系统根据存款核心系统反馈的结果,确定用户银行卡中余额不足,且客户端设置为允许理财产品联动消费,则向理财系统发送余额查询请求。
[0143] 步骤S504:交易处理系统根据理财系统反馈的结果,确定子流程分别为“冻结理财产品”、“核心一对一转账”和“理财解冻并赎回”。
[0144] 步骤S505:交易处理系统向理财系统发送冻结理财产品请求。若理财系统执行成功,则执行步骤506。若理财系统执行失败,由于对分布式事务的结果没有影响,因此不用处理,直接向客户端反馈失败结果。若理财系统执行超时,则需要对冻结理财产品请求的处理结果进行核实,若失败则无需处理,若成功,则需执行冲正处理,即执行理财产品解冻。
[0145] 步骤S506:交易处理系统向存款核心系统发送扣款转账请求。若存款核心系统执行成功,则向客户端反馈扣款成功结果,并执行步骤507。若存款核心系统执行失败,则需要对已成功的“冻结理财产品”执行冲正处理,即执行理财产品解冻。若存款核心系统执行超时,则需要对扣款转账请求的处理结果进行核实,若失败则执行理财产品解冻,若成功,则执行异步赎回并更新状态。这里冲正子流程“异步赎回并更新状态”与子流程“冻结理财产品”和“核心一对一转账”之间即为非对称式冲正。
[0146] 步骤S507:交易处理系统向理财系统发送理财解冻和理财赎回的请求,其中理财解冻和理财赎回的请求为异步请求。若理财系统执行成功,则交易处理系统向客户端反馈赎回成功结果。若理财系统执行失败,则转批量异步处理,执行重试处理。若理财系统执行超时,则需要对处理状态进行核实,并可以人工干预处理。
[0147] 本发明实施例还提供了一种分布式事务的流程保障装置,如图5所示,包括:
[0148] 收发单元601,用于接收调用系统发送的处理请求;
[0149] 配置单元602,用于根据所述处理请求确定主流程以及N个子流程,N≥1;
[0150] 所述收发单元601,还用于针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;
[0151] 监控单元603,用于对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、所述主流程的类型以及所述子流程的类型确定对应的异常处理策略;
[0152] 异常处理单元604,用于根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。
[0153] 可选的,所述N个子流程中包括异步子流程;所述收发单元601,还用于:
[0154] 针对所述异步子流程,以设置的频率向所述异步子流程对应的异步子系统发送结果查询请求,直至接收到所述异步子系统反馈的处理结果。
[0155] 可选的,所述异常处理单元604,用于:
[0156] 针对所述异步子流程,执行重试处理。
[0157] 可选的,所述监控单元603,用于对所述主流程以及每个子流程的处理时间进行监控,若所述主流程和/或任一子流程的处理时间超过对应的时间阈值,则确定出现超时类异常;
[0158] 所述异常处理单元604,用于针对异步子流程出现超时类异常,则对所述异步子流程执行重试处理;针对主流程和/或同步子流程出现超时类异常,向所述调用系统反馈处理过程超时,并确定超时子流程的处理状态;若所述超时子流程的处理状态明确,则对已处理成功的子流程执行非对称反向操作;若所述超时子流程的处理状态不明确,则对所述主流程转批量异步处理。
[0159] 可选的,所述异常处理单元604,用于:
[0160] 间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求;
[0161] 若接收到所述子系统发送的处理成功结果,则对所述超时子流程以及所述超时子流程之前的子流程执行非对称反向操作;
[0162] 若接收到所述子系统发送的处理失败结果,则对所述超时子流程之前的子流程执行非对称反向操作;
[0163] 若接收到所述子系统发送的处理结果不明确反馈,则执行所述间隔预定时间段后,向所述超时子流程对应的子系统发送结果查询请求的步骤。
[0164] 可选的,所述收发单元601,用于:
[0165] 统计接收到的处理请求的数量;
[0166] 若所述处理请求的数量大于流量预警值,则向所述调用系统发送预警消息,并控制向所述调用系统反馈响应报文的时间。
[0167] 可选的,所述收发单元601,用于:
[0168] 接收子系统反馈的响应消息;
[0169] 将所述响应消息格式化,得到响应报文;
[0170] 将所述响应报文向所述调用系统发送。
[0171] 基于相同的原理,本发明还提供一种电子设备,如图6所示,包括:
[0172] 包括处理器701、存储器702、收发机703、总线接口704,其中处理器701、存储器702与收发机703之间通过总线接口704连接;
[0173] 所述处理器701,用于读取所述存储器702中的程序,执行下列方法:
[0174] 接收调用系统发送的处理请求;
[0175] 根据所述处理请求确定主流程以及N个子流程,N≥1;
[0176] 针对所述N个子流程中的任一子流程,将所述子流程向对应的子系统发送,以使所述子系统对子流程进行处理;
[0177] 对N个子流程的处理过程进行监控,当任一子流程的处理过程出现异常时,根据异常类型、主流程类型以及子流程类型确定对应的异常处理策略;
[0178] 根据所述异常处理策略对子流程进行异常处理,所述异常处理包括对已经处理成功的子流程执行非对称反向操作,所述非对称反向操作为执行反向子流程,所述反向子流程与所述已经处理的子流程非对称。
[0179] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0180] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0181] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0182] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0183] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。