CN113872781A - 事务处理方法、装置、设备和存储介质 - Google Patents

事务处理方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN113872781A
CN113872781A CN202010615149.6A CN202010615149A CN113872781A CN 113872781 A CN113872781 A CN 113872781A CN 202010615149 A CN202010615149 A CN 202010615149A CN 113872781 A CN113872781 A CN 113872781A
Authority
CN
China
Prior art keywords
transaction
branch
time
identifier
time parameter
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.)
Pending
Application number
CN202010615149.6A
Other languages
English (en)
Inventor
申海强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN202010615149.6A priority Critical patent/CN113872781A/zh
Publication of CN113872781A publication Critical patent/CN113872781A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种事务处理方法、装置、设备和存储介质,以解决现有技术中,分布式事务容易出现协议阻塞的情况的问题。所述方法包括:获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;根据所述第一时间参数,确定所述分支事务的执行时长;若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。

Description

事务处理方法、装置、设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种事务处理方法和装置、一种电子设备和一种存储介质。
背景技术
在计算机领域,事务(transaction)是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java等)编写,由事务开始(begin transaction)至事务结束(end transaction)之间执行的全部操作组成。事务提供一种机制,将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。
事务由事务开始(begin transaction)至事务结束(end transaction)之间执行的全部操作组成;数据库事务中,普遍具备四大特性ACID,具体如下:
A:原子性(Atomicity);
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,如同该事务没有被执行过一样。
C:一致性(Consistency);
事务的一致性是指在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么***中所有变化将正确地应用,***处于有效状态。如果在事务中出现错误,那么***中的所有变化将自动地回滚,***返回到原始状态。
I:隔离性(Isolation);
隔离性是指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到在其他事务中间状态的数据。
D:持久性(Durability)。
持久性是指只要某事务成功结束,它对数据库所做的更新就必须保存下来。即使发生***崩溃,重新启动数据库***后,数据库还能恢复到该事务成功结束时的状态。
分布式事务简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。
随着互联网快速发展,微服务架构、面向服务的架构(Service-OrientedArchitecture,SOA)等服务架构模式正在被大规模的使用,使得分布式事务应运而生。比如一个公司,其用户的资产可能分为多个部分,比如余额、积分、优惠券等等;在该公司内部积分功能由一个微服务团队维护,优惠券又是另外的团队维护。这样的话,若不保持数据库的一致性,就无法保证积分扣减了之后,优惠券能否扣减成功。又或者,对于一个应用程序的转账业务而言,用户A向用户B转账,用户A的数据库在A城市,而用户B的数据库在B城市,如果不采取分布式事务执行,无法保证用户A向用户B转账、用户B收款能同时成功。因此,分布式事务是互联网高速发展的一个必然结果。
具体地,分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式***的不同节点之上。为了实现事务ACID属性,分布式事务通常采用基于XA规范(由X/Open组织提出的分布式事务的规范)的两阶段提交的方式,第一阶段为准备阶段,第二阶段为提交阶段。
在提交阶段,事务协调器向各参与事务的资源管理器发起回滚命令,在此过程中,容易出现协议阻塞的情况。比如,某些参与事务的资源管理器与事务协调器断开连接,或事务协调器出现宕机,导致资源管理器无法获得事务协调器的命令。未接收到回滚命令(XArollback)的资源管理器被阻塞,相应的XA分支不能提交也不能回滚,这种情况下,如果没有数据库管理员人工直预,被阻塞XA分支持有的数据将一直被锁定。
发明内容
本申请实施例提供了一种事务处理方法,以解决现有技术中,分布式事务容易出现协议阻塞的情况的问题。
相应的,本申请实施例还提供了一种事务处理装置、一种电子设备以及一种存储介质,用以保证上述方法的实现及应用。
为了解决上述问题,本申请实施例公开了一种事务处理方法,所述方法包括:
获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
本申请实施例公开了一种事务处理方法,所述方法包括:
获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间;
将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;
根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述分支标识符中的第二时间参数,对所述分支事务执行回滚处理操作。
本申请实施例公开了一种事务处理方法,应用于分布式事务处理***,所述分布式事务处理***包括资源管理器以及事务协调器,所述方法包括:
控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求;
控制所述事务协调器接收所述释放请求,并释放所述数据锁。
本申请实施例还公开了一种事务处理装置,所述装置包括:
标识符获取模块,用于获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
第一时长确定模块,用于根据所述第一时间参数,确定所述分支事务的执行时长;
回滚处理模块,用于若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
本申请实施例还公开了一种事务处理装置,所述装置包括:
第二时间获取模块,用于获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间;
第二添加模块,用于将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;
第二时长确定模块,用于根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长;
回滚执行模块,用于若所述执行时长超过所述分支标识符中的第二时间参数,对所述分支事务执行回滚处理操作
本申请实施例还公开了一种事务处理装置,所述装置应用于分布式事务处理***,所述分布式事务处理***包括资源管理器以及事务协调器,所述装置包括:
第一控制模块,用于控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求;
第二控制模块,用于控制所述事务协调器接收所述释放请求,并释放所述数据锁。
本申请实施例还公开了一种电子设备,包括:处理器;和存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如本申请实施例中一个或多个所述的方法。
本申请实施例还公开了一个或多个机器可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如本申请实施例中一个或多个所述的方法。
与现有技术相比,本申请实施例包括以下优点:
在本申请实施例中,获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
附图说明
图1是本申请实施例的一种数据处理的场景示意图之一;
图2是本申请实施例的一种数据处理的场景示意图之二;
图3是本申请的一种事务处理方法实施例的步骤流程图;
图4是本申请的又一种事务处理方法实施例的步骤流程图;
图5是本申请的又一种事务处理方法实施例的步骤流程图;
图6是本申请的一种事务处理装置实施例的结构框图;
图7是本申请的一种事务处理装置实施例的结构框图;
图8是本申请的另一种事务处理装置实施例的结构框图;
图9是本申请一实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。
本申请实施例中可应用于数据库等数据处理领域,在资源管理器无法获得事务协调器命令的情况下,根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断分支事务是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
结合图1,图1示出了本申请实施例的一种应用场景,其中,图1中示意了全局事务1,全局事务1可以与全局事务通过事务协调器(Transaction Coordinator,TC)汇聚于同一个数据库。
其中,TC作为分布式事务中协调者的角色,管理全局事务的状态信息,包括全部事务的开启、提交、回滚管理,分支事务的注册、提交、回滚、状态上报等;维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
以全局事务1为例,其中全局事务1包括分支事务1和分支事务2;具体地,全局事务指对于一次性操作多个资源管理器的事务,就是全局事务;分支事务:在全局事务中,某一个资源管理器(Resource Manager,RM)有自己独立的任务,这些任务的集合作为这个资源管理器的分支任务;RM控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。比如,针对用户A向用户B转账的全局事务中,包括两个分支事务,分别为用户A的C账户扣减转账金额,以及用户B的D账户增加所述转账金额。
事务管理器(Transaction Manager,TM)是分布式事务的核心管理者,其与每个RM进行通信,协调并完成事务的处理;控制全局事务边界,负责全局事务开启、全局提交、全局回滚。事务由事务开始(begin transaction)至事务结束(end transaction)之间执行的全部操作组成。
为了实现事务ACID属性,分布式事务通常采用基于XA规范的两阶段提交的方式,第一阶段为准备阶段,第二阶段为提交阶段。在提交阶段,事务协调器向各参与事务的资源管理器发起回滚命令,在此过程中,容易出现协议阻塞的情况。因此,本申请实施例提供一种事务处理方法,以解决上述问题,可选地,如图1所示,所述方法可应用于RM1。在RM1无法获得TC命令的情况下,RM1根据所执行的分支事务1的分支标识符中包含的开始执行时间以及预设超时时间,及时判断分支事务1是否执行超时;并在执行超时的情况下,对分支事务1进行回滚,释放分支事务1对应的数据表,防止数据表被长期锁定而引发协议堵塞。
具体地,所述方法包括:
步骤101,获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间。
其中,分支标识符用于唯一标记一个分支事务,分支标识符中可包括初始标识符,初始标识符为在所述分支事务在TC侧注册成功后,TC为分支事务分配的事务标识号,比如为分支ID;除初始标识符外,分支标识符中还包括第一时间参数和第二时间参数,作为检测分支事务是否超时的依据。可选地,第一时间参数和第二时间参数为RM预先添加在初始标识符中的参数,与初始标识符共同组成分支标识符。
具体地,第一时间参数包括所述分支事务的开始执行时间,可选地,开始执行时间为分支事务注册成功的时间;结合图1,以一次转账业务的全局事务为第一示例,用户A向用户B转账;全局事务1包括分支事务1和分支事务2;分支事务1为用户A的账户A减100元,分支事务2为用户B的账户B加100元;RM1用于执行分支事务1,RM2用于执行分支事务2,则在RM1解析分支事务1的结构化查询语言(Structured Query Language,SQL),并执行SQL,并向TC注册所述分支事务1时,注册成功的时间为分支事务1的开始执行时间;同理,在RM2解析分支事务2的SQL,执行SQL,并向TC注册所述分支事务2时,注册成功的时间为分支事务2的开始执行时间。
第二时间参数为全局事务的预设超时时间;可选地,预设超时时间可以为全局事务的总执行时间的上限,比如为最大执行时间阈值,或者在最大执行时间阈值的基础之上增加一段时间。当超过该总执行时间后,有可能发生协议阻塞的情况。具体地,一个全局事务的预设超时时间的数值范围通常为秒级,比如几秒或者几十秒,而一个分支事务的执行时间的数值范围通常为毫秒级;可以理解的是,预设超时时间还可根据不同的业务场景、不同的应用场景动态调整;比如,基于人工智能(Artificial Intelligence,AI)或其他机器学习、深度学习的方式,识别当前业务场景或应用场景,进而自动匹配与当前场景对应的预设超时时间。
在执行全局事务前,可以根据经验值设定每个全局事务的预设超时时间;比如,RM在执行每个全局事务时,统计全局事务的实际执行时间,根据实际执行时间确定预设超时时间;比如,仍然参考上述第一示例,全局事务1为转账业务,其实际执行时间通常在5秒或3秒,RM在执行所述全局事务1时,统计每次实际执行时间,然后根据实际执行时间确定该全局事务的预设超时时间,比如预设超时时间为实际执行时间的最大值或均值。
RM记载其所控制的分支事务的分支标识符,并在分支事务执行的过程中,采用实时监测或定期监测的方式,查询其所记载的分支事务的分支标识符,以监测分支事务是否出现执行超时的情况。
比如,参考上述第一示例,RM1在执行分支事务1的过程中,获取分支事务1的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为用户A的账户A减100元的分支事务的开始执行时间,第二时间参数为用户A向用户B转账的全局事务的预设超时时间。
作为第二示例,全局事务2为买家在电商平台下单,通常会涉及到两个动作,一个是扣库存,第二个是更新订单状态;而库存和订单一般属于不同的数据库,需要使用分布式事务保证数据一致性;将全局事务2划分为分支事务3和分支事务4,分支事务3为扣除库存,由RM1执行;分支事务4为更新订单状态,由RM2执行;RM1在执行分支事务3的过程中,获取分支事务3的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为扣除库存的分支事务的开始执行时间,第二时间参数为用户买家在电商平台下单的全局事务的预设超时时间。
步骤102,根据所述第一时间参数,确定所述分支事务的执行时长。
第一时间参数为分支事务的开始执行时间,RM确定所执行的分支事务的第一时间参数之后,获取当前时刻的时间,根据当前时刻的时间与第一时间参数之间的时间差确定该分支事务的执行时长。
步骤103,若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
可以理解的是,本申请实施例中,“超过”包括本数,即所述执行时长超过所述第二时间参数包括两种情况:一是所述执行时长等于所述第二时间参数;二是所述执行时长大于所述第二时间参数。
在得到分支事务的执行时长之后,进一步判断分支事务的执行时长是否超过第二时间参数,以根据判断结果决定是否执行回滚处理操作。具体地,一个全局事务通常包括多个分支事务,因此,在事务正常执行的情况下,每个分支事务的执行时长必然小于全局事务的总执行时长,总执行时长小于或等于所述第二时间参数;因此,单个分支事务的执行时长必然小于第二时间参数,这样,若所述执行时长超过第二时间参数,则可确认所述分支事务执行超时。比如,上述第一示例中,作为全局事务的转账事务的第二时间参数为5秒,而RM1在执行用户A的账户A减100元的分支事务1时,已经耗时5秒或者5秒以上,则分支事务1执行超时,出现异常;可能是RM1与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发分支事务1出现协议阻塞的情况。
或者,上述第二示例中,作为全局事务的买家在电商平台下单事务的第二时间参数为10秒,而RM1在执行扣库存的分支事务3时,已经耗时10秒或者10秒以上,则分支事务3执行超时,出现异常。
比如,参见以下表1:
表1:
全局事务 分支事务 开始执行时间 预设超时时间
全局事务1 分支事务1 2020/01/01 15:32:08.389 5s
全局事务1 分支事务2 2020/01/01 15:33:09.102 5s
全局事务2 分支事务3 2020/01/01 15:33:50.513 10s
全局事务2 分支事务4 2020/01/01 15:33:03.721 10s
若当前时间戳指示的时间为2020/01/01 15:12:48.389,则分支事务1、分支事务2、分支事务4均未超时,而分支事务3超时。
在分支事务执行超时的情况下,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发协议阻塞;具体地,协议阻塞是指当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。比如,RM1占用并锁定数据库A的数据表1,若RM1所执行的分支事务1出现超时的情况,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,分支事务1无法继续执行,而被分支事务2所锁定的数据表1将一直处于被锁定状态,其他全局事务无法访问数据表1。
结合上述第一示例,比如RM1所执行的分支事务1超时,则用户A的账户A的数据表将一直处于被锁定状态,导致其他全局事务无法访问账户A的数据表,比如若用户A再次触发其他转账业务,或其他用户向用户A转账;再比如上述第二示例,若RM1所执行的扣除库存的分支事务3出现超时的情况,则该库存对应的数据表2将一直处于被锁定状态,其他全局事务将无法访问该数据表,比如其他买家下单的全局事务将无法进行。
而本申请实施例中,在分支事务执行超时的情况下,对分支事务执行回滚处理操作,以释放分支事务锁定的数据表,将数据表恢复到分支事务执行前的状态。具体地,如图1所示,回滚(Rollback)指的是程序或数据处理错误的情况下,根据回滚日志(undo log)将程序或数据恢复到上一次正确状态的操作,比如第一示例中,若分支事务1回滚,则用户A的数据表1将恢复至分支事务1执行前的状态,该状态保存在回滚日志中;回滚日志保存了事务发生之前的数据的一个版本用于回滚,同时还可以提供多版本并发控制下的读操作。此外,回滚日志是一种逻辑格式的日志,在执行回滚日志的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的。
除了回滚日志之外,事务的ACID还需要重做日志(redo log)和数据库锁来保证。具体地,事务的隔离性是通过数据库锁的机制实现的,持久性通过重做日志来实现,原子性和一致性通过回滚日志来实现。为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个回滚日志中,然后进行数据的修改。如果出现了错误或者用户执行了回滚语句,***可以利用回滚日志中的备份将数据恢复到事务开始之前的状态。和回滚日志相反,重做日志记录的是新数据的备份。在事务提交前,只要将重做日志持久化即可,不需要将数据持久化。当***崩溃时,虽然数据没有持久化,但是重做日志已经持久化。***可以根据重做日志的内容,将所有数据恢复到最新的状态。通常在事务开始之前,RM生成当前版本的回滚日志;当事务提交之后,回滚日志并不能立即被删除,而是放入待清理的链表,由专用的线程决定是否可以清理回滚日志的日志空间。
这样,通过回滚执行超时的分支事务,可避免该分支事务对应的数据表被一直锁定而引起协议堵塞。
本申请实施例中,获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。本申请实施例解决了现有技术中,分布式事务容易出现协议阻塞的情况的问题。
在一个可选实施例中,所述获取分支事务的分支标识符的步骤之前,所述方法包括:
获取所述全局事务的预设超时时间,以及获取所述分支事务的开始执行时间;初始标识符为在所述分支事务在TC侧注册成功后,TC为分支事务分配的事务标识号,比如为分支ID;
在RM获得预设超时时间以及开始执行时间之后,将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中,得到所述分支标识符。其中,分支标识符中还可包括该分支所属的全局事务的标识号(ID),这样,分支标识符包括以下4部分内容:
全局事务ID(GX-ID),可由RM在当前事务上下文中获取;
分支事务ID(BX-ID),可在RM向事务协调器注册该分支的过程中确定;
预设超时时间,即全局事务的超时时间,可在事务开启时即确定该值;
开始执行时间,即分支开始时间,比如为分支在TC侧注册成功的时间点。
可选地,为了避免频繁地超时检测引起数据冗余,RM可以设定预设周期,在每个预设周期内执行一次超时检测,所述获取分支事务的分支标识符的步骤,包括:
在每个预设周期的检测时间,获取分支事务的分支标识符。
如图2所示,RM与数据库(DB)以及TC通信,在预设周期到达时,RM获取当前时间戳,比如为2020/01/01 15:33:16.513,即日期为2020/01/01,时间为15:33:35.083;此时RM所记载的分支事务表中,包括4个全局事务的4个不同分支,各个分支事务的开始执行时间(Start Tme)和预设超时时间(Timeout)如图2中所示;根据图2可知,其中,BX-231、BX-319、BX-428均未超时,而BX-276已超时。
在一个可选实施例中,所述将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中的步骤之前,所述方法还包括:
获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
交换标识符即上述全局事务ID;XID为Transaction的唯一标识号,用于唯一标识一个全局事务;在TM向TC请求发起(Begin)、提交(Commit)、回滚(Rollback)等全局事务时,TM将所述全局事务的XID绑定到分支事务上。在RM向所述事务协调器注册分支事务时,通过XID将分支事务注册到全局事务中。
事务标识符即上述分支事务ID,在所述分支事务注册成功后,TC为分支事务分配事务标识符;RM接收到TC分配的所述分支事务标识号之后,将所述分支事务标识号写入回滚日志,然后将分支事务提交,以便在发送回滚时根据所述事务标识符查找相应回滚记录。
在一个可选实施例中,所述获取所述分支事务的开始执行时间的步骤,包括:
获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
在分支事务的数据操作进行之前,RM需要TC注册,把即将进行的分支事务的数据操作,纳入一个已经开启的全局事务的管理中去,在分支注册成功后,才可以进行数据操作,因此,将RM获知注册成功的时间作为开始执行时间。
RM向TC注册所述分支事务,向TC提交注册请求;TC在接收到RM的注册请求后,将RM的分支事务绑定至所述交换标识符对应的所述全局事务中,并向RM反馈注册响应消息,因此,将注册响应消息的接收时间作为分支事务的开始时间;可以理解的是,注册响应消息为指示注册成功的响应消息。比如,上述第一示例中,RM1解析向TC注册所述分支事务1时,TC反馈注册成功的注册响应消息,RM1在接收到注册成功的响应消息后开始执行分支事务1对应的数据操作,因此接收注册响应消息的时间为分支事务1的开始执行时间。
在一个可选实施例中,所述若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作的步骤,包括:
若所述执行时长超过所述第二时间参数,获取事务状态参数;其中,所述事务状态参数包括所述分支事务的第一状态参数以及所述全局事务的第二状态参数中的至少一种;状态参数包括正在执行、已结束等;第一状态参数为分支事务的状态参数,第二状态参数为全局事务的状态参数。
若所述事务状态参数指示对应的事务未结束,比如,第一状态参数指示所述分支事务尚未结束,或第二状态参数指示全局事务尚未结束,则对所述分支事务执行回滚处理操作。反之,若第一状态参数指示所述分支事务已结束,且第二状态参数指示全局事务已结束,则无需再对所述分支事务执行回滚操作,直接释放所述分支事务的数据锁即可。
在一个可选实施例中,所述对所述分支事务执行回滚处理操作的步骤,包括:
对所述分支事务执行回滚处理操作,释放所述分支事务对应的数据锁。
在分支事务执行超时的情况下,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引其他第三方节点访问数据表协议阻塞。比如,RM1占用并锁定数据库A的数据表1,若RM1所执行的分支事务1出现超时的情况,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,分支事务1无法继续执行,而被分支事务2所锁定的数据表1将一直处于被锁定状态,其他全局事务无法访问数据表1。
因此,在分支事务执行超时的情况,对分支事务执行回滚处理操作,以释放分支事务锁定的数据表,将数据表恢复到分支事务执行前的状态。比如上述第一示例中,若分支事务1或分支事务2执行过程中发生某种故障,导致全局事务1未成功执行,则启动全局事务1的回滚,或仅回滚发送故障的分支,以释放该分支锁定的数据表,使得其他全局事务可正常访问该数据表。
在一个可选实施例中,在执行回滚处理操作之后,后续TC与RM恢复通信;所述对所述分支事务执行回滚处理操作的步骤之后,所述方法还包括:
接收事务协调器发送的指示信息;
若所述指示信息指示的操作为回滚操作,向所述事务协调器反馈指示回滚成功的第一反馈信息,以进行下一步操作;
若所述指示信息指示的操作为提交操作,向所述事务协调器反馈指示提交异常的第二反馈信息,使得TC获知RM无法提交所述分支事务,并进行下一步处理操作。
本申请实施例中,获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述各实施例的基础上,本申请实施例还提供了一种事务处理方法,能够实现在资源管理器无法获得事务协调器命令的情况下,根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断分支事务是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率。
参照图3,示出了本申请实施例的一种事务处理方法实施例的步骤流程图;可选地,所述方法可应用于RM,所述方法包括:
步骤301,获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间。
其中,分支标识符用于唯一标记一个分支事务,分支标识符中可包括初始标识符,初始标识符为在所述分支事务在TC侧注册成功后,TC为分支事务分配的事务标识号,比如为分支ID;除初始标识符外,分支标识符中还包括第一时间参数和第二时间参数,作为检测分支事务是否超时的依据。
具体地,第一时间参数包括所述分支事务的开始执行时间,可选地,开始执行时间为分支事务注册成功的时间;结合图1,以一次转账业务的全局事务为第一示例,用户A向用户B转账;全局事务1包括分支事务1和分支事务2;分支事务1为用户A的账户A减100元,分支事务2为用户B的账户B加100元;RM1用于执行分支事务1,RM2用于执行分支事务2,则在RM1解析分支事务1的结构化查询语言(Structured Query Language,SQL),并执行SQL,并向TC注册所述分支事务1时,注册成功的时间为分支事务1的开始执行时间;同理,在RM2解析分支事务2的SQL,执行SQL,并向TC注册所述分支事务2时,注册成功的时间为分支事务2的开始执行时间。
第二时间参数为全局事务的预设超时时间;可选地,预设超时时间可以为全局事务的总执行时间的上限,比如为最大执行时间阈值,或者在最大执行时间阈值的基础之上增加一段时间。当超过该总执行时间后,有可能发生协议阻塞的情况。具体地,一个全局事务的预设超时时间的数值范围通常为秒级,比如几秒或者几十秒,而一个分支事务的执行时间的数值范围通常为毫秒级;可以理解的是,预设超时时间还可根据不同的业务场景、不同的应用场景动态调整;比如,基于AI或其他机器学习、深度学习的方式,识别当前业务场景或应用场景,进而自动匹配与当前场景对应的预设超时时间。
在执行全局事务前,可以根据经验值设定每个全局事务的预设超时时间;比如,RM在执行每个全局事务时,统计全局事务的实际执行时间,根据实际执行时间确定预设超时时间;比如,仍然参考上述第一示例,全局事务1为转账业务,其实际执行时间通常在5秒或3秒,RM在执行所述全局事务1时,统计每次实际执行时间,然后根据实际执行时间确定该全局事务的预设超时时间,比如预设超时时间为实际执行时间的最大值或均值。
RM记载其所控制的分支事务的分支标识符,并在分支事务执行的过程中,采用实时监测或定期监测的方式,查询其所记载的分支事务的分支标识符,以监测分支事务是否出现执行超时的情况。
比如,参考上述第一示例,RM1在执行分支事务1的过程中,获取分支事务1的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为用户A的账户A减100元的分支事务的开始执行时间,第二时间参数为用户A向用户B转账的全局事务的预设超时时间。
作为第二示例,全局事务2为买家在电商平台下单,通常会涉及到两个动作,一个是扣库存,第二个是更新订单状态;而库存和订单一般属于不同的数据库,需要使用分布式事务保证数据一致性;将全局事务2划分为分支事务3和分支事务4,分支事务3为扣除库存,由RM1执行;分支事务4为更新订单状态,由RM2执行;RM1在执行分支事务3的过程中,获取分支事务3的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为扣除库存的分支事务的开始执行时间,第二时间参数为用户买家在电商平台下单的全局事务的预设超时时间。
步骤302,根据所述第一时间参数,确定所述分支事务的执行时长。
第一时间参数为分支事务的开始执行时间,RM确定所执行的分支事务的第一时间参数之后,获取当前时刻的时间,根据当前时刻的时间与第一时间参数之间的时间差确定该分支事务的执行时长。
步骤303,若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
可以理解的是,本申请实施例中,“超过”包括本数,即所述执行时长超过所述第二时间参数包括两种情况:一是所述执行时长等于所述第二时间参数;二是所述执行时长大于所述第二时间参数。
在得到分支事务的执行时长之后,进一步判断分支事务的执行时长是否超过第二时间参数,以根据判断结果决定是否执行回滚处理操作。具体地,一个全局事务通常包括多个分支事务,因此,在事务正常执行的情况下,每个分支事务的执行时长必然小于全局事务的总执行时长,总执行时长小于或等于所述第二时间参数;因此,单个分支事务的执行时长必然小于第二时间参数,这样,若所述执行时长超过第二时间参数,则可确认所述分支事务执行超时。比如,上述第一示例中,作为全局事务的转账事务的第二时间参数为5秒,而RM1在执行用户A的账户A减100元的分支事务1时,已经耗时5秒或者5秒以上,则分支事务1执行超时,出现异常;可能是RM1与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发分支事务1出现协议阻塞的情况。
或者,上述第二示例中,作为全局事务的买家在电商平台下单事务的第二时间参数为10秒,而RM1在执行扣库存的分支事务3时,已经耗时10秒或者10秒以上,则分支事务3执行超时,出现异常。
比如,参见以下表2:
表2:
全局事务 分支事务 开始执行时间 预设超时时间
全局事务1 分支事务1 2020/01/01 15:32:08.389 5s
全局事务1 分支事务2 2020/01/01 15:33:09.102 5s
全局事务2 分支事务3 2020/01/01 15:33:50.513 10s
全局事务2 分支事务4 2020/01/01 15:33:03.721 10s
若当前时间戳指示的时间为2020/01/01 15:12:48.389,则分支事务1、分支事务2、分支事务4均未超时,而分支事务3超时。
在分支事务执行超时的情况下,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发协议阻塞;具体地,协议阻塞是指当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。比如,RM1占用并锁定数据库A的数据表1,若RM1所执行的分支事务1出现超时的情况,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,分支事务1无法继续执行,而被分支事务2所锁定的数据表1将一直处于被锁定状态,其他全局事务无法访问数据表1。
结合上述第一示例,比如RM1所执行的分支事务1超时,则用户A的账户A的数据表将一直处于被锁定状态,导致其他全局事务无法访问账户A的数据表,比如若用户A再次触发其他转账业务,或其他用户向用户A转账;再比如上述第二示例,若RM1所执行的扣除库存的分支事务3出现超时的情况,则该库存对应的数据表2将一直处于被锁定状态,其他全局事务将无法访问该数据表,比如其他买家下单的全局事务将无法进行。
而本申请实施例中,在分支事务执行超时的情况下,对分支事务执行回滚处理操作,以释放分支事务锁定的数据表,将数据表恢复到分支事务执行前的状态。具体地,如图1所示,回滚(Rollback)指的是程序或数据处理错误的情况下,根据回滚日志(undo log)将程序或数据恢复到上一次正确状态的操作,比如第一示例中,若分支事务1回滚,则用户A的数据表1将恢复至分支事务1执行前的状态,该状态保存在回滚日志中;回滚日志保存了事务发生之前的数据的一个版本用于回滚,同时还可以提供多版本并发控制下的读操作。此外,回滚日志是一种逻辑格式的日志,在执行回滚日志的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的。
除了回滚日志之外,事务的ACID还需要重做日志(redo log)和数据库锁来保证。具体地,事务的隔离性是通过数据库锁的机制实现的,持久性通过重做日志来实现,原子性和一致性通过回滚日志来实现。为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个回滚日志中,然后进行数据的修改。如果出现了错误或者用户执行了回滚语句,***可以利用回滚日志中的备份将数据恢复到事务开始之前的状态。和回滚日志相反,重做日志记录的是新数据的备份。在事务提交前,只要将重做日志持久化即可,不需要将数据持久化。当***崩溃时,虽然数据没有持久化,但是重做日志已经持久化。***可以根据重做日志的内容,将所有数据恢复到最新的状态。通常在事务开始之前,RM生成当前版本的回滚日志;当事务提交之后,回滚日志并不能立即被删除,而是放入待清理的链表,由专用的线程决定是否可以清理回滚日志的日志空间。
这样,通过回滚执行超时的分支事务,可避免该分支事务对应的数据表被一直锁定而引起协议堵塞。
在一个可选实施例中,所述获取分支事务的分支标识符的步骤之前,所述方法包括:
获取所述全局事务的预设超时时间,以及获取所述分支事务的开始执行时间;
将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中,得到所述分支标识符。
在一个可选实施例中,所述获取所述分支事务的开始执行时间的步骤,包括:
获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
在一个可选实施例中,所述将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中的步骤之前,所述方法还包括:
获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
在一个可选实施例中,所述若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作的步骤,包括:
若所述执行时长超过所述第二时间参数,获取事务状态参数;其中,所述事务状态参数包括所述分支事务的第一状态参数以及所述全局事务的第二状态参数中的至少一种;
若所述事务状态参数指示对应的事务未结束,对所述分支事务执行回滚处理操作。
在一个可选实施例中,所述对所述分支事务执行回滚处理操作的步骤,包括:
对所述分支事务执行回滚处理操作,释放所述分支事务对应的数据锁。
在一个可选实施例中,所述对所述分支事务执行回滚处理操作的步骤之后,所述方法还包括:
接收事务协调器发送的指示信息;
若所述指示信息指示的操作为回滚操作,向所述事务协调器反馈指示回滚成功的第一反馈信息;
若所述指示信息指示的操作为提交操作,向所述事务协调器反馈指示提交异常的第二反馈信息。
在一个可选实施例中,所述获取分支事务的分支标识符的步骤,包括:
在每个预设周期的检测时间,获取分支事务的分支标识符。
本申请实施例中,获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述各实施例的基础上,本申请实施例还提供了一种事务处理方法,能够实现在资源管理器无法获得事务协调器命令的情况下,根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断分支事务是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率。
参照图4,示出了本申请实施例的一种事务处理方法实施例的步骤流程图,可选地,所述方法可应用于RM,所述方法包括:
步骤401,获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间。
开始执行时间为分支事务注册成功的时间;结合图1,以一次转账业务的全局事务为第一示例,用户A向用户B转账;全局事务1包括分支事务1和分支事务2;分支事务1为用户A的账户A减100元,分支事务2为用户B的账户B加100元;RM1用于执行分支事务1,RM2用于执行分支事务2,则在RM1解析分支事务1的结构化查询语言(Structured Query Language,SQL),并执行SQL,并向TC注册所述分支事务1时,注册成功的时间为分支事务1的开始执行时间;同理,在RM2解析分支事务2的SQL,执行SQL,并向TC注册所述分支事务2时,注册成功的时间为分支事务2的开始执行时间。
预设超时时间可以为全局事务的总执行时间的上限,比如为最大执行时间阈值,或者在最大执行时间阈值的基础之上增加一段时间。当超过该总执行时间后,有可能发生协议阻塞的情况。具体地,一个全局事务的预设超时时间的数值范围通常为秒级,比如几秒或者几十秒,而一个分支事务的执行时间的数值范围通常为毫秒级;可以理解的是,预设超时时间还可根据不同的业务场景、不同的应用场景动态调整;比如,基于AI或其他机器学习、深度学习的方式,识别当前业务场景或应用场景,进而自动匹配与当前场景对应的预设超时时间。
在执行全局事务前,可以根据经验值设定每个全局事务的预设超时时间;比如,RM在执行每个全局事务时,统计全局事务的实际执行时间,根据实际执行时间确定预设超时时间;比如,仍然参考上述第一示例,全局事务1为转账业务,其实际执行时间通常在5秒或3秒,RM在执行所述全局事务1时,统计每次实际执行时间,然后根据实际执行时间确定该全局事务的预设超时时间,比如预设超时时间为实际执行时间的最大值或均值。
步骤402,将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符。
初始标识符为在所述分支事务在TC侧注册成功后,TC为分支事务分配的事务标识号,比如为分支ID;在RM获得预设超时时间以及开始执行时间之后,将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中,得到分支标识符。其中,分支标识符中还可包括该分支所属的全局事务的标识号(ID),这样,分支标识符包括以下4部分内容:
全局事务ID(GX-ID),可由RM在当前事务上下文中获取;
分支事务ID(BX-ID),可在RM向事务协调器注册该分支的过程中确定;
预设超时时间,即全局事务的超时时间,可在事务开启时即确定该值;
开始执行时间,即分支开始时间,比如为分支在TC侧注册成功的时间点。
步骤403,根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长。
第一时间参数为分支事务的开始执行时间,RM确定所执行的分支事务的第一时间参数之后,获取当前时刻的时间,根据当前时刻的时间与第一时间参数之间的时间差确定该分支事务的执行时长。
步骤404,若所述执行时长超过所述分支标识符中的第二时间参数,对所述分支事务执行回滚处理操作。
可以理解的是,本申请实施例中,“超过”包括本数,即所述执行时长超过所述第二时间参数包括两种情况:一是所述执行时长等于所述第二时间参数;二是所述执行时长大于所述第二时间参数。
在得到分支事务的执行时长之后,进一步判断分支事务的执行时长是否超过第二时间参数,以根据判断结果决定是否执行回滚处理操作。具体地,一个全局事务通常包括多个分支事务,因此,在事务正常执行的情况下,每个分支事务的执行时长必然小于全局事务的总执行时长,总执行时长小于或等于所述第二时间参数;因此,单个分支事务的执行时长必然小于第二时间参数,这样,若所述执行时长超过第二时间参数,则可确认所述分支事务执行超时。比如,上述第一示例中,作为全局事务的转账事务的第二时间参数为5秒,而RM1在执行用户A的账户A减100元的分支事务1时,已经耗时5秒或者5秒以上,则分支事务1执行超时,出现异常;可能是RM1与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发分支事务1出现协议阻塞的情况。
或者,上述第二示例中,作为全局事务的买家在电商平台下单事务的第二时间参数为10秒,而RM1在执行扣库存的分支事务3时,已经耗时10秒或者10秒以上,则分支事务3执行超时,出现异常。
比如,参见以下表3:
表3:
全局事务 分支事务 开始执行时间 预设超时时间
全局事务1 分支事务1 2020/01/01 15:32:08.389 5s
全局事务1 分支事务2 2020/01/01 15:33:09.102 5s
全局事务2 分支事务3 2020/01/01 15:33:50.513 10s
全局事务2 分支事务4 2020/01/01 15:33:03.721 10s
若当前时间戳指示的时间为2020/01/01 15:12:48.389,则分支事务1、分支事务2、分支事务4均未超时,而分支事务3超时。
在分支事务执行超时的情况下,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发协议阻塞;具体地,协议阻塞是指当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。比如,RM1占用并锁定数据库A的数据表1,若RM1所执行的分支事务1出现超时的情况,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,分支事务1无法继续执行,而被分支事务2所锁定的数据表1将一直处于被锁定状态,其他全局事务无法访问数据表1。
结合上述第一示例,比如RM1所执行的分支事务1超时,则用户A的账户A的数据表将一直处于被锁定状态,导致其他全局事务无法访问账户A的数据表,比如若用户A再次触发其他转账业务,或其他用户向用户A转账;再比如上述第二示例,若RM1所执行的扣除库存的分支事务3出现超时的情况,则该库存对应的数据表2将一直处于被锁定状态,其他全局事务将无法访问该数据表,比如其他买家下单的全局事务将无法进行。
而本申请实施例中,在分支事务执行超时的情况下,对分支事务执行回滚处理操作,以释放分支事务锁定的数据表,将数据表恢复到分支事务执行前的状态。具体地,如图1所示,回滚(Rollback)指的是程序或数据处理错误的情况下,根据回滚日志(undo log)将程序或数据恢复到上一次正确状态的操作,比如第一示例中,若分支事务1回滚,则用户A的数据表1将恢复至分支事务1执行前的状态,该状态保存在回滚日志中;回滚日志保存了事务发生之前的数据的一个版本用于回滚,同时还可以提供多版本并发控制下的读操作。此外,回滚日志是一种逻辑格式的日志,在执行回滚日志的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的。
除了回滚日志之外,事务的ACID还需要重做日志(redo log)和数据库锁来保证。具体地,事务的隔离性是通过数据库锁的机制实现的,持久性通过重做日志来实现,原子性和一致性通过回滚日志来实现。为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个回滚日志中,然后进行数据的修改。如果出现了错误或者用户执行了回滚语句,***可以利用回滚日志中的备份将数据恢复到事务开始之前的状态。和回滚日志相反,重做日志记录的是新数据的备份。在事务提交前,只要将重做日志持久化即可,不需要将数据持久化。当***崩溃时,虽然数据没有持久化,但是重做日志已经持久化。***可以根据重做日志的内容,将所有数据恢复到最新的状态。通常在事务开始之前,RM生成当前版本的回滚日志;当事务提交之后,回滚日志并不能立即被删除,而是放入待清理的链表,由专用的线程决定是否可以清理回滚日志的日志空间。
这样,通过回滚执行超时的分支事务,可避免该分支事务对应的数据表被一直锁定而引起协议堵塞。
在一个可选实施例中,所述获取分支事务的开始执行时间的步骤,包括:
获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
在一个可选实施例中,所述将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中的步骤之前,所述方法还包括:
获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
本申请实施例中,获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述各实施例的基础上,本申请实施例还提供了一种事务处理方法,应用于分布式事务处理***,结合图1,所述分布式事务处理***包括资源管理器RM以及事务协调器TC;可选地,还可包括事务管理器TM。
其中,TC作为分布式事务中协调者的角色,管理全局事务的状态信息,包括全部事务的开启、提交、回滚管理,分支事务的注册、提交、回滚、状态上报等;维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
在全局事务中,资源管理器有自己独立的任务,这些任务的集合作为这个资源管理器的分支任务;RM控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
事务管理器是分布式事务的核心管理者。与每个RM进行通信,协调并完成事务的处理;控制全局事务边界,负责全局事务开启、全局提交、全局回滚。能够实现在资源管理器无法获得事务协调器命令的情况下,根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断分支事务是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率。
参照图5,示出了本申请实施例的一种事务处理方法实施例的步骤流程图,所述方法包括:
步骤501,控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间。
其中,分支标识符用于唯一标记一个分支事务,分支标识符中可包括初始标识符,初始标识符为在所述分支事务在TC侧注册成功后,TC为分支事务分配的事务标识号,比如为分支ID;除初始标识符外,分支标识符中还包括第一时间参数和第二时间参数,作为检测分支事务是否超时的依据。
具体地,第一时间参数包括所述分支事务的开始执行时间,可选地,开始执行时间为分支事务注册成功的时间;结合图1,以一次转账业务的全局事务为第一示例,用户A向用户B转账;全局事务1包括分支事务1和分支事务2;分支事务1为用户A的账户A减100元,分支事务2为用户B的账户B加100元;RM1用于执行分支事务1,RM2用于执行分支事务2,则在RM1解析分支事务1的结构化查询语言(Structured Query Language,SQL),并执行SQL,并向TC注册所述分支事务1时,注册成功的时间为分支事务1的开始执行时间;同理,在RM2解析分支事务2的SQL,执行SQL,并向TC注册所述分支事务2时,注册成功的时间为分支事务2的开始执行时间。
第二时间参数为全局事务的预设超时时间;可选地,预设超时时间可以为全局事务的总执行时间的上限,比如为最大执行时间阈值,或者在最大执行时间阈值的基础之上增加一段时间。当超过该总执行时间后,有可能发生协议阻塞的情况。具体地,一个全局事务的预设超时时间的数值范围通常为秒级,比如几秒或者几十秒,而一个分支事务的执行时间的数值范围通常为毫秒级;可以理解的是,预设超时时间还可根据不同的业务场景、不同的应用场景动态调整;比如,基于AI或其他机器学习、深度学习的方式,识别当前业务场景或应用场景,进而自动匹配与当前场景对应的预设超时时间。
在执行全局事务前,可以根据经验值设定每个全局事务的预设超时时间;比如,RM在执行每个全局事务时,统计全局事务的实际执行时间,根据实际执行时间确定预设超时时间;比如,仍然参考上述第一示例,全局事务1为转账业务,其实际执行时间通常在5秒或3秒,RM在执行所述全局事务1时,统计每次实际执行时间,然后根据实际执行时间确定该全局事务的预设超时时间,比如预设超时时间为实际执行时间的最大值或均值。
RM记载其所控制的分支事务的分支标识符,并在分支事务执行的过程中,采用实时监测或定期监测的方式,查询其所记载的分支事务的分支标识符,以监测分支事务是否出现执行超时的情况。
比如,参考上述第一示例,RM1在执行分支事务1的过程中,获取分支事务1的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为用户A的账户A减100元的分支事务的开始执行时间,第二时间参数为用户A向用户B转账的全局事务的预设超时时间。
作为第二示例,全局事务2为买家在电商平台下单,通常会涉及到两个动作,一个是扣库存,第二个是更新订单状态;而库存和订单一般属于不同的数据库,需要使用分布式事务保证数据一致性;将全局事务2划分为分支事务3和分支事务4,分支事务3为扣除库存,由RM1执行;分支事务4为更新订单状态,由RM2执行;RM1在执行分支事务3的过程中,获取分支事务3的分支标识符中的第一时间参数以及第二时间参数,第一时间参数为扣除库存的分支事务的开始执行时间,第二时间参数为用户买家在电商平台下单的全局事务的预设超时时间。
步骤502,根据所述第一时间参数,确定所述分支事务的执行时长。
第一时间参数为分支事务的开始执行时间,RM确定所执行的分支事务的第一时间参数之后,获取当前时刻的时间,根据当前时刻的时间与第一时间参数之间的时间差确定该分支事务的执行时长。
步骤503,若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求。
可以理解的是,本申请实施例中,“超过”包括本数,即所述执行时长超过所述第二时间参数包括两种情况:一是所述执行时长等于所述第二时间参数;二是所述执行时长大于所述第二时间参数。
在得到分支事务的执行时长之后,进一步判断分支事务的执行时长是否超过第二时间参数,以根据判断结果决定是否执行回滚处理操作。具体地,一个全局事务通常包括多个分支事务,因此,在事务正常执行的情况下,每个分支事务的执行时长必然小于全局事务的总执行时长,总执行时长小于或等于所述第二时间参数;因此,单个分支事务的执行时长必然小于第二时间参数,这样,若所述执行时长超过第二时间参数,则可确认所述分支事务执行超时。比如,上述第一示例中,作为全局事务的转账事务的第二时间参数为5秒,而RM1在执行用户A的账户A减100元的分支事务1时,已经耗时5秒或者5秒以上,则分支事务1执行超时,出现异常;可能是RM1与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发分支事务1出现协议阻塞的情况。
或者,上述第二示例中,作为全局事务的买家在电商平台下单事务的第二时间参数为10秒,而RM1在执行扣库存的分支事务3时,已经耗时10秒或者10秒以上,则分支事务3执行超时,出现异常。
在分支事务执行超时的情况下,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,此时容易引发协议阻塞;具体地,协议阻塞是指当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。比如,RM1占用并锁定数据库A的数据表1,若RM1所执行的分支事务1出现超时的情况,比如RM与TC之间的通信连接断开,或TC出现宕机的情况,分支事务1无法继续执行,而被分支事务2所锁定的数据表1将一直处于被锁定状态,其他全局事务无法访问数据表1。
为了避免发生协议阻塞,RM对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求。
步骤504,控制所述事务协调器接收所述释放请求,并释放所述数据锁。
TC接收到释放请求后,释放所述分支事务对应的数据锁;比如上述第一示例中,若分支事务1或分支事务2执行过程中发生某种故障,导致全局事务1未成功执行,则RM启动全局事务1的回滚,或仅回滚发送故障的分支,并向TC发送释放请求以释放该分支锁定的数据表,TC释放所述分支事务对应的数据锁,使得其他全局事务可正常访问该数据表。
本申请实施例中,控制RM获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作,并控制TC释放所述分支事务对应的数据锁,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述实施例的基础上,本申请实施例还提供了一种事务处理装置,应用于终端设备、服务器等电子设备中。
参照图6,示出了本申请的一种事务处理装置实施例的结构框图,具体可以包括如下模块:
标识符获取模块601,用于获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间。
第一时长确定模块602,用于根据所述第一时间参数,确定所述分支事务的执行时长。
回滚处理模块603,用于若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
在一个可选实施例中,所述装置包括:
第一时间获取模块,用于获取所述全局事务的预设超时时间,以及获取所述分支事务的开始执行时间;
第一添加模块,用于将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中,得到所述分支标识符。
在一个可选实施例中,所述标识符获取模块601包括:
时间获取子模块,用于获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
在一个可选实施例中,所述将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中的步骤之前,所述装置还包括:
第一标识符生成模块,用于获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
在一个可选实施例中,所述回滚处理模块603包括:
参数获取子模块,用于若所述执行时长超过所述第二时间参数,获取事务状态参数;其中,所述事务状态参数包括所述分支事务的第一状态参数以及所述全局事务的第二状态参数中的至少一种;
回滚子模块,用于若所述事务状态参数指示对应的事务未结束,对所述分支事务执行回滚处理操作。
在一个可选实施例中,所述回滚处理模块603包括:
释放子模块,用于对所述分支事务执行回滚处理操作,释放所述分支事务对应的数据锁。
在一个可选实施例中,所述对所述分支事务执行回滚处理操作的步骤之后,所述装置还包括:
信息接收模块,用于接收事务协调器发送的指示信息;
第一反馈模块,用于若所述指示信息指示的操作为回滚操作,向所述事务协调器反馈指示回滚成功的第一反馈信息;
第二反馈模块,用于若所述指示信息指示的操作为提交操作,向所述事务协调器反馈指示提交异常的第二反馈信息。
在一个可选实施例中,所述标识符获取模块601用于:
在每个预设周期的检测时间,获取分支事务的分支标识符。
本申请实施例中,标识符获取模块601获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,第一时长确定模块602确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,回滚处理模块603对所述分支事务执行回滚处理操作,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述实施例的基础上,本申请实施例还提供了一种事务处理装置,应用于终端设备、服务器等电子设备中。
参照图7,示出了本申请的一种事务处理装置实施例的结构框图,具体可以包括如下模块:
第二时间获取模块701,用于获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间;
第二添加模块702,用于将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;
第二时长确定模块703,用于根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长;
回滚执行模块704,用于若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
在一个可选实施例中所述第二时间获取模块701包括:
获取子模块,用于获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
在一个可选实施例中所述将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中的步骤之前,所述装置还包括:
第二标识符生成模块,用于获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
本申请实施例中,第二时间获取模块701获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间;第二添加模块702将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;第二时长确定模块703根据所述第一时间参数,确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,回滚执行模块704对所述分支事务执行回滚处理操作,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
在上述实施例的基础上,本申请实施例还提供了一种事务处理装置,应用于终端设备、服务器等电子设备中。
参照图8,示出了本申请的一种事务处理装置实施例的结构框图,所述装置应用于分布式事务处理***,所述分布式事务处理***包括资源管理器以及事务协调器,具体可以包括如下模块:
第一控制模块801,用于控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求;
第二控制模块802,用于控制所述事务协调器接收所述释放请求,并释放所述数据锁。
本申请实施例中,第一控制模块801控制RM获取分支事务的开始执行时间,以及分支事务对应的全局事务的预设超时时间,并确定所述分支事务的执行时长;若所述执行时长超过所述预设超时时间,对所述分支事务执行回滚处理操作;第二控制模块802控制TC释放所述分支事务对应的数据锁,使得资源管理器在无法获得事务协调器命令的情况下,及时根据分支标识符中包含的开始执行时间以及预设超时时间,及时判断是否执行超时;并在执行超时的情况下,对分支事务进行回滚,释放分支事务对应的数据表,防止数据表被长期锁定而引发协议堵塞,提高事务处理的吞吐率;在微服务架构内网络异常概率较高的情况下,提高***的可用性。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括终端设备、服务器(集群)等各类型的设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括终端设备、服务器(集群)等电子设备。图9示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置900。
对于一个实施例,图9示出了示例性装置900,该装置具有一个或多个处理器902、被耦合到(一个或多个)处理器902中的至少一个的控制模块(芯片组)904、被耦合到控制模块904的存储器906、被耦合到控制模块904的非易失性存储器(NVM)/存储设备908、被耦合到控制模块904的一个或多个输入/输出设备910,以及被耦合到控制模块904的网络接口912。
处理器902可包括一个或多个单核或多核处理器,处理器902可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置900能够作为本申请实施例中所述终端设备、服务器(集群)等设备。
在一些实施例中,装置900可包括具有指令914的一个或多个计算机可读介质(例如,存储器906或NVM/存储设备908)以及与该一个或多个计算机可读介质相合并被配置为执行指令914以实现模块从而执行本公开中所述的动作的一个或多个处理器902。
对于一个实施例,控制模块904可包括任意适当的接口控制器,以向(一个或多个)处理器902中的至少一个和/或与控制模块904通信的任意适当的设备或组件提供任意适当的接口。
控制模块904可包括存储器控制器模块,以向存储器906提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器906可被用于例如为装置900加载和存储数据和/或指令914。对于一个实施例,存储器906可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器906可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块904可包括一个或多个输入/输出控制器,以向NVM/存储设备908及(一个或多个)输入/输出设备910提供接口。
例如,NVM/存储设备908可被用于存储数据和/或指令914。NVM/存储设备908可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备908可包括在物理上作为装置900被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备908可通过网络经由(一个或多个)输入/输出设备910进行访问。
(一个或多个)输入/输出设备910可为装置900提供接口以与任意其他适当的设备通信,输入/输出设备910可以包括通信组件、音频组件、传感器组件等。网络接口912可为装置900提供接口以通过一个或多个网络通信,装置900可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器902中的至少一个可与控制模块904的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器902中的至少一个可与控制模块904的一个或多个控制器的逻辑封装在一起以形成***级封装(SiP)。对于一个实施例,(一个或多个)处理器902中的至少一个可与控制模块904的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器902中的至少一个可与控制模块904的一个或多个控制器的逻辑集成在同一模具上以形成片上***(SoC)。
在各个实施例中,装置900可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置900可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置900包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
其中,检测装置中可采用主控芯片作为处理器或控制模块,传感器数据、位置信息等存储到存储器或NVM/存储设备中,传感器组可作为输入/输出设备,通信接口可包括网络接口。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种事务处理方法和装置,一种电子设备和一种存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (17)

1.一种事务处理方法,其特征在于,所述方法包括:
获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
2.根据权利要求1所述的事务处理方法,其特征在于,所述获取分支事务的分支标识符的步骤之前,所述方法包括:
获取所述全局事务的预设超时时间,以及获取所述分支事务的开始执行时间;
将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中,得到所述分支标识符。
3.根据权利要求2所述的事务处理方法,其特征在于,所述获取所述分支事务的开始执行时间的步骤,包括:
获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
4.根据权利要求2所述的事务处理方法,其特征在于,所述将所述预设超时时间以及所述开始执行时间添加到所述分支事务的初始标识符中的步骤之前,所述方法还包括:
获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
5.根据权利要求1所述的事务处理方法,其特征在于,所述若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作的步骤,包括:
若所述执行时长超过所述第二时间参数,获取事务状态参数;其中,所述事务状态参数包括所述分支事务的第一状态参数以及所述全局事务的第二状态参数中的至少一种;
若所述事务状态参数指示对应的事务未结束,对所述分支事务执行回滚处理操作。
6.根据权利要求1所述的事务处理方法,其特征在于,所述对所述分支事务执行回滚处理操作的步骤,包括:
对所述分支事务执行回滚处理操作,释放所述分支事务对应的数据锁。
7.根据权利要求1所述的事务处理方法,其特征在于,所述对所述分支事务执行回滚处理操作的步骤之后,所述方法还包括:
接收事务协调器发送的指示信息;
若所述指示信息指示的操作为回滚操作,向所述事务协调器反馈指示回滚成功的第一反馈信息;
若所述指示信息指示的操作为提交操作,向所述事务协调器反馈指示提交异常的第二反馈信息。
8.根据权利要求1所述的事务处理方法,其特征在于,所述获取分支事务的分支标识符的步骤,包括:
在每个预设周期的检测时间,获取分支事务的分支标识符。
9.一种事务处理方法,其特征在于,所述方法包括:
获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间;
将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;
根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述分支标识符中的第二时间参数,对所述分支事务执行回滚处理操作。
10.根据权利要求9所述的事务处理方法,其特征在于,所述获取分支事务的开始执行时间的步骤,包括:
获取注册响应消息的接收时间,作为所述分支事务的开始执行时间;
所述注册响应消息为指示所述分支事务在事务协调器注册成功的消息。
11.根据权利要求9所述的事务处理方法,其特征在于,所述将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中的步骤之前,所述方法还包括:
获取所述全局事务的交换标识符以及所述分支事务的事务标识符;
将所述交换标识符以及所述事务标识符组成所述初始标识符。
12.一种事务处理方法,应用于分布式事务处理***,所述分布式事务处理***包括资源管理器以及事务协调器,其特征在于,所述方法包括:
控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求;
控制所述事务协调器接收所述释放请求,并释放所述数据锁。
13.一种事务处理装置,其特征在于,所述装置包括:
标识符获取模块,用于获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
第一时长确定模块,用于根据所述第一时间参数,确定所述分支事务的执行时长;
回滚处理模块,用于若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作。
14.一种事务处理装置,其特征在于,所述装置包括:
第二时间获取模块,用于获取分支事务的开始执行时间,以及获取所述分支事务对应的全局事务的预设超时时间;
第二添加模块,用于将将所述开始执行时间作为第一时间参数,以及将所述预设超时时间作为第二时间参数添加到所述分支事务的初始标识符中,得到分支标识符;
第二时长确定模块,用于根据所述分支标识符中的第一时间参数,确定所述分支事务的执行时长;
回滚执行模块,用于若所述执行时长超过所述分支标识符中的第二时间参数,对所述分支事务执行回滚处理操作。
15.一种事务处理装置,所述装置应用于分布式事务处理***,所述分布式事务处理***包括资源管理器以及事务协调器,其特征在于,所述装置包括:
第一控制模块,用于控制所述资源管理器获取分支事务的分支标识符;其中,所述分支标识符中包括第一时间参数和第二时间参数;所述第一时间参数包括所述分支事务的开始执行时间,所述第二时间参数包括所述分支事务对应的全局事务的预设超时时间;
根据所述第一时间参数,确定所述分支事务的执行时长;
若所述执行时长超过所述第二时间参数,对所述分支事务执行回滚处理操作,向所述事务协调器发送释放所述分支事务对应的数据锁的释放请求;
第二控制模块,用于控制所述事务协调器接收所述释放请求,并释放所述数据锁。
16.一种电子设备,其特征在于,包括:处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1至12中一个或多个所述的方法。
17.一个或多个机器可读存储介质,其上存储有可执行代码,其特征在于,当所述可执行代码被执行时,使得处理器执行如权利要求1至12中一个或多个所述的方法。
CN202010615149.6A 2020-06-30 2020-06-30 事务处理方法、装置、设备和存储介质 Pending CN113872781A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010615149.6A CN113872781A (zh) 2020-06-30 2020-06-30 事务处理方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010615149.6A CN113872781A (zh) 2020-06-30 2020-06-30 事务处理方法、装置、设备和存储介质

Publications (1)

Publication Number Publication Date
CN113872781A true CN113872781A (zh) 2021-12-31

Family

ID=78981354

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010615149.6A Pending CN113872781A (zh) 2020-06-30 2020-06-30 事务处理方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN113872781A (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012163245A1 (zh) * 2011-05-27 2012-12-06 运软网络科技(上海)有限公司 一种基于事务的服务控制***及其控制方法
CN106033439A (zh) * 2015-03-13 2016-10-19 阿里巴巴集团控股有限公司 一种分布式事务处理方法及***
CN106156119A (zh) * 2015-04-07 2016-11-23 阿里巴巴集团控股有限公司 一种分布式事务通信方法、***及装置
CN107168775A (zh) * 2016-03-07 2017-09-15 阿里巴巴集团控股有限公司 一种悬挂事务自动处理的方法和装置
CN108205464A (zh) * 2016-12-20 2018-06-26 阿里巴巴集团控股有限公司 一种数据库死锁的处理方法、装置和数据库***
CN109684045A (zh) * 2017-10-18 2019-04-26 阿里巴巴集团控股有限公司 事务消息的处理方法、装置及电子设备
CN110022367A (zh) * 2019-04-11 2019-07-16 软通动力信息技术(集团)有限公司 一种事务处理方法和事务处理***
CN110888718A (zh) * 2019-11-27 2020-03-17 武汉虹旭信息技术有限责任公司 分布式事务的实现方法及装置
CN111225012A (zh) * 2018-11-27 2020-06-02 阿里巴巴集团控股有限公司 事务处理方法、装置和设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012163245A1 (zh) * 2011-05-27 2012-12-06 运软网络科技(上海)有限公司 一种基于事务的服务控制***及其控制方法
CN106033439A (zh) * 2015-03-13 2016-10-19 阿里巴巴集团控股有限公司 一种分布式事务处理方法及***
CN106156119A (zh) * 2015-04-07 2016-11-23 阿里巴巴集团控股有限公司 一种分布式事务通信方法、***及装置
CN107168775A (zh) * 2016-03-07 2017-09-15 阿里巴巴集团控股有限公司 一种悬挂事务自动处理的方法和装置
CN108205464A (zh) * 2016-12-20 2018-06-26 阿里巴巴集团控股有限公司 一种数据库死锁的处理方法、装置和数据库***
WO2018113534A1 (zh) * 2016-12-20 2018-06-28 阿里巴巴集团控股有限公司 一种数据库死锁的处理方法、装置和数据库***
CN109684045A (zh) * 2017-10-18 2019-04-26 阿里巴巴集团控股有限公司 事务消息的处理方法、装置及电子设备
CN111225012A (zh) * 2018-11-27 2020-06-02 阿里巴巴集团控股有限公司 事务处理方法、装置和设备
CN110022367A (zh) * 2019-04-11 2019-07-16 软通动力信息技术(集团)有限公司 一种事务处理方法和事务处理***
CN110888718A (zh) * 2019-11-27 2020-03-17 武汉虹旭信息技术有限责任公司 分布式事务的实现方法及装置

Similar Documents

Publication Publication Date Title
US10942823B2 (en) Transaction processing system, recovery subsystem and method for operating a recovery subsystem
CN109739935B (zh) 数据读取方法、装置、电子设备以及存储介质
WO2018103318A1 (zh) 分布式事务处理方法和***
US9779128B2 (en) System and method for massively parallel processing database
AU711220B2 (en) Method of commitment in a distributed database transaction
US7904435B2 (en) System and method for resource lock acquisition and reclamation in a network file system environment
KR102072726B1 (ko) 데이터베이스로의 미들-티어 트랜잭션 로그들의 인라인 위임을 지원하는 시스템들 및 방법들
US10013447B2 (en) Transaction execution commitment without updating of data row transaction status
US7900085B2 (en) Backup coordinator for distributed transactions
US20040158549A1 (en) Method and apparatus for online transaction processing
US7328213B2 (en) Transaction processing method, transaction control apparatus and program thereof
CN104793988A (zh) 跨数据库分布式事务的实现方法和装置
US20120124021A1 (en) Transaction log management
US9159050B2 (en) Providing atomicity for a unit of work
JPS58225447A (ja) 計算装置の動作方法
CN111753013A (zh) 分布式事务处理方法及装置
JP2022013854A (ja) 2フェーズコミット分散トランザクションを使用することによってデータベースを更新するための方法および装置
CN108845866B (zh) 处理分布式事务的方法和装置
CN109783204A (zh) 一种分布式事务处理方法、装置及存储介质
CN111522631A (zh) 分布式事务处理方法、装置、服务器及介质
CN113254425B (zh) 数据库事务保持的方法、设备、***、程序及存储介质
CN110888718A (zh) 分布式事务的实现方法及装置
US20230110826A1 (en) Log execution method and apparatus, computer device and storage medium
CN115994053A (zh) 数据库备机的并行回放方法、装置、电子设备及介质
CN111352704B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40065219

Country of ref document: HK