CN115145997A - 一种分布式事务实现方法及分布式系统 - Google Patents
一种分布式事务实现方法及分布式系统 Download PDFInfo
- Publication number
- CN115145997A CN115145997A CN202110343752.8A CN202110343752A CN115145997A CN 115145997 A CN115145997 A CN 115145997A CN 202110343752 A CN202110343752 A CN 202110343752A CN 115145997 A CN115145997 A CN 115145997A
- Authority
- CN
- China
- Prior art keywords
- transaction
- branch
- database server
- request
- coordinator
- 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
- 238000000034 method Methods 0.000 title claims abstract description 70
- 230000004044 response Effects 0.000 claims description 9
- 238000012545 processing Methods 0.000 abstract description 8
- 230000008569 process Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 238000012546 transfer Methods 0.000 description 10
- 230000000977 initiatory effect Effects 0.000 description 6
- 230000003993 interaction Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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]
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种分布式事务实现方法及分布式系统。该分布式系统包括位于第一区域的客户端、第一事务协调器与第一数据库服务器,以及位于第二区域的第二事务协调器与第二数据库服务器,客户端在调用第一数据库服务器执行第一分支事务时,第一数据库服务器通过第一事务协调器对第一分支事务涉及的数据进行加锁操作,第一数据库服务器执行第一分支事务后,第一数据库服务器调用第二数据库服务器执行第二分支事务,第二数据库服务器执行第二分支事务时,通过第二事务协调器对第二分支事务涉及的数据进行加锁操作。执行上述分布式事务实现方法,能够减少不同区域间设备的相互调用,提高分布式事务处理效率。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种分布式事务实现方法及分布式系统。
背景技术
随着网络技术的快速发展,分布式系统逐渐普遍,分布式系统基于微服务架构,在不同的区域或者不同的节点部署多个服务,服务与服务之间可以通过远程协作完成一项事务操作。例如,当需要实现A银行的账户a向B银行的账户b转账100元转账操作时,需要调用第一服务将A银行的数据库中账户a的余额扣除100元,并调用第二服务将B银行数据库中账户b的余额增加100元。这种由分布式系统操作多个独立的数据库共同完成一个工作的事务称之为分布式事务,也称为全局事务。一个分布式事务包括多个分支事务,例如上述转账业务中调用第一服务需要进行的数据库操作是一个分支事务,调用第二服务需要进行的数据库操作是另一个分支事务。当分布式事务开始时,会首先选定一个事务协调器,该全局事务的所有分支事务的执行设备都会与该事务协调器进行交互,例如分支事务开始、分支事务结束、事务协调器与锁服务器之间的加锁与放锁请求等,当实现分支事务的服务实例与事务协调器不在一个区域(region)时,上述交互都需要跨区域调用,这样会增加网络时延,降低事务处理效率。
发明内容
本申请实施例公开了一种分布式事务实现方法及分布式系统,能够减少分布式事务执行过程中不同区域间设备的相互调用,提高分布式事务的处理效率。
第一方面,本申请实施例提供一种分布式事务实现方法,该方法应用于分布式系统,该分布式系统包括部署于第一区域的客户端、第一数据库服务器和第一事务协调器,以及部署于第二区域的第二数据库服务器和第二事务协调器,其中,第一数据库服务器用于运行第一服务,第二数据库服务器用于运行第二服务,该方法包括:
客户端向第一事务协调器发起分布式事务请求;
客户端根据第一事务协调器返回的分布式事务响应,调用第一数据库服务器执行第一分支事务,其中,第一分支事务为与第一服务相关的数据库事务;
第一数据库服务器在通过第一事务协调器完成第一分支事务后,第一数据库服务器调用第二数据库服务器执行第二分支事务,第二分支事务为与第二服务相关的数据库事务;
第二数据库服务器通过第二事务协调器执行第二分支事务,其中,执行第二分支事务包括通过第二事务协调器对第二分支事务涉及的数据进行加锁操作。
当分布式事务需要调用部署于不同区域的服务时,每个服务对应一个分支事务,当数据库服务器执行对应的分支事务,需要对分支事务操作的数据进行加锁时,数据库服务器会通过部署于同一区域的事务协调器进行数据的加锁等操作,而不需要通过发起分布式事务的客户端所在的区域的事务协调器实现加锁操作,能够减少分布式事务在执行过程中位于不同区域的设备之间的互相调用,降低时延,提高分布式事务的执行效率。
在一种具体的实现方式中,上述第二数据库服务器通过第二事务协调器执行第二分支事务之前,还包括:第二数据库服务器确定与第一事务协调器位于不同的区域,且第二数据库服务器确定与第二事务协调器位于相同的区域。
在一种具体的实现方式中,上述分布式系统还包括部署于第二区域的第二锁服务器,第二数据库服务器通过第二事务协调器执行第二分支事务,包括:
第二数据库服务器向第二事务协调器发送第二分支事务的开始请求,其中,第二分支事务的开始请求包括第二分支事务涉及的数据在第二数据库中的位置信息;
第二事务协调器向第二锁服务器发送第二加锁请求,第二加锁请求包括第二分支事务涉及的数据在第二数据库中的位置信息;
第二锁服务器根据第二加锁请求对第二分支事务涉及的数据执行加锁操作,向第二事务协调器发送加锁结果;
第二事务协调器将加锁结果反馈给第二数据库服务器;
第二数据库服务器根据加锁结果执行第二分支事务,并将第二分支事务的执行结果通过第一数据库服务器反馈给客户端。
当数据库服务器执行对应的分支事务,需要向事务协调器注册分支事务时,数据库服务器会向部署于同一区域的事务协调器发送分支事务开始请求以注册分支事务,而不需要通过发起分布式事务的客户端所在区域的事务协调器实现注册,同时接收到分支事务开始请求的事务协调器通过同一区域的锁服务器实现加锁,不需要客户端所在区域的事务协调器调用执行分支事务的数据库服务器所在区域的所服务器,因此能够减少分布式事务在执行过程中位于不同区域的设备之间的互相调用,降低时延,提高分布式事务的执行效率。
在一种具体的实现方式中,第二数据库服务器根据加锁结果执行第二分支事务,并将第二分支事务的执行结果通过第一数据库服务器反馈给客户端后,客户端根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果,其中,分布式事务的执行结果包括执行成功和执行失败。
在一种具体的实现方式中,客户端根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果之后,包括:
客户端根据分布式事务的执行结果向第一事务协调器发送全局操作请求,其中,在分布式事务的执行结果为执行成功时,全局操作请求为全局事务提交请求,在分布式事务的执行结果为执行失败时,全局操作请求为全局事务回滚请求;
第一事务协调器根据全局操作请求,向第二事务协调器发送全局事务的二阶段操作请求,二阶段操作请求为二阶段提交请求或二阶段回滚请求,其中,在全局操作请求为全局事务提交请求时,二阶段操作请求为二阶段提交请求,在全局操作请求为全局事务回滚请求时,二阶段操作请求为二阶段回滚请求;
第二事务协调器调度第二数据库服务器执行二阶段操作请求。
在一种具体的实现方式中,第二数据库服务器根据加锁结果执行第二分支事务,并将第二分支事务的执行结果反馈给客户端,包括:在加锁结果为加锁成功且第二数据库服务器成功完成所述第二分支事务时,第二数据库服务器将第二分支事务执行成功的执行结果反馈给客户端;或者,在加锁结果为加锁失败或者第二数据库服务器没有完成第二分支事务时,第二数据库服务器将第二分支事务执行失败的执行结果反馈给客户端。
在一种具体的实现方式中,客户端根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果,包括:客户端在第二分支事务的执行结果为执行成功且分布式事务包括的其他分支事务的执行结果均为执行成功时,确定分布式事务的执行结果为执行成功;或者,在第二分支事务的执行结果为执行失败时,确定分布式事务的执行结果为执行失败。
在一种具体的实现方式中,在第二锁服务器对第二分支事务涉及的数据加锁成功时,第二事务协调器调度第二数据库服务器执行二阶段操作请求之前,还包括:第二事务协调器向所述第二锁服务器发送放锁请求;第二锁服务器释放对第二分支事务涉及的数据执行加锁操作时所加的锁,向第二事务协调器发送放锁成功的消息。
由于数据库服务器通过部署于同一区域的事务协调器进行数据的加锁操作,事务协调器通过同一区域的锁服务器实现加锁。因此在需要放锁时,事务协调器也不需要通过跨区域调用实现放锁操作,能够减少分布式事务在执行过程中位于不同区域的设备之间的互相调用,降低时延,提高分布式事务的执行效率。
在一种具体的实现方式中,第一数据库服务器调用第二数据库服务器执行第二分支事务之前,还包括:第一数据库服务器向第一事务协调器发送第一分支事务的开始请求;第一事务协调器根据第一分支事务的开始请求,创建第一分支事务标识,并将第一分支事务标识发送给第一数据库服务器;第一数据库服务器接收到第一分支事务标识后,成功执行第一分支事务。
在一种具体的实现方式中,分布式系统还包括第一锁服务器,第一事务协调器创建第一分支事务标识之前,还包括:
第一事务协调器接收所述第一数据库服务器发送的所述第一分支事务的开始请求,该第一分支事务开始请求包括第一分支事务涉及的数据在第一数据库中的位置信息;
第一事务协调器向第一锁服务器发送第一加锁请求,第一加锁请求包括第一分支事务涉及的数据在第一数据库中的位置信息;
第一锁服务器根据第一加锁请求对第一分支事务涉及的数据执行加锁操作,向第二事务协调器发送加锁成功的消息;
第一事务协调器接收第一锁服务器发送的加锁成功的消息。
第二方面,本申请实施例提供一种分布式系统,该分布式系统包括部署于第一区域的客户端、第一数据库服务器和第一事务协调器,以及部署于第二区域的第二数据库服务器和第二事务协调器,其中,第一数据库服务器用于运行第一服务,第二数据库服务器用于运行第二服务,其中,
客户端用于向第一事务协调器发起分布式事务请求;
根据第一事务协调器返回的分布式事务响应,调用第一数据库服务器执行第一分支事务,其中,第一分支事务为与第一服务相关的数据库事务;
第一数据库服务器用于在通过第一事务协调器完成第一分支事务后,第一数据库服务器调用第二数据库服务器执行第二分支事务,第二分支事务为与第二服务相关的数据库事务;
第二数据库服务器用于通过第二事务协调器执行第二分支事务,其中,执行第二分支事务包括通过第二事务协调器对第二分支事务涉及的数据进行加锁操作。
在一种具体的实现方式中,第二数据库服务器用于通过第二事务协调器执行第二分支事务之前,
第二数据库服务器还用于确定与第一事务协调器位于不同的区域,且第二数据库服务器确定与第二事务协调器位于相同的区域。
在一种具体的实现方式中,分布式系统还包括部署于第二区域的第二锁服务器,
第二数据库服务器通过第二事务协调器执行第二分支事务,包括:
第二数据库服务器,还用于向第二事务协调器发送第二分支事务的开始请求,第二分支事务的开始请求包括第二分支事务涉及的数据在第二数据库中的位置信息;
第二事务协调器,还用于向第二锁服务器发送第二加锁请求,第二加锁请求包括第二分支事务涉及的数据在第二数据库中的位置信息;
第二锁服务器,用于根据第二加锁请求对第二分支事务涉及的数据执行加锁操作,向第二事务协调器发送加锁结果;
第二事务协调器,还用于将加锁结果反馈给第二数据库服务器;
第二数据库服务器,还用于根据加锁结果执行第二分支事务,并将第二分支事务的执行结果反馈给客户端。
在一种具体的实现方式中,客户端还用于根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果;
在一种具体的实现方式中,客户端,还用于根据分布式事务的执行结果向第一事务协调器发送全局操作请求,其中,在分布式事务的执行结果为执行成功时,全局操作请求为全局事务提交请求,在分布式事务的执行结果为执行失败时,全局操作请求为全局事务回滚请求;
第一事务协调器,还用于根据全局操作请求,向第二事务协调器发送全局事务的二阶段操作请求,二阶段操作请求为二阶段提交请求或二阶段回滚请求,其中,在全局操作请求为全局事务提交请求时,二阶段操作请求为二阶段提交请求,在全局操作请求为全局事务回滚请求时,二阶段操作请求为二阶段回滚请求;
第二事务协调器,还用于调度第二数据库服务器执行二阶段操作请求。
在一种具体的实现方式中,第二数据库服务器还用于根据加锁结果执行第二分支事务,并将第二分支事务的执行结果反馈给客户端,具体包括:
在加锁结果为加锁成功且第二数据库服务器成功完成第二分支事务时,第二数据库服务器将第二分支事务执行成功的执行结果反馈给客户端;或者,在加锁结果为加锁失败或者第二数据库服务器没有完成第二分支事务时,第二数据库服务器将第二分支事务执行失败的执行结果反馈给客户端。
在一种具体的实现方式中,客户端还用于根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果,具体包括:客户端在第二分支事务的执行结果为执行成功且分布式事务包括的其他分支事务的执行结果均为执行成功时,确定分布式事务的执行结果为执行成功;或者,在第二分支事务的执行结果为执行失败时,确定分布式事务的执行结果为执行失败。
在一种具体的实现方式中,在第二锁服务器对第二分支事务涉及的数据加锁成功时,第二事务协调器还用于调度第二数据库服务器执行二阶段操作请求之前,第二事务协调器,还用于向第二锁服务器发送放锁请求;第二锁服务器,还用于释放对第二分支事务涉及的数据执行加锁操作时所加的锁,向第二事务协调器发送放锁成功的消息。
在一种具体的实现方式中,第一数据库服务器调用第二数据库服务器执行第二分支事务之前,还包括:
第一数据库服务器,还用于向第一事务协调器发送第一分支事务的开始请求;
第一事务协调器,还用于根据第一分支事务的开始请求,创建第一分支事务标识,并将第一分支事务标识发送给第一数据库服务器;
第一数据库服务器,还用于接收到第一分支事务标识后,成功执行第一分支事务。
在一种具体的实现方式中,分布式系统还包括第一锁服务器,
第一事务协调器用于创建第一分支事务标识之前,还包括:
第一事务协调器,还用于接收第一数据库服务器发送的第一分支事务的开始请求,第一分支事务开始请求包括第一分支事务涉及的数据在第一数据库中的位置信息;
向第一锁服务器发送第一加锁请求,第一加锁请求包括第一分支事务涉及的数据在第一数据库中的位置信息;
第一锁服务器,用于根据第一加锁请求对第一分支事务涉及的数据执行加锁操作,向第二事务协调器发送加锁成功的消息;
第一事务协调器,还用于接收第一锁服务器发送的加锁成功的消息。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的分布式系统示意图;
图2是本申请实施例提供的一种分布式事务实现方法的交互示意图;
图3是本申请实施例提供的另一种分布式事务实现方法的交互示意图;
图4是本申请实施例提供的另一种分布式事务实现方法的交互示意图;
图5是本申请实施例提供的一种第二事务协调设备的结构示意图。
具体实施方式
下面结合附图对本申请实施例提供的分布式事务实现方法和分布式系统进行介绍。事务是指访问或更新数据库中的数据的一种操作任务,传统的集中式应用中,事务仅限于对单一数据库资源进行访问,这种事务称为本地事务。在基于微服务的分布式应用中,一个业务通常需要调用多个微服务,多个微服务调用通常对应多个数据库本地事务。当一个业务需要调用多个微服务实现多个数据库本地事务时,需要分布式事务保证这多个数据库本地事务的数据一致性。
分布式事务是指需要操作多个独立的数据库共同完成一个业务的事务。一个分布式事务可以包括多个分支事务,分布式事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚,通常,每个分支事务本身就是一个关系型数据库的本地事务。示例性的,用户通过终端发起一项转账业务,以实现A银行账户a向B银行的账户b转账100元。该业务需要分别对A银行的数据库与B银行的数据库中的数据进行操作,该业务需要调用第一服务完成从A银行的数据库的账户a中扣除100元的操作,调用第二服务完成向B银行的数据库的账户b中增加100元的操作。其中,调用第一服务需要进行的数据库操作是一个分支事务,调用第二服务需要进行的数据库操作是另一个分支事务。由于分布式事务通常是跨多个区域、或者跨多个数据库的全局事务,因此,本申请中分布式事务也称为全局事务,在本申请实施例的描述中,全局事务即表示一项分布式事务。
本申请实施例提供的分布式系统包括多个区域(region),每个区域包括一个或多个部署有客户端(client)的用户终端、一个或多个事务协调器(transactioncoordinator,TC)、一个或多个用于提供服务(例如微服务)的数据库服务器、一个或多个锁服务器以及一个或多个数据库。如图1所示,图1是一种分布式系统示意图,图1中分布式系统包括区域1和区域2,区域1包括用户终端A、第一数据库服务器、第一事务协调器、第一锁服务器和数据库A,用户终端A部署有客户端A,第一数据库服务器中部署有第一服务;区域2包括用户终端B、第二数据库服务器、第二事务协调器、第二锁服务器和数据库B,用户终端B部署有客户端B,第二数据库服务器中部署有第二服务。如果以区域1的客户端A向第一事务协调器发起分布式事务,该分布式事务包括第一分支事务和第二分支事务为例,在相关技术的实现方式中,该分布式事务的执行过程(以分布式事务成功提交为例)包括:
(1)客户端A向第一事务协调器发起分布式事务请求,第一事务协调器创建全局事务标识(identity,ID),并将全局事务ID返回给客户端A,其中,全局事务ID用于唯一的标识一个分布式事务,客户端中嵌有事务管理器(transaction manager,TM),TM负责发起分布式事务请求以开启一个分布式事务,并向事务协调器发起全局提交或全局回滚的指令,事务协调器用于维护分布式事务的运行状态,接收事务管理器的指令发起分布式事务的提交与回滚,负责与资源管理器通信以协调各分支事务的提交或回滚;
(2)客户端A调用位于区域1中部署于第一数据库服务器的第一服务,第一服务向第一事务协调器注册第一分支事务,其中,数据库服务器中嵌有资源管理器(resourcemanager,RM),用于负责分支注册、状态汇报,并接收事务协调器的指令,对数据库进行操作,驱动分支(本地)事务的提交和回滚;
(3)第一事务协调器确定第一分支事务的加锁数据属于第一锁服务器,向第一锁服务器发起加锁请求,第一锁服务器加锁成功之后,向第一事务协调器返回加锁成功的消息,其中,通过对第一分支事务涉及的数据进行加锁,以防止其他并发事务对该数据进行操作而产生冲突或错误;
(4)第一事务协调器创建第一分支事务ID并发送给第一服务的第一RM,第一RM接收到第一分支事务ID,对数据库A中第一分支事务需要操作的数据执行对应的操作之后,提交本地事务(即第一分支事务),并向第一事务协调器返回第一分支事务执行成功的消息;
(5)第一服务调用位于区域2的第二数据库服务器中的第二服务,第二服务的第二RM向第一事务协调器注册第二分支事务;
(6)第一事务协调器确定第二分支事务的加锁数据属于区域2的第二锁服务器,向第二锁服务器发起加锁请求,第二锁服务器加锁成功之后,向第一事务协调器返回加锁成功的消息;
(7)第一事务协调器创建第二分支事务ID并发送给第二服务的第二RM,第二RM接收到第二分支事务ID,对数据库B中第二分支事务需要操作的数据执行对应的操作之后,提交本地事务(即第二分支事务),并向第一事务协调器返回第二分支事务执行成功的消息;
(8)第二服务完成第二分支事务之后,向第一服务返回第二服务完成的消息,第一服务向客户端A返回第一服务和第二服务完成的消息,客户端确定调用完成之后,向事务协调器发起分布式事务提交请求;
(9)第一事务协调器接收到分布式事务提交请求之后,分别向第一锁服务器和第二锁服务器发送放锁请求,第一锁服务器和第二锁服务器向第一事务协调器发送放锁成功的消息;
(10)第一事务协调器接收到放锁成功的消息之后,分别向第一RM和第二RM发送二阶段提交请求,第一RM和第二RM完成二阶段提交之后,分别向事务协调器发送提交成功的消息。
上述分布式事务的执行过程中,区域1的设备与区域2的设备之间会涉及多次调用,包括:步骤(5)中第一服务调用第二服务,步骤(5)第二服务向第一事务协调器注册第二分支事务,步骤(6)中第一事务协调器向第二服务器发起加锁请求、步骤(7)中第二服务向第一事务协调器返回第二分支事务执行成功的消息、步骤(9)中第一事务协调器向第二锁服务器发送放锁请求以及步骤(10)第一事务协调器调用第二服务进行二阶段提交等,即一次分布式事务至少包括上述6次跨区域的调用。一个需要跨区域完成的分布式事务需要产生多次跨区调用,这样会增加网络时延,增加完成事务的时间,影响分布式事务的处理的效率。
基于上述问题,本申请实施例提供一种分布式事务实现方法,用以减少分布式事务实现过程中的跨区调用,提高分布式事务的处理效率。该方法应用于上述分布式系统,以图1所示的分布式系统实现包括第一分支事务与第二分支事务的分布式事务为例,介绍本申请实施例提供的分布式事务实现方法。如图2所示,图2是本申请实施例提供的一种实现分布式事务的交互示意图。该方法包括以下S201至S214。
S201.客户端A向第一事务协调器发送分布式事务请求。
用户通过区域1的用户终端A中的客户端A发起一个分布式事务,客户端A向区域1的第一事务协调器发送分布式事务请求,该分布式事务包括第一分支事务与第二分支事务。
S202.第一事务协调器接收到分布式事务请求后,向客户端A返回分布式事务响应。
第一事务协调器接收到分布式事务请求之后,创建全局事务ID并记录该全局事务ID,然后将包括该全局事务ID的分布式事务响应返回给用户终端A的客户端A。
S203.客户端A接收到分布式事务响应后,调用第一数据库服务器执行第一分支事务。
本申请实施例中,客户端A发起的分布式事务需要调用第一服务完成第一分支事务与第二服务完成第二分支事务,其中,第一分支事务是与第一服务相关的数据库事务,第一服务部署于区域1的第一数据库服务器;第二分支事务是与第二服务相关的数据库事务,第二服务部署于区域2的第二数据库服务器;第一分支事务需要操作的数据位于数据库A,第二分支事务需要操作的数据位于数据库B。
S204.第一数据库服务器向第一事务协调器发送第一分支开始请求。
第一数据库服务器在执行第一分支事务时,需要通过第一事务协调器执行第一分支事务,包括第一事务协调器对第一分支事务进行注册以及通过第一分支事务完成对第一分支事务涉及的数据的加锁操作,向第一事务协调器发送第一分支开始请求。
S205.第一事务协调器向第一锁服务器发送第一加锁请求。
其中,第一加锁请求指示对第一分支事务涉及的数据进行加锁操作。
S206.第一锁服务器实现对第一分支事务涉及的数据的加锁操作,向第一事务协调器返回加锁成功的消息。
S207.第一事务协调器向第一数据库服务器返回针对第一分支开始请求的响应消息,第一数据库服务器接收到响应消息后,成功执行第一分支事务。
S208.第一数据库服务器调用第二数据库服务器执行第二分支事务。
S209.第二数据库服务器向第二事务协调器发送第二分支开始请求。
第二数据库服务器在确定与第一事务协调器位于不同的区域,且第二数据库服务器确定与第二事务协调器位于相同的区域时,第二数据库服务器向第二事务协调器发送第二分支开始请求,第二数据库服务器在执行第二分支事务时,需要通过第二事务协调器执行第二分支事务,包括第二事务协调器对第二分支事务进行注册以及通过第二分支事务完成对第二分支事务涉及的数据的加锁操作。第二分支开始请求包括第二分支事务涉及的数据在第二数据库中的位置信息。
S210.第二事务协调器向第二锁服务器发送第二加锁请求。
其中,第二加锁请求指示对第二分支事务涉及的数据进行加锁操作,第二加锁请求包括第二分支事务涉及的数据在第二数据库中的位置信息。
S211.第二锁服务器根据第二加锁请求实现对第二分支事务涉及的数据的加锁操作,向第二事务协调器返回加锁结果。
其中,加锁结果包括加锁成功和加锁失败。
S212.第二事务协调器将加锁结果反馈给第二数据库服务器。
S213.第二数据库服务器根据加锁结果执行所述二分支事务,并将第二分支事务的执行结果反馈给所述客户端。
其中,当加锁结果为加锁失败时,第二数据库服务器不能操作第二分支事务涉及的数据,第二分支事务的执行结果为执行失败;当加锁结果为加锁成功时,第二数据库服务器能操作第二分支事务涉及的数据,如果第二数据库服务器能够成功执行本地提交,则第二分支事务的执行结果为执行成功;如果第二数据库服务器不能成功执行本地提交,则第二分支事务的执行结果为执行失败。
在一种可能实现方式中,第二数据库服务器将第二分支事务的执行结果发送给第一数据库服务器,第一数据库服务器
S214.客户端根据第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果。
客户端在第二分支事务的执行结果为执行成功且分布式事务包括的其他分支事务的执行结果均为执行成功时,确定分布式事务的执行结果为执行成功;在第二分支事务的执行结果为执行失败时,确定分布式事务的执行结果为执行失败。
下面结合图3和图4,对本申请实施例中的分布式事务实现方法进行详细介绍,如图3所示,图3是本申请实施例提供的另一种实现分布式事务的交互示意图。该方法包括S1至S30。
S1.客户端A向第一事务协调器发送分布式事务请求。
用户通过区域1的用户终端A中的客户端A发起一个分布式事务,客户端A的第一TM向区域1的第一事务协调器发送分布式事务请求。该分布式事务包括第一分支事务与第二分支事务,需要调用第一服务完成第一分支事务与第二服务完成第二分支事务,其中,第一服务部署于区域1的第一数据库服务器,第二服务部署于区域2的第二数据库服务器,第一分支事务需要操作的数据位于数据库A,第二分支事务需要操作的数据位于数据库B。
S2.第一事务协调器根据分布式事务请求创建全局事务ID,并发送给客户端A。
第一事务协调器接收到分布式事务请求之后,创建全局事务ID并记录该全局事务ID,然后将该全局事务ID返回给用户终端A的客户端A,其中,全局事务ID用于唯一的标识一个分布式事务。
S3.客户端A根据全局事务ID构建该分布式事务对应的事务上下文并发送给第一RM。
客户端A获取到全局事务ID后构建分布式事务对应的事务上下文,并调用第一数据库服务器中部署的第一服务,将事务上下文发送给第一数据库服务器。其中,事务上下文是在资源上的事务性操作和调用操作的构件之间的一个关联(association)。在一个事务执行期间,所有的参与事务的线程共享事务上下文。事务上下文在逻辑上封装了在一个事务期间在事务性资源上的完成的所有操作。事务上下文包括全局事务ID与第一事务协调器的地址信息,其中,全局事务ID指示第一数据库服务器当前执行的分支事务所属于的分布式事务,地址信息用于指示第一数据库服务器在执行全局事务ID对应的事务时,与第一事务协调器进行交互。
S4.第一RM根据事务上下文构建第一镜像数据与第一加锁信息,向第一事务协调器发送第一分支开始请求与第一加锁信息。
其中,第一镜像数据包括第一前镜像记录与第二后镜像记录,第一服务的第一RM获取到事务上下文后,第一RM对第一服务执行的结构化查询语言(structured querylanguage,SQL)进行解析,根据客户端或者调用第一服务的输入参数构建第一事务分支对应的第一前镜像记录,然后执行SQL,根据执行结果构建第一后镜像记录,并构建事务第一加锁信息。其中,输入参数包括第一分支事务需要操作的数据的信息,例如分布式事务为账户a向账户b的转账操作,第一分支事务是将账户a中的余额扣减100元,则第一服务为转账服务,输入参数包括账户a的ID、账户b的ID以及转出的金额等;第一前镜像记录中记录有执行SQL前第一分支事务操作的第一目标数据,例如账户a在转账前的金额;第一后镜像记录中记录有执行SQL语句对第一目标数据进行修改之后得到的第二目标数据,例如账户a在转账前的金额;第一加锁信息包括第一目标数据所在的数据库的名称、第一目标数据所在的表的名称以及第一目标数据所在的行的主键。
第一RM构建加锁信息之后,根据第一事务协调器的地址信息确定第一事务协调器与第一数据库服务器位于相同的区域,向第一事务协调器发送第一分支开始请求,该第一分支开始请求包括全局事务ID和第一加锁信息,其中,全局事务ID用于第一事务协调器将第一分支事务与分布式事务进行关联,第一加锁信息指示第一分支事务需要加锁的数据。
S5.第一事务协调器接收到第一加锁信息之后,向第一锁服务器发送第一加锁请求。
第一事务协调器接收到第一加锁信息后,确定第一加锁信息中指示加锁的数据属于第一锁服务器管理,第一事务协调器向第一锁服务器发送第一加锁请求,该第一加锁请求包括第一加锁信息,用于指示对第一加锁信息中第一目标数据所在的数据行进行加锁。
S6.第一锁服务器根据第一加锁请求执行加锁操作,并返回加锁成功的信息给第一事务协调器。
S7.第一事务协调器创建第一分支事务ID,并将第一分支事务ID发送给第一RM。
第一事务协调器接收到加锁成功的信息后,创建第一分支事务对应的第一分支事务ID,将全局事务ID与第一分支事务ID进行关联,并将第一分支事务ID发送给第一数据库服务器,第一分支事务ID用于唯一的标识第一分支事务。
S8.第一RM执行第一分支事务的本地提交。
第一服务的第一RM在接收到上述第一分支事务ID后,进行本地提交,即执行第一分支事务的提交。
S9.第一RM向第一事务协调器发送第一分支事务提交成功的消息。
其中,第一分支事务提交成功的消息包括第一分支事务的第一分支事务ID。
S10.第一事务协调器记录第一分支事务提交成功,并返回确认消息通知第一RM其收到第一分支事务提交成功的消息。
S11.第一服务调用第二服务,第一RM将上述事务上下文发送给第二服务的第二RM。
第一服务调用第二服务,第一数据库服务器通过第一RM将事务上下文发送给第二数据库服务器。
S12.第二RM根据事务上下文构建第二镜像数据与第二加锁信息,向第二事务协调器发送第二分支开始请求与第二加锁信息。
其中,第二镜像数据包括第二前镜像记录与第二后镜像记录,第二服务的第二RM获取到事务上下文后,第二RM对第二服务执行的结构化查询语言进行解析,根据第一服务的输入参数构建第二事务分支对应的第二前镜像记录,然后执行SQL,根据执行结果构建第二后镜像记录,并构建事务第二加锁信息。其中,第一服务的输入参数包括第二分支事务需要操作的数据的信息,例如上述账户a向账户b的转账操作,第二分支事务是将账户b中的余额增加100元,则第二服务为入账服务,第一服务的输入参数包括账户b的ID与转入的金额等;第二前镜像记录记录有执行SQL前第二分支事务操作的第三目标数据,例如转账之前账户b中的金额;第二后镜像记录记录有执行SQL语句对第三目标数据进行修改之后得到的第四目标数据,例如转账之后账户b中的金额;第二加锁信息包括第三目标数据所在的数据库的名称、第三目标数据所在的表的名称以及第三目标数据所在的行的主键。
第二RM构建第二加锁信息之后,根据第一事务协调器的地址信息确定第一事务协调器与第二数据库服务器位于不同的区域,第二RM根据配置信息确定第二事务协调器是第一事务协调器在区域2中关联的事务协调器,第二RM向第二事务协调器发送第二分支开始请求,该第二分支开始请求包括全局事务ID和第二加锁信息,其中,全局事务ID用于第二事务协调器将第二分支事务与分布式事务进行关联,第二加锁信息指示第二分支事务需要加锁的数据。
S13.第二事务协调器接收到第二加锁信息之后,向第二锁服务器发送第二加锁请求。
第二事务协调器接收到第二加锁信息后,确定第二加锁信息中指示加锁的数据属于第二锁服务器管理,第二事务协调器向第二锁服务器发送第二加锁请求,该第二加锁请求包括第二加锁信息,用于指示对第二加锁信息中第三目标数据所在的数据行进行加锁。
应理解,分布式事务的执行结果包括全局事务提交与全局事务回滚,客户端A需要根据分布式事务所包括的所有分支事务的执行结果确定分布式事务最终是执行全局事务提交还是执行全局事务回滚。在分布式事务所包括的所有分支事务的执行结果均是执行成功(本地提交成功)的情况下,客户端A确定执行全局事务提交;在分布式事务所包括的任一分支事务的执行结果是执行失败的情况下,客户端A确定执行全局事务回滚。上述S1至S12中,第一分支事务执行结果为执行成功,下面以第一服务调用第二服务执行第二分支事务为例,分别介绍第二分支事务执行成功和第二分支事务执行失败两种情况下,分布式事务实现方法的执行过程。
下面首先以第二分支事务执行成功为前提,介绍分布式事务实现方法。第二RM向第二事务协调器发送第二分支事务的开始请求与第二加锁信息后,上述分布式事务实现方法还包括以下S14至S30。
S14.第二锁服务器根据第二加锁请求执行加锁操作,并返回加锁成功的信息给第二事务协调器。
S15.第二事务协调器创建第二分支事务ID,并将第二分支事务ID发送给第二RM。
第二事务协调器接收到加锁成功的信息后,创建第二分支事务对应的第二分支事务ID,将全局事务ID与第二分支事务ID进行关联,并将第二分支事务ID发送给第二RM。
S16.第二RM执行第二分支事务的本地提交。
第二服务的第二RM在接收到上述第二分支事务ID后,提交本地事务,即执行第二分支事务的提交。
S17.第二RM向第二事务协调器发送第二分支事务提交成功的消息。
其中,第二分支事务提交成功的消息包括第二分支事务的第二分支事务ID。
S18.第二事务协调器记录第二分支事务提交成功,并返回确认消息通知第二RM其收到第二分支事务提交成功的消息。
S19.第二RM接收到第二事务协调器发送的确认消息之后,向第一RM返回调用成功的消息。
S20.第一RM接收到第二RM发送的调用成功的消息后,向客户端A返回调用成功的消息。
S21.客户端A向第一事务协调器发送全局提交请求。
其中,全局提交请求包括上述全局事务ID,客户端A在接收到第一RM发送的调用成功的消息后,确定分布式事务的所有分支事务执行成功,客户端A确定分布式事务执行成功,向第一事务协调器发送全局提交请求,全局提交请求指示执行分支事务的数据库服务器执行二阶段提交操作。
S22.第一事务协调器向第一锁服务器发送第一放锁请求。
第一事务协调器接收到全局提交请求后,根据全局事务ID关联的第一分支事务ID,确定需要对第一分支事务所加的锁执行放锁操作,第一事务协调器向第一锁服务器发送第一放锁请求。其中,第一放锁请求包括上述第一加锁信息,以指示第一锁服务器需要放锁的数据。
S23.第一锁服务器执行放锁操作,将放锁成功的消息发送给第一事务协调器。
第一锁服务器接收到第一放锁请求后,释放为第一分支事务所加的锁,放锁成功后将放锁成功的消息发送给第一事务协调器。
S24.第一事务协调器向第二事务协调器发送分布式事务的二阶段提交请求。
其中,二阶段提交请求包括全局事务ID和第二分支事务ID,用于指示需要提交的分支事务。
S25.第二事务协调器向第二锁服务器发送第二放锁请求。
其中,上述第二放锁请求包括上述第二加锁信息,以指示第二锁服务器需要放锁的数据。
S26.第二锁服务器执行放锁操作,将放锁成功的消息发送给第二事务协调器。
第二锁服务器接收到第二放锁请求后,释放为第二分支事务所加的锁,第二锁服务器放锁成功后将放锁成功的消息发送给第二事务协调器。
S27.第二事务协调器向第一事务协调器返回二阶段提交完成的消息。
S28.第一事务协调器向客户端A返回分布式事务完成的消息。
需要说明的是,第一锁服务器和第二锁服务器放锁成功,第一事务协调器向客户端A返回分布式事务完成的消息后,对于客户端A,分布式事务已经完成。
S29.第一事务协调器向第一RM发起第一分支事务的二阶段提交请求,第一RM接收到请求之后,清除为第一分支事务创建的第一镜像数据,并向第一事务协调器返回二阶段提交完成的消息。
S30.第二事务协调器向第二RM发起第二分支事务的二阶段提交请求,第二RM接收到请求之后,清除为第二分支事务创建的第二镜像数据,并向第二事务协调器返回二阶段提交完成的消息。
上述是以分布式事务最终能够成功提交为例,介绍了本申请实施例提供的分布式事务实现方法。应理解的是,如果分布式事务包括的任意分支事务出现异常,例如第二锁服务器加锁失败、第二RM本地提交失败等,分布式事务会执行全局事务回滚操作。如图4所示,图4是本申请实施例提供的另一种实现分布式事务的交互示意图。以第二锁服务器加锁失败为例,该分布式事务实现方法的执行过程中,在上述S14之前的过程如上述S1至S13中所述,在第二事务协调器接收到第二加锁信息之后,向第二锁服务器发送第二加锁请求之后,该分布式事务的执行过程还包括S14至S24。
S14’.第二锁服务器根据第二加锁请求执行加锁操作,并返回加锁失败的信息给第二事务协调器。
第二锁服务器在接收到第二加锁请求之后,查询到已存在第三目标数据所在的行的加锁信息,即有其他分支事务在对改行数据进行操作,则第二锁服务器加锁失败,将加锁失败的消息发送给第二事务协调器。
S15’.第二事务协调器向第二RM返回加锁失败的消息。
S16’.第二RM接收到第二事务协调器发送的加锁失败的消息之后,向第一RM返回调用失败的消息。
S17’.第一RM接收到第二RM发送的调用失败的消息后,向客户端A返回调用失败的消息。
S18’.客户端A向第一事务协调器发送全局回滚请求。
其中,全局回滚请求包括上述全局事务ID,用于指示第一事务协调器需要执行回滚操作的数据。客户端A在接收到第一RM发送的调用失败的消息后,客户端A确定分布式事务执行失败,向第一事务协调器发送全局回滚请求,全局回滚请求指示执行分支事务的数据库服务器执行二阶段回滚操作。
S19’.第一事务协调器向第一锁服务器发送第一放锁请求。
其中,所述第一放锁请求包括所述第一加锁信息,以指示第一锁服务器需要放锁的数据。
S20’.第一锁服务器执行放锁操作,将放锁成功的消息发送给第一事务协调器。
第一锁服务器接收到第一放锁请求后,释放为第一分支事务所加的锁,放锁成功后将放锁成功的消息发送给第一事务协调器。
S21’.第一事务协调器向客户端A返回分布式事务完成的消息。
S22’.第一事务协调器向第二事务协调器发送二阶段回滚请求。
S23’.第一事务协调器向第一RM发起第一分支事务的二阶段回滚请求,第一RM接收到请求之后,执行回滚操作,根据镜像数据将第二目标数据还原为第一目标数据,然后清除为第一分支事务创建的第一镜像数据。
S24’.第二事务协调器向第二RM发起第二分支事务的二阶段回滚请求,第二RM接收到请求之后,清除为第二分支事务创建的第二镜像数据。
通过上述对本申请实施例提供的分布式事务实现方法的描述以及图3和图4能够看出,当数据库服务器执行对应的分支事务,需要进行分支事务注册、对分支事务操作的数据进行加锁操作或者放锁操作时,数据库服务器能够通过部署于同一区域的事务协调器实现分支事务的注册以及对数据的加锁或放锁等操作,而不需要通过发起分布式事务的客户端所在的区域的事务协调器实现,能够减少分布式事务在执行过程中位于不同区域的设备之间的互相调用,以上述分布式事务执行结果为执行成功为例,一次分布式事务仅涉及S11中第一服务调用第二服务以及S241中第一事务协调器向第二事务协调器发送分布式事务的二阶段提交请求这两次跨区域的调用。因此执行本申请实施例提供的分布式事务实现方法,能够减少分布式事务执行过程中的网络时延,提升分布式事务处理效率,降低一个分布式事务的事务锁的持有时间,能够降低高并发场景下出现数据冲突的概率。
需要说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。
本领域的技术人员根据以上描述的内容,能够想到的其他合理的步骤组合,也属于本发明的保护范围内。其次,本领域技术人员也应该熟悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必须的。
上文中结合图1至图4详细介绍了本申请实施例所提供的分布式系统以及分布式事务实现方法,下面介绍本申请实施例所提供的计算设备。
参见图5,图5是本申请实施例提供的一种第二事务协调设备500的示意图,第二事务协调设备500包括:一个或者多个处理器510、通信接口520以及存储器530,处理器510、通信接口520以及存储器530通过总线540相互连接。其中,上述第二事务协调器可以是运行在第二事务协调设备500中的软件模块,或者第二事务协调器即为第二事务协调设备500,第二事务协调设备500能够用于实现上述图3或者图4中关于第二事务协调器所执行的操作,在此不再详细介绍。
本申请实施例中,处理器510可以有多种具体实现形式,例如处理器510可以是中央处理器(central processing unit,CPU)或图像处理器(graphics processing unit,GPU)等,处理器510还可以是单核处理器或多核处理器。处理器810可以由CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。处理器510也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digital signal processor,DSP)等。
通信接口520可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。例如,本申请实施例中通信接口520可用于执行上述图3中接收第二数据库服务器发送的第二加锁信息、向第二数据库服务器返回第二分支事务ID等操作。
存储器530可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器830也可以是易失性存储器,易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DRRAM)。
存储器530可用于存储程序代码和数据,以便于处理器510调用存储器530中存储的程序代码执行上述方法实施例中第二事务协调器的操作步骤。此外,第二事务协调设备500可能包含相比于图5展示的更多或者更少的组件,或者有不同的组件配置方式。
总线540可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线540可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
具体地,上述第二事务协调设备500执行各种操作的具体实现可参照上述方法实施例中第二事务协调器的具体操作,在此不再赘述。
本申请实施例还提供一种第一事务协调设备,该第一事务协调器设备的结构与上述第二事务协调器的结构相同。其中,上述第一事务协调器可以是运行在第一事务协调设备中的软件模块,或者第一事务协调器即为第一事务协调设备,第一事务协调设备能够用于实现上述图3或者图4中关于第一事务协调器所执行的操作,在此不再详细介绍。
本申请实施例还提供一种第一数据库服务器,该第一数据库服务器的结构与上述第二事务协调器500的结构相同。其中,第一数据库服务器能够用于实现上述图3或者图4中关于第一数据库服务器所执行的操作,在此不再详细介绍。
本申请实施例还提供一种第二数据库服务器,该第二数据库服务器的结构与上述第二事务协调器500的结构相同。其中,第二数据库服务器能够用于实现上述图3或者图4中关于第二数据库服务器所执行的操作,在此不再详细介绍。
本申请实施例还提供一种第一锁服务器,该第一锁服务器的结构与上述第二事务协调器500的结构相同。其中,第一锁服务器能够用于实现上述图3或者图4中关于第一锁服务器所执行的操作,在此不再详细介绍。
本申请实施例还提供一种第二锁服务器,该第二锁服务器的结构与上述第二事务协调器500的结构相同。其中,第二锁服务器能够用于实现上述图3或者图4中关于第二锁服务器所执行的操作,在此不再详细介绍。
本申请实施例还提供一种用户终端,该用户终端的结构与上述第二事务协调器500的结构相同。其中,用户终端能够用于实现上述图3或者图4中关于用户终端A所执行的操作,在此不再详细介绍。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质、或者半导体介质,半导体介质可以是固态硬盘。
以上所述,仅为本申请的具体实施方式。熟悉本技术领域的技术人员根据本申请提供的具体实施方式,可想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (20)
1.一种分布式事务实现方法,其特征在于,所述方法应用于分布式系统,所述分布式系统包括部署于第一区域的客户端、第一数据库服务器和第一事务协调器,还包括部署于第二区域的第二数据库服务器和第二事务协调器,其中,所述第一数据库服务器用于运行第一服务,所述第二数据库服务器用于运行第二服务,所述方法包括:
所述客户端向所述第一事务协调器发起分布式事务请求;
所述客户端根据所述第一事务协调器返回的分布式事务响应,调用所述第一数据库服务器执行第一分支事务,其中,所述第一分支事务为与所述第一服务相关的数据库事务;
所述第一数据库服务器在通过所述第一事务协调器完成所述第一分支事务后,所述第一数据库服务器调用所述第二数据库服务器执行第二分支事务,所述第二分支事务为与所述第二服务相关的数据库事务;
所述第二数据库服务器通过所述第二事务协调器执行所述第二分支事务,其中,所述执行所述第二分支事务包括通过所述第二事务协调器对所述第二分支事务涉及的数据进行加锁操作。
2.根据权利要求1所述的方法,其特征在于,所述第二数据库服务器通过所述第二事务协调器执行所述第二分支事务之前,还包括:
所述第二数据库服务器确定与所述第一事务协调器位于不同的区域,且所述第二数据库服务器确定与所述第二事务协调器位于相同的区域。
3.根据权利要求1或2所述的方法,其特征在于,所述分布式系统还包括部署于所述第二区域的第二锁服务器,
所述第二数据库服务器通过所述第二事务协调器执行所述第二分支事务,包括:
所述第二数据库服务器向所述第二事务协调器发送第二分支事务的开始请求,所述第二分支事务的开始请求包括所述第二分支事务涉及的数据在第二数据库中的位置信息;
所述第二事务协调器向所述第二锁服务器发送第二加锁请求,所述第二加锁请求包括所述第二分支事务涉及的数据在第二数据库中的位置信息;
所述第二锁服务器根据所述第二加锁请求对所述第二分支事务涉及的数据执行加锁操作,向所述第二事务协调器发送加锁结果;
所述第二事务协调器将所述加锁结果反馈给所述第二数据库服务器;
所述第二数据库服务器根据所述加锁结果执行所述第二分支事务,并将所述第二分支事务的执行结果反馈给所述客户端。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述客户端根据所述第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果。
5.根据权利要求4所述的方法,其特征在于,所述客户端根据所述第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果之后,还包括:
所述客户端根据所述分布式事务的执行结果向所述第一事务协调器发送全局操作请求,其中,在所述分布式事务的执行结果为执行成功时,所述全局操作请求为全局事务提交请求,在所述分布式事务的执行结果为执行失败时,所述全局操作请求为全局事务回滚请求;
所述第一事务协调器根据所述全局操作请求,向所述第二事务协调器发送所述全局事务的二阶段操作请求,所述二阶段操作请求为二阶段提交请求或二阶段回滚请求,其中,在所述全局操作请求为全局事务提交请求时,所述二阶段操作请求为二阶段提交请求,在所述全局操作请求为全局事务回滚请求时,所述二阶段操作请求为二阶段回滚请求;
所述第二事务协调器调度所述第二数据库服务器执行所述二阶段操作请求。
6.根据权利要求4所述的方法,其特征在于,所述第二数据库服务器根据所述加锁结果执行所述第二分支事务,并将所述第二分支事务的执行结果反馈给所述客户端,包括:
在所述加锁结果为加锁成功且所述第二数据库服务器成功完成所述第二分支事务时,所述第二数据库服务器将所述第二分支事务执行成功的执行结果反馈给所述客户端;
或者,
在所述加锁结果为加锁失败或者所述第二数据库服务器没有完成所述第二分支事务时,所述第二数据库服务器将所述第二分支事务执行失败的执行结果反馈给所述客户端。
7.根据权利要求6所述的方法,其特征在于,所述客户端根据所述第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果,包括:
所述客户端在所述第二分支事务的执行结果为执行成功且所述分布式事务包括的其他分支事务的执行结果均为执行成功时,确定所述分布式事务的执行结果为执行成功;或者,在所述第二分支事务的执行结果为执行失败时,确定所述分布式事务的执行结果为执行失败。
8.根据权利要求5所述的方法,其特征在于,在所述第二锁服务器对所述第二分支事务涉及的数据加锁成功时,
所述第二事务协调器调度所述第二数据库服务器执行所述二阶段操作请求之前,还包括:
所述第二事务协调器向所述第二锁服务器发送放锁请求;
所述第二锁服务器释放对所述第二分支事务涉及的数据执行加锁操作时所加的锁,向所述第二事务协调器发送放锁成功的消息。
9.根据权利要求1至7任一项所述的方法,其特征在于,所述第一数据库服务器调用所述第二数据库服务器执行所述第二分支事务之前,还包括:
所述第一数据库服务器向所述第一事务协调器发送第一分支事务的开始请求;
所述第一事务协调器根据所述第一分支事务的开始请求,创建第一分支事务标识,并将所述第一分支事务标识发送给所述第一数据库服务器;
所述第一数据库服务器接收到所述第一分支事务标识后,成功执行所述第一分支事务。
10.根据权利要求8所述的方法,其特征在于,所述分布式系统还包括第一锁服务器,
所述第一事务协调器创建所述第一分支事务标识之前,还包括:
所述第一事务协调器接收所述第一数据库服务器发送的所述第一分支事务的开始请求,所述第一分支事务开始请求包括所述第一分支事务涉及的数据在第一数据库中的位置信息;
所述第一事务协调器向所述第一锁服务器发送第一加锁请求,所述第一加锁请求包括所述第一分支事务涉及的数据在第一数据库中的位置信息;
所述第一锁服务器根据所述第一加锁请求对所述第一分支事务涉及的数据执行加锁操作,向所述第二事务协调器发送加锁成功的消息;
所述第一事务协调器接收所述第一锁服务器发送的加锁成功的消息。
11.一种分布式系统,其特征在于,所述分布式系统包括部署于第一区域的客户端、第一数据库服务器和第一事务协调器,还包括部署于第二区域的第二数据库服务器和第二事务协调器,其中,所述第一数据库服务器用于运行第一服务,所述第二数据库服务器用于运行第二服务,
所述客户端,用于向所述第一事务协调器发起分布式事务请求,根据所述第一事务协调器返回的分布式事务响应,调用所述第一数据库服务器执行第一分支事务,其中,所述第一分支事务为与所述第一服务相关的数据库事务;
所述第一数据库服务器,用于在通过所述第一事务协调器完成所述第一分支事务后,调用所述第二数据库服务器执行第二分支事务,所述第二分支事务为与所述第二服务相关的数据库事务;
所述第二数据库服务器,用于通过所述第二事务协调器执行所述第二分支事务,其中,所述执行所述第二分支事务包括通过所述第二事务协调器对所述第二分支事务涉及的数据进行加锁操作。
12.根据权利要求11所述的系统,其特征在于,所述第二数据库服务器用于通过所述第二事务协调器执行所述第二分支事务之前,
所述第二数据库服务器还用于确定与所述第一事务协调器位于不同的区域,且所述第二数据库服务器确定与所述第二事务协调器位于相同的区域。
13.根据权利要求11或12所述的系统,其特征在于,所述分布式系统还包括部署于所述第二区域的第二锁服务器,
所述第二数据库服务器通过所述第二事务协调器执行所述第二分支事务,包括:
所述第二数据库服务器,还用于向所述第二事务协调器发送第二分支事务的开始请求,所述第二分支事务的开始请求包括所述第二分支事务涉及的数据在第二数据库中的位置信息;
所述第二事务协调器,还用于向所述第二锁服务器发送第二加锁请求,所述第二加锁请求包括所述第二分支事务涉及的数据在第二数据库中的位置信息;
所述第二锁服务器,用于根据所述第二加锁请求对所述第二分支事务涉及的数据执行加锁操作,向所述第二事务协调器发送加锁结果;
所述第二事务协调器,还用于将所述加锁结果反馈给所述第二数据库服务器;
所述第二数据库服务器,还用于根据所述加锁结果执行所述第二分支事务,并将所述第二分支事务的执行结果反馈给所述客户端。
14.根据权利要求13所述的系统,其特征在于,
所述客户端还用于根据所述第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果。
15.根据权利要求14所述的系统,其特征在于,
所述客户端,还用于根据所述分布式事务的执行结果向所述第一事务协调器发送全局操作请求,其中,在所述分布式事务的执行结果为执行成功时,所述全局操作请求为全局事务提交请求,在所述分布式事务的执行结果为执行失败时,所述全局操作请求为全局事务回滚请求;
所述第一事务协调器,还用于根据所述全局操作请求,向所述第二事务协调器发送所述全局事务的二阶段操作请求,所述二阶段操作请求为二阶段提交请求或二阶段回滚请求,其中,在所述全局操作请求为全局事务提交请求时,所述二阶段操作请求为二阶段提交请求,在所述全局操作请求为全局事务回滚请求时,所述二阶段操作请求为二阶段回滚请求;
所述第二事务协调器,还用于调度所述第二数据库服务器执行所述二阶段操作请求。
16.根据权利要求14所述的系统,其特征在于,所述第二数据库服务器还用于根据所述加锁结果执行所述第二分支事务,并将所述第二分支事务的执行结果反馈给所述客户端,具体包括:
在所述加锁结果为加锁成功且所述第二数据库服务器成功完成所述第二分支事务时,所述第二数据库服务器将所述第二分支事务执行成功的执行结果反馈给所述客户端;
或者,
在所述加锁结果为加锁失败或者所述第二数据库服务器没有完成所述第二分支事务时,所述第二数据库服务器将所述第二分支事务执行失败的执行结果反馈给所述客户端。
17.根据权利要求16所述的系统,其特征在于,所述客户端还用于根据所述第二数据库服务器反馈的第二分支事务的执行结果,确定分布式事务的执行结果,具体包括:
所述客户端在所述第二分支事务的执行结果为执行成功且所述分布式事务包括的其他分支事务的执行结果均为执行成功时,确定所述分布式事务的执行结果为执行成功;或者,在所述第二分支事务的执行结果为执行失败时,确定所述分布式事务的执行结果为执行失败。
18.根据权利要求15所述的系统,其特征在于,在所述第二锁服务器对所述第二分支事务涉及的数据加锁成功时,
所述第二事务协调器还用于调度所述第二数据库服务器执行所述二阶段操作请求之前,
所述第二事务协调器,还用于向所述第二锁服务器发送放锁请求;
所述第二锁服务器,还用于释放对所述第二分支事务涉及的数据执行加锁操作时所加的锁,向所述第二事务协调器发送放锁成功的消息。
19.根据权利要求11至17任一项所述的系统,其特征在于,所述第一数据库服务器调用所述第二数据库服务器执行所述第二分支事务之前,还包括:
所述第一数据库服务器,还用于向所述第一事务协调器发送第一分支事务的开始请求;
所述第一事务协调器,还用于根据所述第一分支事务的开始请求,创建第一分支事务标识,并将所述第一分支事务标识发送给所述第一数据库服务器;
所述第一数据库服务器,还用于接收到所述第一分支事务标识后,成功执行所述第一分支事务。
20.根据权利要求18所述的系统,其特征在于,所述分布式系统还包括第一锁服务器,
所述第一事务协调器用于创建所述第一分支事务标识之前,还包括:
所述第一事务协调器,还用于接收所述第一数据库服务器发送的所述第一分支事务的开始请求,所述第一分支事务开始请求包括所述第一分支事务涉及的数据在第一数据库中的位置信息;
向所述第一锁服务器发送第一加锁请求,所述第一加锁请求包括所述第一分支事务涉及的数据在第一数据库中的位置信息;
所述第一锁服务器,用于根据所述第一加锁请求对所述第一分支事务涉及的数据执行加锁操作,向所述第二事务协调器发送加锁成功的消息;
所述第一事务协调器,还用于接收所述第一锁服务器发送的加锁成功的消息。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343752.8A CN115145997A (zh) | 2021-03-30 | 2021-03-30 | 一种分布式事务实现方法及分布式系统 |
PCT/CN2022/081697 WO2022206429A1 (zh) | 2021-03-30 | 2022-03-18 | 一种分布式事务实现方法及分布式系统 |
US18/474,695 US20240013218A1 (en) | 2021-03-30 | 2023-09-26 | Distributed Transaction Processing Method, System, and Related Device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110343752.8A CN115145997A (zh) | 2021-03-30 | 2021-03-30 | 一种分布式事务实现方法及分布式系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115145997A true CN115145997A (zh) | 2022-10-04 |
Family
ID=83403680
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110343752.8A Pending CN115145997A (zh) | 2021-03-30 | 2021-03-30 | 一种分布式事务实现方法及分布式系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115145997A (zh) |
WO (1) | WO2022206429A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069868A (zh) * | 2023-03-13 | 2023-05-05 | 徐工汉云技术股份有限公司 | 基于企业微服务的分布式柔性事务处理方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106156174A (zh) * | 2015-04-16 | 2016-11-23 | 中国移动通信集团山西有限公司 | 一种数据库事务处理的系统和方法 |
CN107347084B (zh) * | 2016-05-05 | 2020-08-25 | 华为技术有限公司 | 分布式锁管理的方法、装置及系统 |
CN107797849B (zh) * | 2016-08-30 | 2021-06-08 | 阿里巴巴集团控股有限公司 | 分布式事务处理的方法、装置与系统 |
US10503725B2 (en) * | 2016-10-13 | 2019-12-10 | Futurewei Technologies, Inc. | Decentralized distributed database consistency |
CN106453592B (zh) * | 2016-11-02 | 2020-05-08 | 华为技术有限公司 | 异步调用处理方法、设备及分布式系统 |
-
2021
- 2021-03-30 CN CN202110343752.8A patent/CN115145997A/zh active Pending
-
2022
- 2022-03-18 WO PCT/CN2022/081697 patent/WO2022206429A1/zh active Application Filing
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069868A (zh) * | 2023-03-13 | 2023-05-05 | 徐工汉云技术股份有限公司 | 基于企业微服务的分布式柔性事务处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2022206429A1 (zh) | 2022-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021109719A1 (zh) | 事务处理方法、装置、设备及计算机存储介质 | |
US7743083B2 (en) | Common transaction manager interface for local and global transactions | |
US9940183B2 (en) | Commit-one-phase distributed transactions with multiple starting participants | |
US11681683B2 (en) | Transaction compensation for single phase resources | |
US7610305B2 (en) | Simultaneous global transaction and local transaction management in an application server | |
US20200082025A1 (en) | Atomically executed application program interfaces | |
CN111651244A (zh) | 分布式事务的处理系统 | |
US20090300022A1 (en) | Recording distributed transactions using probabalistic data structures | |
US6895408B1 (en) | Method and apparatus to facilitate interaction management between loosely coupled applications | |
US20200201843A1 (en) | Optimization of chaincode statements | |
CN111522631A (zh) | 分布式事务处理方法、装置、服务器及介质 | |
US7082432B2 (en) | Specifying transaction manager type at various application levels | |
WO2023082992A1 (zh) | 数据处理方法以及系统 | |
CN114327799B (zh) | 分布式事务处理方法及装置、电子设备、存储介质 | |
JP3409308B2 (ja) | クライアント/サーバ・コンピューティング・システム及びサーバ処理方法 | |
TW200411543A (en) | A data processing system adapted to integrating non-homogeneous processes | |
WO2022206429A1 (zh) | 一种分布式事务实现方法及分布式系统 | |
US6542922B1 (en) | Client/server transaction data processing system with automatic distributed coordinator set up into a linear chain for use of linear commit optimization | |
CN112596801A (zh) | 事务处理方法、装置、设备、存储介质、数据库 | |
US7757119B2 (en) | Inherited transactions in asynchronous messaging | |
KR100403659B1 (ko) | 서버 프로세스 장치 및 서버 프로세스 방법 및 컴퓨터 판독가능한 기록 매체 | |
CN116842028A (zh) | 基于php的分布式事务处理方法 | |
CN111143040A (zh) | 事务处理方法、装置、系统及存储介质 | |
CN113077241B (zh) | 审批处理方法、装置、设备及存储介质 | |
US6324589B1 (en) | Apparatus, method and computer program product for client/server computing with reduced cross-process calls |
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 |