CN111880908A - 分布式事务的处理方法、装置及存储介质 - Google Patents
分布式事务的处理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111880908A CN111880908A CN202010598670.3A CN202010598670A CN111880908A CN 111880908 A CN111880908 A CN 111880908A CN 202010598670 A CN202010598670 A CN 202010598670A CN 111880908 A CN111880908 A CN 111880908A
- Authority
- CN
- China
- Prior art keywords
- processing
- processing operation
- micro
- transaction
- distributed transaction
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
Abstract
本申请实施例提供一种分布式事务的处理方法、装置及存储介质,该方法包括:接收分布式事务处理请求,分布式事务处理请求中包括多个处理操作,其中处理操作包括本地处理操作、其他微服务的处理操作的至少一项,根据多个处理操作的关联关系,依次执行多个处理操作得到执行结果,向客户端返回执行结果。通过依次执行多个处理操作确保全局数据的最终一致性,另外,可通过预设的多线程并发处理多个分布式事务处理请求,提高系统整体的吞吐量。
Description
技术领域
本申请实施例涉及网络技术领域,尤其涉及一种分布式事务的处理方法、装置及存储介质。
背景技术
近年来,互联网应用系统倡导微服务化实践,即将复杂的单体应用拆分成若干个简单、松耦合的微服务,并进行分布式部署,从而降低开发难度、增强扩展性和便于敏捷开发。
目前分布式事务处理比较常用的是两阶段提交协议(two-phase commit,2PC)方法,由客户端提交请求到事务协调器TC,然后由事务协调器来确认各个事务执行是否完毕,待全部执行成功后,才能将整个事务提交完成。
然而,上述分布式事务处理往往耗时较长,用户体验不佳。因此,如何同时保障全局数据的一致性和应用系统整体高性能,成为亟待解决的技术问题。
发明内容
本申请实施例提供一种分布式事务的处理方法、装置及存储介质,确保全局数据的一致性,提高事务处理的可靠性。
第一方面,本申请实施例提供一种分布式事务的处理方法,包括:
接收分布式事务处理请求,所述分布式事务处理请求包括多个处理操作,所述处理操作包括本地处理操作、调用其他微服务的至少一项;
根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果;
将所述执行结果返回至客户端。
可选地,所述多个处理操作的关联关系包括串行关系、并行关系、分支关系中的至少一项。
在一种可能的实施方式中,所述根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果,包括:
若所述多个处理操作的关联关系包括并行关系或者分支关系,将所述多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。
在一种可能的实施方式中,执行所述多个处理操作,包括:执行第一处理操作,所述第一处理操作为所述多个处理操作的任意一项;所述执行所述第一处理操作,包括:
根据微服务数据库的事务处理记录,确定执行所述第一处理操作。
在一种可能的实施方式中,所述根据微服务数据库的事务处理记录,确定执行所述第一处理操作,包括:
若所述第一处理操作的流水号大于所述微服务数据库中当前记录的处理操作的流水号,确定执行所述第一处理操作。
在一种可能的实施方式中,若执行所述第一处理操作时出现执行异常,所述方法还包括:
根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作。
在一种可能的实施方式中,所述根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作,包括:
若所述第一处理操作的重复执行次数小于第一预设次数,再次尝试执行所述第一处理操作;或者
若所述第一处理操作的重复执行次数大于或等于所述第一预设次数,将所述第一处理操作添加至内存队列的尾部,等待再次执行。
在一种可能的实施方式中,若所述第一处理操作被添加至内存队列尾部的次数大于第二预设次数,所述方法还包括:
剔除所述第一处理操作,并将所述第一处理操作的执行状态变更为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次执行。
在一种可能的实施方式中,所述第一处理操作包括本地处理操作和调用其他微服务,所述执行所述第一处理操作,包括:
执行所述本地处理操作,将所述本地处理操作的执行结果作为调用所述其他微服务的入参,调用所述其他微服务的应用程序接口API;或者
调用所述其他微服务的API,将调用所述其他微服务的执行结果作为所述本地处理操作的入参,执行所述本地处理操作。
在一种可能的实施方式中,所述接收分布式事务处理请求,包括:同时接收多个分布式事务处理请求;
所述方法还包括:
通过预设的多线程并发执行所述多个分布式事务处理请求中第一执行顺序的各个处理操作。
第二方面,本申请实施例提供一种分布式事务的处理装置,包括:
接收模块,用于接收分布式事务处理请求,所述分布式事务处理请求包括多个处理操作,所述处理操作包括本地处理操作、调用其他微服务的至少一项;
处理模块,用于根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果;
发送模块,用于将所述执行结果返回至客户端。
可选地,所述多个处理操作的关联关系包括串行关系、并行关系、分支关系中的至少一项。
在一种可能的实施方式中,处理模块,具体用于:
若所述多个处理操作的关联关系包括并行关系或分支关系,将所述多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。
在一种可能的实施方式中,处理模块,具体用于执行第一处理操作,所述第一处理操作为所述多个处理操作的任意一项;
处理模块,具体用于根据微服务数据库的事务处理记录,确定执行所述第一处理操作。
在一种可能的实施方式中,处理模块,具体用于:
若所述第一处理操作的流水号大于所述微服务数据库中当前记录的处理操作的流水号,确定执行所述第一处理操作。
在一种可能的实施方式中,若处理模块执行所述第一处理操作时出现执行异常,处理模块,还用于:
根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作。
在一种可能的实施方式中,处理模块,具体用于:
若所述第一处理操作的重复执行次数小于第一预设次数,再次尝试执行所述第一处理操作;或者
若所述第一处理操作的重复执行次数大于或等于所述第一预设次数,将所述第一处理操作添加至内存队列的尾部,等待再次执行。
在一种可能的实施方式中,若所述第一处理操作被添加至内存队列尾部的次数大于第二预设次数,处理模块,还用于:
剔除所述第一处理操作,并将所述第一处理操作的执行状态变更为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次执行。
在一种可能的实施方式中,处理模块,具体用于:
执行所述本地处理操作,将所述本地处理操作的执行结果作为调用所述其他微服务的入参,调用所述其他微服务的应用程序接口API;或者
调用所述其他微服务的API,将调用所述其他微服务的执行结果作为所述本地处理操作的入参,执行所述本地处理操作。
在一种可能的实施方式中,所述接收模块,具体用于同时接收多个分布式事务处理请求;
所述处理模块,还用于通过预设的多线程并发执行所述多个分布式事务处理请求中第一执行顺序的各个处理操作。
第三方面,本申请实施例提供一种分布式事务的处理装置,包括:
存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序执行如第一方面任一项所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现如第一方面中任一项所述的方法。
本申请实施例提供一种分布式事务的处理方法、装置及存储介质,该方法包括:接收分布式事务处理请求,分布式事务处理请求中包括多个处理操作,其中处理操作包括本地处理操作、其他微服务的处理操作的至少一项,根据多个处理操作的关联关系,依次执行多个处理操作得到执行结果,向客户端返回执行结果。通过依次执行多个处理操作确保全局数据的最终一致性,另外,可通过预设的多线程并发处理多个分布式事务处理请求,提高系统整体的吞吐量。
附图说明
图1为本申请实施例提供的分布式事务处理方法的应用场景的示意框图;
图2为本申请实施例提供的微服务分布式应用系统的结构示意图;
图3为本申请实施例提供的一种分布式事务的处理方法的流程示意图;
图4为本申请实施例提供的一种分布式事务处理装置的结构示意图;
图5为本申请实施例提供的一种分布式事务处理装置的硬件结构图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,本文中使用的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先对本申请实施例涉及的名词进行解释说明。
分布式事务:跨多个服务进程执行的一组业务操作,并能保证这一组业务操作整体的原子性、一致性、隔离性和持久性的基本逻辑单元。
微服务:从大型单体应用程序和服务中拆分出来的多个职责单一、相互依赖、易于扩展的基本服务。
事务分片:将需要分布式事务控制的包含数据修改操作的多个微服务调用业务代码,按照业务语义拆分成N块微服务调用代码片段,再将这些代码片段按照顺序分别拆分到本地业务方法(可以是静态方法、Spring Bean服务方法或者C#类方法等)中,每一个本地业务方法中包含本地写库操作,调用其他微服务的至少一项,这些本地业务方法就是事务分片。
回滚:程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。
目前,为了解决分布式事务的数据一致性问题,业界提出一种两阶段提交协议方法,该方法是将整个事务流程分为两个阶段,准备阶段(prepare phase)以及提交阶段(commit phase)。整个事务过程由事务协调器和参与者组成,事务协调器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。二阶段提交执行过程中,所有事务参与者由事务协调器统一调度,期间处于阻塞状态而不能执行其他操作,导致事务处理效率极低。二阶段提交仍然存在数据不一致的可能,比如在提交阶段,假设事务协调器发出事务提交通知,但因为网络问题该通知仅被部分事务参与者接收到并执行提交操作,其余参与者则因为没有收到通知一直处于阻塞状态,这时就产生了数据的不一致性。
为了解决上述问题,本申请实施例提供一种分布式事务的处理装置,可以将该处理装置与微服务应用集成一体,处理装置与微服务应用设置在同一操作系统进程(例如Java语言中的Jar包,或者C#语言的一个DLL)中,该处理装置提供一种分布式事务解耦机制,将跨多个微服务的分布式事务拆分成若干个处理操作,不同处理操作对应不同的事务分片,微服务应用按照该处理装置提供的执行顺序,依次执行多个处理操作,最终完成整体分布式事务的执行,返回执行结果至客户端。通过依次执行多个处理操作确保全局数据的最终一致性,提高事务处理的可靠性。
另外,相关技术中没有对于多个分布式事务处理请求的优化方案,本申请实施例还提供了一种分布式事务的并发处理方法,若同一时刻微服务应用接收到多个分布式事务处理请求,可通过预设的多线程,并发执行多个分布式事务处理请求中第一执行顺序的各个处理操作,实现多个分布式事务的并发处理,提高系统整体的分布式事务处理的吞吐量。
需要说明的是,上述分布式事务的处理装置可以与微服务应用集成一体,处理装置也可以独立于微服务应用,对与其连接的各微服务应用提供解耦机制,对此本申请实施例不作限制。
图1为本申请实施例提供的分布式事务处理方法的应用场景的示意框图。参照图1所示,该应用场景包括多个客户端和微服务分布式应用系统,微服务分布式应用系统中包括多个微服务应用程序(后文简称为微服务),例如图1中的微服务A、微服务B、微服务C、微服务D,不同微服务提供不同的处理操作。
作为一种示例,客户端1向微服务A发送事务处理请求,该事务处理请求包括多个处理操作,处理操作除了包括微服务A的本地处理操作之外,还可能包括调用其他微服务。对于本地处理操作和调用其他微服务的执行顺序,本申请实施例不作任何限制,可以先执行微服务A的本地处理操作,后依次调用微服务B、C、D,还可以先调用微服务B,再执行微服务A的本地处理操作,再依次调用微服务C、D。微服务A中的分布式事务处理装置根据接收到的分布式事务处理请求,依次执行各个处理操作中的本地处理操作以及调用其他微服务,得到执行结果,将执行结果返回至客户端。
作为另一种示例,客户端1、客户端2、客户端3在同一时刻分别向微服务A发送分布式事务处理请求1、分布式事务处理请求2、分布式事务处理请求3,每一个分布式事务处理请求包括多个处理操作,每一个处理操作包括本地处理操作和/或调用其他微服务。微服务A根据处理装置为其分配的执行顺序,首先执行多个分布式事务处理请求中第一执行顺序的各个处理操作,然后再执行多个分布式事务处理请求中第二执行顺序的各个处理操作,直至各个分布式事务处理请求中的所有处理操作执行完毕,得到多个执行结果,分别将执行结果发送至对应的客户端。
本申请实施例提供的分布式事务处理装置均需配置事务处理数据库,可以将事务处理数据库配置到微服务数据库中,使用同一个数据库共享本地数据库事务。微服务数据库支持关系数据库、内存数据库等。
图2为本申请实施例提供的微服务分布式应用系统的结构示意图,参照图2所示,微服务分布式应用系统中的各个微服务可扩展为微服务集群,同一个微服务集群复用同一个微服务数据库(或称为事务处理数据库),以配合实现事务处理在同一微服务集群中的补偿操作。以图2中的微服务集群A为例,微服务集群A包括微服务A1、微服务A2、微服务A3,每一个微服务中集成一个分布式事务处理装置,使得每一个微服务具有本申请实施例提供的分布式事务处理的性能。以微服务A为例,若微服务A1执行处理操作时出现异常,可在微服务A1中剔除该处理操作,并将该处理操作的执行状态变更为执行暂停,等待微服务集群A中其他微服务实例再次执行。具体的,作为补偿,微服务A2(或微服务A3)中的分布式事务处理装置可执行微服务A1剔除的处理操作,处理装置执行完毕后反馈给微服务A1(或微服务A3)。上述过程可避免某项处理操作长期处于异常状态,提高系统整体的事务处理的效率。
作为一种示例,图2中的微服务A集群和微服务D集群中的各个微服务配置了分布式事务处理装置,除了执行本地处理操作之外,可调用其他微服务集群中的微服务。微服务B集群和微服务C集群可参与执行其他微服务集群发起的分布式事务处理,作为被调用的微服务。每一个微服务集群分别对应一个微服务数据库,可根据微服务的性能要求配置为关系型数据库、内存数据库等。通过对微服务的分布式集群部署,提高应用系统整体的分布式事务处理的吞吐量,提高系统分布式事务处理的可靠性、稳定性。
当微服务分布式应用系统对性能要求一般时,可以选择关系型数据库,例如Mysql数据库。当微服务分布式应用系统对性能要求较高时,可以选择Mongodb数据库。当微服务分布式应用系统对性能要求非常高时,可以选择高可用Redis集群,Redis库中key值使用事务流水号(如果Redis实例被多个不同的微服务复用,可以考虑用每个微服务集群使用Redis实例中的一个数据库),对key值的检查可用于判断事务启动是否重复,同时按照key值回写数据时效率非常高。
上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施例在此方面不受任何限制。相反,本申请的实施例可以应用于适用的任何场景。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图3为本申请实施例提供的一种分布式事务的处理方法的流程示意图。本实施例提供的方法可以应用于图1所示的微服务A,如图3所示,该处理方法包括如下步骤:
步骤301、接收分布式事务处理请求,分布式事务处理请求包括多个处理操作。其中,处理操作包括本地处理操作、调用其他微服务的至少一项。
在本实施例中,接收客户端发送的分布式事务处理请求,该请求包括多个处理操作。处理操作包括本地处理操作(如本地写库操作),或者,处理操作包括调用其他微服务的操作,或者,处理操作包括本地处理操作和调用其他微服务的操作。其中,处理操作可以包括一个或多个本地处理操作,也可以包括调用一个或多个其他微服务的操作,对此本实施例不作任何限制。
在接收分布式事务处理请求后,将分布式事务处理请求中的各处理操作存入内存队列和微服务数据库,以便根据内存队列依次执行各处理操作。
作为一个实例,上述分布式事务处理请求可以是支付请求,该支付请求包括如下处理操作:账户1扣除100元,账户2增加50元,账户3增加50元。该支付请求用于实现账户1向账户2转账50元,同时账户1向账户3转账50元。作为一个实例,上述分布式事务处理请求可以是订单请求,该订单请求包括如下处理操作:商城服务系统发生一笔订单交易,库存系统减少库存量。
步骤302、根据多个处理操作的关联关系,依次执行多个处理操作,得到执行结果。
作为一种示例,多个处理操作的关联关系包括串行关系、并行关系、分支关系中的至少一项。具体的,根据多个处理操作的关联关系,依次执行多个处理操作,得到执行结果,包括:若多个处理操作的关联关系包括并行关系或者分支关系,首先将多个处理操作进行串行化处理,然后再依次执行多个处理操作,得到执行结果。
在本申请实施例的一种实施方式中,多个处理操作的关联关系包括串行关系,依次执行多个处理操作,得到执行结果。例如多个处理操作对应一段业务代码,该段业务代码包括本地写库操作代码片段A、其他微服务调用代码片段B、本地写库代码片段C(依赖于B的执行结果)以及其他微服务调用代码片段D。通过对上述代码解析,拆分出三个事务分片B、C和D,用本地事务包装微服务调用代码片段B,并在代码片段A末端推送事务分片B以发起分布式事务,即将事务分片A和事务分片B包含在一个本地事务中,这样执行效率更高。在事务分片B末端推送事务分片C,同时提供C需要的入参,事务分片C接收入参,并在事务分片C末端推送事务分片D,实现整个事务的串行执行。
其中,入参包括微服务识别、事务分片方法名称、方法入参值、事务分片方法所在类(或Spring Bean)名称、业务事务服务标识(代表一个业务服务中的一个事务服务标识)、事务处理的流水号(事务处理执行时产生)、事务分片编号、是否为事务第一分片等。
在本申请实施例的一种实施方式中,多个处理操作的关联关系包括并行关系,将多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。例如多个处理操作对应一段业务代码,该段业务代码包括其他微服务调用代码片段A,当A的执行结果为X时再调用其他微服务代码片段B,同时并行调用其他微服务代码片段C,当A的执行结果为非X时再执行本地写库代码片段D。通过对上述代码解析,拆分出四个事务分片A、B、C和D。在调用代码片段A发起分布式事务,在代码片段A末端判断其调用结果为X时,推送事务分片B,调用结果为非X时,推送事务分片D。在代码片段B的末端推送事务分片C。事务分片C和D中接收相关参数,在完成各自业务逻辑后结束事务。上述处理过程不包括回滚操作,实现将并行处理操作进行串行化处理。
在本申请实施例的一种实施方式中,多个处理操作的关联关系包括分支关系,将多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。例如多个处理操作对应一段业务代码,该段业务代码包括本地写库操作代码片段A,根据代码片段A的执行结果调用其他微服务调用代码片段B,当代码片段B的执行结果为true则调用其他微服务调用代码片段C,当代码片段B的执行结果为false则回滚代码片段A的本地写库操作。通过对上述代码解析,拆分出事务分片B和C,同时将回滚代码片段A的写库操作拆分到事务分片D中。本地写库代码片段A末端推送事务分片B,同时提供B需要的参数,写库代码片段A包含在一个本地事务中,推送成功后本地事务即结束。事务分片B中接收相关参数,在代码末端判断B的执行结果,若执行结果为true推送事务分片C,若执行结果为false推送事务分片D。事务分片C或D中接收相关参数,在完成各自业务逻辑后结束事务。上述处理过程包括回滚操作,实现将分支处理操作进行串行化处理。
在一些实施例中,第一处理操作包括调用其他微服务的处理操作,执行第一处理操作,包括:调用其他微服务的处理操作的API,执行第一处理操作。示例性的,如图1所示,微服务A接收到分布式事务处理请求,该请求包括调用其他微服务的处理操作,微服务A可调用其他微服务的API,例如微服务B的API或者微服务C的API,执行相应的处理操作。
在一些实施例中,第一处理操作包括本地处理操作和调用其他微服务的处理操作,执行第一处理操作,包括:
执行本地处理操作,将本地处理操作的执行结果作为调用其他微服务的处理操作的入参,调用其他微服务的处理操作的应用程序接口API;或者
调用其他微服务的处理操作的应用程序接口API,将调用其他微服务的处理操作的执行结果作为本地处理操作的入参,执行本地处理操作。
步骤303、将执行结果返回至客户端。
其中,执行结果包括各个处理操作的执行结果。
本实施例提供的分布式事务的处理方法,通过接收分布式事务处理请求,分布式事务处理请求中包括多个处理操作,其中处理操作包括本地处理操作、调用其他微服务的处理操作的至少一项,根据多个处理操作的关联关系,依次执行多个处理操作得到执行结果,向客户端返回执行结果。通过依次执行多个处理操作确保全局数据的最终一致性,提高事务处理的可靠性。
上述实施例示出了微服务应用根据客户端发送的分布式事务处理请求,将跨多个微服务的分布式事务拆分成多个处理操作,在该微服务应用进程中,依次执行多个处理操作中的本地事务处理以及其他微服务的调用,完成分布式事务处理。下面几个实施例从一个处理操作的角度出发,对事务处理过程进行说明。
微服务应用根据多个处理操作的关联关系,依次执行多个处理操作,下面以第一处理操作为例,第一处理操作为多个处理操作的任意一项。
在一些实施例中,执行第一处理操作,包括:根据微服务数据库的事务处理记录,确定执行第一处理操作。其中,微服务数据库存储有如下信息:事务分片本地方法名称、方法入参值、事务分片本地方法所在类(或spring bean)名称、业务事务服务标识(代表一个业务服务中的一个事务服务标识,是应用系统设计时概念)、事务分片流水号(运行时产生)、事务分片编号、是否为事务第一分片等信息,除上述信息之外,还存储有如下事务处理记录:事务处理请求事件、事务执行状态、执行次数、执行开始时间、最后一次执行出错信息和最后一次执行完成事件等。其中事务执行状态包括正在执行、执行失败、执行成功和执行暂停等状态。
需要说明的是,每一项处理操作对应一条事务处理记录,存储在微服务数据库中,可以以数据库表的形式进行存储,其中入参中的事务处理的流水号作为数据库表的主键,唯一确定一条事务处理记录。
进一步地,根据微服务数据库的事务处理记录,确定执行第一处理操作,包括:若第一处理操作的流水号大于微服务数据库中当前记录的处理操作的流水号,确定执行第一处理操作。其中,处理操作的流水号是在处理操作执行时产生的,唯一确定该项处理操作。第一处理操作的流水号大于当前记录的处理操作的流水号,说明在分布式应用系统中第一处理操作没有被执行过,可将第一处理操作的相关信息(本地业务方法、调用方法和入参等)更新到微服务数据库中,并解除锁定。存储第一处理操作的相关信息的同时,可设置第一处理操作的执行开始时间为当前时间,执行状态为正在执行,执行次数为0,并清空最后一次执行出错信息和最后一次执行完成时间的字段值等。
在一些实施例中,若第一处理操作的流水号小于或等于微服务数据库中当前记录的处理操作的流水号,剔除第一处理操作。应理解,第一处理操作的流水号小于或等于当前记录的处理操作的流水号,说明在分布式应用系统中第一处理操作已经被其他微服务执行过或正在执行,为了避免重复执行,可剔除第一处理操作。
在一些实施例中,若执行第一处理操作时出现执行异常时,可根据微服务数据库的事务处理记录,确定是否再次尝试执行第一处理操作。其中执行异常包括以下几种情况:业务异常、网络异常或其他资源异常。其中,业务异常包括被调用微服务业务异常,当前微服务节点本身业务异常。其他资源异常包括微服务业务环境中的磁盘异常、数据库异常、内存异常等。
进一步地,根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作,包括:若第一处理操作的重复执行次数小于第一预设次数,再次尝试执行第一处理操作,或者,若第一处理操作的重复执行次数大于或等于第一预设次数,将第一处理操作添加至内存队列的尾部,等待再次执行。
示例性的,第一预设次数设置为3次(次数可配置),若第一处理操作的重复执行次数小于3次,可再次尝试执行第一处理操作,若第一处理操作的重复次数大于或等于3次,回写执行结果到微服务数据库对应的事务处理记录中,将记录修改为:事务执行状态为执行失败,执行次数增加1,最后一次执行出错信息为抛出的业务异常(或网络异常、其他资源异常),最后一次执行完成时间为当前时间,回写完成后,将第一处理操作添加至内存队列的尾部,等待再次执行。
上述示例示出了执行异常情况下的处理方式,允许重复执行第一预设次数,若超出第一预设次数,执行下一个处理操作,避免长时间执行阻塞。
在一些实施例中,若第一处理操作被添加至内存队列尾部的次数大于第二预设次数,可剔除第一处理操作,并将第一处理操作的执行状态变更为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次执行。
示例性的,第二预设次数设置为2次(次数可配置),若第一处理操作被添加至内存队列尾部的次数大于2次,可剔除第一处理操作,即不在当前微服务中执行该事务,同时记录事务执行状态为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次尝试执行。例如,图2中的微服务A1执行第一处理操作,第一处理操作被添加至内存队列尾部的次数大于2次,记录该第一处理操作的执行状态为执行暂停,等待微服务A集群中的任意一个微服务,如微服务A2或微服务A3,再次尝试执行。需要说明的是,再次尝试执行的微服务实例可以是当前微服务实例,例如上述示例中的微服务A1。
可选的,在一些实施例中,可以将已执行成功的处理操作对应的本地业务方法或调用方法从微服务数据库中删除,保留已执行成功的处理操作对应的事务处理记录。
可选的,在一些实施例中,上述实施例的步骤301,具体包括:在同一时刻接收多个分布式事务处理请求,处理方法还包括:通过预设的多线程并发执行多个分布式事务处理请求中第一执行顺序的各个处理操作。
示例性的,系统预设的多线程数量为30个,即系统可以在同一时刻同时处理30个分布式事务处理请求。每一个线程按照上述实施例的技术方案执行对应的分布式事务处理请求中的各个处理操作。若同一时刻接收到超过30个分布式事务处理请求,可按照接收请求的先后顺序,首先并发执行前30个分布式事务处理请求。应理解,并发执行多个分布式事务的处理操作的执行速度不同,当一个线程中的分布式事务处理请求的各个处理操作均执行完毕且返回执行结果后,可继续执行下一个分布式事务处理请求。
本申请实施例对预设的多线程数量不作任何限制,可根据系统需求设定线程数量。
通过上述并发处理过程,提高系统整体的分布式事务处理的吞吐量,降低客户端等待执行结果的平均时间。
本申请实施例可以根据上述方法实施例对分布式事务处理装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以使用硬件的形式实现,也可以使用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以使用对应各个功能划分各个功能模块为例进行说明。
图4为本申请实施例提供的一种分布式事务处理装置的结构示意图。如图4所示,本实施例提供的分布式事务处理装置400,包括:
接收模块401,用于接收分布式事务处理请求,所述分布式事务处理请求包括多个处理操作,所述处理操作包括本地处理操作、调用其他微服务的至少一项;
处理模块402,用于根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果;
发送模块403,用于将所述执行结果返回至客户端。
可选地,所述多个处理操作的关联关系包括串行关系、并行关系、分支关系中的至少一项。
在一种可能的实施方式中,处理模块402,具体用于:
若所述多个处理操作的关联关系包括并行关系或者分支关系,将所述多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。
在一种可能的实施方式中,处理模块402,具体用于执行第一处理操作,所述第一处理操作为所述多个处理操作的任意一项;
处理模块402,具体用于根据微服务数据库的事务处理记录,确定执行所述第一处理操作。
在一种可能的实施方式中,处理模块402,具体用于:
若所述第一处理操作的流水号大于所述微服务数据库中当前记录的处理操作的流水号,确定执行所述第一处理操作。
在一种可能的实施方式中,若处理模块402执行所述第一处理操作时出现执行异常,处理模块402,还用于:
根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作。
在一种可能的实施方式中,处理模块402,具体用于:
若所述第一处理操作的重复执行次数小于第一预设次数,再次尝试执行所述第一处理操作;或者
若所述第一处理操作的重复执行次数大于或等于所述第一预设次数,将所述第一处理操作添加至内存队列的尾部,等待再次执行。
在一种可能的实施方式中,若所述第一处理操作被添加至内存队列尾部的次数大于第二预设次数,处理模块402,还用于:
剔除所述第一处理操作,并将所述第一处理操作的执行状态变更为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次执行。
在一种可能的实施方式中,处理模块402,具体用于:
执行所述本地处理操作,将所述本地处理操作的执行结果作为调用所述其他微服务的入参,调用所述其他微服务的应用程序接口API;或者
调用所述其他微服务的API,将调用所述其他微服务的执行结果作为所述本地处理操作的入参,执行所述本地处理操作。
在一种可能的实施方式中,所述接收模块401,具体用于同时接收多个分布式事务处理请求;
所述处理模块402,还用于通过预设的多线程并发执行所述多个分布式事务处理请求中第一执行顺序的各个处理操作。
本实施例提供的分布式事务处理装置,可以执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图5为本申请实施例提供的一种分布式事务处理装置的硬件结构图。如图5所示,本实施例的分布式事务处理装置500,包括:
处理器501以及存储器502;其中,存储器502,用于存储计算机程序;处理器501,用于执行存储器中存储的计算机程序,以实现上述实施例中的分布式事务处理方法。具体可以参见前述方法实施例中的相关描述。
可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。
当所述存储器502是独立于处理器501之外的器件时,分布式事务处理装置500还可以包括:总线503,用于连接所述存储器502和处理器501。
可选地,分布式事务处理装置500还可以包括通信部件504,用于与客户端进行通信。
本实施例提供的分布式事务处理装置,可用于执行上述方法实施例中的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序用于实现如上方法实施例中的技术方案。
本申请实施例还提供一种芯片,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行上述方法实施例中的技术方案。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于处理装置中。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (13)
1.一种分布式事务的处理方法,其特征在于,包括:
接收分布式事务处理请求,所述分布式事务处理请求包括多个处理操作,所述处理操作包括本地处理操作、调用其他微服务的至少一项;
根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果;
将所述执行结果返回至客户端。
2.根据权利要求1所述的方法,其特征在于,所述多个处理操作的关联关系包括串行关系、并行关系、分支关系中的至少一项。
3.根据权利要求1所述的方法,其特征在于,所述根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果,包括:
若所述多个处理操作的关联关系包括并行关系或者分支关系,将所述多个处理操作进行串行化处理,依次执行串行化处理后的多个处理操作,得到执行结果。
4.根据权利要求1所述的方法,其特征在于,执行所述多个处理操作,包括:执行第一处理操作,所述第一处理操作为所述多个处理操作的任意一项;所述执行所述第一处理操作,包括:
根据微服务数据库的事务处理记录,确定执行所述第一处理操作。
5.根据权利要求4所述的方法,其特征在于,所述根据微服务数据库的事务处理记录,确定执行所述第一处理操作,包括:
若所述第一处理操作的流水号大于所述微服务数据库中当前记录的处理操作的流水号,确定执行所述第一处理操作。
6.根据权利要求4所述的方法,其特征在于,若执行所述第一处理操作时出现执行异常,所述方法还包括:
根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作。
7.根据权利要求6所述的方法,其特征在于,所述根据微服务数据库的事务处理记录,确定是否再次尝试执行所述第一处理操作,包括:
若所述第一处理操作的重复执行次数小于第一预设次数,再次尝试执行所述第一处理操作;或者
若所述第一处理操作的重复执行次数大于或等于所述第一预设次数,将所述第一处理操作添加至内存队列的尾部,等待再次执行。
8.根据权利要求7所述的方法,其特征在于,若所述第一处理操作被添加至内存队列尾部的次数大于第二预设次数,所述方法还包括:
剔除所述第一处理操作,并将所述第一处理操作的执行状态变更为执行暂停,等待当前微服务所在的微服务集群中的任意一个微服务实例再次执行。
9.根据权利要求4所述的方法,其特征在于,所述第一处理操作包括本地处理操作和调用其他微服务,所述执行所述第一处理操作,包括:
执行所述本地处理操作,将所述本地处理操作的执行结果作为调用所述其他微服务的入参,调用所述其他微服务的应用程序接口API;或者
调用所述其他微服务的API,将调用所述其他微服务的执行结果作为所述本地处理操作的入参,执行所述本地处理操作。
10.根据权利要求1-9中任一项所述的方法,其特征在于,所述接收分布式事务处理请求,包括:同时接收多个分布式事务处理请求;
所述方法还包括:
通过预设的多线程并发执行所述多个分布式事务处理请求中第一执行顺序的各个处理操作。
11.一种分布式事务的处理装置,其特征在于,包括:
接收模块,用于接收分布式事务处理请求,所述分布式事务处理请求包括多个处理操作,所述处理操作包括本地处理操作、调用其他微服务的至少一项;
处理模块,用于根据所述多个处理操作的关联关系,依次执行所述多个处理操作,得到执行结果;
发送模块,用于将所述执行结果返回至客户端。
12.一种分布式事务的处理装置,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序执行如权利要求1至10中任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行以实现如权利要求1至10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010598670.3A CN111880908A (zh) | 2020-06-28 | 2020-06-28 | 分布式事务的处理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010598670.3A CN111880908A (zh) | 2020-06-28 | 2020-06-28 | 分布式事务的处理方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111880908A true CN111880908A (zh) | 2020-11-03 |
Family
ID=73157176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010598670.3A Pending CN111880908A (zh) | 2020-06-28 | 2020-06-28 | 分布式事务的处理方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111880908A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032421A (zh) * | 2021-04-29 | 2021-06-25 | 电子科技大学 | 基于MongoDB的分布式事务处理系统及方法 |
WO2023169267A1 (zh) * | 2022-03-08 | 2023-09-14 | 华为技术有限公司 | 一种基于网络设备的数据处理方法及网络设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN108304271A (zh) * | 2018-01-16 | 2018-07-20 | 深圳市康拓普信息技术有限公司 | 一种微服务架构下的分布式事务管理器以及管理方法 |
CN110083439A (zh) * | 2019-05-23 | 2019-08-02 | 北京奥鹏远程教育中心有限公司 | 分布式事务系统 |
CN110149397A (zh) * | 2019-05-20 | 2019-08-20 | 湖北亿咖通科技有限公司 | 一种微服务整合方法和装置 |
CN110231980A (zh) * | 2019-06-10 | 2019-09-13 | 世纪龙信息网络有限责任公司 | 分布式事务的处理方法、装置及事务处理器 |
CN110990182A (zh) * | 2019-12-03 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、设备及存储介质 |
-
2020
- 2020-06-28 CN CN202010598670.3A patent/CN111880908A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN108304271A (zh) * | 2018-01-16 | 2018-07-20 | 深圳市康拓普信息技术有限公司 | 一种微服务架构下的分布式事务管理器以及管理方法 |
CN110149397A (zh) * | 2019-05-20 | 2019-08-20 | 湖北亿咖通科技有限公司 | 一种微服务整合方法和装置 |
CN110083439A (zh) * | 2019-05-23 | 2019-08-02 | 北京奥鹏远程教育中心有限公司 | 分布式事务系统 |
CN110231980A (zh) * | 2019-06-10 | 2019-09-13 | 世纪龙信息网络有限责任公司 | 分布式事务的处理方法、装置及事务处理器 |
CN110990182A (zh) * | 2019-12-03 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032421A (zh) * | 2021-04-29 | 2021-06-25 | 电子科技大学 | 基于MongoDB的分布式事务处理系统及方法 |
WO2023169267A1 (zh) * | 2022-03-08 | 2023-09-14 | 华为技术有限公司 | 一种基于网络设备的数据处理方法及网络设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8484659B2 (en) | Distributed processing of binary objects via message queues including a failover safeguard | |
CN104065636B (zh) | 数据处理方法和系统 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
WO2012000997A1 (en) | An apparatus for processing a batched unit of work | |
US20080201712A1 (en) | Method and System for Concurrent Message Processing | |
US9553951B1 (en) | Semaphores in distributed computing environments | |
CN112596960A (zh) | 一种分布式存储服务切换方法及装置 | |
CN111880908A (zh) | 分布式事务的处理方法、装置及存储介质 | |
CN113778652A (zh) | 一种任务调度方法、装置、电子设备及存储介质 | |
CN111475583A (zh) | 事务处理方法及装置 | |
CN111427918A (zh) | 交易明细数据比对方法及装置 | |
CN109347906B (zh) | 一种数据传输方法、装置、与服务器 | |
CN111143041B (zh) | 一种数据一致性方法、分布式协调器及中央协调器 | |
CN111831408A (zh) | 异步任务处理方法、装置、电子设备及介质 | |
CN111752961A (zh) | 一种数据处理方法及装置 | |
US7171410B1 (en) | Fault tolerant network element | |
CN112596801A (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
CN115033350A (zh) | 一种分布式事务的执行方法及装置 | |
CN115080231A (zh) | 任务的处理方法及装置 | |
CN112748855B (zh) | 处理高并发数据请求的方法和装置 | |
CN110222016B (zh) | 一种文件处理方法及装置 | |
CN114168626A (zh) | 一种数据库操作的处理方法、装置、设备及介质 | |
CN112162988A (zh) | 一种分布式事务的处理方法、装置和电子设备 | |
CN115145997A (zh) | 一种分布式事务实现方法及分布式系统 | |
CN115390998A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201103 |