分布式框架的事务处理方法及装置与流程

文档序号:16855291发布日期:2019-02-12 23:12阅读:181来源:国知局
分布式框架的事务处理方法及装置与流程

本发明实施例涉及计算机技术领域,尤其涉及一种分布式框架的事务处理方法及装置。



背景技术:

分布式环境是将不同地点、具有不同功能或拥有不同数据的多台计算机通过通信网络连接起来的一种计算机系统,其在控制系统的统一管理控制下,协调地完成大规模信息处理任务。在分布式集群环境中,有些业务需要跨多个服务来完成,而这些服务在调用过程中可能会出现业务异常,从而导致整个事务的不完整,因此,需要提供一种处理业务异常的方式,以实现对事务的完整性进行保障。



技术实现要素:

本发明实施例提供一种分布式框架的事务处理方法及装置,其目的是为了提供一种处理分布式集群环境中的业务异常问题的方式。

一方面,本发明实施例提供一种分布式框架的事务处理方法,所述方法包括:

检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序;

依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元;

确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

另一方面,本发明实施例提供一种分布式框架的事务处理装置,所述装置包括:

获取模块,用于检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序;

回滚模块,用于依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元;

抛出模块,用于确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

另一方面,本发明实施例还提供了一种电子设备,包括存储器、处理器、总线以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述分布式框架的事务处理方法中的步骤。

再一方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述分布式框架的事务处理方法中的步骤。

本发明实施例提供的分布式框架的事务处理方法及装置,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常。

附图说明

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

图1为本发明实施例提供的分布式框架的事务处理方法的流程示意图;

图2为本发明实施例的第一示例的分布式框架示意图;

图3为本发明实施例提供的分布式框架的事务处理装置的结构示意图;

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

具体实施方式

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

图1示出了本发明实施例提供的一种分布式框架的事务处理方法的流程示意图。

如图1所示,本发明实施例提供的分布式框架的事务处理方法,所述方法具体包括以下步骤:

步骤101,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序。

其中,第一单元为分布式框架中任一服务单元。第一单元执行一目标服务,且该目标服务包括至少两个子服务,两个子服务分别由第一单元的子单元执行,且各个子服务之间具有执行次序。可选地,各个单元或子单元的组织结构(节点之间的上下级关系)通过spring配置文件进行配置;各个单元或子单元的调度通过spring面向切面编程(aspectorientedprogramming,aop)实现。

在子单元出现进程异常后,子单元将进程异常消息向上抛出至第一单元。若分布式框架检测到第一单元接收到来自其子单元的进程(process)异常消息,获取第一单元包括的子单元,以确定进程异常的发生位置。

作为第一示例,参见图2,图2所示为一树形结构的分布式框架,其中,以单元3作为第一单元为例,单元3执行一目标服务,且该目标服务包括3个子服务,分别由单元4、单元5以及单元6执行,且执行顺序依次为单元4、单元5、单元6;若单元3接收到来自单元4、单元5或单元6的进程异常消息,则分布式框架获取单元3的子单元信息。

步骤102,依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元。

其中,回滚(rollback)指程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。确定第一单元包括的子单元后,依据各子单元所配置的执行顺序,逆序对各个子单元进行回滚,即执行服务或子服务的过程,各单元或子单元配置的执行次序逆向执行,在出现异常时逆向进行回滚,并在回滚的过程中,确定进程异常消息对应的目标子单元,即进程异常发生的位置。

继续参见图2,对单元3的子单元进行回滚,则回滚次序依次为:单元6、单元5、单元4。

步骤103,确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

其中,确定发生进程异常的目标子单元之后,进一步确定调用所述目标子单元的目标调用程序,将进程异常消息抛出至该目标调用程序,便于目标调用程序获知目标子单元发生进程异常,并及时处理进程异常。

本发明上述实施例中,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常。

可选地,本发明实施例中,所述依据所述执行次序,逆序对所述子单元执行回滚的步骤,包括:

依据所述执行次序,逆序获取所述子单元的预设执行参数,所述预设执行参数用于指示所述子单元是否已执行对应的子服务的进程;

若所述预设执行参数指示所述子单元未执行所述进程,则跳过所述子单元并获取下一个子单元的预设执行参数;

若所述预设执行参数指示所述子单元已执行所述进程,则对所述子单元执行回滚,并获取下一个子单元的预设执行参数。

其中,预设执行参数用于指示所述子单元是否已执行对应的子服务的进程,在对子单元进行回滚的过程中,根据预设执行参数判断是否对每个子单元进程回滚;若预设执行参数指示当前子单元未执行所述进程,则跳过该子单元,不对该子单元进程回滚,并继续判断下一个子单元是否需要回滚,获取下一个子单元的预设执行参数;反之,若预设执行参数指示当前子单元已执行所述进程,则对所述子单元执行回滚,并继续判断下一个子单元是否需要回滚,获取下一个子单元的预设执行参数。

上述实施例中,支持部分子单元回滚,由于分布式集群环境中,整个流程的处理时间较长,涉及到数据量较大,在中间一个环节出现异常后,可以不用整个链路进行回滚,仅回滚当前出现异常的单元即可。

参见图2,process异常(即进程异常)是单元5出现,此时单元6并没有执行,在回滚的过程中,会根据预设执行参数判断当前单元是否已执行,若未执行则会跳过,即单元6的rollback方法不会真正执行。在单元3回滚完成后,会把之前单元5出现的异常向上抛出,抛给顶级单元(generalinitunit),顶级单元会将该异常抛给调用的程序(抛出paasexception)。

作为另一种实现方式,还可将第一单元设置成自动回滚单元,即若第一单元在接收到其子单元抛出进程异常消息后,会自动进行回滚处理。如图2所示,在单元5出现process异常,单元5向上级节点抛出process异常信息;单元3接收到process异常后,由于单元3为自动回滚单元,会对单元3的所有子单元进行回滚,执行顺序如下:单元6、单元5、单元4。

可选地,本发明实施例中,所述对所述子单元执行回滚的步骤,包括:

若回滚过程中出现回滚异常,将所述回滚异常抛出至调用所述子单元的调用程序。

也就是说,在回滚的过程中,若出现回滚异常,则将所述回滚异常抛出至调用所述单元的调用程序,即上文所述的目标调用程序,便于目标调用程序获知当前回滚的单元发生回滚异常,并及时处理回滚异常。

继续参见图2,若单元6和单元5完成回滚操作,在单元4出现rollback异常(回滚异常),此时该rollback异常会向上抛给单元3,单元3继续向上抛出,抛给generalunit,generalunit会将该异常抛给调用的程序(抛出paasexception),此时目标调用程序对回滚异常处理,在处理完后,触发继续回滚完成本次回滚,之后再按具体需求进行处理。

可选地,本发明实施例中,所述方法还包括:

在所述第一单元在执行所述目标服务之前,使所述第一单元调用每个子服务的进程。

其中,对于每个具有子单元的第一单元,在执行目标服务之前,优先调用每个子单元的子服务,即对每个子单元进行执行前校验方法,在当前子单元执行前会被调用,用于校验当前子单元是否具备相关的执行条件。

可选地,本发明实施例中,所述方法还包括:

在所述第一单元在执行回滚之前,使所述第一单元调用每个子单元的回滚程序。

其中,本发明实施例的回滚逻辑中,首先使第一单元调用所有子单元的rollback进程,然后再执行本单元的回滚业务逻辑程序。若出现异常向上抛出unitprocessexception异常。

具体地,作为第二示例,图2中的分布式框架包括顶级单元generalunit,单元1、单元2、单元3以及用户自定义单元,以及单元3的各个子单元:单元4、单元5、单元6;其中,在业务逻辑实现上,所有单元继承自unit类,并实现以下抽象方法:

(1)process方法

所有子单元执行逻辑实现,在该方法中首先会调用所有子单元的process,然后再执行顶级单元的业务逻辑程序;若出现异常向上抛出unitprocessexception异常。

(2)rollback方法

顶级单元回滚逻辑实现,在该方法中首先会调用所有子单元的rollback方法,然后再执行本单元的回滚业务逻辑程序。若出现异常向上抛出unitprocessexception异常。

(3)globalcheck方法

全局校验方法,在所有单元以及子单元执行前会被调用,用于校验当前单元在顶级单元节点执行前是否具备相关的执行条件。

(4)beforeprocesscheck方法

单元执行前校验方法,在当前单元执行前会被调用,用于校验当前单元是否具备相关的执行条件。

(5)afterprocesscheck方法

单元执行后校验方法,在当前单元执行后会被调用,用于校验当前单元执行的逻辑是否正确。

(6)processtakeseconds方法

单元执行超时时间配置,用于配置单元或子单元执行服务或子服务的超时时间。

可选地,本发明实施例中,所述方法还包括:

记录所述回滚异常和/或所述进程异常的异常信息。

其中,为了跟进处理进度、及时处理回滚异常和/或所述进程异常,本发明实施例中还记录异常信息。

具体地,作为第三示例,参见表1,本发明实施例提供一用户界面(userinterface,ui),ui界面包括表1,便于记录异常信息以及用户查看异常信息。

表1:

其中,异常信息包括进程标识号(id)、单元名称、用户id、业务名称、开始时间、结束时间、状态、异常类型(进程异常或回滚异常)以及ip地址;当用户选中业务名称时(比如鼠标放在异常概要信息栏上),可以查看具体的异常信息;但是,对于详细的异常信息日志,需要通过日志文件进行查看。

在使用该页面时,为避免操作错误可通过输入用户id查询目标用户的异常信息,避免出现操作其它用户的误操作,并且该列表中新生成的数据会排列到前面。

在ui页面中,还可为用户提供后续操作功能,包括恢复执行、继续回滚、全部回滚等功能;用户点击对应的功能,框架系统提交到后台异步执行;且后台执行时间的长短不一,但前台的ui界面不会自动刷新页面,需要用户自己手动刷新,或者根据是否出现异常查询异常信息查看各单元当前的执行状态。

后续操作功能中,恢复执行是指在出现异常后,开发人员根据异常信息解决具体的问题后,点击“恢复执行”调度程序会根据当前情况继续执行,包括:1、出现执行异常后,根据已回滚的单元(或子单元)再次根据从当前单元开始继续执行;2、出现回滚异常后,继续执行回滚,将所有的异常抛出。

继续回滚指在程序出现回滚异常,相关人员对此异常进行修复之后,继续执行回滚操作,将之前的异常向上抛出,完成之前的回滚操作。

全部回滚指将当前业务过程进行从后向前全部回滚,如果业务过程未完成的,则从未完成的单元开始从后向前进行回滚;如果业务过程已完成的,则从最后一个单元开始向前回滚。

本发明上述实施例中,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常;且支持部分子单元回滚,由于分布式集群环境中,整个流程的处理时间较长,涉及到数据量较大,在中间一个环节出现异常后,可以不用整个链路进行回滚,仅回滚当前出现异常的单元即可。

以上介绍了本发明实施例提供的分布式框架的事务处理方法,下面将结合附图介绍本发明实施例提供的分布式框架的事务处理装置。

参见图3,本发明实施提供了一种分布式框架的事务处理装置,所述装置包括:

获取模块301,用于检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序。

其中,第一单元为分布式框架中任一服务单元。第一单元执行一目标服务,且该目标服务包括至少两个子服务,两个子服务分别由第一单元的子单元执行,且各个子服务之间具有执行次序。可选地,各个单元或子单元的组织结构(节点之间的上下级关系)通过spring配置文件进行配置;各个单元或子单元的调度通过spring面向切面编程(aspectorientedprogramming,aop)实现。

在子单元出现进程异常后,子单元将进程异常消息向上抛出至第一单元。若分布式框架检测到第一单元接收到来自其子单元的进程(process)异常消息,获取第一单元包括的子单元,以确定进程异常的发生位置。

回滚模块302,用于依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元。

其中,回滚(rollback)指程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。确定第一单元包括的子单元后,依据各子单元所配置的执行顺序,逆序对各个子单元进行回滚,即执行服务或子服务的过程,各单元或子单元配置的执行次序逆向执行,在出现异常时逆向进行回滚,并在回滚的过程中,确定进程异常消息对应的目标子单元,即进程异常发生的位置。

抛出模块303,用于确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

其中,确定发生进程异常的目标子单元之后,进一步确定调用所述目标子单元的目标调用程序,将进程异常消息抛出至该目标调用程序,便于目标调用程序获知目标子单元发生进程异常,并及时处理进程异常。

可选地,本发明实施例中,所述回滚模块302包括:

获取子模块,用于依据所述执行次序,逆序获取所述子单元的预设执行参数,所述预设执行参数用于指示所述子单元是否已执行对应的子服务的进程;

第一回滚子模块,用于若所述预设执行参数指示所述子单元未执行所述进程,则跳过所述子单元并获取下一个子单元的预设执行参数;

第二回滚子模块,用于若所述预设执行参数指示所述子单元已执行所述进程,则对所述子单元执行回滚,并获取下一个子单元的预设执行参数。

可选地,本发明实施例中,所述回滚模块302包括:

抛出子模块,用于若回滚过程中出现回滚异常,将所述回滚异常抛出至调用所述子单元的调用程序。

可选地,本发明实施例中,所述装置还包括:

信息记录模块,用于记录所述回滚异常和/或所述进程异常的异常信息。

可选地,本发明实施例中,所述装置还包括:

第一调用模块,用于在所述第一单元在执行所述目标服务之前,使所述第一单元调用每个子服务的进程。

可选地,本发明实施例中,所述装置还包括:

第二调用模块,用于在所述第一单元在执行回滚之前,使所述第一单元调用每个子单元的回滚程序。

本发明上述实施例中,检测到第一单元接收到进程异常消息后,获取模块301获取所述第一单元的子单元;回滚模块302依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,抛出模块303将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常。

图4示出了本发明又一实施例提供的一种电子设备的结构示意图。

参见图4,本发明实施例提供的电子设备,所述电子设备包括存储器(memory)41、处理器(processor)42、总线43以及存储在存储器41上并可在处理器上运行的计算机程序。其中,所述存储器41、处理器42通过所述总线43完成相互间的通信。

所述处理器42用于调用所述存储器41中的程序指令,以执行所述程序时实现如本发明上述实施例中提供的方法。

在另一种实施方式中,所述处理器执行所述程序时实现如下方法:

检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序;

依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元;

确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

本发明实施例提供的电子设备,可用于执行上述方法实施例的方法对应的程序,本实施不再赘述。

本发明实施例提供的电子设备,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常。

本发明又一实施例提供的一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质上存储有计算机程序,所述程序被处理器执行时实现如本发明上述实施例中提供的方法中的步骤。

在另一种实施方式中,所述程序被处理器执行时实现如下方法:

检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序;

依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元;

确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

本发明实施例提供的非暂态计算机可读存储介质,所述程序被处理器执行时实现上述方法实施例的方法,本实施不再赘述。

本发明实施例提供的非暂态计算机可读存储介质,检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;依据子单元执行子服务的执行次序,逆序对所述子单元执行回滚,以确定所述进程异常消息对应的目标子单元,并进一步确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序;本发明实施例提供了一种处理分布式集群环境中的业务异常问题的方式,以保障分布式框架中事务的完整性;同时为各个单元或子单元提供了灵活的回滚配置,在出现故障时可自动控制故障单元进行回滚,并向上抛出进程异常消息,便于目标调用程序及时处理进程异常。

本发明又一实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:

检测到第一单元接收到进程异常消息后,获取所述第一单元的子单元;其中,所述第一单元执行一目标服务,每个所述子单元执行一所述目标服务的子服务,且所述子服务具有执行次序;

依据所述执行次序,逆序对所述子单元执行回滚,确定所述进程异常消息对应的目标子单元;

确定调用所述目标子单元的目标调用程序,将所述进程异常消息抛出至所述目标调用程序。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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