分布式事务处理方法、装置、计算机系统和可读存储介质与流程

文档序号:27908213发布日期:2021-12-11 06:44阅读:80来源:国知局
分布式事务处理方法、装置、计算机系统和可读存储介质与流程

1.本公开涉及计算机技术领域,更具体地,涉及一种分布式事务处理方法、装置、计算机系统和可读存储介质。


背景技术:

2.随着互联网及大数据时代的发展,越来越多的业务等信息均通过数据库进行存储,随着数据量的不断增加,不可避免的需要进行分库分表,为了保证同一操作针对的不同数据库表的一致性,引入了分布式事务处理机制。
3.在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题,分布式事务所依赖的通讯复杂、分布式系统架构复杂。


技术实现要素:

4.有鉴于此,本公开提供了一种分布式事务处理方法、装置、计算机系统和可读存储介质。
5.本公开的一个方面提供了一种分布式事务处理方法,包括:创建分布式事务,所述分布式事务包括本地事务和远程调用事务;调用所述本地事务;在执行所述本地事务的过程中,通过远程过程调用协议向分布式系统发送针对所述远程调用事务的调用指令;接收所述分布式系统响应所述调用指令执行所述远程调用事务后返回的反馈信息,其中,所述反馈信息用于表征所述远程调用事务的执行结果;在执行所述本地事务的过程结束后,根据所述反馈信息确定针对所述本地事务和所述远程调用事务的执行指令,其中,所述执行指令包括回滚指令或提交指令;响应于所述执行指令,对所述本地事务进行处理;以及将所述执行指令通过远程过程调用协议发送至与所述远程调用事务对应的分布式系统,以实现对所述远程调用事务进行处理。
6.根据本公开的实施例,在执行所述本地事务的过程中,通过远程过程调用协议向分布式系统发送针对所述远程调用事务的调用指令包括:针对所述分布式事务,创建全局事务标识;将所述全局事务标识存储至所述调用指令的头文件中;以及通过远程过程调用协议将包含有所述全局事务标识的头文件的所述调用指令发送至所述分布式系统。
7.根据本公开的实施例,所述远程调用事务为至少两个,所述方法还包括:在接收到所述分布式系统响应所述调用指令执行至少一个所述远程调用事务后返回的反馈信息中包含回滚信息的情况下,结束所述执行所述本地事务的过程。
8.根据本公开的实施例,在执行所述本地事务的过程结束后,根据所述反馈信息确定针对所述本地事务和所述远程调用事务的执行指令包括:在所述反馈信息中具有回滚信息的情况下,确定所述执行指令为所述回滚指令;以及在所述反馈信息中只有提交信息的情况下,确定所述执行指令为所述提交指令。
9.根据本公开的实施例,响应于所述执行指令,对所述本地事务进行处理包括:在所述执行指令为所述回滚指令的情况下,对所述本地事务执行事务回滚操作;以及在所述执
行指令为所述提交指令的情况下,对所述本地事务执行事务提交操作。
10.本公开的另一个方面提供了另一种分布式事务处理方法,其中,所述分布式事务包括本地事务和远程调用事务,所述方法包括:基于远程过程调用协议接收针对所述远程调用事务的调用指令,其中,所述调用指令为在执行所述本地事务的过程中接收得到;响应于所述调用指令,执行所述远程调用事务,输出用于表征所述远程调用事务的执行结果的反馈信息;将所述反馈信息通过远程过程调用协议发送至与所述本地事务对应的分布式系统,以使得所述与所述本地事务对应的分布式系统根据所述反馈信息输出针对所述远程调用事务的执行指令;基于远程过程调用协议接收所述针对所述远程调用事务的执行指令,其中,所述执行指令为在执行所述本地事务的过程结束后接收得到,所述执行指令包括回滚指令或提交指令;以及响应于所述执行指令,对所述远程调用事务进行处理。
11.根据本公开的实施例,所述响应于所述调用指令,执行所述远程调用事务,输出用于表征所述远程调用事务的执行结果的反馈信息包括:在所述执行所述远程调用事务的过程出现异常的情况下,输出具有回滚信息的所述反馈信息;以及在所述执行所述远程调用事务的过程正常的情况下,输出具有提交信息的所述反馈信息。
12.根据本公开的实施例,响应于所述执行指令,对所述远程调用事务进行处理包括:在所述执行指令为所述回滚指令的情况下,对所述远程调用事务执行事务回滚操作;以及在所述执行指令为所述提交指令的情况下,对所述远程调用事务执行事务提交操作。
13.本公开的另一个方面提供了一种分布式事务处理装置,包括:创建模块,用于创建分布式事务,所述分布式事务包括本地事务和远程调用事务;调用模块,用于调用所述本地事务;第一发送模块,用于在执行所述本地事务的过程中,通过远程过程调用协议向分布式系统发送针对所述远程调用事务的调用指令;第一接收模块,用于接收所述分布式系统响应所述调用指令执行所述远程调用事务后返回的反馈信息,其中,所述反馈信息用于表征所述远程调用事务的执行结果;确定模块,用于在执行所述本地事务的过程结束后,根据所述反馈信息确定针对所述本地事务和所述远程调用事务的执行指令,其中,所述执行指令包括回滚指令或提交指令;第一处理模块,用于响应于所述执行指令,对所述本地事务进行处理;以及第二发送模块,用于将所述执行指令通过远程过程调用协议发送至与所述远程调用事务对应的分布式系统,以实现对所述远程调用事务进行处理。
14.本公开的另一个方面提供了又一种分布式事务处理装置,其中,所述分布式事务包括本地事务和远程调用事务,所述装置包括:第二接收模块,用于基于远程过程调用协议接收针对所述远程调用事务的调用指令,其中,所述调用指令为在执行所述本地事务的过程中接收得到;执行模块,用于响应于所述调用指令,执行所述远程调用事务,输出用于表征所述远程调用事务的执行结果的反馈信息;第三发送模块,用于将所述反馈信息通过远程过程调用协议发送至与所述本地事务对应的分布式系统,以使得所述与所述本地事务对应的分布式系统根据所述反馈信息输出针对所述远程调用事务的执行指令;第三接收模块,用于基于远程过程调用协议接收所述针对所述远程调用事务的执行指令,其中,所述执行指令为在执行所述本地事务的过程结束后接收得到,所述执行指令包括回滚指令或提交指令;以及第二处理模块,用于响应于所述执行指令,对所述远程调用事务进行处理。
15.本公开的另一方面提供了一种计算机系统,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使
得所述一个或多个处理器实现如上所述的方法。
16.本公开的另一方面提供了一种计算机可读存储介质,其上存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
17.本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
18.根据本公开的实施例,通过采用了创建分布式事务,分布式事务包括本地事务和远程调用事务;调用本地事务;在执行本地事务的过程中,通过远程过程调用协议向分布式系统发送针对远程调用事务的调用指令;接收分布式系统响应调用指令执行远程调用事务后返回的反馈信息,其中,反馈信息用于表征远程调用事务的执行结果;在执行本地事务的过程结束后,根据反馈信息确定针对本地事务和远程调用事务的执行指令,其中,执行指令包括回滚指令或提交指令;响应于执行指令,对本地事务进行处理;以及将执行指令通过远程过程调用协议发送至与远程调用事务对应的分布式系统,以实现对远程调用事务进行处理的技术手段,由于本地事务和远程调用事务之间的通讯均通过远程过程调用协议实现,通过该协议可以同时实现对远程调用事务的调用和处理,减少了额外的通讯配置,所以至少部分地克服了通讯复杂的技术问题,进而达到了降低通讯复杂度甚至是分布式系统架构复杂度的技术效果。
附图说明
19.通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
20.图1示意性示出了根据本公开实施例的可以应用分布式事务处理方法的示例性系统架构;
21.图2示意性示出了根据本公开实施例的针对事务发起者方的分布式事务处理方法的流程图;
22.图3示意性示出了根据本公开实施例的针对事务参与者方的分布式事务处理方法的流程图;
23.图4示意性示出了根据本公开实施例的可以实现完整的分布式事务处理方法的系统框图;
24.图5示意性示出了根据本公开实施例的可以实现完整的分布式事务处理方法的流程图;
25.图6示意性示出了根据本公开的实施例的针对事务发起者方的分布式事务处理装置的框图;
26.图7示意性示出了根据本公开的实施例的针对事务参与者方的分布式事务处理装置的框图;以及
27.图8示意性示出了根据本公开实施例的适于实现分布式事务处理方法的计算机系统的框图。
具体实施方式
28.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性
的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
29.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
30.在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
31.在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。在使用类似于“a、b或c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b或c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。
32.互联网时代背景下,想要完成系统所需要的功能,系统的架构往往非常复杂,例如可能会由原来单一的系统,拆分为多个分布式系统,这在种情况下,为了保证分布式系统中数据的一致性,分布式事务显得非常重要。不同的企业、公司的分布式事务的实现方法往往采用保持分布式事务最终一致,或者是采用tcc(一种分布式事务处理机制,包括try、confirm、cancel三个阶段)等方法实现。
33.然而,在实现本公开构思的过程中,发明人发现,通过现有技术实现的分布式事务,开发、部署复杂,系统架构复杂。例如,一些外部框架对系统的业务侵入大,实现起来也比较复杂,如tcc事务框架,为了达到分布式事务的目的,完成一个业务需求,需要拆分为try、confirm、cancel三个步骤来实现,每个步骤均需要深入业务做出精心考虑,然后将tcc事务框架和业务配合起来达到最终目的。再如,一些框架虽然业务侵入有改善,但系统中引入繁多的组件如redis(一种开源的数据库)、额外netty(一种网络应用框架)通讯等,造成系统的配制复杂,通讯及维护等不方便。
34.本公开的实施例提供了一种布式事务处理方法、装置、计算机系统和可读存储介质。该方法包括创建分布式事务,分布式事务包括本地事务和远程调用事务;调用本地事务;在执行本地事务的过程中,通过远程过程调用协议向分布式系统发送针对远程调用事务的调用指令;接收分布式系统响应调用指令执行远程调用事务后返回的反馈信息,其中,反馈信息用于表征远程调用事务的执行结果;在执行本地事务的过程结束后,根据反馈信息确定针对本地事务和远程调用事务的执行指令,其中,执行指令包括回滚指令或提交指令;响应于执行指令,对本地事务进行处理;以及将执行指令通过远程过程调用协议发送至与远程调用事务对应的分布式系统,以实现对远程调用事务进行处理。
35.图1示意性示出了根据本公开实施例的可以应用分布式事务处理方法的示例性系统架构100。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助
本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
36.如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105,终端设备101、102、103和服务器105均可作为一个分布式系统,其中的任意至少两者之间均可形成一个分布式事务。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等等。
37.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端和/或社交平台软件等。
38.终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
39.服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所访问的业务提供支持的后台管理服务器。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的指令或反馈信息等)反馈给终端设备。
40.需要说明的是,本公开实施例所提供的分布式事务处理方法一般可以由终端设备101、102或103执行,或者也可以由不同于终端设备101、102、或103的其他终端设备执行。相应地,本公开实施例所提供的分布式事务处理装置电可以设置于终端设备101、102或103中,或设置于不同于终端设备101、102或103的其他终端设备中。
41.例如,本地事务可以是终端设备101、102、或103中的任意一个(例如,终端设备101,但不限于此)的事务,或者是与终端设备101相关联的外部设备的事务。然后,终端设备101可以在本地执行本公开实施例所提供的分布式事务处理方法,或者将本地事务发送到其他终端设备、服务器、或服务器集群,并由接收该本地事务的其他终端设备、服务器、或服务器集群来执行本公开实施例所提供的分布式事务处理方法。
42.或者,本公开实施例所提供的分布式事务处理方法也可以由服务器105执行。相应地,本公开实施例所提供的分布式事务处理装置一般可以设置于服务器105中。本公开实施例所提供的分布式事务处理方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的分布式事务处理装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
43.例如,远程调用事务可以是服务器105中的事务,或者是与服务器105相关联的其他服务器的事务。然后,服务器105可以在本地执行本公开实施例所提供的分布式事务处理方法,或者将远程调用事务发送到其他终端设备、服务器、或服务器集群,并由接收该远程调用事务的其他终端设备、服务器、或服务器集群来执行本公开实施例所提供的分布式事务处理方法。
44.应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
45.图2示意性示出了根据本公开实施例的针对事务发起者方的分布式事务处理方法
的流程图。
46.如图2所示,该方法包括操作s201~s207。
47.在操作s201,创建分布式事务,分布式事务包括本地事务和远程调用事务。
48.根据本公开的实施例,由事务发起者创建分布式事务,该分布式事务例如为由a账户发起的从a账户至b账户的转账业务,则a账户作为事务发起者,针对a账户的转账操作及转账结果即为本地事务,与b账户相关的软件或系统作为事务参与者,针对b账户的相关操作即为在执行a账户的本地事务时需要调用的远程调用事务。
49.在操作s202,调用本地事务。
50.根据本公开的实施例,a账户发起转账业务的同时调用本地事务开始执行转账操作,该调用本地事务例如可以为调用并获取a账户的账户余额,以及调用并执行对该余额进行转账运算(即将当前余额减去转账数额得到转账后的余额数值)的程序段。需要说明的是,此处转账运算的结果并不会直接展示在用户可见的界面上,此处仅是执行了实现本地事务处理(此处为针对a账户的相关处理)的程序中的其中一段程序运算而已,要实现最终的结果展示,需要在执行完成针对本地事务和远程调用事务的所有程序后方才展示。
51.在操作s203,在执行本地事务的过程中,通过远程过程调用协议向分布式系统发送针对远程调用事务的调用指令。
52.根据本公开的实施例,为保持分布式事务(即a账户和b账户)中数据的一致性,在对a账户实施操作的过程中通常需要对b账户实施相应的操作,因此,事务发起者(即a账户方)不可避免的需要与b账户相关的系统实现通信。rpc(远程过程调用)协议是分布式系统自有的可实现远程通信的协议,可以理解为分布式系统自带rpc框架,实现远程服务间的通信。本实施例中即直接通过rpc协议向事务参与者方发送针对b账户(远程调用事务)的调用指令。
53.在操作s204,接收分布式系统响应调用指令执行远程调用事务后返回的反馈信息,其中,反馈信息用于表征远程调用事务的执行结果。
54.根据本公开的实施例,基于分布式事务的数据一致性要求,事务发起者(a账户方)还需接收事务参与者(b账户方)的事务执行结果,该接收行为同样基于rpc协议实现,以便进入下一步操作。
55.在操作s205,在执行本地事务的过程结束后,根据反馈信息确定针对本地事务和远程调用事务的执行指令,其中,执行指令包括回滚指令或提交指令。
56.根据本公开的实施例,执行本地事务的过程包括上述的操作s202~s204,并根据操作s204中得到的事务参与者(b账户方)的事务执行结果来确定针对本地事务和远程调用事务(即a、b账户)的执行指令。其中,回滚指令例如为对本次分布式事务处理过程中已执行的程序进行回滚操作,例如可以包括对操作s202中的转账运算执行回滚指令,以使得a账户在程序中的账户余额恢复至原始余额等,提交指令例如为对本次分布式事务处理过程中已执行的程序进行提交,例如可以包括对操作s202中的转账运算执行提交指令,以使得a账户的账户余额以转账运算后的余额数值为准。
57.需要说明的是,上述确定执行指令的过程例如还可以为同时根据本地事务和远程调用事务的执行结果进行确定。
58.在操作s206,响应于执行指令,对本地事务进行处理。
59.在操作s207,将执行指令通过远程过程调用协议发送至与远程调用事务对应的分布式系统,以实现对远程调用事务进行处理。
60.根据本公开的实施例,在通过操作s205确定了针对本地事务和远程调用事务(即a、b账户)的执行指令后,对本地事务和远程调用事务均执行该执行指令以实现对分布式事务的处理。例如可以为对a、b账户均执行提交指令,完成转账行为,或者对a、b账户均执行回滚指令,表示未成功完成上述转账行为。需要说明的是,发送至远程调用事务的执行指令同样是通过rpc协议来实现。
61.通过本公开的上述实施例,由于分布式事务的远程通讯均通过自身的rpc框架实现,而无须引入其它的通讯机制,减少了通讯依赖,从而减小了分布式系统的复杂性,并可有效解决实现分布式事务时的开发、部署复杂的问题。
62.下面结合更具体的实施例对图2所示的方法做进一步说明。
63.根据本公开的实施例,上述操作s203包括:针对分布式事务,创建全局事务标识;将全局事务标识存储至调用指令的头文件中;以及通过远程过程调用协议将包含有全局事务标识的头文件的调用指令发送至分布式系统。
64.根据本公开的实施例,rpc调用远程方法时,首先创建一个全局唯一的事务id(即全局事务标识),并存储至rpc方法的头文件中,用于在整个分布式事务中传播。其中,rpc方法例如可以包括调用指令,全局事务标识用于确定每一步操作均针对的是哪次分布式事务,例如在转账申请被发起了多次的情况下,就需要通过全局事务标识来确定每一步操作均是针对的哪次转账事务。
65.需要说明的是,rpc方法不仅限于上述的调用指令,例如还可以是操作s204返回的反馈信息,或是操作s207中的执行指令等所有实现事务发起者和事务参与者之间通讯的信息或指令。
66.根据本公开的实施例,上述的远程调用事务为至少两个,上述的分布式事务处理方法还包括:在接收到分布式系统响应上述调用指令执行至少一个远程调用事务后返回的反馈信息中包含回滚信息的情况下,结束执行本地事务的过程。
67.根据本公开的实施例,上述操作s205包括:在反馈信息中具有回滚信息的情况下,确定执行指令为回滚指令;以及在反馈信息中只有提交信息的情况下,确定执行指令为提交指令。
68.根据本公开的实施例,本地事务的执行过程结束的情况例如可以包括本地事务和远程调用事务均正常执行完毕后因程序结束引发的本地事务正常结束的情况,以及本地事务和/或远程调用事务在被执行过程中因出现异常触发中断操作而使得本地事务中途结束的情况。无论是何种情况,均需在本地事务结束后根据远程调用事务的执行结果,或根据本地事务和远程调用事务的执行结果确定最终的执行指令。其中的异常例如可以包括外界事件或硬件引发的异常,以及程序引发的异常等。结合具体实施例,该异常例如可以为转账数额超出可转账的最大范围,或是系统维护阶段禁止转账等。
69.根据本公开的实施例,上述操作s206包括:在上述执行指令为回滚指令的情况下,对本地事务执行事务回滚操作;以及在上述执行指令为提交指令的情况下,对本地事务执行事务提交操作。
70.通过本公开的上述实施例,由于采用fail-fast思路,在事务发起者监测到一个事
务参与者回滚事务的情况下,就直接结束本地事务,可以有效避免后续事务回滚时的通讯消耗,提高了分布式事务的整体性能。
71.需要说明的是,上述在事务发起者方进行分布式事务处理方法的过程中,所有的调用和执行操作均仅是在程序上的操作,对程序的执行结果并未真正反映到用户可见的界面上,只有在后续对本地事务和远程调用事务进行处理操作时,才真正将程序的执行结果反映到了用户界面上。针对事务参与者方的调用、执行和处理操作遵循同样的定义。
72.图3示意性示出了根据本公开实施例的针对事务参与者方的分布式事务处理方法的流程图。
73.如图3所示,该方法包括操作s301~s305。
74.在操作s301,基于远程过程调用协议接收针对远程调用事务的调用指令,其中,调用指令为在执行本地事务的过程中接收得到。
75.根据本公开的实施例,该操作s301接前述操作s203,通过rpc协议接收事务发起者发送的调用指令。参见操作s203,该调用指令在执行本地事务的过程中被发送,以便可以通过对远程调用事务的操作实现对本地事务的完整执行过程。
76.在操作s302,响应于调用指令,执行远程调用事务,输出用于表征远程调用事务的执行结果的反馈信息。
77.根据本公开的实施例,对远程调用事务的执行过程类似于前述操作s202中调用本地事务的过程,结合前述实施例,该执行远程调用事务例如可以为调用并获取b账户的账户余额,以及调用并执行对b账户的账户余额进行转账运算(将b账户的当前余额加上转账数额得到转账后的余额数值)的程序段。需要说明的是,此处针对b账户的转账运算的结果也不会直接展示在用户可见的界面上,此处仅是执行了实现远程调用事务处理(此处为针对b账户的相关处理)的程序中的其中一段程序运算而已,要实现最终的结果展示,同样需要在执行完成针对本地事务和远程调用事务的所有程序后方才展示。
78.在操作s303,将反馈信息通过远程过程调用协议发送至与本地事务对应的分布式系统,以使得与本地事务对应的分布式系统根据反馈信息输出针对远程调用事务的执行指令。
79.根据本公开的实施例,该操作s303即对应前述操作s204~s205,其相关实施例在上文中已有表述,在此不再赘述。
80.在操作s304,基于远程过程调用协议接收针对远程调用事务的执行指令,其中,执行指令为在执行本地事务的过程结束后接收得到,执行指令包括回滚指令或提交指令。
81.在操作s305,响应于执行指令,对远程调用事务进行处理。
82.根据本公开的实施例,上述操作s304~s305对应前述操作s207,其相关实施例在上文中已有表述,在此不再赘述。
83.需要特别说明的是,如上述操作s303和s304,远程调用事务和本地事务的通讯均通过rpc协议实现。
84.通过本公开的上述实施例,由于分布式事务的远程通讯均通过自身的rpc框架实现,而无须引入其它的通讯机制,减少了通讯依赖,从而减小了分布式系统的复杂性,并可有效解决实现分布式事务时的开发、部署复杂的问题。
85.根据本公开的实施例,上述操作s302包括:在执行远程调用事务的过程出现异常
的情况下,输出具有回滚信息的反馈信息;以及在执行远程调用事务的过程正常的情况下,输出具有提交信息的反馈信息。
86.需要说明的是,上述执行远程调用事务的过程出现异常的情况例如可以为调用并执行因转账数额过大或系统原因等触发异常的程序段,在此种情况下得到的反馈信息包含针对远程调用事务(b账户)相关操作的回滚信息。此时,前述操作s204接收到的反馈信息中包含回滚信息,事务发起者接收到该具有回滚信息的反馈信息后,可以终止本地事务的执行操作。
87.通过本公开的上述实施例,由于存在一个事务参与者回滚事务的情况下,就先回滚,并将结果反馈给事务发起者,并由事务发起者直接结束本地事务,可以有效避免后续事务回滚时的通讯消耗,提高了分布式事务的整体性能。
88.根据本公开的实施例,上述操作s305包括:在执行指令为回滚指令的情况下,对远程调用事务执行事务回滚操作;以及在执行指令为提交指令的情况下,对远程调用事务执行事务提交操作。
89.通过结合上述事务参与者和事务发起者相互之间的操作,即可在保持数据一致性的前提下实现对整个分布式事务的合理性处理。
90.下面参考图4~图5,并结合完整实施例对图2和图3所示的方法做进一步说明。
91.图4示意性示出了根据本公开实施例的可以实现完整的分布式事务处理方法的系统框图。
92.如图4所示,分布式事务例如可以为由系统1、系统2和系统3各自的本地事务组合形成。其中,系统1作为事务发起者(例如为前述的a账户),系统2和系统3作为事务参与者(例如为前述的b账户),在事务发起者(如系统1)发起一个本地事务的情况下,会调用相关的事务参与者(如系统2和系统3)的本地事务。每个系统中均可以包括数据库、数据库连接池、连接代理、本地事务和事务分派等模块,在事务发起者中还可以同时设置全局事务协调模块。
93.根据本公开的实施例,数据库例如可以为mysql,oracle等常见的数据库。数据库连接池例如可以为druid、dbcp、c3p0等常见的数据库连接池,用于对数据库已建立的连接进行缓存,以使得后续在需要调用数据库的情况下可以直接从数据库连接池中寻找已建立连接的数据库并直接调用,而无需重复建立连接。连接代理(connectionproxy)在新建数据库连接(connection)时返回代理对象,代理对象从数据库连接池中获取,并由该代理对象接管connection的提交、回滚、关闭、设置自动提交等方法,实现全局事务的控制。本地事务例如可以为由spring(一种轻量级的开源框架)事务管理器实现,本地事务的执行由连接代理来处理。事务分派负责全局事务id的传播,并收集所有的事务参与者信息,以及决定调用真正的业务方法,实现对事务发起者和事务参与者中的本地事务进行提交、回滚等操作。全局事务协调设置于事务发起者中,负责针对事务发起者、事务参与者的本地事务执行提交/回滚操作,进而实现全局事务(包括所有的事务发起者、事务参与者的本地事务)的提交或回滚,以保证分布式事务的一致性。
94.结合本公开的上述实施例,在事务发起者所在的系统发起一个分布式事务的情况下,执行本地的分布式事务,并依次调用事务参与者所在的系统中的远程调用事务,各个系统按正常流程操作数据库,但并不进行真正的数据提交。事务发起者中的全局事务协调模
块根据针对远程调用事务的处理结果发起真正的提交或者是回滚指令,然后各个系统根据此指令进行相应的提交/回滚操作。
95.通过本公开的上述实施例,由于将全局事务协调模块直接设置在了事务发起者系统中,使得事务发起者可以同时负责整体分布式事务的协调,从而无需在分布式系统中引入额外的协调模块,降低了分布式系统架构的复杂度。
96.综合以上实施例,由于分布式事务的整个过程基于分布式系统自有的rpc框架实现,且无需引入其他额外的通讯,可进一步降低分布式事务部署、开发以及分布式系统架构等的复杂性。
97.基于图4所示的系统框图,图5示意性示出了根据本公开实施例的可以实现完整的分布式事务处理方法的流程图。
98.结合图4和图5所示,该方法例如可以包括s501~s509。
99.在操作s501,开启事务。
100.根据本公开的实施例,由事务发起者开启本地事务,本地事务开启后访问数据库,该访问数据库的过程例如可以包括本地(即事务发起者)的数据库创建连接,该连接缓存至数据库缓冲池中,生成代理对象,连接代理通过该代理对象接管数据库连接的提交、回滚、关闭、及自动提交等方法。需要说明的是,在该阶段,需要时候首先设置自动提交为暂时关闭的状态,以使得后续在调用及执行提交操作的过程中并不真正进行提交处理。
101.在操作s502,创建全局事务id。
102.根据本公开的实施例,由事务发起者中的全局事务协调模块负责该全局事务id(即上述全局事务标识)的创建,用于实现在该全局事务id整个分布式事务中传播。
103.在操作s503,拦截远程rpc方法,设置头文件。
104.根据本公开的实施例,由事务发起者中的事务分派模块设置上述全局事务id到远程rpc方法(此处例如可以特指为上述针对远程调用事务的调用指令)的头文件header,rpc框架中的拦截器同时发生作用,拦截该针对远程调用事务的调用指令并保存,使得该事务发起者的事务分派模块中保存有该全局事务id与该拦截的调用指令的关系,以便于确定每一条调用指令相对应的归属事务,同时方便后续可以根据实际分布式事务的执行情况确定相应分布式事务的提交/回滚操作。
105.需要说明的是,header中例如可以包括try、commit和rollback三个参数,本实施例中通过在header中设置try=true,来确定远程rpc方法为上述的针对远程调用事务的调用指令。
106.在操作s504,解析header。
107.根据本公开的实施例,事务参与者(即远程系统)接收到操作s503的远程rpc方法,解析header信息,若解析得到try=true,则确定该远程rpc方法为针对事务参与者中的远程调用事务的调用指令。
108.在操作s505,调用并执行目标业务方法,返回反馈信息。
109.根据本公开的实施例,在确定上述远程rpc方法为针对远程调用事务的调用指令的情况下,开启该远程调用事务(即事务参与者的本地事务),调用目标业务方法。如果目标业务方法异常,事务需要回滚(rollback),则该事务参与者的本地事务进行回滚,然后向事务发起者返回反馈信息,返回之前将当前事务参与者的本地ip、服务端口和当前全局事务
id设置到响应返回(即反馈信息)的header当中,并在该反馈信息的header中设置该事务参与者的回滚标识。如果目标业务方法正常,事务需要提交(commit),则该事务参与者的本地事务进行提交(此处并未真正提交处理),然后向事务发起者返回反馈信息,返回之前将当前事务参与者的本地ip、服务端口和当前全局事务id设置到反馈信息的header当中,并在该反馈信息的header中设置该事务参与者的待提交标识。
110.在操作s506,解析header,结束本地事务。
111.根据本公开的实施例,事务发起者针对接收到的操作s505中的反馈信息,进行头文件(即header)解析,通过解析得到并记录相应的全局事务id对应的事务参与者需要回滚还是提交,如果header信息表明事务参与者需要回滚,则提前结束事务发起者的本地方法,不再执行后面逻辑(如调用其它远程事务等),结束本地事务。
112.需要说明的是,如果header信息的解析结构中未出现回滚标识,则继续执行本地方法及其后面的逻辑,直至本地方法执行完成,或在下一次的header解析中出现回滚标识的情况下,结束本地事务。
113.在操作s507,确定执行指令,处理本地事务。
114.根据本公开的实施例,在本地事务结束的情况下,根据全局事务id,检查事务发起者、事务参与者当中是否有回滚的事务标识:在有回滚标识的情况下,事务发起者的本地事务进行真实回滚,并恢复自动提交方法、释放数据库连接,同时向该全局事务id对应的其它待提交的事务参与者发送回滚指令;在无回滚标识的情况下,事务发起者的本地事务进行真实提交,并恢复自动提交方法、释放数据库连接,同时向该全局事务id对应的其它待提交的事务参与者发送提交指令。
115.在操作s508,根据执行指令调用远程方法。
116.根据本公开的实施例,根据与全局事务id相关的事务参与者的ip、服务端口再次直接调用远程rpc方法,以实现对远程调用事务的回滚、提交处理。其中,直接调用的过程例如可以为通过rpc框架dubbo的直连、jsf的直连、http://ip:port等实现,同时因本次远程rpc方法仅是对之前未真正提交/回滚的业务逻辑进行真正的提交/回滚操作,并不执行新的业务逻辑,因此该远程rpc方法(即执行指令)的参数可以直接传空。
117.需要说明的是,本实施例中通过根据操作s507中的结果在该远程rpc方法的header中设置commit=true或rollback=true,以确定该远程rpc方法为发送至远程调用事务的执行指令。
118.在操作s509,处理远程调用事务。
119.根据本公开的实施例,事务参与者(即远程系统)接收到操作s508的执行指令,并接入上述操作s504,解析header信息,显然此处解析结果为commit=true或rollback=true,然后根据该解析结果通过事务参与者的连接代理实现对远程调用事务的真正的提交/回滚处理,之后恢复自动提交,释放数据库连接。
120.通过本公开的上述实施例,由于在分布式事务回滚/提交时,采用业务自身的rpc框架通讯、减少了依赖。由事务发起者自身负责分布式事务的协调,降低了架构的复杂度。同时,事务参与者回滚时,直接回滚再反馈结果给事务协调器(即事务发起者),减少了后续回滚通讯消耗,提高了分布式事务的整体性能。
121.图6示意性示出了根据本公开的实施例的针对事务发起者方的分布式事务处理装
置的框图。
122.如图6所示,分布式事务处理装置600,包括创建模块610、调用模块620、第一发送模块630、第一接收模块640、确定模块650、第一处理模块660和第二发送模块670。
123.创建模块610,用于创建分布式事务,分布式事务包括本地事务和远程调用事务。
124.调用模块620,用于调用本地事务。
125.第一发送模块630,用于在执行本地事务的过程中,通过远程过程调用协议向分布式系统发送针对远程调用事务的调用指令。
126.第一接收模块640,用于接收分布式系统响应调用指令执行远程调用事务后返回的反馈信息,其中,反馈信息用于表征远程调用事务的执行结果。
127.确定模块650,用于在执行本地事务的过程结束后,根据反馈信息确定针对本地事务和远程调用事务的执行指令,其中,执行指令包括回滚指令或提交指令。
128.第一处理模块660,用于响应于执行指令,对本地事务进行处理。
129.第二发送模块670,用于将执行指令通过远程过程调用协议发送至与远程调用事务对应的分布式系统,以实现对远程调用事务进行处理。
130.根据本公开的实施例,上述第一发送模块包括创建子模块、存储子模块和发送子模块。
131.创建子模块,用于针对分布式事务,创建全局事务标识。
132.存储子模块,用于将全局事务标识存储至调用指令的头文件中。
133.发送子模块,用于通过远程过程调用协议将包含有全局事务标识的头文件的调用指令发送至分布式系统。
134.根据本公开的实施例,上述远程调用事务为至少两个,上述分布式事务处理装置还包括结束模块。
135.结束模块,用于在接收到分布式系统响应调用指令执行至少一个远程调用事务后返回的反馈信息中包含回滚信息的情况下,结束执行本地事务的过程。
136.根据本公开的实施例,上述确定模块包括第一确定子模块和第二确定子模块。
137.第一确定子模块,用于在反馈信息中具有回滚信息的情况下,确定执行指令为回滚指令。
138.第二确定子模块,用于在反馈信息中只有提交信息的情况下,确定执行指令为提交指令。
139.根据本公开的实施例,上述第一处理模块包括第一回滚子模块和第一提交子模块。
140.第一回滚子模块,用于在执行指令为回滚指令的情况下,对本地事务执行事务回滚操作。
141.第一提交子模块,用于在执行指令为提交指令的情况下,对本地事务执行事务提交操作。
142.图7示意性示出了根据本公开的实施例的针对事务参与者方的分布式事务处理装置的框图。
143.如图7所示,分布式事务处理装置700,包括第二接收模块710、执行模块720、第三发送模块730、第三接收模块740和第二处理模块750。
144.第二接收模块710,用于基于远程过程调用协议接收针对远程调用事务的调用指令,其中,调用指令为在执行本地事务的过程中接收得到。
145.执行模块720,用于响应于调用指令,执行远程调用事务,输出用于表征远程调用事务的执行结果的反馈信息。
146.第三发送模块730,用于将反馈信息通过远程过程调用协议发送至与本地事务对应的分布式系统,以使得与本地事务对应的分布式系统根据反馈信息输出针对远程调用事务的执行指令。
147.第三接收模块740,用于基于远程过程调用协议接收针对远程调用事务的执行指令,其中,执行指令为在执行本地事务的过程结束后接收得到,执行指令包括回滚指令或提交指令。
148.第二处理模块750,用于响应于执行指令,对远程调用事务进行处理。
149.根据本公开的实施例,上述执行模块包括第一执行子模块和第二执行子模块。
150.第一执行子模块,用于在执行远程调用事务的过程出现异常的情况下,输出具有回滚信息的反馈信息。
151.第二执行子模块,用于在执行远程调用事务的过程正常的情况下,输出具有提交信息的反馈信息。
152.根据本公开的实施例,上述第二处理模块包括第二回滚子模块和第二提交子模块。
153.第二回滚子模块,用于在执行指令为回滚指令的情况下,对远程调用事务执行事务回滚操作。
154.第二提交子模块,用于在执行指令为提交指令的情况下,对远程调用事务执行事务提交操作。
155.根据本公开的实施例的模块、子模块中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
156.例如,创建模块610、调用模块620、第一发送模块630、第一接收模块640、确定模块650、第一处理模块660和第二发送模块670中的任意多个可以合并在一个模块/子模块中实现,或者其中的任意一个模块/子模块可以被拆分成多个模块/子模块。或者,这些模块/子模块中的一个或多个模块/子模块的至少部分功能可以与其他模块/子模块的至少部分功能相结合,并在一个模块/子模块中实现。根据本公开的实施例,创建模块610、调用模块620、第一发送模块630、第一接收模块640、确定模块650、第一处理模块660和第二发送模块670中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以
通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,创建模块610、调用模块620、第一发送模块630、第一接收模块640、确定模块650、第一处理模块660和第二发送模块670中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
157.需要说明的是,本公开的实施例中分布式事务处理装置部分与本公开的实施例中分布式事务处理方法部分是相对应的,分布式事务处理装置部分的描述具体参考分布式事务处理方法部分,在此不再赘述。
158.图8示意性示出了根据本公开实施例的适于实现分布式事务处理方法的计算机系统的框图。图8示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
159.如图8所示,根据本公开实施例的计算机系统800包括处理器801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
160.在ram 803中,存储有系统800操作所需的各种程序和数据。处理器801、rom 802以及ram 803通过总线804彼此相连。处理器801通过执行rom 802和/或ram 803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom 802和ram 803以外的一个或多个存储器中。处理器801也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
161.根据本公开的实施例,系统800还可以包括输入/输出(i/o)接口805,输入/输出(i/o)接口805也连接至总线804。系统800还可以包括连接至i/o接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
162.根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
163.本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/
系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
164.根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质。例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
165.例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的rom 802和/或ram 803和/或rom 802和ram 803以外的一个或多个存储器。
166.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
167.以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1