一种分布式事务管理方法及系统.pdf

上传人:g**** 文档编号:1285385 上传时间:2018-04-12 格式:PDF 页数:13 大小:759.26KB
返回 下载 相关 举报
摘要
申请专利号:

CN201610913023.0

申请日:

2016.10.19

公开号:

CN106503132A

公开日:

2017.03.15

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 17/30申请日:20161019|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

广州快塑电子商务有限公司

发明人:

王在祥; 唐流; 刘育弘; 郭坚晖

地址:

510623 广东省广州市天河区珠江新城珠江东路28号越秀金融大厦609-616

优先权:

专利代理机构:

广州新诺专利商标事务所有限公司 44100

代理人:

华辉

PDF下载: PDF下载
内容摘要

本发明涉及一种分布式事务管理方法,包括以下步骤:定义全局事务,并将该全局事务中调用的其他事务定义为子事务;建立全局事务表,用于记录全局事务和子事务的状态;当调用全局事务时,在该全局事务表中进行记录;当调用该全局事务中的子事务时,在该全局事务表中生成的子事务记录;定义一个全局事务管理器,用于扫描全局事务表,并进行判断:若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务进行回滚;若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该子事务;若全局事务状态为未知,则将成功的子事务进行回滚。同时,本发明还提供了一种用于实现上述方法的分布式事务管理系统。

权利要求书

1.一种分布式事务管理方法,其特征在于:包括以下步骤:
定义全局事务,并将该全局事务中调用的其他事务定义为子事务;
建立全局事务表,用于记录全局事务和子事务的状态;当调用全局事务时,在该全局事
务表中进行记录;当调用该全局事务中的子事务时,在该全局事务表中生成的子事务记录;
定义一个全局事务管理器,用于扫描全局事务表,并进行判断:
若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务进行
回滚;
若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该子事
务;
若全局事务状态为未知,则将成功的子事务进行回滚。
2.根据权利要求1所述分布式事务管理方法,其特征在于:还包括步骤:在调用子事务
时,将该子事务的调用参数和结果进行保存。
3.根据权利要求2所述分布式事务管理方法,其特征在于:还包括步骤:在重复调用子
事务时,保存重复调用的次数和时间。
4.根据权利要求1所述分布式事务管理方法,其特征在于:还包括步骤:当相同请求的
子事务被重复调用时,跳过该重复请求。
5.根据权利要求1所述分布式事务管理方法,其特征在于:当全局事务状态为成功,而
该全局事务下存在失败的子事务过程时,将该失败的子事务进行升序排序,再逐一执行调
用操作。
6.根据权利要求1所述分布式事务管理方法,其特征在于:当全局事务状态为失败,而
该全局事务下存在成功的子事务过程时,对成功的子事务进行降序排序,再逐一进行回滚
操作。
7.根据权利要求1所述分布式事务管理方法,其特征在于:当同一个全局事务的子事务
向前或回滚操作时,进行数据库的行锁操作。
8.根据权利要求1所述分布式事务管理方法,其特征在于:当有部分向前或回滚成功的
子事务,则更新全局事务的状态为“部分已回滚”。
9.根据权利要求1所述分布式事务管理方法,其特征在于:当有全部向前或回滚成功的
子事务,则更新全局事务的状态为“已回滚”。
10.一种分布式事务的管理系统,其特征在于:包括:
定义模块,用于定义全局事务,并将该全局事务中调用的其他事务定义为子事务;
全局事务表建立模块,用于建立全局事务表,所述全局事务表用于记录全局事务和子
事务的状态;当调用全局事务时,在该全局事务表中进行记录;当调用该全局事务中的子事
务时,在该全局事务表中生成的子事务记录;
全局事务管理器,用于扫描全局事务表,并进行判断:
若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务进行
回滚;
若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该子事
务;
若全局事务状态为未知,则将成功的子事务进行回滚。
11.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括保存模块,用于
在调用子事务时,将该子事务的调用参数和结果进行保存。
12.根据权利要求11所述分布式事务的管理系统,其特征在于:所述保存模块,还用于
在重复调用子事务时,保存重复调用的次数和时间。
13.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括请求判断模块,
用于当判断为相同请求的子事务被重复调用时,跳过该重复请求。
14.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括升序排序模块,
用于当全局事务状态为成功,而该全局事务下存在失败的子事务过程时,将该失败的子事
务进行升序排序。
15.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括降序排序模块,
用于当全局事务状态为失败,而该全局事务下存在成功的子事务过程时,对成功的子事务
进行降序排序。
16.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括行锁模块,用于
当同一个全局事务的子事务向前或回滚操作时,进行数据库的行锁操作。
17.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括状态更新模块,
用于当有部分向前或回滚成功的子事务,则更新全局事务的状态为“部分已回滚”。
18.根据权利要求10所述分布式事务的管理系统,其特征在于:还包括状态更新模块,
用于当有全部向前或回滚成功的子事务,则更新全局事务的状态为“已回滚”。

说明书

一种分布式事务管理方法及系统

技术领域

本发明涉及计算机领域,特别是一种分布式管理方法;本发明还涉及一种用于实
现所述方法的分布式管理系统。

背景技术

在当今流行的分布式系统、微服务架构的系统中,一个请求通常不是由一个服务
中的一个方法单独完成,而是由多个系统、多个服务、操作多个数据库共同完成一个功能。

这样的一个请求,涉及到多个子服务系统之间的接口调用,不同服务中对不同的
数据库操作是在不同的事务之中。如果所有流程正常正确地完成,则不会有异常,但如果某
一个子系统子服务出现错误抛出异常的时候,它之前已经完成的服务和之后还未进行的服
务怎么处理,以及如何保证有服务抛出异常时,数据库的一致性,是一个急需解决的问题。

针对上述问题,公开号为CN103902560A的发明专利公开了一种分布式事务处理方
法及系统。所述方法包括:分布式事务管理器创建分布式全局事务;业务数据管理器根据所
述分布式全局事务创建对应的不少于一个的子事务;业务处理单元将所述分布式全局事务
和所述子事务进行关联;分布式事务管理器发起所述分布式全局事务的提交或回滚操作。
其中,当全局事务与子事务无法建立关联时,判断为异常情况,并将该具备事务进行回滚操
作。

然而,由于在一个分布式事务系统中事务复杂,可能出现的情况较多。现有技术仅
仅以全局事务与子事务无法建立关联作为异常情况,而且处理的方式单一,直接进行回滚
操作。这样这无法针对具体事务做出最合理的处理,影响了事务处理的效率。

发明内容

本发明的目的在于克服现有技术的缺点与不足,提供了一种分布式事务管理方法
及系统。

本发明具体通过以下的技术方案实现:一种分布式事务管理方法,包括以下步骤:

定义全局事务,并将该全局事务中调用的其他事务定义为子事务;

建立全局事务表,用于记录全局事务和子事务的状态;当调用全局事务时,在该全
局事务表中进行记录;当调用该全局事务中的子事务时,在该全局事务表中生成的子事务
记录;

定义一个全局事务管理器,用于扫描全局事务表,并进行判断:

若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务
进行回滚;

若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该
子事务;

若全局事务状态为未知,则将成功的子事务进行回滚。

作为本发明的进一步改进,还包括步骤:在调用子事务时,将该子事务的调用参数
和结果进行保存。

作为本发明的进一步改进,还包括步骤:在重复调用子事务时,保存重复调用的次
数和时间。

作为本发明的进一步改进,还包括步骤:当相同请求的子事务被重复调用时,跳过
该重复请求。

作为本发明的进一步改进,当全局事务状态为成功,而该全局事务下存在失败的
子事务过程时,将该失败的子事务进行升序排序,再逐一执行调用操作。

作为本发明的进一步改进,当全局事务状态为失败,而该全局事务下存在成功的
子事务过程时,对成功的子事务进行降序排序,再逐一进行回滚操作。

作为本发明的进一步改进,当同一个全局事务的子事务向前或回滚操作时,进行
数据库的行锁操作。

作为本发明的进一步改进,当有部分向前或回滚成功的子事务,则更新全局事务
的状态为“部分已回滚”。

作为本发明的进一步改进,当有全部向前或回滚成功的子事务,则更新全局事务
的状态为“已回滚”。

本发明还涉及一种分布式事务的管理系统,包括:

定义模块,用于定义全局事务,并将该全局事务中调用的其他事务定义为子事务;

全局事务表建立模块,用于建立全局事务表,所述全局事务表用于记录全局事务
和子事务的状态;当调用全局事务时,在该全局事务表中进行记录;当调用该全局事务中的
子事务时,在该全局事务表中生成的子事务记录;

全局事务管理器,用于扫描全局事务表,并进行判断:

若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务
进行回滚;

若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该
子事务;

若全局事务状态为未知,则将成功的子事务进行回滚。

作为本发明的进一步改进,还包括保存模块,用于在调用子事务时,将该子事务的
调用参数和结果进行保存。

作为本发明的进一步改进,所述保存模块,还用于在重复调用子事务时,保存重复
调用的次数和时间。

作为本发明的进一步改进,还包括请求判断模块,用于当判断为相同请求的子事
务被重复调用时,跳过该重复请求。

作为本发明的进一步改进,还包括升序排序模块,用于当全局事务状态为成功,而
该全局事务下存在失败的子事务过程时,将该失败的子事务进行升序排序。

作为本发明的进一步改进,还包括降序排序模块,用于当全局事务状态为失败,而
该全局事务下存在成功的子事务过程时,对成功的子事务进行降序排序。

作为本发明的进一步改进,还包括行锁模块,用于当同一个全局事务的子事务向
前或回滚操作时,进行数据库的行锁操作。

作为本发明的进一步改进,还包括状态更新模块,用于当有部分向前或回滚成功
的子事务,则更新全局事务的状态为“部分已回滚”。

作为本发明的进一步改进,还包括状态更新模块,用于当有全部向前或回滚成功
的子事务,则更新全局事务的状态为“已回滚”。

相比于现有技术,本发明具备以下有益效果:

解决了在分布式系统、微服务架构模式下,分布式事务难以统一管理,对其他服务
调用结果无法控制的问题。在框架的全局事务管理功能的支持下,开发者和系统维护人员
可以减少大量对错误数据的排查和维护,减少了对生产数据的人为操作,增强系统鲁棒性,
提高了数据正确性和可靠性,为多系统服务的复杂业务场景提供了简洁的维护思路。同时,
可以针对不同的业务进行对应的处理,方式丰富,可以针对不同的业务情况执行不同的处
理方式。

为了更好地理解和实施,下面结合附图详细说明本发明。

附图说明

图1是本发明的分布式事务管理方法的步骤方法流程图。

图2是本发明的分布式事务管理系统的模块连接框图。

具体实施方式

本发明为了解决现有技术中对于异常情况处理方式单一的缺陷,提供了一种分布
式事务的管理方法及系统,具体通过以下的实施例进行说明。

请参阅图1,其为本发明的分布式事务管理方法的步骤流程图。本发明提供了一种
分布式事务管理方法,包括以下步骤:

S1:定义全局事务,并将该全局事务中调用的其他事务定义为子事务。

S2:建立全局事务表,用于记录全局事务和子事务的状态;当调用全局事务时,在
该全局事务表中进行记录;当调用该全局事务中的子事务时,在该全局事务表中生成的子
事务记录。

具体的,在本步骤中,在调用一个全局事务过程时,将生成一个唯一的全局事务编
号,并在全局事务表中插入一条记录,代表这次调用。调用子事务时将生成对应全局事务记
录的子事务记录,子事务记录包括自己的唯一编号,全局事务编号,以及它在全局事务过程
中的序号。当每个子事务在成功或者异常时,会在数据库中更新该子事务的状态;当全局事
务完成或异常时,更新全局事务表中对应记录的状态。

S3:定义一个全局事务管理器,用于扫描全局事务表,并进行以下的判断。具体的,
在本发明中全局事务管理器每30秒扫描该全局事务表。

S31:若全局事务状态为失败,而该全局事务下存在成功的子事务过程,则执行步
骤:对成功的子事务进行降序排序,再逐一进行回滚操作。具体的,在本发明中通过所述全
局事务管理器自动调用该子事务的进行回滚,将已经修改的数据还原。

S32:若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则执行步
骤:将该失败的子事务进行升序排序,再逐一执行调用操作。具体的,在本发明中通过全局
事务管理器再次调用该子事务方法,确保数据正常更新。

S33:若全局事务状态为未知,则将成功的子事务进行回滚。

进一步,在本发明中为了让全局事务管理器能够自动调用子事务前进或回滚,全
局事务表需要维护该子事务过程被调用时的请求参数,或者使用其他方式传递参数。当同
一个全局事务的子事务向前或回滚操作时,进行数据库的行锁操作,避免并发。

其中,对于当前向前或回滚失败的事务过程,需要更新下次开始时间避免过于频
繁。比如:默认递增30秒,后期可考虑第一次失败递增30秒,第二次递增60秒,第三次递增1
分钟,最大递增15分钟等。

S4:在调用子事务时,将该子事务的调用参数和结果进行保存。

S5:在重复调用子事务时,保存重复调用的次数和时间。

S6:当相同请求的子事务被重复调用时,跳过该重复请求。本步骤是为了维护数据
一致性,避免重复调用导致更多的异常,子事务需要保证幂等性。

S7:全局事务状态更新。当有部分向前或回滚成功的子事务,则更新全局事务的状
态为“部分已回滚”。当有全部向前或回滚成功的子事务,则更新全局事务的状态为“已回
滚”。

请参阅图2,其为本发明的分布式事务管理系统的模块连接框图。另外,本发明还
涉及一种分布式事务的管理系统,包括:定义模块1、全局事务表建立模块2、全局事务管理
器3、保存模块4、请求判断模块5、升序排序模块6、降序排序模块7、行锁模块8和状态更新模
块9。

所述定义模块1,用于定义全局事务,并将该全局事务中调用的其他事务定义为子
事务;

所述全局事务表建立模块2,用于建立全局事务表,所述全局事务表用于记录全局
事务和子事务的状态;当调用全局事务时,在该全局事务表中进行记录;当调用该全局事务
中的子事务时,在该全局事务表中生成的子事务记录;

所述全局事务管理器3,用于扫描全局事务表,并进行判断:

若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务
进行回滚;

若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则再次调用该
子事务;

若全局事务状态为未知,则将成功的子事务进行回滚。

所述保存模块4,用于在调用子事务时,将该子事务的调用参数和结果进行保存。
所述保存模块,还用于在重复调用子事务时,保存重复调用的次数和时间。

所述请求判断模块5,用于当判断为相同请求的子事务被重复调用时,跳过该重复
请求。

所述升序排序模块6,用于当全局事务状态为成功,而该全局事务下存在失败的子
事务过程时,将该失败的子事务进行升序排序。

所述降序排序模块7,用于当全局事务状态为失败,而该全局事务下存在成功的子
事务过程时,对成功的子事务进行降序排序。

所述行锁模块8,用于当同一个全局事务的子事务向前或回滚操作时,进行数据库
的行锁操作。

所述状态更新模块9,用于当有部分向前或回滚成功的子事务,则更新全局事务的
状态为“部分已回滚”。所述状态更新模块,还用于当有全部向前或回滚成功的子事务,则更
新全局事务的状态为“已回滚”。

以下通过具体的实例,介绍本发明的分布式事务管理方法及系统时如何应用的。

例如:在一个很常见的电子商务系统中的一个出价过程中,可能会先调用优惠券
服务,获取用户的可用优惠券,然后调用资金账户服务,冻结用户的相应保证金,之后,再调
用缓存服务,更新出价记录。

如果前面的流程都正常进行,但更新出价记录时出错了,那么怎么对扣除优惠券
和冻结保证金服务进行回滚呢?在出价过程中,如果冻结保证金服务超时了,那怎么知道操
作是否成功,从而确保操作必须回滚呢?如果我们想在优惠券服务超时时不退出,而继续下
面的出价流程,那么怎么在后面自动维护优惠券的数据,自动扣减呢?

针对上述情况,处理方法为:

第一步,定义全局事务和子事务。其中,以出价过程为全局事务,并包括子事务1:
调用优惠券、子事务2:调用资金账户、子事务3:冻结保证金、子事务4:调用缓存服务,更新
出价记录。

第二步,建立全局事务表。具体的方式及代码可以为:




其中,相关的业务表需要记录transaction_id和transaction_sequence信息。

第三步、定义全局事务管理器,扫描该全局事务表中的全局事务和子事务的状态
信息。若全局事务状态为失败,而该全局事务下存在成功的子事务过程,则执行步骤:对成
功的子事务进行降序排序,再逐一进行回滚操作。具体的,在本发明中通过所述全局事务管
理器自动调用该子事务的进行回滚,将已经修改的数据还原。

若全局事务状态为成功,而该全局事务下存在失败的子事务过程,则执行步骤:将
该失败的子事务进行升序排序,再逐一执行调用操作。具体的,在本发明中通过全局事务管
理器再次调用该子事务方法,确保数据正常更新。

若全局事务状态为未知,则将成功的子事务进行回滚。

比如,可以根据实际情况定义不同的规则,比如包括以下情况:





实际情况中,可以根据子事务的重要性,选择不同的分类。比如:若子事务1比较重
要,可以将其定义为影响全局事务状态的必要因素,即子事务1失败,则全局事务必然失败。

以上仅仅是本发明的一个应用实例,本发明的分布式事务处理方法和系统还可以
应用在其他的业务实际中。

相比于现有技术,本发明具备以下有益效果:

解决了在分布式系统、微服务架构模式下,分布式事务难以统一管理,对其他服务
调用结果无法控制的问题。在框架的全局事务管理功能的支持下,开发者和系统维护人员
可以减少大量对错误数据的排查和维护,减少了对生产数据的人为操作,增强系统鲁棒性,
提高了数据正确性和可靠性,为多系统服务的复杂业务场景提供了简洁的维护思路。同时,
可以针对不同的业务进行对应的处理,方式丰富,可以针对不同的业务情况执行不同的处
理方式。

本发明并不局限于上述实施方式,如果对本发明的各种改动或变形不脱离本发明
的精神和范围,倘若这些改动和变形属于本发明的权利要求和等同技术范围之内,则本发
明也意图包含这些改动和变形。

一种分布式事务管理方法及系统.pdf_第1页
第1页 / 共13页
一种分布式事务管理方法及系统.pdf_第2页
第2页 / 共13页
一种分布式事务管理方法及系统.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《一种分布式事务管理方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种分布式事务管理方法及系统.pdf(13页珍藏版)》请在专利查询网上搜索。

本发明涉及一种分布式事务管理方法,包括以下步骤:定义全局事务,并将该全局事务中调用的其他事务定义为子事务;建立全局事务表,用于记录全局事务和子事务的状态;当调用全局事务时,在该全局事务表中进行记录;当调用该全局事务中的子事务时,在该全局事务表中生成的子事务记录;定义一个全局事务管理器,用于扫描全局事务表,并进行判断:若全局事务状态为失败,而该全局事务下存在成功的子事务过程,将成功子事务进行回滚;若。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1