CN114327799A - 分布式事务处理方法及装置、电子设备、存储介质 - Google Patents
分布式事务处理方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN114327799A CN114327799A CN202111629789.3A CN202111629789A CN114327799A CN 114327799 A CN114327799 A CN 114327799A CN 202111629789 A CN202111629789 A CN 202111629789A CN 114327799 A CN114327799 A CN 114327799A
- Authority
- CN
- China
- Prior art keywords
- transaction
- branch
- preprocessing
- message
- distributed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的实施例揭示了一种分布式事务处理方法及装置、电子设备、存储介质,该方法包括:分布式事务发起方获取分布式事务包含的多个分支事务,并生成多个分支事务各自对应的预处理请求,将生成的预处理请求分别发送至对应的分布式事务参与方;分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;分布式事务发起方获取这多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息,将事务处理消息添加至消息中间件;分布式事务参与方从消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。本申请实施例的技术方案节约资源,提升分布式事务的处理效率。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种分布式事务处理方法及装置、电子设备、存储介质。
背景技术
事务是指由一个或多个资源管理操作构成的一个操作序列。分布式事务是指操作序列中的操作涉及多个数据库的事务。
为了保证事务的一致性,相关技术中,部署独立的分布式事务协调方,分布式事务协调方与分布式事务发起方以及多个分布式事务参与方交互,用于把多个分布式事务参与方的处理结果进行协调,推进分布式事务的进行。但是,在分布式事务的处理过程中,受限于分布式事务协调方本身的影响,存在性能瓶颈问题,且分布式事务协调方、分布式事务发起方以及多个分布式事务参与方之间交互过程繁琐、交互数据多。
发明内容
为解决上述技术问题,本申请的实施例提供了一种分布式事务处理方法及装置、电子设备、存储介质、程序产品。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种分布式事务处理方法,所述方法包括:
接收分布式事务发起方发送的预处理请求,所述预处理请求由所述分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;
对预处理请求所对应的分支事务进行预处理;
从消息中间件中获取事务处理消息,所述事务处理消息由所述分布式事务发起方根据所述多个分支事务各自的预处理结果生成;
根据获取到的事务处理消息进行分支事务的回滚或提交。
根据本申请实施例的一个方面,提供了一种分布式事务处理方法,所述方法包括:
获取分布式事务包含的多个分支事务,并生成所述多个分支事务各自对应的预处理请求;
将生成的预处理请求分别发送至对应的分布式事务参与方,以使所述分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;
获取所述多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;
将所述事务处理消息添加至消息中间件,以使所述分布式事务参与方从所述消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
根据本申请实施例的一个方面,提供了一种分布式事务处理装置,所述装置包括:
接收模块,配置为接收分布式事务发起方发送的预处理请求,所述预处理请求由所述分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;
预处理模块,配置为对预处理请求所对应的分支事务进行预处理;
获取模块,配置为从消息中间件中获取事务处理消息,所述事务处理消息由所述分布式事务发起方根据所述多个分支事务各自的预处理结果生成;
处理模块,配置为根据获取到的事务处理消息进行分支事务的回滚或提交。
根据本申请实施例的一个方面,提供了一种分布式事务处理装置,所述装置包括:
请求生成模块,配置为获取分布式事务包含的多个分支事务,并生成所述多个分支事务各自对应的预处理请求;
发送模块,配置为将生成的预处理请求分别发送至对应的分布式事务参与方,以使所述分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;
消息生成模块,配置获取所述多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;
添加模块,配置为将所述事务处理消息添加至消息中间件,以使所述分布式事务参与方从所述消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
根据本申请实施例的一个方面,提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如前述任一项所述的方法。
根据本申请实施例的一个方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被电子设备的处理器执行时,使电子设备执行前述任一项所述的方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现前述任一项所述的方法。
在本申请的实施例所提供的技术方案中,分布式事务发起方获取分布式事务包含的多个分支事务,并生成多个分支事务各自对应的预处理请求,将生成的预处理请求分别发送至对应的分布式事务参与方;分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;分布式事务发起方获取这多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息,将事务处理消息添加至消息中间件;分布式事务参与方从消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交,从而对分布式事务进行处理,这样,一方面,通过消息中间件来传递事务处理消息,以进行事务的回滚或提交,无需部署独立的分布式事务协调方,避免了性能瓶颈问题,节约了处理资源,且由于消息中间件的异步解耦性,使得分布式事务的执行过程能够以异步方式进行,提升了系统的性能;另一方面,交互过程简单,交互数据量少,节约了网络资源,提升了分布式事务处理效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本申请的一示例性实施例示出的分布式事务发起方侧的分布式事务处理方法的流程图;
图2是本申请的一示例性实施例示出的分布式事务参与方侧的分布式事务处理方法的流程图;
图3是图2所示实施例中的步骤S220在一示例性实施例中的流程图;
图4是本申请的一示例性实施例示出的分布式事务参与方侧的另一分布式事务处理方法的流程图;
图5是图2所示实施例中的步骤S240在一示例性实施例中的流程图;
图6是本申请的一示例性实施例示出的分布式事务处理方法的流程图;
图7是本申请的一示例性实施例示出的回滚的流程图;
图8是本申请的一示例性实施例示出的空回滚的流程图;
图9是本申请的一示例性实施例示出的回滚和预处理的流程图;
图10是本申请的一示例性实施例示出的分布式事务处理装置的结构示意图;
图11是本申请的一示例性实施例示出的另一分布式事务处理装置的结构示意图;
图12示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
还需要说明的是:在本申请中提及的“多个”是指两个或者两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
分布式事务是指操作序列中的操作涉及多个数据库的事务。为了保证事务的一致性,相关技术中,部署独立的分布式事务协调方,分布式事务协调方与分布式事务发起方以及多个分布式事务参与方交互,用于把多个分布式事务参与方的处理结果进行协调,推进分布式事务的进行。但是,在分布式事务的处理过程中,受限于分布式事务协调方本身的影响,存在性能瓶颈问题,并且,分布式事务协调方、分布式事务发起方以及多个分布式事务参与方之间交互过程繁琐、交互数据多。例如,在一个示例中,分布式事务的处理过程包括:分布式事务发起方向分布式事务协调方发送开始请求;分布式事务协调方基于接收到的开始请求生成分布式事务的标识信息,并将生成的分布式事务的标识信息发送至分布式事务发起方;分布式事务发起方基于分布式事务的标识信息调用分布式事务参与方;分布式事务参与方在分布式事务协调方中进行对应分支事务的注册,对分支事务进行预处理,向分布式事务协调方和分布式事务发起方报备分支事务的状态;分布式事务发起方基于分布式事务包含多个分支事务的预处理情况,向分布式事务协调方发送提交或回滚消息;分布式事务协调方基于提交或回滚消息,向分布式事务参与方发送提交或回滚指令,以使分布式事务参与方基于提交或回滚指令进行分支事务的提交或回滚。
基于此,本申请的实施例提供了一种分布式事务处理方法及装置、电子设备、存储介质,可以提升分布式事务处理效率,节约资源。
参见图1,图1是本申请的一示例性实施例示出的一种分布式事务处理方法的流程图,该方法可以由分布式事务发起方执行。
需要说明的是,分布式事务是指操作序列中的操作涉及多个数据库的事务,其中,数据库可以是分布式数据库、也可以是云数据库等,当然,还可以是其他类型的数据库。
分布式事务包含多个分支事务,由多个节点协同处理,这多个节点包括分布式事务发起方和分布式事务参与方;其中,分布式事务发起方(TM,Transaction Manager),其为分布式事务的发起节点,可以调用分布式事务参与方处理分支事务;分布式事务参与方(RM,Resource Manager),其为分布式事务的参与节点,可以接受分布式事务发起方的调用,处理分支事务。分布式事务发起方同时也可以是分布式事务参与方,用于处理分支事务。
其中,分布式事务发起方可以是任意具备发起分布式事务功能的电子设备,例如,可以是终端设备或服务器。终端设备包括但不限于智能手机、平板、笔记本电脑、计算机、智能语音交互设备、智能家电、车载终端等等;服务器可以是提供各种服务的服务器,其可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器,本处不对此进行限制。
分布式事务参与方可以是任意具备处理分支事务功能的电子设备,例如,可以是前述终端设备或服务器。
如图1所示,在一示例性实施例中,该分布式事务处理方法可以包括步骤S110至步骤S140,详细介绍如下:
步骤S110,获取分布式事务包含的多个分支事务,并生成多个分支事务各自对应的预处理请求。
需要说明的是,分布式事务包含多个分支事务,这多个分支事务可以由对应的分布式事务参与方处理。例如,在充值业务中,可以包括两个分支事务,一个用于对用户的余额进行管理,另一个用于对用户的积分进行管理;又例如,在转账场景中,可以包括两个分支事务,一个用于对转出账户中扣除对应金额,另一个用于对转入账户中增加对应金额;又例如,在商品交易场景中,可以包括四个分支事务,分别用于管理订单库中的订单信息、管理商品库中商品剩余量、管理用户账户中的资金、管理商家账户中的资金,当用户购买一件商品时,在订单库中添加订单信息,在商品库中将商品剩余量减一,在用户账户中扣除对应金额,在商家账户中增加对应金额。
预处理请求用于指示分布式事务参与方对分支事务进行预处理,其可以包括分支事务的标识信息,和/或,分布式事务的标识信息。其中,标识信息用于标识对应的对象,其可以是该对象的唯一标识信息,唯一标识信息的类型包括但不限于标识号等。
本实施例中,分布式事务发起方在运行过程中,监测到分布式事务的触发指令后,可以基于触发指令确定对应的分布式事务,然后,对该分布式事务进行解析,以获取到该分布式事务包含的多个分支事务,并生成这多个分支事务各自对应的预处理请求,以基于预处理请求调用对应分布式事务参与方对分支事务进行预处理。其中,一个分支事务可以对应一个预处理请求;若存在至少两个分支事务由同一分布式事务参与方处理,为了节约网络资源,这至少两个分支事务的预处理请求可以合并为一个;当然,在其他示例中,也可以不合并。
其中,该触发指令可以是基于用户的操作生成的,例如,用户可以通过终端设备网购商品,从而触发对应分布式事务;当然,该触发指令也可以是基于运行数据自动生成的。本实施例中,不对触发指令的生成方式进行限定。
步骤S120,将生成的预处理请求分别发送至对应的分布式事务参与方,以使分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理。
需要说明的是,不同的分支事务,可以由不同的分布式事务参与方处理。分布式事务发起方在生成分布式事务包含的多个分支事务各自对应的预处理请求后,可以将生成的预处理请求分别发送至对应的分布式事务参与方;分布式事务参与方在接收到预处理请求后,对该预处理请求对应的分支事务进行预处理,从而实现分布式事务发起方调用分布式事务参与方协同处理分布式事务。
其中,分布式事务发起方可以将预处理请求直接发送至对应的分布式事务参与方,或者,也可以通过中间设备将预处理请求转发至对应的分布式事务参与方。预处理方式可以根据实际需要灵活设置,例如,包括但不限于执行分支事务对应的操作。
步骤S130,获取多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息。
首先需要说明的是,预处理结果包括但不限于预处理成功和与处理失败。其中,预处理成功表征该分支事务执行成功,预处理失败表征该分支事务执行失败。预处理失败的情况包括但不限于超时未处理、分布式事务参与方尝试进行预处理但预处理失败等。
其次,事务处理消息的类型包括回滚消息和提交消息,其中,回滚消息用于指示对分布式事务包含的分支事务进行回滚(rollback),即将数据库中的数据回滚至未对分支事务进行预处理前的版本;提交消息用于对分布式事务包含的分支事务进行提交(commit)。为了使分布式事务参与方确定是否获取事务处理消息,事务处理消息中可以包括分布式事务参与方的标识信息、分布式事务的标识信息、分支事务的标识信息等中的至少一个,从而使分布式事务参与方获取包含自身标识信息的事务处理消息,或获取包含自身处理的分支事务所属的分布式事务的标识信息的事务处理消息,或获取包含自身处理的分支事务的标识信息的事务处理消息。
本实施例中,在将分布式事务包含的多个分支事务各自对应的预处理请求发送至分布式事务参与方后,分布式事务发起方可以获取这多个分支事务各自的预处理结果,并根据获取到的预处理结果生成分布式事务对应的事务处理消息。
其中,分布式事务发起方获取多个分支事务各自的预处理结果的方式包括但不限于以下方式中至少一种:
第一种:分布式事务发起方接收分布式事务参与方发送的分支事务的预处理结果。
分布式事务参与方在接收到分布式事务发起方发送的预处理请求后,对该预处理请求所对应的分支事务进行预处理,并将预处理结果发送至分布式事务参与方,以使分布式事务参与方获取到分支事务的预处理结果。
其中,为了使分布式事务发起方确定预处理结果对应的分支事务,预处理结果中可以包括分支事务的标识信息,和/或,分支事务所属的分布式事务的标识信息。
第二种:分布式事务发起方若在预设时间内未接收到分布式事务参与方发送的预处理结果,则确定对应分支事务预处理失败。
在一些情况下,由于网络拥堵等原因,预处理请求丢失或未到达分布式事务参与方,为了避免无限期等待,并提升响应速率,分布式事务发起方在向对应分布式事务参与方发送预处理请求后,若在预设时间内未接收到该分布式事务参与方发送的预处理结果,则确定该预处理请求对应的分支事务预处理失败。其中,预设时间可以根据实际需要灵活设置,例如,可以设置为1秒、5秒等。
分布式事务发起方根据获取到的预处理结果生成事务处理消息的方式包括但不限于:若分布式事务包含的多个分支事务的预处理结果均为预处理成功,则生成提交消息;若分布式事务包含的多个分支事务中,存在至少一个分支事务所对应的预处理结果为预处理失败,则生成回滚消息。
步骤S140,将事务处理消息添加至消息中间件,以使分布式事务参与方从消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
消息中间件是基于队列与消息传递技术,在网络环境中为用于系统提供同步或雨布、可靠的消息传输的支持下软件系统。本实施例中,消息中间件包括但不限于消息队列,例如,RocketMQ、Kafka等。其中,RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务;Kafka是一种高吞吐量的分布式发布订阅消息系统。
本实施例中,分布式事务发起方在生成事务处理消息后,可以将事务处理消息添加至消息中间件,使得分布式事务参与方从消息中间件中获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交,进而完成分布式事务的处理。由此可见,本实施例中,分布式事务包括两个阶段,一阶段为预处理阶段,即准备阶段;二阶段为提交/回滚阶段。
其中,可以由消息中间件将事务处理消息推送至分布式事务参与方,或者,由分布式事务参与方主动从消息中间件中提取出事务处理消息。
本实施例中,分布式事务发起方获取分布式事务包含的多个分支事务,并生成多个分支事务各自对应的预处理请求;将生成的预处理请求分别发送至对应的分布式事务参与方,以使分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;获取多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;将事务处理消息添加至消息中间件,以使分布式事务参与方从消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交,这样,一方面,通过消息中间件来传递事务处理消息,以进行事务的回滚或提交,无需部署独立的分布式事务协调方,避免了性能瓶颈问题,节约了处理资源,且由于消息中间件的异步解耦性,使得分布式事务的执行过程能够以异步方式进行,提升了系统的性能;另一方面,交互过程简单,交互数据量少,节约了网络资源,提升了分布式事务处理效率。
在一示例性实施例中,在图1所示实施例中的步骤S110之前,分布式事务处理方法还可以包括:生成分布式事务的标识信息。
分布式事务的标识信息用于标识该分布式事务,其类型包括但不限于标识号。
本实施例中,为了标识分布式事务,分布式事务发起方会生成分布式事务的标识信息。这样,在步骤S110中,生成多个分支事务各自对应的预处理请求的过程中,可以将分布式事务的唯一标识信息添加至预处理请求。
为了使分布式事务参与方确定预处理请求对应的分支事务,预处理请求中还可以包括分支事务的标识信息。
本实施例中,由分布式事务发起方生成分布式事务的标识信息,无需与消息中间件进行交互,也无需单独将生成的分布式事务的标识信息发送至消息中间件,减少了与消息中间件的交互过程,节约了网络资源,提升了处理效率。
在一示例性实施例中,为了使消息中间件或分布式事务参与方知晓事务处理消息对应的分布式事务参与方,图1所示实施例中的步骤S130,根据获取到的预处理结果生成事务处理消息的过程可以包括:分布式事务请求方根据获取到的预处理结果生成初始处理消息,并将多个分支事务各自对应的分布式事务参与方的标识信息添加至初始处理消息,得到事务处理消息,以使分布式事务参与方从消息中间件中获取包含自身标识信息的事务处理消息。
需要说明的是,初始处理消息的类型包括提交消息和回滚消息;生成初始处理消息的过程包括但不限于:若分布式事务包含的多个分支事务的预处理结果均为预处理成功,则生成提交消息;若分布式事务包含的多个分支事务中,存在至少一个分支事务所对应的预处理结果为预处理失败,则生成回滚消息。
分布式事务参与方的标识信息用于标识分布式事务参与方,其类型可以是标识号等。
在生成初始处理消息后,将分布式事务包含的多个分支事务各自对应的分布式事务参与方的标识信息添加至初始处理消息,得到事务处理消息;在后续处理过程中,分布式事务参与方可以根据事务处理消息中是否含有自身的标识信息确定是否获取该事务处理消息,若事务处理消息包含自身的标识信息,则获取该事务处理消息。例如,假设分布式事务包括a、b、c三个分支事务,这三个分支事务分别由A、B、C节点进行处理,分布式事务发起方生成包含A、B、C节点标识信息的事务处理消息,并将事务处理消息添加至消息中间件,节点A确定事务处理消息中包含自身的标识信息,因此,获取该事务处理消息。
本实施例中,将分布式事务参与方的标识信息添加至事务处理消息中,分布式事务参与方根据自身的标识信息确定是否获取事务处理消息,进而即使由于网络拥堵等原因导致事务处理消息对应的分支事务的预处理请求未到达分布式事务参与方,分布式事务参与方也可以根据自身的标识信息先获取事务处理消息,待该事务处理消息对应的分支事务的预处理请求到达本端后,再根据事务处理消息对该预处理请求进行处理,从而提升响应速率。
参见图2,图2是本申请的一示例性实施例示出的一种分布式事务处理方法的流程图,该方法可以由分布式事务参与方执行。对于分布式事务参与方的介绍,请参见前述记载,此处不再赘述。
如图2所示,在一示例性实施例中,该分布式事务处理方法可以包括步骤S210至步骤S240,详细介绍如下:
步骤S210,接收分布式事务发起方发送的预处理请求,预处理请求由分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成。
首先需要说明的是,分布式事务包含多个分支事务,这多个分支事务可以由多个分布式事务参与方分别处理。
其次,预处理请求用于指示分布式事务参与方对分支事务进行预处理。分布式事务发起方可以生成分布式事务包含的多个分支事务各自对应的预处理请求,其中,一个分支事务对应一个预处理请求;若存在至少两个分支事务由同一分布式事务参与方处理,为了节约网络资源,这至少两个分支事务的预处理请求可以合并为一个;当然,在其他示例中,也可以不合并。为了使分布式事务参与方确定预处理请求对应的分支事务,预处理请求可以包括分支事务的标识信息,和/或,分布式事务的标识信息。
本实施例中,分布式事务发起方在生成分布式事务包含的多个分支事务各自对应的预处理请求后,将生成的预处理请求发送至对应的分布式事务参与方;分布式事务参与方则接收分布式事务发起方发送的预处理请求。
步骤S220,对接收到的预处理请求所对应的分支事务进行预处理。
分布式事务参与方在接收到预处理请求后,对该预处理请求对应的分支事务进行预处理。
步骤S230,从消息中间件中获取事务处理消息,事务处理消息由分布式事务发起方根据多个分支事务各自的预处理结果生成。
对于消息中间件的介绍,请参见前述记载,此处不再赘述。
事务处理消息的类型包括回滚消息和提交消息,其中,回滚消息用于指示对分布式事务包含的分支事务进行回滚(rollback);提交消息用于对分布式事务包含的分支事务进行提交(commit)。为了使分布式事务参与方确定是否获取事务处理消息,事务处理消息中可以包括分布式事务参与方的标识信息、分布式事务的标识信息、分支事务的标识信息等中的至少一个,从而使分布式事务参与方获取包含自身标识信息的事务处理消息,或获取包含自身处理的分支事务所属的分布式事务的标识信息的事务处理消息,或获取包含自身处理的分支事务的标识信息的事务处理消息。
本实施例中,分布式事务发起方在将分布式事务包含的多个分支事务各自对应的预处理请求发送至分布式事务参与方后,会获取这多个分支事务各自的预处理结果,根据获取到的预处理结果生成分布式事务对应的事务处理消息,并将生成的事务处理消息添加至消息中间件。分布式事务参与方可以从消息中间件中获取事务处理消息。
其中,若事务处理消息包括分布式事务参与方的标识信息,则分布式事务参与方可以获取包含自身标识信息的事务处理消息。若事务处理消息包括分布式事务的标识信息,则分布式事务参与方可以获取自身处理的分支事务所属的分布式事务的标识信息。若事务处理消息包括分支事务的标识信息,则分布式事务参与方可以获取自身处理的分支事务的标识信息
分布式事务参与方从消息中间件中获取事务处理消息的方式包括但不限于:主动从消息中间件中提取事务处理消息,或者,接收消息中间件推送的事务处理消息。
消息中间件在推送事务处理消息时,可以根据事务处理消息中包含的分布式事务参与方的标识信息、分布式事务的标识信息、分支事务的标识信息等中的至少一个进行推送。
步骤S240,根据获取到的事务处理消息进行分支事务的回滚或提交。
分布式事务参与方在获取到事务处理消息后,可以根据该事务处理消息进行分支事务的回滚或提交,若该事务处理消息的类型为回滚消息,则对事务处理消息对应的分支事务进行回滚;若该事务处理消息的类型为提交消息,则对事务处理消息对应的分支事务进行提交。
本实施例中,分布式事务参与方接收分布式事务发起方发送的预处理请求,预处理请求由分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;对预处理请求所对应的分支事务进行预处理;从消息中间件中获取事务处理消息,事务处理消息由分布式事务发起方根据多个分支事务各自的预处理结果生成;根据获取到的事务处理消息进行分支事务的回滚或提交;这样,一方面,通过消息中间件来传递事务处理消息,以进行事务的回滚或提交,无需部署独立的分布式事务协调方,避免了性能瓶颈问题,节约了处理资源,且由于消息中间件的异步解耦性,使得分布式事务的执行过程能够以异步方式进行,提升了系统的性能;另一方面,交互过程简单,交互数据量少,节约了网络资源,提升了分布式事务处理效率。
参见图3,图3为图2所示实施例中的步骤S220在一示例性实施例中的流程图。如图3所示,对预处理请求所对应的分支事务进行预处理的过程可以包括步骤S221-步骤S222,详细介绍如下:
步骤S221,从预创建的连接池中获取与数据库的连接通道。
需要说明的是,分支事务的处理通常涉及到数据的更新,而数据存储于数据库中。其中,数据库的类型可以根据实际需要灵活设置,例如,由于关系型数据库自身拥有事务特性,具备隔离性,原子性,持久性,一致性四大特性,因此,数据库可以是关系型数据库。又例如,数据库可以是支持XA协议的数据库,这样,可以保证分支事务的执行具有持久化事务特性,需要说明的是,传统的事务在数据库连接断开后或一阶段事务提交/回滚就代表事务已经结束,无法保证各分支事务在分布式环境中的一致性,而XA协议的事务可以在数据库连接断开或预处理成功或失败下持久化事务状态,保持事务特性到二阶段,再基于二阶段的回滚消息或提交消息对事务进行最终的提交或回滚,从而可以保证各分支事务在分布式环境中的一致性;支持XA协议的数据还可以保证分支事务的执行具有隔离性,并且,由于支持XA协议的数据库在处理分支事务时,会自动记录处理前和处理后的数据,从而便于回滚,相比分布式事务参与方对结构化查询语言进行解析,从数据库中查询对应的待更新数据对象,将更新前的数据存储至存储表中,对待更新数据对象进行更新,并再次查找待更新数据对象,将更新后的数据存储至存储表中的方案,无需额外创建一个用于记录处理前和处理后数据的表,且处理过程简单,不仅可以节约资源,还可以避免业务侵入的情况。其中,XA协议为资源管理器(数据库)与事务管理器的接口标准。
连接池则包括分布式事务参与方与对应数据库的连接通道。分布式事务参与方可以预先创建本端与对应数据的连接通道,得到连接池,从而通过连接池中的连接通道与数据库通信。在一些实施方式中,分布式事务参与方可以静态代理数据库的数据源(dataSource),数据源中包括连接池。
本实施例中,分布式事务参与方从预创建的连接池中获取与数据库的连接通道,使得用户在开发业务时,无需编写使用XA协议的数据库的连接代码,避免业务入侵等情况。
步骤S222,通过获取到的连接通道将接收到的预处理请求传输至数据库,以使数据库的服务器根据预处理请求对数据库中的数据进行预处理。
数据库由数据库的服务器进行维护。分布式事务参与方在获取到预处理请求以及连接通道后,可以通过该连接通道将预处理请求传输至数据库,由数据库的服务器根据预处理请求对数据库中的数据进行预处理,从而使得分支事务由数据库的服务器执行,保证了对结构化查询语言(sql,Structured Query Language)的支持。
在一些实施方式中,若数据库为支持XA协议的数据库,连接池包括中包括基于XA协议创建的连接通道,以及其他连接通道,则可以从连接池中获取基于XA协议创建的连接通道,并通过该通道将预处理请求传输至数据库。
本实施例中,分布式事务参与方从预创建的连接池中获取与数据库的连接通道,通过获取到的连接通道将接收到的预处理请求传输至数据库,以使数据库的服务器根据预处理请求对数据库中的数据进行预处理,使得业务无需感知数据库的连接,避免业务入侵。
参见图4,图4为本申请的一示例性实施例示出的一种分布式事务处理方法的流程图。如图4所示,在图3所示实施例中的步骤S110之后,分布式事务处理方法还可以包括步骤S250-步骤S260,详细介绍如下:
步骤S250,确定接收到的预处理请求所对应的第一分支事务,并确定第一分支事务对应的待更新数据对象。
需要说明的是,分支事务的处理通常涉及到数据的更新,待更新的数据对象即为待更新数据对象。
本实施例中,分布式事务参与方在接收到来自分布式事务发起方的预处理请求后,确定该预处理请求对应的第一分支事务,并确定第一分支事务对应的待更新数据对象。
步骤S260,在第一分支事务被提交或回滚之前,禁止第一分支事务外的事务对待更新数据对象进行更新。
为了提升隔离性,在确定第一分支事务对应的待更新数据对象后,在第一分支事务被提交或回滚之前,分布式事务参与方可以禁止第一分支事务外的事务对待更新数据对象进行更新。
在一些实施方式中,若数据库为支持XA协议的数据库,则步骤S250-步骤S260可以由数据库来保证。即数据库对应的服务器在获取到预处理请求后,会将该预处理请求对应的第一分支事务持久化到本地预备,并禁止第一分支事务外的事务对数据库中待更新数据对象进行更新,待第一分支事务提交或回滚后,再解除该禁止。其中,具体实现方式可以根据实际需要灵活设置,例如,在一个示例中,若数据库为以innodb为默认存储引擎的mysql,该存储引擎包括两种行级锁,共享锁和排他锁,数据库对应的服务器在获取到预处理请求后,可以对第一分支事务对应的待更新数据对象添加排他锁,在添加排他锁后,只允许第一分支事务对待更新数据对象进行读取和修改,其他事务无法再对待更新数据对象添加锁或对待更新数据对象进行修改;在第一分支事务提交或回滚后,可以释放待更新数据对象的排他锁,从而使得其他事务可以对待更新数据对象进行修改,从而保证数据的隔离性。
本实施例中,分布式事务参与方确定接收到的预处理请求所对应的第一分支事务,并确定第一分支事务对应的待更新数据对象,在第一分支事务被提交或回滚之前,禁止第一分支事务外的事务对待更新数据对象进行更新,从而保证数据的隔离性。
参见图5,图5为图2所示实施例中的步骤S240在一示例性实施例中的流程图。如图5所示,根据获取到的事务处理消息进行分支事务的回滚或提交的过程可以包括步骤S241-步骤S244,详细介绍如下:
步骤S241,若事务处理消息为回滚消息,则根据事务处理消息确定第二分支事务。
事务处理消息的类型包括回滚消息和提交消息。
第二分支事务为事务处理消息对应的分布式事务所包含的多个分支事务中,获取到事务处理消息的分布式事务参与方所对应的分支事务。
若事务处理消息为回滚消息,则分布式事务参与方根据事务处理消息确定本端对应的第二分支事务。其中,可以根据事务处理消息中包含的标识信息确定第二分支事务,事务处理消息包含的标识信息可以根据实际需要灵活设置。在一个示例中,事务处理消息可以包括分支事务的标识信息,从而根据分支事务的标识信息确定对应的第二分支事务;例如,分布式事务包括a1、a2共两个分支事务,分别由节点A1和节点A2处理,事务处理消息可以包括分支事务a1的标识信息、分布式事务a2的标识信息,节点A1获取到事务处理消息后,则确定第二分支事务为分支事务为a1;节点A2获取到事务处理消息后,则确定第二分支事务为分支事务a2。在另一个示例中,事务处理消息包括分支事务的标识信息以及分支事务对应的分布式事务参与方,从而使分布式事务参与方根据自身的标识信息从事务处理消息包含的分支事务的标识信息中确定第二分支事务。
步骤S242,从事务状态库中查找第二分支事务的状态。
本实施例中,在分布式事务参与方端设置有事务状态库,用于存储分布式事务参与方中处理的事务的状态。其中,可以将事务状态库存储在分布式事务参与方的内存中。或者,为了避免分布式事务参与方出现故障导致信息丢失的情况,可以将事务状态库存储至分布式事务参与方外部,例如,存储在云服务器、数据存储器、分布式数据库中,在一些实施方式中,可以在分布式参与方中自行实现一个spi(Service Provider Interface,服务发现机制),当分支事务启动时会发现该自行实现的服务,进行启用,并通过该服务,可以将事务的状态存储至分布式事务参与方外部。或者,为了进一步降低数据丢失概率,可以将事务状态库存储在分布式事务参与方的内存以及分布式事务参与方外部,从而对事务状态库进行备份。
本实施例中,分布式事务参与方确定第二分支事务后,从事务状态库中查找第二分支事务的状态。
步骤S243,若查找到的第二分支事务的状态为预处理中,则待第二分支事务预处理成功后,对第二分支事务进行回滚。
在获取到事务处理消息后,若分布式事务参与方正在对第二分支事务进行预处理,则查找到的第二分支事务的状态为预处理中状态,因此,分布式事务参与方可以等待第二分支事务预处理成功后,再对第二分支事务进行回滚。
在一些实施方式中,若查找到的第二分支事务的状态为预处理成功状态,则分布式事务参与方可以对第二分支事务进行回滚。
步骤S244,若未查找到第二分支事务的状态,则待接收到第二分支事务对应的预处理请求后,基于事务处理消息丢弃第二分支事务对应的预处理请求。
由于网络故障、延时等原因,分布式事务参与方在获取到事务处理消息后,第二分支事务对应的预处理请求可能还未到达本端,因此,在事务状态库中无法查找到第二分支事务的处理状态。若未查找到第二分支事务的状态,则表明第二分支事务还未被预处理,无需对第二分支事务进行回滚。
为了避免在获取回滚消息之后,接收到第二分支事务对应的预处理请求,使得分布式事务参与方对第二分支事务进行预处理,进而导致分布式事务状态不一致的情况,本实施例中,若未查找到第二分支事务的状态,则在后续接收到第二分支事务对应的预处理请求后,基于事务处理消息丢弃第二分支事务对应的预处理请求。其中,若未查找到第二分支事务的状态,则可以在事务状态库中更新第二分支事务的状态为回滚状态,后续接收到第二分支事务的预处理请求后,可以从事务状态库中查找到第二分支事务的状态为回滚状态,因此,无需对第二分支事务进行预处理,直接丢弃第二分支事务的预处理请求。
通过前述方式,使得预处理和回滚处于互斥状态。在一些实施方式中,可以通过内存锁使预处理和回滚处于互斥状态,例如,若需要对第二分支事务进行预处理,则可以对第二分支事务添加一个内存锁,待预处理完成后,再释放该锁,这样,在对第二分支事务进行预处理过程中,若接收到回滚消息,由于第二分支事务被添加内存锁,因此,无法对第二分支事务进行回滚,只能等待锁被释放后(即第二分支事务预处理完成后),才能对分支事务进行回滚。其中,内存锁的实现方式可以根据实际需要灵活设置,例如,可以通过java中的synchronized关键字来实现;在一些实施方式中,该内存锁也可以是基于spi,升级为分布式锁,存储到redis(Remote Dictionary Server,远程字典服务),zookeeper(一个分布式的,开放源码的分布式应用程序协调服务)等支持分布式锁的分布式服务。需要说明的是,java为一种编程语言。synchronized关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。
本实施例中,若事务处理消息为回滚消息,则分布式事务参与方根据事务处理消息确定第二分支事务,从事务状态库中查找第二分支事务的状态,若查找到的第二分支事务的状态为预处理中,则待第二分支事务预处理成功后,对第二分支事务进行回滚;若未查找到第二分支事务的状态,则待接收到第二分支事务对应的预处理请求后,基于事务处理消息丢弃第二分支事务对应的预处理请求,从而避免空回滚,保证事务的一致性;进一步地,若未查找到第二分支事务的状态,可以在事务状态库(事务状态库可以部署在本地内存或SPI实现的分布式存储中)中将第二分支事务的状态更新为回滚状态,待接收到第二分支事务对应的预处理请求后,直接从事务状态库中读取第二分支事务的状态,若于第二分支事务的状态为回滚状态,则丢弃第二分支事务对应的预处理请求,从而避免空回滚,保证事务的一致性。
以下对本申请实施例的一个具体应用场景进行详细说明。参见图6,图6为本申请的一示例性实施例示出的一种分布式事务处理方法的流程图本实施例中,事务处理方法可以包括步骤1.1-步骤1.5,详细介绍如下:
步骤1.1,分布式事务发起方生成分布式事务的事务标识,并向分布式事务参与方发送预处理请求。
分布式事务参与方创建分布式事务的标识信息(xid),并获取分布式事务包含的多个分支事务,生成这多个分支事务各自对应的预处理请求,并将预处理请求发送至对应的分布式事务参与方。其中,标识信息(xid)可以是UUID(通用唯一识别码,UniversallyUnique Identifier),预处理请求中可以包含分布式事务的xid以及分支事务的标识信息。
步骤1.2,分布式事务参与方对预处理请求对应的分支事务进行一阶段预处理。
本实施例中,分布式事务的执行包括两个阶段,其中,一阶段对分支事务进行预处理,二阶段对分支事务进行提交/回滚。分布式事务参与方在接收到预处理请求后,对预处理请求对应的分支事务进行一阶段预处理。
分支事务的执行涉及到数据库中数据的变更。本实施例中,数据库为支持XA协议的数据库。分布式事务参与方可以静态代理数据库的数据源(dataSource),在接收到预处理请求后,将本端与数据库的连接通道切换为基于XA协议建立的连接通道,并通过基于XA协议建立的连接通道将预处理请求传递至数据库,该数据库的服务器对预处理请求对应的分支事务进行一阶段预处理,预处理过程包括:xa start xid、xa end xid、xa preparexid,其中,xa start xid表示XA协议开始,xa end xid表示预处理结束,xa prepare xid表示预处理结果,其中,xid为分支事务的标识信息,在xa start xid与xa end xid之间,会进行一些事务操作。
步骤1.3,分布式事务发起方将事务处理消息发送至消息中间件。
分布式事务发起方获取每个分支事务的预处理结果,即第一阶段执行结果,并根据第一阶段执行结果生成事务处理消息,若第一阶段执行结果为每个分支事务预处理成功,则生成提交消息,若预处理结果为至少一个分支事务预处理失败,则生成回滚消息。其中,事务处理消息即第二阶段决议。
步骤1.4,消息中间件向分布式事务参与方推送事务处理消息。
消息中间件在获取到事务处理消息后,可以向分布式事务参与方推送事务处理消息,其中,可以异步推送或同步推送。
在一些实施方式中,在步骤1.1之前,分布式事务处理发起方在应用启动后,可以自动对消息中间件进行初始化,在初始化过程中创建消息中间件的Topic(话题);在初始化之后,订阅Topic,然后,接收用户对应用的操作指令,确定对应的分布式事务,并进行后续步骤;分布式事务处理参与方在应用启动后,可以也订阅该Topic,使得消息中间件可以向分布式事务参与方推送事务处理消息。
步骤1.5,分布式事务参与方根据事务处理消息对分支事务进行提交或回滚。
分布式事务参与方在获取到事务处理消息后,对分支事务进行提交或回滚。
例如,参见图7所示,若其中一个分布式事务参与方发生故障,则需要对分支事务进行回滚。
在一些情况下,由于网络拥堵等原因,回滚消息比预处理请求先到达分布式事务参与方,若在接收到回滚消息时就对分支事务进行回滚,由于此时还未对分支事务进行一阶段预处理,会造成空回滚,并且,后续接收到预处理请求后,对分支事务进行一阶段预处理,进而造成资源的悬挂,并且使得事务状态不一致,例如,参见图8所示,在步骤1中,分布式事务发起方向分布式事务参与方发送一阶段预处理请求,由于网络故障,预处理请求在预设时间后还未到达分布式事务参与方,分布式事务发起方在预设时间后也未接收到分布式事务参与方发送的预处理结果,因此,分布式事务发起方生成回滚消息,并向消息中间件发布二阶段回滚消息,在步骤2中,分布式事务参与方接收到二阶段回滚消息,然后,在步骤3中,分布式事务参与方根据二阶段回滚消息进行回滚,由于此时还未接收到一阶段预处理请求,因此,没有资源需要回滚,会造成空回滚;在步骤3后,分布式事务参与方接收到一阶段预处理请求,在步骤4中,分布式事务参与方对分支事务进行一阶段预处理,造成资源悬挂以及事务状态不一致。基于此,参见图9所示,事务处理方法还可以包括:
分布式事务参与方在接收到一阶段预处理请求或二阶段回滚消息后,需要先获取内存锁,这样,若分支事务处于一阶段预处理过程中,则无法对该分支事务进行二阶段回滚,需要等待一阶段预处理完成后,再对该分支事务进行二二阶段回滚,从而使得一阶段预处理和二阶段回滚处于互斥状态。若一阶段预处理获取到内存锁,则开始对分支事务进行一阶段预处理,并在事务状态库中记录分支事务状态为一阶段预处理开始状态,在对分支事务进行一阶段预处理后,在事务状态库中记录分支事务状态为一阶段预处理成功状态,并释放内存锁;若二阶段回滚消息获取到内存锁,为了避免空回滚,先确定分支事务状态,其中,可以从事务状态库中查询分支事务的状态,若分支事务的状态为一阶段预处理完成,则进行回滚,并在回滚后释放内存锁;若未查找到分支事务的状态,则表明未接收到该分支事务的预处理请求,在事务状态库中更新该分支事务的状态为回滚状态,后续若接收到该分支事务的预处理请求,则丢弃该预处理请求,并释放内存锁,从而保证事务的一致性,避免空回滚和资源悬挂的问题。
其中,事务状态库可以存储在内存中,或者,存储在云服务器等。
参见图10,图10是本申请的一示例性实施例示出的事务处理装置的框图,该装置可以配置于分布式事务发起方。如图10所示,该装置包括:
请求生成模块1001,配置为获取分布式事务包含的多个分支事务,并生成所述多个分支事务各自对应的预处理请求;发送模块1002,配置为将生成的预处理请求分别发送至对应的分布式事务参与方,以使所述分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;消息生成模块1003,配置获取所述多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;添加模块1004,配置为将所述事务处理消息添加至消息中间件,以使所述分布式事务参与方从所述消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
在另一示例性实施例中,消息生成模块1003包括:
初始生成模块,配置为根据获取到的预处理结果生成初始处理消息。
标识添加模块,配置为将所述多个分支事务各自对应的分布式事务参与方的标识信息添加至所述初始处理消息,得到所述事务处理消息,以使分布式事务参与方从所述消息中间件中获取包含自身标识信息的事务处理消息。
需要说明的是,上述实施例所提供的分布式事务处理装置与上述实施例所提供的分布式事务发起方对应的分布式事务处理方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
参见图11,图11是本申请的一示例性实施例示出的事务处理装置的框图,该装置可以配置于分布式事务参与方。如图11所示,该装置包括:
接收模块1101,配置为接收分布式事务发起方发送的预处理请求,所述预处理请求由所述分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;预处理模块1102,配置为对预处理请求所对应的分支事务进行预处理;获取模块1103,配置为从消息中间件中获取事务处理消息,所述事务处理消息由所述分布式事务发起方根据所述多个分支事务各自的预处理结果生成;处理模块1104,配置为根据获取到的事务处理消息进行分支事务的回滚或提交。
在另一示例性实施例中,预处理模块1102包括:
通道获取模块,配置为从预创建的连接池中获取与数据库的连接通道。
传输模块,配置为通过获取到的连接通道将接收到的预处理请求传输至数据库,以使所述数据库的服务器根据所述预处理请求对所述数据库中的数据进行预处理。
在另一示例性实施例中,该装置还包括:
第一事务确定模块,配置为确定接收到的预处理请求所对应的第一分支事务,并确定所述第一分支事务对应的待更新数据对象。
禁止模块,配置为在所述第一分支事务被提交或回滚之前,禁止所述第一分支事务外的事务对所述待更新数据对象进行更新。
在另一示例性实施例中,处理模块1104包括:
第一事务确定模块,配置为若所述事务处理消息为回滚消息,则根据所述事务处理消息确定第二分支事务。
查找模块,配置为从事务状态库中查找所述第二分支事务的状态。
回滚模块,配置为若查找到的所述第二分支事务的状态为预处理中,则待所述第二分支事务预处理成功后,对所述第二分支事务进行回滚。
丢弃模块,配置为若未查找到所述第二分支事务的状态,则待接收到所述第二分支事务对应的预处理请求后,基于所述事务处理消息丢弃所述第二分支事务对应的预处理请求。
需要说明的是,上述实施例所提供的分布式事务处理装置与上述实施例所提供的分布式事务参与方对应的分布式事务处理方法属于同一构思,其中各个模块和单元执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
本申请的实施例还提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行时,使得电子设备实现上述各个实施例中提供的方法。
图12示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图12示出的电子设备的计算机系统1200仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理单元(Central Processing Unit,CPU)1201,其可以根据存储在只读存储器(Read-Only Memory,ROM)1202中的程序或者从储存部分1208加载到随机访问存储器(Random Access Memory,RAM)1203中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1203中,还存储有系统操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(Input/Output,I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1207;包括硬盘等的储存部分1208;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入储存部分1208。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
本申请的另一方面还提供了一种计算机可读存储介质,其上存储有计算机可读指令,该计算机可读指令被电子设备的处理器执行时,使电子设备实现如前所述的方法。该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的,也可以是单独存在,而未装配入该电子设备中。
本申请的另一方面还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,计算机指令被处理器执行时实现上述各个实施例中提供的方法。其中,该计算机指令可以存储在计算机可读存储介质中;电子设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述各个实施例中提供的方法。
上述内容,仅为本申请的较佳示例性实施例,并非用于限制本申请的实施方案,本领域普通技术人员根据本申请的主要构思和精神,可以十分方便地进行相应的变通或修改,故本申请的保护范围应以权利要求书所要求的保护范围为准。
Claims (10)
1.一种分布式事务处理方法,其特征在于,所述方法包括:
接收分布式事务发起方发送的预处理请求,所述预处理请求由所述分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;
对预处理请求所对应的分支事务进行预处理;
从消息中间件中获取事务处理消息,所述事务处理消息由所述分布式事务发起方根据所述多个分支事务各自的预处理结果生成;
根据获取到的事务处理消息进行分支事务的回滚或提交。
2.如权利要求1所述的方法,其特征在于,所述对预处理请求所对应的分支事务进行预处理,包括:
从预创建的连接池中获取与数据库的连接通道;
通过获取到的连接通道将接收到的预处理请求传输至数据库,以使所述数据库的服务器根据所述预处理请求对所述数据库中的数据进行预处理。
3.如权利要求1所述的方法,其特征在于,在所述接收分布式事务发起方发送的预处理请求之后,所述方法还包括:
确定接收到的预处理请求所对应的第一分支事务,并确定所述第一分支事务对应的待更新数据对象;
在所述第一分支事务被提交或回滚之前,禁止所述第一分支事务外的事务对所述待更新数据对象进行更新。
4.如权利要求1所述的方法,其特征在于,所述根据获取到的事务处理消息进行分支事务的回滚或提交,包括:
若所述事务处理消息为回滚消息,则根据所述事务处理消息确定第二分支事务;
从事务状态库中查找所述第二分支事务的状态;
若查找到的所述第二分支事务的状态为预处理中,则待所述第二分支事务预处理成功后,对所述第二分支事务进行回滚;
若未查找到所述第二分支事务的状态,则待接收到所述第二分支事务对应的预处理请求后,基于所述事务处理消息丢弃所述第二分支事务对应的预处理请求。
5.一种分布式事务处理方法,其特征在于,所述方法包括:
获取分布式事务包含的多个分支事务,并生成所述多个分支事务各自对应的预处理请求;
将生成的预处理请求分别发送至对应的分布式事务参与方,以使所述分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;
获取所述多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;
将所述事务处理消息添加至消息中间件,以使所述分布式事务参与方从所述消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
6.如权利要求5所述的方法,其特征在于,所述根据获取到的预处理结果生成事务处理消息,包括:
根据获取到的预处理结果生成初始处理消息;
将所述多个分支事务各自对应的分布式事务参与方的标识信息添加至所述初始处理消息,得到所述事务处理消息,以使分布式事务参与方从所述消息中间件中获取包含自身标识信息的事务处理消息。
7.一种分布式事务处理装置,其特征在于,所述装置包括:
接收模块,配置为接收分布式事务发起方发送的预处理请求,所述预处理请求由所述分布式事务发起方根据分布式事务包含的多个分支事务中的其中一个分支事务生成;
预处理模块,配置为对预处理请求所对应的分支事务进行预处理;
获取模块,配置为从消息中间件中获取事务处理消息,所述事务处理消息由所述分布式事务发起方根据所述多个分支事务各自的预处理结果生成;
处理模块,配置为根据获取到的事务处理消息进行分支事务的回滚或提交。
8.一种分布式事务处理装置,其特征在于,所述装置包括:
请求生成模块,配置为获取分布式事务包含的多个分支事务,并生成所述多个分支事务各自对应的预处理请求;
发送模块,配置为将生成的预处理请求分别发送至对应的分布式事务参与方,以使所述分布式事务参与方对接收到的预处理请求所对应的分支事务进行预处理;
消息生成模块,配置获取所述多个分支事务各自的预处理结果,并根据获取到的预处理结果生成事务处理消息;
添加模块,配置为将所述事务处理消息添加至消息中间件,以使所述分布式事务参与方从所述消息中间件获取事务处理消息,并根据获取到的事务处理消息进行分支事务的回滚或提交。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现如权利要求1-6中的任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行权利要求1-6中的任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111629789.3A CN114327799B (zh) | 2021-12-23 | 2021-12-23 | 分布式事务处理方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111629789.3A CN114327799B (zh) | 2021-12-23 | 2021-12-23 | 分布式事务处理方法及装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327799A true CN114327799A (zh) | 2022-04-12 |
CN114327799B CN114327799B (zh) | 2022-08-05 |
Family
ID=81015526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111629789.3A Active CN114327799B (zh) | 2021-12-23 | 2021-12-23 | 分布式事务处理方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327799B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114925084A (zh) * | 2022-05-31 | 2022-08-19 | 易保网络技术(上海)有限公司 | 分布式事务处理方法、系统、设备及可读存储介质 |
WO2024032632A1 (zh) * | 2022-08-09 | 2024-02-15 | 杭州阿里云飞天信息技术有限公司 | 一种事务的处理方法、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073540A (zh) * | 2010-12-15 | 2011-05-25 | 北京新媒传信科技有限公司 | 分布式事务提交方法和装置 |
US20160260095A1 (en) * | 2015-03-02 | 2016-09-08 | Dell Products, Lp | Containerized Computational Task Execution Management Using a Secure Distributed Transaction Ledger |
CN106557514A (zh) * | 2015-09-29 | 2017-04-05 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
CN110888718A (zh) * | 2019-11-27 | 2020-03-17 | 武汉虹旭信息技术有限责任公司 | 分布式事务的实现方法及装置 |
CN111225012A (zh) * | 2018-11-27 | 2020-06-02 | 阿里巴巴集团控股有限公司 | 事务处理方法、装置和设备 |
CN111259083A (zh) * | 2020-02-13 | 2020-06-09 | 神州数码融信软件有限公司 | 分布式事务处理方法及装置 |
CN113568716A (zh) * | 2021-07-29 | 2021-10-29 | 上海浦东发展银行股份有限公司 | 一种事务处理方法、装置、电子设备及存储介质 |
-
2021
- 2021-12-23 CN CN202111629789.3A patent/CN114327799B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073540A (zh) * | 2010-12-15 | 2011-05-25 | 北京新媒传信科技有限公司 | 分布式事务提交方法和装置 |
US20160260095A1 (en) * | 2015-03-02 | 2016-09-08 | Dell Products, Lp | Containerized Computational Task Execution Management Using a Secure Distributed Transaction Ledger |
CN106557514A (zh) * | 2015-09-29 | 2017-04-05 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
CN111225012A (zh) * | 2018-11-27 | 2020-06-02 | 阿里巴巴集团控股有限公司 | 事务处理方法、装置和设备 |
CN110888718A (zh) * | 2019-11-27 | 2020-03-17 | 武汉虹旭信息技术有限责任公司 | 分布式事务的实现方法及装置 |
CN111259083A (zh) * | 2020-02-13 | 2020-06-09 | 神州数码融信软件有限公司 | 分布式事务处理方法及装置 |
CN113568716A (zh) * | 2021-07-29 | 2021-10-29 | 上海浦东发展银行股份有限公司 | 一种事务处理方法、装置、电子设备及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114925084A (zh) * | 2022-05-31 | 2022-08-19 | 易保网络技术(上海)有限公司 | 分布式事务处理方法、系统、设备及可读存储介质 |
CN114925084B (zh) * | 2022-05-31 | 2023-07-21 | 易保网络技术(上海)有限公司 | 分布式事务处理方法、系统、设备及可读存储介质 |
WO2024032632A1 (zh) * | 2022-08-09 | 2024-02-15 | 杭州阿里云飞天信息技术有限公司 | 一种事务的处理方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114327799B (zh) | 2022-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9940183B2 (en) | Commit-one-phase distributed transactions with multiple starting participants | |
US6665814B2 (en) | Method and apparatus for providing serialization support for a computer system | |
CN114327799B (zh) | 分布式事务处理方法及装置、电子设备、存储介质 | |
US20040015368A1 (en) | High availability for asynchronous requests | |
US9417906B2 (en) | Transaction participant registration with caveats | |
US11681683B2 (en) | Transaction compensation for single phase resources | |
CN105512266A (zh) | 一种实现分布式数据库操作一致性的方法及装置 | |
US9055065B2 (en) | Managing participant order in distributed transactions | |
US8346851B2 (en) | System and method for determining when to generate subordinate coordinators on local machines | |
US10425778B2 (en) | Distributed transactions on mobile devices via a messaging service provided by a mobile network operator | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN112819638A (zh) | 交易判重的方法、装置、设备和计算机可读介质 | |
US7346690B1 (en) | Deferred piggybacked messaging mechanism for session reuse | |
US20210149709A1 (en) | Method and apparatus for processing transaction | |
CN111143040A (zh) | 事务处理方法、装置、系统及存储介质 | |
WO2022206429A1 (zh) | 一种分布式事务实现方法及分布式系统 | |
CN112988775B (zh) | 处理批量交易的方法、计算设备和存储介质 | |
CN110661857B (zh) | 一种数据同步方法和装置 | |
CN116015995B (zh) | 应用于分布式群组通信的消息原子性保证方法、装置和设备 | |
CN116167835A (zh) | 业务处理方法、装置、电子设备和计算机可读介质 | |
CN113421163A (zh) | 一种对账方法、对账应用集群和相关客户端 | |
CN116069789A (zh) | 一种数据查询方法、装置以及计算机可读存储介质 | |
CN115658171A (zh) | 一种轻量级解决java分布式应用配置动态刷新的方法及系统 | |
CN116467335A (zh) | 基于状态机的数据加工方法、装置、终端及存储介质 | |
CN111708616A (zh) | 一种微服务架构下单数据源分布式事务的处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |