首页> 中国专利> 分布式事务的低侵入补偿方法及装置

分布式事务的低侵入补偿方法及装置

摘要

本发明公开了一种分布式事务的低侵入补偿方法及装置,涉及自动程序设计技术领域,其中该方法包括:在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;在接收到每一子事务回滚请求时,根据每一子事务对应的前置数据快照和后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作。本发明可以降低业务的侵入性和工作人员的开发量,降低了开发成本。

著录项

  • 公开/公告号CN113138840A

    专利类型发明专利

  • 公开/公告日2021-07-20

    原文格式PDF

  • 申请/专利权人 中国工商银行股份有限公司;

    申请/专利号CN202110448380.5

  • 发明设计人 李健;滕达;张丹枫;何佳存;

    申请日2021-04-25

  • 分类号G06F9/46(20060101);G06F11/14(20060101);G06F16/242(20190101);G06F16/27(20190101);

  • 代理机构11127 北京三友知识产权代理有限公司;

  • 代理人任默闻;王涛

  • 地址 100140 北京市西城区复兴门内大街55号

  • 入库时间 2023-06-19 11:54:11

说明书

技术领域

本发明涉及自动程序设计技术领域,尤其涉及分布式事务的低侵入补偿方法及装置。

背景技术

本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

现有的Saga模型和TCC模型虽然各自都有自身的侧重点,但是这两种分布式事务模型都是对业务有着一定的侵入性。Saga模型要求每一个业务方法都有其对应的业务补偿方法,而TCC模型更是要求拆解现有的业务设计并且拆解之后一个业务方法需要配套的一组try,confirm,cancel三个方法来替代。所以,现有的这两个分布式事务模型都会增加系统复杂度以及开发人员的工作量,造成了开发成本的提升。因此,现有两种分布式事务模型存在侵入性大和改造成本高的问题。

发明内容

本发明实施例提供一种分布式事务的低侵入补偿方法,用以降低业务的侵入性和工作人员的开发量,该方法包括:

在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;

解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;

根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;

在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作。

本发明实施例还提供一种分布式事务的低侵入补偿装置,用以降低业务的侵入性和工作人员的开发量,该装置包括:

拦截单元,用于在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;

解析单元,用于解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;

数据快照生成单元,用于根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;

补偿单元,用于在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述分布式事务的低侵入补偿方法。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述分布式事务的低侵入补偿方法的计算机程序。

本发明实施例中,分布式事务的低侵入补偿方案,与现有技术中的分布式事务模型都会增加系统复杂度以及开发人员的工作量的技术方案相比,通过:在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作,可以降低业务的侵入性和工作人员的开发量,降低了开发成本。

附图说明

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

图1为本发明实施例中分布式事务的低侵入补偿方法的流程示意图;

图2为本发明实施例中分布式事务的客户端执行方法的流程示意图;

图3为本发明实施例中分布式事务的服务端执行方法的流程示意图;

图4为本发明又一实施例中分布式事务的低侵入补偿方法的流程示意图;

图5为本发明实施例中分布式事务的低侵入补偿装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。

在介绍本发明实施例之前,首先对本发明实施例中涉及的名词进行介绍。

1、Saga事务模型是业界主流的一种分布式事务模型。通过对业务逻辑的分析,Saga事务模型将业务逻辑方法分解为两个方法,一个为正方法一个为反方法:

正方法:定义了业务逻辑操作,执行之后数据立刻落地。

反方法:定义了回滚对应正方法的业务逻辑操作。

2、TCC(Try-Confirm-Cancel)事务模型是业界主流的一种两阶段分布式事务模型。通过对业务逻辑的分解,TCC模型将业务逻辑分解为两个阶段,一阶段是Try阶段,二阶段是Confirm或Cancel阶段:

Try:完成所有的业务检查,预留必须的业务资源,需要保证Try完成后,Confirm一定能成功。

Confirm:真正执行的业务逻辑,不做任何业务检查,只使用try阶段预留的业务资源。

Cancel:释放try阶段预留的业务资源。

try,confirm,cancel这三个词为TCC事务模型三个字母的指代英文。try为一阶段资源预留,在一阶段的时候检查数据库资源是否可以满足本次业务操作如果满足则锁定此资源。confirm为二阶段资源提交,如果整个分布式事务在一阶段的各个链路均资源预留成功,则二阶段发起资源提交,将这些预留的资源进行处理。Cancel为二阶段资源撤销,如果整个分布式事务在一阶段的某个链路资源预留失败,则二阶段发起资源撤销,将那些已经成功预留的资源进行撤销。

3、JDBC代表的是java层操作数据库的一个组件,一般项目会引入这个组件来对数据库进行操作。

4、SQL语句表示数据库可识别执行的一种语言,本质上所有的业务操作都是通过SQL语句来对数据库中的数据进行操作。

5、Connection(commit,rollback)和Statement,这两个为JDBC组件中的两个类,每次应用操作数据库需要获取到数据库连接即Connection,然后具体的SQL语句需要使用Statement来进行执行处理,然后调用数据库连接的commit方法或者rollback方法将这次操作持久化到数据库中或者回滚这次操作。

6、ConnectionProxy和StatementProxy,这两个也是类的英文名称,分别为Connection类的代理类和Statement的代理类。

7、侵入性指的是一个应用使用一个框架的改造成本。比如一个成熟应用使用SpringBoot框架的改造成本就很低,不需要修改业务代码和数据库结构就可以接入SpringBoot框架,只要打几个注解就行了。如果一个框架的使用需要对现有的业务代码做大幅度修改甚至对现有数据库表结构进行拆解,那么这个框架的侵入性是非常高的。

针对现有两种分布式事务模型侵入性大和改造成本高的问题,本发明克服了以上两个问题,提供了一种分布式事务的低侵入补偿方案,该方案为一种分布式事务的低侵入自动补偿改造方案。具体地,本发明基于代理JDBC的原生数据库组件,在代理方法中对业务SQL进行拦截,然后解析业务SQL获得SQL语句类型以及条件,通过解析结果生成前后数据快照并且存储,作为后续的生成容错方法提供数据依据。下面对该分布式事务的低侵入补偿方案进行详细介绍。

图1为本发明实施例中分布式事务的低侵入补偿方法的流程示意图,如图1所示,该方法包括如下步骤:

步骤101:在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;

步骤102:解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;

步骤103:根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;

步骤104:在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作。

本发明实施例中分布式事务的低侵入补偿方法基于代理JDBC的原生数据库组件,在代理方法中对业务SQL进行拦截,然后解析业务SQL获得SQL语句类型以及条件,通过解析结果生成前后数据快照并且存储,作为后续的生成容错方法提供数据依据,可以降低业务的侵入性和工作人员的开发量,降低了开发成本。下面对该方法涉及的各个步骤进行详细介绍。

一、首先,介绍上述步骤101。

具体实施时,如图2所示,在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截。

二、接着,为了便于理解,一并介绍上述步骤102和步骤103。

具体实施时,上述步骤102和步骤103为Statement代理对象的逻辑,如图2所示:

1、解析业务SQL语句,抽取SQL语句类型以及条件。其中:类型可以包括update,delete,insert这三种类型,条件可以为where简单条件。

2、执行业务SQL前,根据解析结果执行前置数据快照查询,得到业务SQL语句执行之前的前置数据快照。

3、执行业务SQL语句。

4、执行业务SQL后,根据解析结果执行后置数据快照查询,得到业务SQL语句执行之后的后置数据快照。

5、将前置数据快照和后置数据快照组合返回给Connection代理对象。

通过上述可知,在一个实施例中,可以利用代理JDBC的原生数据库组件Statement代理对象执行:解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果,以及根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照的步骤,即解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果,以及根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照,可以包括:利用代理JDBC的原生数据库组件Statement代理对象解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果,以及根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照。

三、接着,介绍上述步骤103之后的优选步骤。

具体实施时,Connection代理对象的逻辑,如图2所示:

1、向服务器注册子事务信息。

2、注册成功后,获取原生Statement对象将前后数据快照存储到应用本地的数据库中。即在一个实施例中,该分布式事务的低侵入补偿方法还可以包括:在向服务器注册子事务信息成功后,将每一子事务的前置数据快照及后置数据快照存储在本地数据库。

3、执行commit方法,为了实现事务一致性,将业务SQL和快照存储SQL作为一个事务进行提交。即在一个实施例中,该分布式事务的低侵入补偿方法还可以包括:在向服务器注册子事务信息成功后,将业务SQL语句和快照存储SQL语句作为一个事务提交。

另外,通过上述可知,在一个实施例中,可以利用代理JDBC的原生数据库组件Connection代理对象执行:在向服务器注册子事务信息成功后,将每一子事务的前置数据快照及后置数据快照存储在本地数据库的步骤。

另外,通过上述可知,在一个实施例中,可以利用代理JDBC的原生数据库组件Connection代理对象执行:在向服务器注册子事务信息成功后,将业务SQL语句和快照存储SQL语句作为一个事务提交步骤。

四、接着,介绍上述步骤104。

具体实施时,以上为子事务的一阶段操作,主要改造为在业务SQL执行前后获取前后数据快照,然后将快照存储和业务SQL执行作为一个事务。子事务的二阶段操作则由服务端发起。当主事务上报commit请求(持久化操作请求),如图3所示,服务端(服务器)查询这个主事务下的所有子事务信息然后向所有子事务发起commit请求,子事务commit请求到达应用侧后,应用侧删除这笔子事务对应的前后数据快照。当主事务上报rollback请求(回滚请求),如图3所示,服务端查询这个主事务下的所有子事务信息然后向所有子事务发起rollback请求,子事务rollback请求到达应用侧后,应用侧(应用端、客户端)把这笔子事务的前后数据快照解析为回滚SQL语句执行,将一阶段操作进行回冲,即在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句,所述回滚SQL语句用于完成回冲操作。

通过上述可知,在一个实施例中,如图4所示,该分布式事务的低侵入补偿方法还可以包括步骤105:在接收到每一子事务持久化操作请求时,将每一子事务对应的前置数据快照及后置数据快照删除。

下面举一例子进行说明,以便于理解本发明如何实施。

比如现在一个姓名为zhangsan的人银行卡中有1000块钱,一个姓名为lisi的人银行卡中有1000块钱。因为一个是北方人,一个是南方人,所以他们两个的数据一个存储在北中心数据库,一个存储在南中心数据库

北中心数据的表名称为north-account(如下表1),表结构只有两个字段分别为id和amount。

南中心数据的表名称为south-account(如下表2),表结构只有两个字段分别为id和amount。

现在执行一笔业务,此业务是将zhangsan这个人的银行卡扣减100,然后lisi这个人的银行卡增加100。

表1

表2

首先执行第一笔子事务,zhangsan扣款。向服务端注册子事务,生成前置快照,执行业务SQL,生成后置快照,上报子事务成功状态。然后前后快照存储在本地数据库中。

前置快照:

一个map结构,map中的key为id,amout,tableName,SQLType

后置快照:

一个map结构,map中的key为id,amout,tableName,SQLType

然后执行第二笔子事务,lisi增款。执行同样的操作,但是在执行业务SQL的时候数据库出现了故障,应用代码侧(应用端、客户端)获得异常然后向服务端上报这笔子事务失败。

接着,服务端收到这笔子事务失败的信息后将这笔主事务判断为失败,向这笔主事务下的所有子事务发起回滚请求,然后zhangsan账户根据生成的前后快照来生成反向SQL语句(回滚SQL语句)执行,撤销原来执行成功的业务SQL操作。

综上,本发明通过代理原生JDBC的数据库组件,在业务SQL执行的时候进行拦截,生成前后数据快照后存储在本地数据库,降低了业务的侵入性和工作人员的开发量。其要点如下:

1.业务侵入性小。在数据库层面做了一层代理用于生成前后数据快照(前置数据快照和后置数据快照),基本做到了业务无感。

2.二阶段方法的回冲逻辑可以自动生成(即自动生成了回滚SQL语句),节省了不必要的工作,降低了工作人员的工作量。

本发明实施例中还提供了一种分布式事务的低侵入补偿装置,如下面的实施例所述。由于该装置解决问题的原理与分布式事务的低侵入补偿方法相似,因此该装置的实施可以参见分布式事务的低侵入补偿方法的实施,重复之处不再赘述。

图5为本发明实施例中分布式事务的低侵入补偿装置的结构示意图,如图5所示,该装置包括:

拦截单元01,用于在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;

解析单元02,用于解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;

数据快照生成单元03,用于根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;

补偿单元04,用于在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作。

在一个实施例中,该分布式事务的低侵入补偿装置还可以包括:删除单元,用于在接收到每一子事务持久化操作请求时,将每一子事务对应的前置数据快照及后置数据快照删除。

在一个实施例中,该分布式事务的低侵入补偿装置还可以包括:存储单元,用于在向服务器注册子事务信息成功后,将每一子事务的前置数据快照及后置数据快照存储在本地数据库。

在一个实施例中,所述存储单元具体可以在向服务器注册子事务信息成功后,利用代理JDBC的原生数据库组件Connection代理对象将每一子事务的前置数据快照及后置数据快照存储在本地数据库。

在一个实施例中,该分布式事务的低侵入补偿方法还可以包括:提交单元,用于在向服务器注册子事务信息成功后,将业务SQL语句和快照存储SQL语句作为一个事务提交。

在一个实施例中,所述提交单元具体可以在向服务器注册子事务信息成功后,利用代理JDBC的原生数据库组件Connection代理对象将业务SQL语句和快照存储SQL语句作为一个事务提交。

在一个实施例中,所述解析单元和数据快照生成单元具体可以利用代理JDBC的原生数据库组件Statement代理对象解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果,以及根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照。

本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述分布式事务的低侵入补偿方法。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述分布式事务的低侵入补偿方法的计算机程序。

本发明实施例中,分布式事务的低侵入补偿方案,与现有技术中的分布式事务模型都会增加系统复杂度以及开发人员的工作量的技术方案相比,通过:在接收到主事务请求时,针对每一子事务的业务SQL语句进行拦截;解析每一子事务的业务SQL语句,获得每一子事务的SQL语句类型以及条件作为解析结果;根据每一子事务的解析结果,生成每一子事务的业务SQL语句执行之前的前置数据快照及业务SQL语句执行之后的后置数据快照;在接收到每一子事务回滚请求时,根据每一子事务的前置数据快照及后置数据快照,生成每一子事务的回滚SQL语句;所述回滚SQL语句用于完成回冲操作,可以降低业务的侵入性和工作人员的开发量,降低了开发成本。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号