CN113268471A - 处理分布式事务的方法、代理连接池、***、设备及介质 - Google Patents
处理分布式事务的方法、代理连接池、***、设备及介质 Download PDFInfo
- Publication number
- CN113268471A CN113268471A CN202110704863.7A CN202110704863A CN113268471A CN 113268471 A CN113268471 A CN 113268471A CN 202110704863 A CN202110704863 A CN 202110704863A CN 113268471 A CN113268471 A CN 113268471A
- Authority
- CN
- China
- Prior art keywords
- transaction
- node
- database
- participating
- request
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种处理分布式事务的方法、代理连接池、***、设备及介质,该方法包括:接收来自事务执行节点的事务操作请求;在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作;接收来自上述事务执行节点的事务提交请求;在接收到事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息;接收来自事务管理节点的通知;以及在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种处理分布式事务的方法、代理连接池、***、设备及介质。
背景技术
在数据库领域,事务指的是一系列数据库操作,它是保证数据库正确性的基本逻辑单元,拥有四个特性ACID:原子性(A)、一致性(C)、隔离性(I)与持久性(D)。分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式***的不同节点之上,对于分布式数据库***而言,事务的一系列操作序列会被拆分为子操作序列,然后在多台机器上执行,形成了分布式事务。在分布式事务执行的过程中,除了要保证各个子事务的ACID特性外,还需要对这些子事务进行协调,决定各个子事务的提交与回滚,以保证全局事务的ACID特性。
在实现本公开构思的过程中,发明人发现相关技术中至少存在如下技术问题:在进行分布式事务的协调时,所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开的实施例提供了一种处理分布式事务的方法、代理连接池、***、设备及介质。
第一方面,本公开的实施例提供了一种处理分布式事务的方法。上述方法包括:接收来自事务执行节点的事务操作请求;在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作;接收来自上述事务执行节点的事务提交请求;在接收到上述事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息;接收来自事务管理节点的通知;以及在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
根据本公开的实施例,在接收到来自事务执行节点的事务提交请求且尚未接收到来自事务管理节点通知的提交审核信息的情况下,阻止上述事务执行节点实施的数据库操作向数据库的提交,并启用倒计时等待来自事务管理节点的通知。
根据本公开的实施例,在倒计时结束后,仍未接收到上述提交审核信息的情况下,主动去访问上述事务管理节点以取得联系;在经过预设次数的重试之后仍然与上述事务管理节点无法取得联系的情况下,主动去访问备选管理中心节点以取得联系;在所有的备选管理中心节点均访问不到的情况下,实施全局事务的回滚操作。
根据本公开的实施例,上述方法还包括:接收来自上述事务执行节点的连接请求,并将上述连接请求传输给上述事务执行节点对应的数据库,以获取连接对象;以及在获取到连接对象的情况下,创建代理对象,并将上述代理对象返回给上述事务执行节点。
根据本公开的实施例,上述事务执行节点包括:发起节点和被上述发起节点所调用的一个或多个参与节点;上述基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作,包括:上述发起节点基于与上述发起节点对应的代理对象连接至上述发起节点对应的数据库进行对应的第一局部事务操作;上述参与节点基于与上述参与节点对应的代理对象连接至上述参与节点对应的数据库进行对应的第二局部事务操作;上述第一局部事务操作与上述第二局部事务操作构成全局事务操作;在存在多个参与节点的情况下,各个参与节点对应的第二局部事务操作并行执行。
根据本公开的实施例,上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息,包括:针对每个参与节点,在当前参与节点的当前局部事务操作执行成功且执行结果正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:已准备好提交;在当前参与节点的当前局部事务操作执行成功且执行结果不正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交;在当前参与节点的当前局部事务操作执行不成功的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交。
根据本公开的实施例,上述提交审核信息根据上述事务反馈信息来确定,包括:在所有参与节点的事务反馈信息均为已准备好提交的情况下,确定上述提交审核信息为确认进行事务提交;在所有上述参与节点中存在一个或多个参与节点的事务反馈信息为未准备好提交的情况下,确认上述提交审核信息为确认进行事务回滚。
第二方面,本公开的实施例提供了一种用于处理分布式事务的代理连接池。上述代理连接池包括:第一请求接收模块、数据库操作模块、第二请求接收模块、数据库操作解析模块、通知接收模块以及操作确认模块。上述第一请求接收模块用于接收来自事务执行节点的事务操作请求。上述数据库操作模块用于在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作。上述第二请求接收模块用于接收来自上述事务执行节点的事务提交请求。上述数据库操作解析模块用于在接收到上述事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息。上述通知接收模块用于接收来自事务管理节点的通知。上述操作确认模块用于在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
第三方面,本公开的实施例提供了一种用于处理分布式事务的***。上述***包括:代理连接池和事务管理节点。上述代理连接池用于连接事务执行节点与上述事务执行节点对应的数据库,使得上述事务执行节点通过上述代理连接池来对上述数据库实施事务操作,上述代理连接池用于对上述事务执行节点的事务执行、提交和回滚进行管理。上述事务管理节点用于与上述事务执行节点和上述代理连接池通信连接,上述事务管理节点用于根据上述事务执行节点提交的事务反馈信息来确定提交审核信息,并将上述提交审核信息通知给上述代理连接池,上述事务反馈信息根据上述代理连接池解析得到的上述事务执行节点实施的事务操作来确定。
根据本公开的实施例,上述事务管理节点针对与上述事务执行节点和上述代理连接池的通信设置有超时连接询问机制和重试机制;上述超时连接询问机制包括:在上述事务管理节点发出通知后预设时长内尚未收到上述代理连接池的预期反馈的情况下,主动询问上述事务管理节点以等待反馈;在主动询问后无反馈的情况下进行网络重试连接和再次发出通知以等待反馈,在重试后仍然无反馈的情况下,标记异常并发出异常提示。
第四方面,本公开的实施例提供了一种电子设备。上述电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现如上所述的处理分布式事务的方法。
第五方面,本公开的实施例提供了一种计算机可读存储介质。上述计算机可读存储介质上存储有计算机程序,上述计算机程序被处理器执行时实现如上所述的处理分布式事务的方法。
本公开实施例提供的上述技术方案与现有技术相比至少具有如下优点的部分或全部:
在执行全局事务时,通过基于预先创建的代理对象来对事务执行节点实施的数据库操作进行记录和对提交请求进行管理,能够根据解析得到的数据库操作来向事务管理节点提交事务反馈信息,事务执行节点内部的各个节点无需等待其他节点的同步响应,实现各个节点之间的异步提交,能够至少解决同步阻塞问题,同时基于代理对象对事务执行节点的数据库连接进行代理,避免事务执行节点直接连接数据库,便于对各个节点各自的局部事务的发起、提交和回滚操作进行统一管理。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出了根据本公开实施例的用于处理分布式事务的架构;
图2示意性示出了根据本公开一实施例的处理分布式事务的方法的流程图;
图3示意性示出了根据本公开实施例的发起节点和参与节点实施各自的局部事务操作的时序示例;
图4示意性示出了根据本公开另一实施例的处理分布式事务的方法的流程图;
图5示意性示出了根据本公开实施例的操作S204的详细实施流程图;
图6示意性示出了根据本公开实施例的操作S208的详细实施流程图;
图7示意性示出了根据本公开又一实施例的处理分布式事务的方法的流程图;
图8示意性示出了根据本公开实施例的操作S703的详细实施流程图;
图9示意性示出了根据本公开再一实施例的处理分布式事务的方法的流程图;
图10示意性示出了根据本公开实施例的处理分布式事务的方法的具体实施场景图;
图11示意性示出了根据本公开实施例的处理分布式事务的方法中事务执行节点的具体实施场景图;
图12示意性示出了根据本公开一实施例的用于处理分布式事务的装置的结构框图;
图13示意性示出了根据本公开另一实施例的用于处理分布式事务的装置的结构框图
图14示意性示出了根据本公开又一实施例的用于处理分布式事务的装置的结构框图;以及
图15示意性示出了本公开实施例提供的电子设备的结构框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开的实施例提供了一种处理分布式事务的方法、代理连接池、***、设备及介质,上述方法包括:接收来自事务执行节点的事务操作请求;在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作;接收来自上述事务执行节点的事务提交请求;在接收到上述事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息;接收来自事务管理节点的通知;以及在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
图1示意性示出了根据本公开实施例的用于处理分布式事务的架构。
首先,介绍一下分布式事务的概念。在计算机***中,大部分是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。随着互联网的快速发展,软件***由原来的单体应用转变为分布式应用。分布式***会把一个应用***拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式***环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都属于分布式事务。
下面结合图1来描述本公开实施例的用于处理分布式事务的架构。
参照图1所示,本公开实施例提供的用于处理分布式事务的架构100包括:事务执行节点110、代理连接池120和事务管理节点140。
上述事务执行节点110包括:发起节点和被上述发起节点所调用的参与节点。上述发起节点和上述参与节点通过预先构建的代理连接池120连接至各自对应的数据库,以实施各自对应的局部事务操作。上述代理连接池用于对上述发起节点和上述参与节点的局部事务操作日志进行解析和本地存储,并用于对上述发起节点和上述参与节点的事务执行、提交和回滚进行管理。
发起节点为在一目标任务中最先开始执行事务的节点,并且该节点实施对应任务逻辑的过程会涉及到数据库操作。
参与节点是在执行任务的过程中被调用来实施部分事务的节点,发起节点与参与节点之间能够通过网络实现数据交互。
被发起节点所调用的参与节点的个数可以是1个或多个(≥2个)。在图1中以包括2个参与节点作为示例,该事务执行节点110包括:发起节点S 111、参与节点A1 112和参与节点A2 113。
事务管理节点140为用于管理各个事务执行节点110的节点,该事务管理节点140为负责保证整个事务一致性的控制节点,也负责记录事务中可能出现的各种异常,以实现问题回归。事务管理节点140与上述发起节点S 111、参与节点A1 112和参与节点A2 113之间分别能够通过网络实现数据交互。
上述事务执行节点110和事务管理节点140中的节点可以是终端设备,也可以是服务器,还可以是终端设备或服务器中的一个或多个功能模块。
参照图1所示,发起节点S 111通过预先构建的代理连接池120对应连接至数据库DB1 131;参与节点A1 112通过预先构建的代理连接池120对应连接至数据库DB2 132;参与节点A2 113通过预先构建的代理连接池120对应连接至数据库DB3 133。
本公开的第一个实施例提供的处理分布式事务的方法可以由上述事务执行节点110或代理连接池120分别执行,本公开第二个实施例提供的处理分布式事务的方法可以由上述事务管理节点140执行。在其他实施例中,也可以结合第一实施例和第二实施例的描述,在上述架构100中实现分布式事务。相应的,本公开第三个实施例提供的用于处理分布式事务的装置包括上述事务执行节点110或代理连接池120,本公开第四个实施例提供的用于处理分布式事务的装置包括上述事务管理节点140。在其他实施例中,用于处理分布式事务的***可以包括代理连接池和事务管理节点。
上述事务执行节点用于根据上述代理连接池存储的当前局部事务操作的执行结果是否正常向上述事务管理节点提交事务反馈信息;还用于接收事务管理节点通知的提交审核信息,并通过上述代理连接池来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。上述事务管理节点与上述事务执行节点通信连接,用于根据上述发起节点的请求创建全局事务,并根据上述参与节点提交的事务反馈信息来确定提交审核信息,上述提交审核信息包括:确认进行事务提交和确认进行事务回滚;还用于将上述提交审核信息通知给上述参与节点和上述发起节点的代理连接池,使得上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作;以及用于等待上述发起节点反馈的全局事务操作的结果。
下面结合附图来对本公开的实施例进行详细描述。
本公开的第一个示例性实施例提供了一种处理分布式事务的方法。下面先从上述事务执行节点110执行的一侧进行上述处理分布式事务的方法的描述。
图2示意性示出了根据本公开一实施例的处理分布式事务的方法的流程图。
参照图2所示,本公开实施例提供的处理分布式事务的方法,包括以下操作:S202、S204、S206和S208。
在操作S202,响应于全局事务的创建,发起节点和被上述发起节点所调用的参与节点通过预先构建的代理连接池连接至各自的数据库来实施各自对应的局部事务操作,上述代理连接池用于对上述发起节点和上述参与节点的局部事务操作日志进行解析和本地存储。
在操作S204,上述参与节点根据上述代理连接池存储的当前局部事务操作的执行结果是否正常向上述事务管理节点提交事务反馈信息。
在操作S206,在上述发起节点发起事务提交请求的情况下,上述参与节点和上述发起节点等待上述事务管理节点通知的提交审核信息,上述提交审核信息包括:确认进行事务提交和确认进行事务回滚,上述提交审核信息根据所有上述参与节点的事务反馈信息来确定。
在操作S208,响应于接收到上述提交审核信息,上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。
上述操作S202~S208可以由事务执行节点来实施。在全局事务创建完成的情况下实施操作S202,发起节点开始执行全局事务,在执行的过程中需要调用参与节点来实现部分事务操作,将发起节点自身实施的操作也称为局部事务操作,由参与节点执行的操作也称为局部事务操作,发起节点和参与节点各自执行的局部事务操作按照执行的逻辑先后顺序依次开展。
图3示意性示出了根据本公开实施例的发起节点和参与节点实施各自的局部事务操作的时序示例。
例如结合图1和图3所示,发起节点S 111在T0时刻接收到来自事务管理节点140的全局事务已经创建成功的通知,则在T0时刻发起节点S 111开始执行全局事务。在发起节点S 111执行全局事务的过程中,需要调用参与节点A1 112和参与节点A2 113来协助执行部分事务操作,分别将参与节点A1 112协助执行的事务操作称为局部事务操作C1,将参与节点A2 113协助执行的事务操作称为局部事务操作C2,其他由发起节点S 111执行的本地操作称为局部事务操作C0,所有的局部事务操作C0、C1和C2共同协调完成后实现全局事务操作C。
示例性的,参照图3所示,采用圆圈、矩形和三角形来分别示意发起节点S、参与节点A1和参与节点A2。发起节点S 111在T1时刻调用参与节点A1 112来实施局部事务操作C1,参与节点A1 112在T2时刻将局部事务操作C1的执行结果反馈给发起节点S 111,发起节点S111在T3时刻调用参与节点A2 113来实施局部事务操作C2,参与节点A2 113在T4时刻将局部事务操作C2的执行结果反馈给发起节点S 111。
结合图1和图3所示,执行全局事务的期间,包括发起节点S 111、参与节点A1 112和参与节点A2 113在内的所有节点均通过预先构建的代理连接池120连接至各自对应的数据库DB1 131、数据库DB2 132和数据库DB3 133来实施各自对应的局部事务操作。代理连接池120用于对发起节点S 111、参与节点A1 112和参与节点A2 113各自对应的局部事务操作日志RC0、RC1和RC2进行解析和本地存储。
结合图1和图3所示,在操作S204,参与节点A1 112根据上述代理连接池120存储的当前局部事务操作C1的执行结果是否正常向上述事务管理节点140提交事务反馈信息,参与节点A2 113根据上述代理连接池120存储的当前局部事务操作C2的执行结果是否正常向上述事务管理节点140提交事务反馈信息。
通过设置代理连接池120,能够实现对于分布式事务场景中各个事务的独立提交和结果反馈进行管理和监控。
在上述发起节点S 111发起事务提交请求的情况下,实施操作S206,上述发起节点S 111、参与节点A1 112和参与节点A2 113等待上述事务管理节点140通知的提交审核信息。上述提交审核信息包括:确认进行事务提交和确认进行事务回滚,上述提交审核信息根据所有上述参与节点的事务反馈信息来确定。
在接收到上述提交审核信息的情况下,实施操作S208,上述发起节点S 111、参与节点A1 112和参与节点A2 113通过上述代理连接池120来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。
基于上述操作S202~S208,在执行全局事务时,通过使用代理连接池,来对发起节点和参与节点执行局部事务操作和提交操作进行记录和管理,能够实时返回局部事务操作的提交反馈信息,当前参与节点无需等待其他参与节点的同步响应,实现各个参与节点之间的异步提交,能够至少解决同步阻塞问题,同时基于代理连接池的设置,能够对发起节点和参与节点的数据库连接进行代理,避免包含发起节点和参与节点在内的事务执行节点直接连接数据库,便于对各个局部事务的发起、提交和回滚操作进行统一管理。
上述实施例的描述中,以事务执行节点一侧实施分布式事务的过程进行描述,下面以代理连接池一侧来对处理分布式事务的过程进行描述。
图4示意性示出了根据本公开另一实施例的处理分布式事务的方法的流程图。
参照图4所示,本公开实施例提供的处理分布式事务的方法,包括以下操作:S401、S402、S403、S404、S405和S406。
在操作S401,接收来自事务执行节点的事务操作请求。
在操作S402,在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作。
在操作S403,接收来自上述事务执行节点的事务提交请求.。
在操作S404,在接收到上述事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息.。
在操作S405,接收来自事务管理节点的通知。
在操作S406,在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
在一实施例中,上述操作S401~S406可以由图1所示例的架构100中的代理连接池120来执行。
根据本公开的实施例,在接收到来自事务执行节点的事务提交请求且尚未接收到来自事务管理节点通知的提交审核信息的情况下,阻止上述事务执行节点实施的数据库操作向数据库的提交,并启用倒计时等待来自事务管理节点的通知。
根据本公开的实施例,在倒计时结束后,仍未接收到上述提交审核信息的情况下,主动去访问上述事务管理节点以取得联系;在经过预设次数的重试之后仍然与上述事务管理节点无法取得联系的情况下,主动去访问备选管理中心节点以取得联系;在所有的备选管理中心节点均访问不到的情况下,实施全局事务的回滚操作。
根据本公开的实施例,上述方法除了包括上述操作S401~S406之外,还包括以下操作:
接收来自上述事务执行节点的连接请求,并将上述连接请求传输给上述事务执行节点对应的数据库,以获取连接对象;以及
在获取到连接对象的情况下,创建代理对象,并将上述代理对象返回给上述事务执行节点。
根据本公开的实施例,上述操作S401中的事务执行节点包括:发起节点和被上述发起节点所调用的一个或多个参与节点。
上述操作S402中,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作,包括:上述发起节点基于与上述发起节点对应的代理对象连接至上述发起节点对应的数据库进行对应的第一局部事务操作;上述参与节点基于与上述参与节点对应的代理对象连接至上述参与节点对应的数据库进行对应的第二局部事务操作;上述第一局部事务操作与上述第二局部事务操作构成全局事务操作;在存在多个参与节点的情况下,各个参与节点对应的第二局部事务操作并行执行。
根据本公开的实施例,上述操作S406中接收到的来自事务管理节点通知的提交审核信息是根据上述事务反馈信息确定得到的。在代理连接池接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作。
基于上述操作S401~S406,通过基于预先创建的代理对象来对事务执行节点实施的数据库操作进行记录和对提交请求进行管理,能够根据解析得到的数据库操作来向事务管理节点提交事务反馈信息,事务执行节点内部的各个节点无需等待其他节点的同步响应,实现各个节点之间的异步提交,能够至少解决同步阻塞问题,同时基于代理对象对事务执行节点的数据库连接进行代理,避免事务执行节点直接连接数据库,便于对各个节点各自的局部事务的发起、提交和回滚操作进行统一管理。
图5示意性示出了根据本公开实施例的操作S204的详细实施流程图。
根据本公开的实施例,代理连接池中的代理对象可以通过解析该代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息.。
上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息,包括:针对每个参与节点,在当前参与节点的当前局部事务操作执行成功且执行结果正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:已准备好提交;在当前参与节点的当前局部事务操作执行成功且执行结果不正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交;在当前参与节点的当前局部事务操作执行不成功的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交。
下面结合图5和事务执行节点一侧对应的操作S204进行详细描述。
根据本公开的实施例,参照图5所示,上述参与节点根据上述代理连接池存储的当前局部事务操作的执行结果是否正常向上述事务管理节点提交事务反馈信息的操作S204包括以下子操作:S2041、S2042、S2043、S2044和S2045。针对每个参与节点,执行操作S2041~S2045。
在子操作S2041,确定当前参与节点的当前局部事务操作是否执行成功。
在子操作S2042,在执行成功的情况下,确定当前局部事务操作的执行结果是否正常。
在子操作S2043,在当前参与节点的当前局部事务操作执行成功且执行结果正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:已准备好提交;
在子操作S2044,在当前参与节点的当前局部事务操作执行成功且执行结果不正常的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交;
在子操作S2045,在当前参与节点的当前局部事务操作执行不成功的情况下,上述当前参与节点向上述事务管理节点提交的事务反馈信息为:未准备好提交。
上述子操作S2041~S2045对应于每个参与节点实际执行局部事务后如何向事务管理节点140进行反馈的示例。参与节点内部会根据代理连接池中存储的操作来内部核查当前局部事务操作是否执行成功以及执行结果是否正常。如果参与节点执行成功了(或者描述为完成了)但是执行结果异常也会反馈未准备好提交的信息,如此一来,所有参与节点反馈给事务管理节点的事务反馈信息满足了一致性要求。比如在下订单的场景中,库存应该减1,订单量应该加1;实际的事务操作中,库存数据库也进行了减量,但是实际是减2,这种情况下发起节点还是会发起事务提交请求,通过由各个参与节点自身反馈实际结果是否正常来确保最终提交的全局事务的一致性。
图6示意性示出了根据本公开实施例的操作S206的详细实施流程图。
根据本公开的实施例,上述操作S406和操作S206中的提交审核信息均可以由事务管理节点140来确定。根据上述事务反馈信息来确定提交审核信息,包括:在所有参与节点的事务反馈信息均为已准备好提交的情况下,确定上述提交审核信息为确认进行事务提交;在所有上述参与节点中存在一个或多个参与节点的事务反馈信息为未准备好提交的情况下,确认上述提交审核信息为确认进行事务回滚。上述确定提交审核信息的操作可以由事务管理节点140来实施。
下面结合图6和事务管理节点140来详细描述如何根据事务反馈信息来确定提交审核信息的过程。
根据本公开的实施例,参照图6所示,在操作S206中,上述提交审核信息根据所有上述参与节点的事务反馈信息来确定,包括以下子操作:S2061和S2062。该子操作S2061和S2062可以由图1所示例的事务管理节点140来执行。
在子操作S2061,在所有参与节点的事务反馈信息均为已准备好提交的情况下,确定提交审核信息为:确认进行事务提交。
在子操作S2062,在所有参与节点中存在一个或多个参与节点的事务反馈信息为未准备好提交的情况下,确认提交审核信息为:确认进行事务回滚。
图7示意性示出了根据本公开又一实施例的处理分布式事务的方法的流程图。
参照图7所示,本公开实施例提供的处理分布式事务的方法除了包括上述操作S202~S208之外,还包括以下操作S701、S702和S703。该操作S701~S703由事务执行节点实施。
在操作S701,发起节点向事务管理节点发起全局事务创建请求,以在事务管理节点创建全局事务,上述全局事务的创建信息包括:发起节点信息和全局事务身份标识信息。上述操作S701在操作S202之前执行。
在操作S702,上述参与节点加入至上述全局事务中,向上述事务管理节点提交事务身份标识信息;上述发起节点和上述参与节点向上述事务管理节点发送各自的在上述代理连接池存储的局部事务操作日志的访问信息。使得上述事务管理节点能够根据上述局部事务操作日志对上述发送节点和上述参与节点的局部事务操作的一致性进行外部核查。
通过实施操作S702,在全局事务的创建信息中形成以下信息组:{全局事务身份标识信息、发起节点信息、各个参与节点的事务身份标识信息、发起节点的局部事务操作日志的访问信息、各个参与节点的局部事务操作日志的访问信息}。
上述操作S702在操作S202之后执行,操作S702和操作S204二者可以合并在一个操作执行,也可以分步先后执行,并且不限定先后顺序。
在操作S703,上述发起节点根据上述全局事务的当前实施状态来确定是否向上述事务管理节点发起事务提交请求。上述操作S703在操作S206之前执行。
图8示意性示出了根据本公开实施例的操作S703的详细实施流程图。
根据本公开的实施例,参照图8所示,上述发起节点根据上述全局事务的当前实施状态来确定是否向上述事务管理节点发起事务提交请求的操作S703包括以下子操作S7031和S7032。
在子操作S7031,在上述全局事务的当前实施状态为实施完成的情况下,上述发起节点向上述事务管理节点发起事务提交请求。
在子操作S7032,在上述全局事务的当前实施状态为实施中断或实施失败的情况下,上述发起节点向上述事务管理节点发起事务回滚请求。
其中,实施完成的情况中,不针对当前实施状态的完成正确度进行要求,可以存在实施完成但是有错误的情况。由于前述子操作S2041~S2045中,会将执行完成但是存在执行错误的情况反映到事务反馈信息中,如此一来,在全局事务提交之后,也能通过参与节点事务反馈信息来对真实的事务是否可提交进行正确反馈,从而在事务管理节点的审核过程中对这种实施完成但是有错误情况发布事务回滚指令,进而确保最终提交的全局事务的一致性。
在每个参与节点内部,可以根据预设的执行逻辑来实施局部事务操作。例如在当前参与节点的当前局部事务操作执行失败的情况下,按照预设逻辑对所述当前参与节点进行回滚后再次重试针对当前参与节点的局部事务操作,直至回滚次数超过预设值或者回滚时间超过预设时间后停止,向发起节点和事务管理节点返回最终的结果。
根据本公开的实施例,在上述发起节点发起事务提交请求后且在上述参与节点和上述发起节点等待上述事务管理节点通知的过程中,上述代理连接池阻止上述发起节点和上述参与节点的局部事务操作向对应数据库的提交,将上述发起节点和上述参与节点的局部事务操作日志存储至本地,并启动倒计时等待上述事务管理节点的通知。
上述操作过程对应于伪提交的操作,由代理连接池将局部事务操作日志进行存储,在未接到事务管理节点的通知的情况下,阻止进行事务提交。与上述操作S208:响应于接收到上述提交审核信息,上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作相呼应。
根据本公开的实施例,如果上述参与节点和上述发起节点等待超过预设时长后,仍未收到上述事务管理节点通知的提交审核信息,则由上述发起节点的代理连接池去访问上述事务管理节点以取得联系。如果上述发起节点与上述事务管理节点经过预设次数的重试之后仍然无法取得联系,则上述发起节点会请求访问备选管理中心节点。如果所有的备选管理中心节点均访问不到,则上述发起节点和上述参与节点通过上述代理连接池实施全局事务的回滚操作。
通过对事务管理中心和事务执行节点之间的通信设置超时询问机制和重试机制,能够自动对异常情况(包括网络异常)进行事务补偿,降低了开发者对事务的维护难度。
本公开的第二个示例性实施例提供了一种处理分布式事务的方法。本实施例的方法可以由上述图1所示例的架构100中的事务管理节点140执行。
图9示意性示出了根据本公开再一实施例的处理分布式事务的方法的流程图。
参照图9所示,本公开实施例提供的方法包括以下操作S902、S904、S906和S908。
在操作S902,响应于来自发起节点的全局事务创建请求,在事务管理节点创建全局事务,上述全局事务的创建信息包括:发起节点信息和全局事务身份标识信息。
在操作S904,在上述全局事务的发起节点和被上述发起节点所调用的参与节点通过预先构建的代理连接池连接至各自的数据库来实施各自对应的局部事务操作的情况下,上述事务管理节点接收上述参与节点提交的事务反馈信息。
上述参与节点根据上述代理连接池存储的当前局部事务操作的执行结果是否正常来确定上述事务反馈信息。
在操作S906,在上述发起节点发起事务提交请求的情况下,上述事务管理节点根据所有上述参与节点的事务反馈信息确定提交审核信息,上述提交审核信息包括:确认进行事务提交和确认进行事务回滚;并将上述提交审核信息通知给上述参与节点和上述发起节点的代理连接池。使得上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。
在操作S908,上述事务管理节点等待上述发起节点反馈的全局事务操作的结果。
上述操作S902~S908可由事务管理节点执行,与第一实施例描述的为交互的过程。本实施例可以结合图1和第一实施例的事务执行节点和代理连接池实施的过程来交互理解。
图10示意性示出了根据本公开实施例的处理分布式事务的方法的具体实施场景图。
参照图1和图10所示,在事务管理节点140接收到发起节点S 111发起的全局事务创建请求的情况下,在事务管理节点140创建全局事务。发起节点信息包括发起节点的身份信息,比如为IP地址或者其他能够区分发起节点和参与节点的信息。
结合图1、图2、图9和图10所示,在发起节点S 111和参与节点A1 112、参与节点A2113通过预先构建的代理连接池120连接至各自对应的数据库DB1 131、数据库DB2 132和数据库DB3 133来实施各自对应的局部事务操作的过程中,上述参与节点A1 112和参与节点A2 113会向上述事务管理节点140提交事务反馈信息(对应于操作S204),从而在上述事务管理节点140接收上述参与节点A1 112和参与节点A2 113提交的事务反馈信息(对应于操作S804)。
在上述发起节点S 111发起事务提交请求的情况下,上述事务管理节点140根据参与节点A1 112和参与节点A2 113的事务反馈信息确定提交审核信息,并将上述提交审核信息通知给上述发起节点S 111、参与节点A1 112和参与节点A2 113对应的代理连接池120(对应于操作S806)。
在事务管理节点140将提交审核信息通知给所有的事务执行节点110之后,上述事务执行节点110通过上述代理连接池120来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚(对应于操作S208)。
上述事务管理节点140等待上述发起节点反馈的全局事务操作的结果(对应于操作S808)。
根据本公开的实施例,上述事务管理节点将上述提交审核信息通知给上述参与节点和上述发起节点的代理连接池,包括:上述事务管理节点将上述提交审核信息逐个通知给上述参与节点和上述发起节点的代理连接池,在上述参与节点和上述发起节点中的当前节点没有反馈收到通知的情况下,进行网络重试连接和再次发出通知。如果超出第一预设时长后仍未通知成功,则将针对当前节点的通知标记为待补偿,并向运维装置发出通知。如果等待超过第二预设时长后,上述事务管理节点仍未收到上述发起节点反馈的全局事务操作的结果,上述事务管理节点主动询问上述发起节点的代理连接池以获得上述全局事务操作的结果;如果上述事务管理节点询问失败或未收到上述全局事务操作的结果,则将上述发起节点标记为待补偿,并向运维装置发出通知。上述第一预设时长和第二预设时长的值可以根据实际需要进行设置。
根据本公开的实施例,上述方法除了包括上述操作S902~S908之外,还包括以下操作:事务管理节点接收上述参与节点提交的事务身份标识信息,以及接收上述发起节点和上述参与节点发送的各自的在上述代理连接池存储的局部事务操作日志的访问信息。进而能够根据上述局部事务操作日志对上述发送节点和上述参与节点的局部事务操作的一致性进行外部核查。
图11示意性示出了根据本公开实施例的处理分布式事务的方法中事务执行节点的具体实施场景图。
结合图11和图10所示,事务执行节点中的发起节点在开始实际执行业务(事务)之前先通知事务管理节点创建全局事务,全局事务中包含关键的事务信息如节点信息、全局事务Id标示等信息,随后参与节点或者发起节点开始执行各自的局部事务操作,对应于图10中的开始事务。
接着,通过代理连接池实现数据库的连接,以java为例,获取数据库连接表示为JDBC。首先,本地连接池向代理连接池请求连接;接着,代理连接池继续将请求传递给数据库连接池,向数据库连接池获取连接对象,数据库连接池继续向数据库获取连接请求传递。
代理连接池开始代理连接:代理层连接池获取到返回的连接对象并创建代理对象,再将代理对象返回给本地连接池。
事务执行节点基于上述代理连接池的来对数据库执行事务操作。此时相关事务操作将会由代理层连接池的代理对象管理。
通过代理对象执行的数据库操作,最终会由代理连接池进行SQL解析并保存,便于事务管理和业务追踪。在其他实施例中,也可以根据数据库的不同,生成不同的逆向SQL。
提交事务:在事务执行节点完成了所有的事务操作,开始发起提交本地的事务提交请求。
通知事务:当发起节点完成所有的参与节点调用以后,事务管理节点会通知代理连接池进行事务提交。
伪事务提交:代理连接对象接收到提交事务请求时会阻止事务的提交(伪提交),但是会将解析到的业务操作日志数据存储到本地,再开始启用倒计时等待事务管理节点的消息通知。
响应提交:代理连接池将响应完提交事务以后将结果反馈给调用者。
代理连接池提交事务:代理连接池向数据库提交真实事务,如果出现业务异常则提交回滚操作;如果是框架事务补偿机制,则提交补偿相关的SQL操作。
代理连接池响应事务:当事务提交以后就开始响应事务通知给事务管理节点,通知本次事务已经完成。
代理连接池询问事务执行节点群组:若事务管理节点在要求的时间段内没有通知代理连接池的话,那么代理连接池将会触发超时请求机制,会主动去联系事务管理节点,若访问不到,则会进入重试机制,若还不能访问则会根据集群部署特点,请求其他的备选事务管理节点,若全都访问不到将执行回滚事务。
本公开的第三个示例性实施例提供了一种用于处理分布式事务的装置。
图12示意性示出了根据本公开一实施例的用于处理分布式事务的装置的结构框图。
参照图12所示,上述用于处理分布式事务的装置1200包括:局部事务操作模块1203、事务反馈信息确定模块1204、审核通知接收模块1205和全局事务操作模1206。
上述用于实现分布式事务的装置1200可以对应于事务执行节点,上述事务执行节点包括:发起节点1201和被上述发起节点所调用的参与节点1202,上述发起节点和上述参与节点通过预先构建的代理连接池连接至各自对应的数据库,可以参照图1所示例的事务执行节点110对应的架构的描述。上述各个模块:局部事务操作模块1203、事务反馈信息确定模块1204、审核通知接收模块1205和全局事务操作模块1206可以被发起节点1201和参与节点1202对应进行调用。
上述局部事务操作模块1203用于响应于全局事务的创建,使得上述发起节点和上述参与节点通过上述代理连接池连接至各自的数据库来实施各自对应的局部事务操作。上述代理连接池用于对上述发起节点和上述参与节点的局部事务操作日志进行解析和本地存储。
上述事务反馈信息确定模块1204用于使得上述参与节点根据上述代理连接池存储的当前局部事务操作的执行结果是否正常向上述事务管理节点提交事务反馈信息。
上述审核通知接收模块1205用于在上述发起节点发起事务提交请求的情况下,使得上述参与节点和上述发起节点等待上述事务管理节点通知的提交审核信息。
上述提交审核信息包括:确认进行事务提交和确认进行事务回滚。上述提交审核信息根据所有上述参与节点的事务反馈信息来确定。
上述全局事务操作模块1206用于响应于接收到上述提交审核信息,上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。
本公开的第四个示例性实施例提供了一种用于处理分布式事务的装置。
图13示意性示出了根据本公开另一实施例的用于处理分布式事务的装置的结构框图。
参照图13所示,本公开实施例提供的用于处理分布式事务的装置1300,该装置1300可以对应于代理连接池。上述代理连接池包括:第一请求接收模块1301、数据库操作模块1302、第二请求接收模块1303、数据库操作解析模块1304、通知接收模块1305以及操作确认模块1306。
上述第一请求接收模块1301用于接收来自事务执行节点的事务操作请求。
上述数据库操作模块1302用于在接收到上述事务操作请求的情况下,基于预先创建的代理对象连接至上述事务执行节点对应的数据库进行对应操作。
上述第二请求接收模块1303用于接收来自上述事务执行节点的事务提交请求。
上述数据库操作解析模块1304用于在接收到上述事务提交请求的情况下,解析上述代理对象实施的数据库操作,使得上述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息。
上述通知接收模块1305用于接收来自事务管理节点的通知。
上述操作确认模块1306用于在接收到来自事务管理节点通知的提交审核信息的情况下,根据上述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,上述提交审核信息根据上述事务反馈信息来确定。
本公开的第五个示例性实施例提供了一种用于处理分布式事务的装置。
图14示意性示出了根据本公开又一实施例的用于处理分布式事务的装置的结构框图。
参照图14所示,本公开实施例提供的用于实现分布式事务的装置1400包括:全局事务创建模块1402、事务反馈信息接收模块1403、提交审核信息确定模块1404、通知模块1405和结果接收模块1406。上述用于实现分布式事务的装置1400可以对应于事务管理节点1401。全局事务创建模块1402、事务反馈信息接收模块1403、提交审核信息确定模块1404、通知模块1405和结果接收模块1406这些模块可以被事务管理节点1401所调用。
上述全局事务创建模块1402用于响应于来自发起节点的全局事务创建请求,创建全局事务,上述全局事务的创建信息包括:发起节点信息和全局事务身份标识信息。
上述事务反馈信息接收模块1403用于在上述全局事务的发起节点和被上述发起节点所调用的参与节点通过预先构建的代理连接池连接至各自的数据库来实施各自对应的局部事务操作的情况下,接收上述参与节点提交的事务反馈信息。上述参与节点根据上述代理连接池存储的当前局部事务操作的执行结果是否正常来确定上述事务反馈信息。
上述提交审核信息确定模块1404用于在上述发起节点发起事务提交请求的情况下,根据所有上述参与节点的事务反馈信息确定提交审核信息,上述提交审核信息包括:确认进行事务提交和确认进行事务回滚。
上述通知模块1405用于将上述提交审核信息通知给上述参与节点和上述发起节点的代理连接池,使得上述发起节点和上述参与节点通过上述代理连接池来实施上述提交审核信息指示的全局事务操作,以实现全局事务的确认或回滚。
上述结果接收模块1406用于上述事务管理节点等待上述发起节点反馈的全局事务操作的结果。
上述各个实施例中,上述各组模块:局部事务操作模块1203、事务反馈信息确定模块1204、审核通知接收模块1205和全局事务操作模1206;第一请求接收模块1301、数据库操作模块1302、第二请求接收模块1303、数据库操作解析模块1304、通知接收模块1305以及操作确认模块1306;全局事务创建模块1402、事务反馈信息接收模块1403、提交审核信息确定模块1404、通知模块1405和结果接收模块1406中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。上述各个模块:局部事务操作模块1203、事务反馈信息确定模块1204、审核通知接收模块1205、全局事务操作模1206、第一请求接收模块1301、数据库操作模块1302、第二请求接收模块1303、数据库操作解析模块1304、通知接收模块1305、操作确认模块1306、全局事务创建模块1402、事务反馈信息接收模块1403、提交审核信息确定模块1404、通知模块1405、结果接收模块1406中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上***、基板上的***、封装上的***、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,上述各个模块:局部事务操作模块1203、事务反馈信息确定模块1204、审核通知接收模块1205、全局事务操作模1206、第一请求接收模块1301、数据库操作模块1302、第二请求接收模块1303、数据库操作解析模块1304、通知接收模块1305、操作确认模块1306、全局事务创建模块1402、事务反馈信息接收模块1403、提交审核信息确定模块1404、通知模块1405、结果接收模块1406中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
本公开的第六个示例性实施例提供了一种电子设备。
图15示意性示出了本公开实施例提供的电子设备的结构框图。
参照图15所示,本公开实施例提供的电子设备1500包括处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501、通信接口1502和存储器1503通过通信总线1504完成相互间的通信;存储器1503,用于存放计算机程序;处理器1501,用于执行存储器上所存放的程序时,实现如上所述的处理分布式事务的方法。
本公开的第六个示例性实施例还提供了一种计算机可读存储介质。上述计算机可读存储介质上存储有计算机程序,上述计算机程序被处理器执行时实现如上所述的处理分布式事务的方法。
该计算机可读存储介质可以是上述实施例中描述的设备/装置中所包含的;也可以是单独存在,而未装配入该设备/装置中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (12)
1.一种处理分布式事务的方法,其特征在于,包括:
接收来自事务执行节点的事务操作请求;
在接收到所述事务操作请求的情况下,基于预先创建的代理对象连接至所述事务执行节点对应的数据库进行对应操作;
接收来自所述事务执行节点的事务提交请求;
在接收到所述事务提交请求的情况下,解析所述代理对象实施的数据库操作,使得所述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息;
接收来自事务管理节点的通知;以及
在接收到来自事务管理节点通知的提交审核信息的情况下,根据所述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,所述提交审核信息根据所述事务反馈信息来确定。
2.根据权利要求1所述的方法,其特征在于,在接收到来自事务执行节点的事务提交请求且尚未接收到来自事务管理节点通知的提交审核信息的情况下,阻止所述事务执行节点实施的数据库操作向数据库的提交,并启用倒计时等待来自事务管理节点的通知。
3.根据权利要求2所述的处理方法,其特征在于,
在倒计时结束后,仍未接收到所述提交审核信息的情况下,主动去访问所述事务管理节点以取得联系;
在经过预设次数的重试之后仍然与所述事务管理节点无法取得联系的情况下,主动去访问备选管理中心节点以取得联系;
在所有的备选管理中心节点均访问不到的情况下,实施全局事务的回滚操作。
4.根据权利要求1所述的方法,其特征在于,还包括:
接收来自所述事务执行节点的连接请求,并将所述连接请求传输给所述事务执行节点对应的数据库,以获取连接对象;以及
在获取到连接对象的情况下,创建代理对象,并将所述代理对象返回给所述事务执行节点。
5.根据权利要求1所述的方法,其特征在于,所述事务执行节点包括:发起节点和被所述发起节点所调用的一个或多个参与节点;
所述基于预先创建的代理对象连接至所述事务执行节点对应的数据库进行对应操作,包括:
所述发起节点基于与所述发起节点对应的代理对象连接至所述发起节点对应的数据库进行对应的第一局部事务操作;
所述参与节点基于与所述参与节点对应的代理对象连接至所述参与节点对应的数据库进行对应的第二局部事务操作;所述第一局部事务操作与所述第二局部事务操作构成全局事务操作;在存在多个参与节点的情况下,各个参与节点对应的第二局部事务操作并行执行。
6.根据权利要求5所述的方法,其特征在于,所述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息,包括:
针对每个参与节点,在当前参与节点的当前局部事务操作执行成功且执行结果正常的情况下,所述当前参与节点向所述事务管理节点提交的事务反馈信息为:已准备好提交;
在当前参与节点的当前局部事务操作执行成功且执行结果不正常的情况下,所述当前参与节点向所述事务管理节点提交的事务反馈信息为:未准备好提交;
在当前参与节点的当前局部事务操作执行不成功的情况下,所述当前参与节点向所述事务管理节点提交的事务反馈信息为:未准备好提交。
7.根据权利要求6所述的方法,其特征在于,所述提交审核信息根据所述事务反馈信息来确定,包括:
在所有参与节点的事务反馈信息均为已准备好提交的情况下,确定所述提交审核信息为确认进行事务提交;
在所有所述参与节点中存在一个或多个参与节点的事务反馈信息为未准备好提交的情况下,确认所述提交审核信息为确认进行事务回滚。
8.一种用于处理分布式事务的代理连接池,其特征在于,包括:
第一请求接收模块,用于接收来自事务执行节点的事务操作请求;
数据库操作模块,用于在接收到所述事务操作请求的情况下,基于预先创建的代理对象连接至所述事务执行节点对应的数据库进行对应操作;
第二请求接收模块,用于接收来自所述事务执行节点的事务提交请求;
数据库操作解析模块,用于在接收到所述事务提交请求的情况下,解析所述代理对象实施的数据库操作,使得所述事务执行节点根据解析得到的数据库操作来向事务管理节点提交事务反馈信息;
通知接收模块,用于接收来自事务管理节点的通知;以及
操作确认模块,用于在接收到来自事务管理节点通知的提交审核信息的情况下,根据所述提交审核信息来确认向数据库提交全局事务操作或回滚全局事务操作,所述提交审核信息根据所述事务反馈信息来确定。
9.一种用于处理分布式事务的***,其特征在于,包括:
代理连接池,用于连接事务执行节点与所述事务执行节点对应的数据库,使得所述事务执行节点通过所述代理连接池来对所述数据库实施事务操作,所述代理连接池用于对所述事务执行节点的事务执行、提交和回滚进行管理;以及
事务管理节点,用于与所述事务执行节点和所述代理连接池通信连接,所述事务管理节点用于根据所述事务执行节点提交的事务反馈信息来确定提交审核信息,并将所述提交审核信息通知给所述代理连接池,所述事务反馈信息根据所述代理连接池解析得到的所述事务执行节点实施的事务操作来确定。
10.根据权利要求9所述的***,其特征在于,所述事务管理节点针对与所述事务执行节点和所述代理连接池的通信设置有超时连接询问机制和重试机制;
所述超时连接询问机制包括:在所述事务管理节点发出通知后预设时长内尚未收到所述代理连接池的预期反馈的情况下,主动询问所述事务管理节点以等待反馈;在主动询问后无反馈的情况下进行网络重试连接和再次发出通知以等待反馈,在重试后仍然无反馈的情况下,标记异常并发出异常提示。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7中任一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110704863.7A CN113268471B (zh) | 2021-06-24 | 2021-06-24 | 处理分布式事务的方法、代理连接池、***、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110704863.7A CN113268471B (zh) | 2021-06-24 | 2021-06-24 | 处理分布式事务的方法、代理连接池、***、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113268471A true CN113268471A (zh) | 2021-08-17 |
CN113268471B CN113268471B (zh) | 2023-09-22 |
Family
ID=77235809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110704863.7A Active CN113268471B (zh) | 2021-06-24 | 2021-06-24 | 处理分布式事务的方法、代理连接池、***、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113268471B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886502A (zh) * | 2021-12-03 | 2022-01-04 | 支付宝(杭州)信息技术有限公司 | 一种数据库和区块链同步的数据处理方法及*** |
CN114168110A (zh) * | 2021-11-30 | 2022-03-11 | 中国科学院软件研究所 | 轻量级鸿蒙操作***的应用开发事务管理***及方法 |
CN114547208A (zh) * | 2022-04-21 | 2022-05-27 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
CN116303517A (zh) * | 2023-05-12 | 2023-06-23 | 无锡锡商银行股份有限公司 | 一种分布式事务调度管理***及方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与*** |
CN106033562A (zh) * | 2015-03-16 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 事务处理方法、事务参与节点及事务协调节点 |
CN106557514A (zh) * | 2015-09-29 | 2017-04-05 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
US20170344596A1 (en) * | 2016-05-25 | 2017-11-30 | Google Inc. | Real-time Transactionally Consistent Change Notifications |
CN110022367A (zh) * | 2019-04-11 | 2019-07-16 | 软通动力信息技术(集团)有限公司 | 一种事务处理方法和事务处理*** |
CN110019469A (zh) * | 2017-12-07 | 2019-07-16 | 中兴通讯股份有限公司 | 分布式数据库数据处理方法、装置、存储介质及电子装置 |
CN110532068A (zh) * | 2019-07-18 | 2019-12-03 | 政采云有限公司 | 一种分布式事务的管理方法 |
CN111198751A (zh) * | 2018-11-20 | 2020-05-26 | 北京京东尚科信息技术有限公司 | 业务处理方法和装置 |
CN111427963A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 分布式数据库的数据访问方法及*** |
CN112988883A (zh) * | 2019-12-16 | 2021-06-18 | 中兴通讯股份有限公司 | 数据库的数据同步方法、装置以及存储介质 |
CN112995262A (zh) * | 2019-12-18 | 2021-06-18 | ***通信集团浙江有限公司 | 分布式事务提交方法、***及计算设备 |
-
2021
- 2021-06-24 CN CN202110704863.7A patent/CN113268471B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与*** |
CN106033562A (zh) * | 2015-03-16 | 2016-10-19 | 阿里巴巴集团控股有限公司 | 事务处理方法、事务参与节点及事务协调节点 |
CN106557514A (zh) * | 2015-09-29 | 2017-04-05 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
US20170344596A1 (en) * | 2016-05-25 | 2017-11-30 | Google Inc. | Real-time Transactionally Consistent Change Notifications |
CN110019469A (zh) * | 2017-12-07 | 2019-07-16 | 中兴通讯股份有限公司 | 分布式数据库数据处理方法、装置、存储介质及电子装置 |
CN111198751A (zh) * | 2018-11-20 | 2020-05-26 | 北京京东尚科信息技术有限公司 | 业务处理方法和装置 |
CN110022367A (zh) * | 2019-04-11 | 2019-07-16 | 软通动力信息技术(集团)有限公司 | 一种事务处理方法和事务处理*** |
CN110532068A (zh) * | 2019-07-18 | 2019-12-03 | 政采云有限公司 | 一种分布式事务的管理方法 |
CN112988883A (zh) * | 2019-12-16 | 2021-06-18 | 中兴通讯股份有限公司 | 数据库的数据同步方法、装置以及存储介质 |
CN112995262A (zh) * | 2019-12-18 | 2021-06-18 | ***通信集团浙江有限公司 | 分布式事务提交方法、***及计算设备 |
CN111427963A (zh) * | 2020-04-15 | 2020-07-17 | 赞同科技股份有限公司 | 分布式数据库的数据访问方法及*** |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168110A (zh) * | 2021-11-30 | 2022-03-11 | 中国科学院软件研究所 | 轻量级鸿蒙操作***的应用开发事务管理***及方法 |
CN113886502A (zh) * | 2021-12-03 | 2022-01-04 | 支付宝(杭州)信息技术有限公司 | 一种数据库和区块链同步的数据处理方法及*** |
CN113886502B (zh) * | 2021-12-03 | 2022-04-22 | 支付宝(杭州)信息技术有限公司 | 一种数据库和区块链同步的数据处理方法及*** |
CN114547208A (zh) * | 2022-04-21 | 2022-05-27 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
WO2023202497A1 (zh) * | 2022-04-21 | 2023-10-26 | 北京奥星贝斯科技有限公司 | 用于全链路追踪事务的方法及原生分布式数据库 |
CN116303517A (zh) * | 2023-05-12 | 2023-06-23 | 无锡锡商银行股份有限公司 | 一种分布式事务调度管理***及方法 |
CN116303517B (zh) * | 2023-05-12 | 2023-08-22 | 无锡锡商银行股份有限公司 | 一种分布式事务调度管理***及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113268471B (zh) | 2023-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113268471B (zh) | 处理分布式事务的方法、代理连接池、***、设备及介质 | |
CN111666162B (zh) | 分布式消息传输方法、装置、计算机设备及存储介质 | |
US11269718B1 (en) | Root cause detection and corrective action diagnosis system | |
US5805785A (en) | Method for monitoring and recovery of subsystems in a distributed/clustered system | |
US7480816B1 (en) | Failure chain detection and recovery in a group of cooperating systems | |
CN111667334B (zh) | 审核失败订单处理方法、装置、计算机设备和存储介质 | |
CN103782574A (zh) | 用于数据库事务的幂等性 | |
CN110502319B (zh) | 分布式事务的处理方法、装置、电子设备及存储介质 | |
CN107612950B (zh) | 一种提供服务的方法、装置、***、电子设备 | |
CN112579620A (zh) | 一种基于消息队列的分布式***数据最终一致性方法 | |
CN110941622A (zh) | 一种数据处理方法及装置 | |
CN108880873B (zh) | 一种应用于异构***的事务补偿方法和装置 | |
CN116384993B (zh) | 基于云支付中心实现订单支付状态高一致性的方法与*** | |
US8180846B1 (en) | Method and apparatus for obtaining agent status in a network management application | |
CN112632093A (zh) | 工单处理方法、设备、***、存储介质及程序产品 | |
CN115643271A (zh) | 一种云上多应用数据同步方法、装置、服务器及介质 | |
CN115658078A (zh) | 数据库的预编译处理方法、装置、设备及介质 | |
CN112711466B (zh) | 悬挂事务巡检方法和装置、电子设备和存储介质 | |
CN113590662B (zh) | 业务交易结果的查询方法及装置、存储介质及电子设备 | |
CN113297281A (zh) | 一种账务一致性处理方法及服务器 | |
JP5515286B2 (ja) | 分散トランザクション処理システム、サーバ装置及びそれらに用いる分散トランザクションの障害復旧方法 | |
US11552844B1 (en) | Persistent storage for server clusters | |
CN116431294A (zh) | 分布式数据库的长事务筛选方法、装置以及电子设备 | |
CN116643733B (zh) | 业务处理***和方法 | |
CN117608617B (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 |