CN113326272A - 分布式事务的处理方法、装置及系统 - Google Patents

分布式事务的处理方法、装置及系统 Download PDF

Info

Publication number
CN113326272A
CN113326272A CN202010544092.5A CN202010544092A CN113326272A CN 113326272 A CN113326272 A CN 113326272A CN 202010544092 A CN202010544092 A CN 202010544092A CN 113326272 A CN113326272 A CN 113326272A
Authority
CN
China
Prior art keywords
transaction
service
database
database operation
instruction
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
CN202010544092.5A
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to PCT/CN2020/114407 priority Critical patent/WO2021169243A1/zh
Publication of CN113326272A publication Critical patent/CN113326272A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Fuzzy Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种分布式事务的处理方法、装置及系统,属于分布式技术领域。本申请提供的方案中,业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口,从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。

Description

分布式事务的处理方法、装置及系统
本申请要求于2020年2月29日提交的申请号为202010132037.5、发明名称为“一种事务处理系统”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及分布式技术领域,特别涉及一种分布式事务的处理方法、装置及系统。
背景技术
事务(transaction)是指由一个或多个资源管理操作构成的一个操作序列。分布式事务是指操作序列中的操作涉及多个数据库(database,DB)的事务。由于分布式事务涉及对多个数据库的操作,因此需保证对各个数据库的操作的一致性。
相关技术中,通常采用请求确认取消(try-confirm-cancel,TCC)技术来处理分布式事务,采用该TCC技术的资源服务器(也称为业务服务器)中的业务客户端均部署有try、confirm以及cancel三个接口。该TCC技术的处理过程包括如下两个阶段:在第一阶段(也可以称为try阶段),发起分布式事务的主业务客户端调用该分布式事务涉及的其他各个从业务客户端的try接口,以请求从业务客户端预留业务资源。在第二阶段(也可以称为confirm/cancel阶段),主业务客户端若确定各个从业务客户端的业务资源均预留成功,则可以向事务服务器发送提交(commit)指令,事务服务器进而可以调用各个从业务客户端的confirm接口,以指示各个从业务客户端执行对预留的业务资源的操作,即执行提交操作。主业务客户端若确定任一从业务客户端的业务资源均预留失败,则可以向事务服务器发送回滚(rollback)指令,事务服务器进而可以调用各个从业务客户端的cancel接口,以指示各个从业务客户端取消执行对预留的业务资源的操作,即执行回滚操作以释放预留的业务资源。
但是,由于该TCC技术需要参与分布式事务的各个业务客户端均部署try、confirm以及cancel三个接口,导致业务客户端的开发成本较高。
发明内容
本申请提供了一种分布式事务的处理方法、装置及系统,可以解决相关技术中的业务客户端在实现分布式事务时开发成本较高的技术问题。
一方面,提供了一种分布式事务的处理方法,该方法应用于分布式事务处理系统,该分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端,且该方法由该网络代理节点执行;该方法包括:获取该业务客户端发送的一个或多个数据库操作指令,每个数据库操作指令包括:数据库操作语句以及分布式事务的上下文,其中,该一个或多个数据库操作指令包括的数据库操作指令用于实现该分布式事务的事务分支,该分布式事务的上下文包括该分布式事务的标识;在该业务数据库中执行每个数据库操作指令包括的数据库操作语句,并向该事务服务器发送事务分支创建请求,该事务分支创建请求包括该分布式事务的标识。
本申请提供的分布式事务的处理方法,业务客户端发送的数据库操作指令中携带有分布式事务的上下文,使得网络代理节点可以基于该数据库操作指令来创建和处理事务分支。由于无需业务客户端创建和处理事务分支,因此对业务客户端原有业务逻辑的影响较小,从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
可选的,该方法还包括:获取数据集的锁信息,该数据集是该一个或多个数据库操作指令包括的数据库操作语句所针对的,该数据集的锁信息用于在该业务数据库中标识该数据集;相应的,该事务分支创建请求还包括该数据集的锁信息。
在事务分支创建请求中携带数据集的锁信息,可以便于事务服务器该数据集是否被加锁,进而判断是否能够创建该事务分支。
可选的,网络代理节点确认该业务数据库的自动提交功能处于开启状态,该网络代理节点可以在接收到该事务服务器发送的用于指示事务分支创建成功的第一创建响应后,再在该业务数据库中执行每个数据库操作指令所包括的数据库操作语句。并且,网络代理节点还可以响应于该第一创建响应,向业务数据库发送针对该分布式事务的事务分支的第一提交指令,该第一提交指令用于指示该业务数据库提交该事务分支。
网络代理节点在确定事务分支创建成功后,再执行该数据库操作语句,可以避免在执行该数据库操作语句之后,若又确定事务分支创建失败,导致之前执行的数据库操作语句无效的问题。也即是,在事务分支创建失败的场景中不再执行数据库操作语句,可以避免浪费业务服务器的计算资源。
可选的,网络代理节点还可以接收事务服务器发送的用于指示事务分支创建失败的第二创建响应;并且,响应于该第二创建响应,向业务数据库发送针对该分布式事务的事务分支的第一回滚指令,该第一回滚指令用于指示业务数据库回滚该事务分支。
可选的,网络代理节点确认该业务数据库的自动提交功能处于关闭状态,并可以在每执行完成一个数据库操作指令中的数据库操作语句后,向该业务客户端发送该数据库操作语句的执行结果;并且,该网络代理节点可以在获取到该业务客户端发送的针对该分布式事务的事务分支的第二提交指令后,获取该数据集的锁信息;其中,若用于实现该分布式事务的事务分支的数据库操作语句的个数大于1,则该业务数据库的自动提交功能被该业务客户端设置为关闭状态;该第二提交指令是该业务客户端在根据该网络代理节点发送的执行结果确定用于实现该分布式事务的事务分支的每个数据库操作指令所包括的数据库操作语句均执行成功后发送的。
由于网络代理节点在检测到该业务数据库的自动提交功能处于关闭状态时,可以确定用于实现该事务分支的数据库操作指令包括多个,因此网络代理节点可以在接收到第二提交指令后,再获取数据集的锁信息,进而发送事务分支创建请求。
可选的,网络代理节点在向该业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果之后,若获取到该业务客户端发送的针对该分布式事务的事务分支的第二回滚指令,则还可以删除该数据集的锁信息,并向该业务数据库发送该第二回滚指令;其中,该第二回滚指令是该业务客户端在确定用于实现该事务分支的任一数据库操作指令包括的数据库操作语句执行失败后发送的。
网络代理节点若接收到第二回滚指令,则可以确定该事务分支执行失败,因此可以删除其存储的数据集的锁信息,避免该数据集的锁信息占用过多的存储空间。
可选的,该网络代理节点可以获取该业务客户端发送的第一设置指令,并可以根据该第一设置指令记录该业务数据库的自动提交功能为开启状态。或者,网络代理节点可以获取该业务客户端发送的第二设置指令,并可以根据该第二设置指令记录该业务数据库的自动提交功能为关闭状态;其中,该第一设置指令是该业务客户端在确定用于实现该事务分支的该数据库操作语句的个数等于1时发送的;该第二设置指令是该业务客户端在确定用于实现该事务分支的该数据库操作语句的个数大于1时发送的。
网络代理节点根据获取到的第一设置指令或第二设置指令,记录该业务数据库的自动提交功能的状态,可以确保在创建事务分支时,能够根据记录的状态准确地确定该业务数据库的自动提交功能是否开启。
可选的,该第一创建响应中可以携带有该事务服务器为该事务分支分配的标识;网络代理节点在接收到该事务服务器发送的用于指示分布式事务的事务分支创建成功的第一创建响应之后,还可以在该分布式事务的事务日志中存储该事务分支的标识以及该数据集的对应关系;之后,网络代理节点可以接收该事务服务器发送的针对该事务分支的第三提交指令,并清理该事务日志中记录的该事务分支的标识以及该数据集;或者,网络代理节点可以接收该事务服务器发送的针对该事务分支的第三回滚指令,根据该事务分支的标识从该事务日志中获取该数据集,并根据该数据集回滚该事务分支。
其中,该第三提交指令是该事务服务器在接收到业务客户端发送的针对该分布式事务的提交指令后发送的,该第三回滚指令是该事务服务器在接收到业务客户端发送的针对该分布式事务的回滚指令后发送的。
可选的,网络代理节点在向该业务数据库发送针对分布式事务的事务分支的第一提交指令之后,还可以删除该数据集的锁信息;并且,网络代理节点若确定该事务分支提交成功,则可以向该业务客户端发送用于指示该分布式事务的事务分支提交成功的提交结果;网络代理节点若确定该分布式事务的事务分支提交失败,则可以向该业务客户端发送用于指示该分布式事务的事务分支提交失败的提交结果,向该业务数据库发送针对该分布式事务的事务分支的第四回滚指令,并向该事务服务器发送携带有该分布式事务的事务分支的标识的通知消息,该通知消息用于指示该事务服务器删除该分布式事务的事务分支所对应的数据集的锁信息。
网络代理节点发送针对事务分支的第一提交指令后,向该业务客户端反馈事务分支的提交结果,可以便于业务客户端根据该提交结果确定提交或回滚分布式事务。
可选的,该网络代理节点可以拦截业务客户端发送的数据包,若检测到该业务客户端发送的数据包的接收方为该业务数据库,则网络代理节点可以获取并解析该数据包;若检测到该业务客户端发送的数据包的接收方不为该业务数据库,则网络代理节点可以直接向该接收方转发该数据包。
本申请提供的方案中,由于网络代理节点仅需解析业务客户端发送至业务数据库的数据包,而业务客户端均基于数据库协议与业务数据库进行数据交互,因此该网络代理节点仅需支持数据库协议即可适配于不同编程语言开发得到的业务客户端。也即是,本申请提供的方案可以应用于跨编程语言的分布式事务处理系统中。
另一方面,提供了一种分布式事务的处理方法,应用于分布式事务处理系统,该分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端,并且该方法可以由第一业务客户端执行;该方法可以包括:根据分布式事务中该第一业务客户端待执行的事务分支,生成用于实现该分布式事务的事务分支的一个或多个数据库操作语句;根据该一个或多个数据库操作语句生成一个或多个数据库操作指令,每个数据库操作指令包括至少一个数据库操作语句以及分布式事务的上下文,该分布式事务的上下文包括该分布式事务的标识;向第一业务数据库发送该一个或多个数据库操作指令,其中,第一网络代理节点和第一业务客户端部署于同一业务服务器。
由于业务客户端发送的数据库操作指令中携带有分布式事务的上下文,因此获取到该数据库操作指令的网络代理节点即可基于该数据库操作语句以及分布式事务的上下文来创建和处理事务分支。由于无需业务客户端创建和处理事务分支,因此对业务客户端原有业务逻辑的影响较小,从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
可选的,该第一业务客户端可以为发起分布式事务的主业务客户端,相应的,该第一业务客户端还可以响应于业务请求,向该事务服务器发送该分布式事务的创建请求;接收该事务服务器发送的该分布式事务的标识;并向参与该分布式事务的第二业务客户端发送服务调用请求,该服务调用请求中携带有该分布式事务的标识;并且,该第一业务客户端可以根据该业务请求,确定该分布式事务中该第一业务客户端待执行的事务分支。
可选的,作为主业务客户端的该第一业务客户端还可以执行如下操作:接收该第一网络代理节点发送的该事务分支的提交结果;并接收该第二业务客户端响应于该服务调用请求发送的服务调用响应;之后,根据该提交结果和该服务调用响应,向该事务服务器发送针对该分布式事务的提交指令或者回滚指令;其中,针对该分布式事务的提交指令用于指示提交该分布式事务包括的各个事务分支,针对该分布式事务的提交指令用于指示回滚该分布式事务包括的各个事务分支。
本申请提供的方案中,作为主业务客户端的第一业务客户端在实现分布式事务的过程中,仅需发送分布式事务的创建请求、生成数据库操作指令以及发送分布式事务的提交指令或者回滚指令。上述操作对主业务客户端原有业务逻辑的影响较小,即对该主业务客户端的业务的侵入性较低,因此可以有效减小主业务客户端适配分布式事务处理架构,以实现业务分布式化改造时的成本。
可选的,第一业务客户端也可以为参与分布式事务的从业务客户端,相应的,该第一业务客户端还可以接收第二业务客户端(即主业务客户端)发送的服务调用请求,该服务调用请求中携带有该分布式事务的上下文;根据该服务调用请求,确定该分布式事务中该第一业务客户端待执行的事务分支。
作为从业务客户端的该第一业务客户端在实现分布式事务的过程中,仅需生成数据库操作指令,从而可以有效减小从业务客户端适配分布式事务处理架构,以实现业务分布式化改造时的成本。
可选的,该方法还可以包括:第一业务客户端确定用于实现该分布式事务的事务分支的数据库操作语句的个数等于1,向该第一业务数据库发送用于指示将自动提交功能设置为开启状态的第一设置指令;或者,第一业务客户端确定用于实现该分布式事务的事务分支的数据库操作语句的个数大于1,向该第一业务数据库发送用于指示将自动提交功能设置为关闭状态的第二设置指令。
上述第一设置指令和第二设置指令可以被第一网络代理节点拦截,第一网络代理节点可以基于该第一设置指令或第二设置指令准确地确定第一业务数据库的自动提交功能的状态,也即是,可以准确地确定用于实现分布式事务的事务分支的数据库操作语句的个数是否大于1。
可选的,第一业务客户端在向该第一业务数据库发送用于指示将自动提交功能设置为关闭状态的第二设置指令之后,还可以接收该第一网络代理节点发送的每个数据库操作指令包括的数据库操作语句的执行结果;若根据该执行结果确定用于实现该分布式事务的事务分支的每个数据库操作指令包括的数据库操作语句均执行成功,则第一业务客户端可以向该第一业务数据库发送针对该分布式事务的事务分支的第二提交指令;若根据该执行结果确定用于实现该分布式事务的事务分支的任一数据库操作指令包括的数据库操作语句执行失败,则第一业务客户端可以向该第一业务数据库发送针对该分布式事务的事务分支的第二回滚指令。
上述第二提交指令和第二回滚指令可以被第一网络代理节点拦截,第一网络代理节点可以基于该第二提交指令创建事务分支,或者可以基于该第二回滚指令回滚事务分支。
又一方面,提供了一种网络代理节点,应用于分布式事务处理系统,该分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端,该网络代理节点包括:
解析模块,用于获取该业务客户端发送的一个或多个数据库操作指令,每个数据库操作指令包括:数据库操作语句以及该分布式事务的上下文,该一个或多个数据库操作指令包括的数据库操作语句用于实现该分布式事务的事务分支,该分布式事务的上下文包括该分布式事务的标识;
事务分支处理模块,用于在该业务数据库中执行每个数据库操作指令包括的数据库操作语句,以及向该事务服务器发送事务分支创建请求,该事务分支创建请求包括该分布式事务的标识。
可选的,该事务分支处理模块还用于:获取数据集的锁信息,该数据集是该一个或多个数据库操作指令包括的数据库操作语句所针对的,该数据集的锁信息用于在该业务数据库中标识该数据集;该事务分支创建请求还包括该数据集的锁信息。
可选的,该事务分支处理模块,用于:确认该业务数据库的自动提交功能处于开启状态;在接收到该事务服务器发送的用于指示该事务分支创建成功的第一创建响应后,在该业务数据库中执行每个数据库操作指令包括的数据库操作语句;该事务分支处理模块,还用于:响应于该第一创建响应,向该业务数据库发送针对该事务分支的第一提交指令。
可选的,该事务分支处理模块,还用于:接收该事务服务器发送的用于指示该事务分支创建失败的第二创建响应;响应于该第二创建响应,向该业务数据库发送针对该事务分支的第一回滚指令。
可选的,该事务分支处理模块,还用于:确认该业务数据库的自动提交功能处于关闭状态;向该业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果;在获取到该业务客户端发送的针对该事务分支的第二提交指令后,获取该数据集的锁信息;其中,该第二提交指令是该业务客户端在根据该执行结果确定每个数据库操作指令包括的数据库操作语句均执行成功后发送的。
可选的,该事务分支处理模块,还用于:在向该业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果之后,获取该业务客户端发送的针对该事务分支的第二回滚指令,删除该数据集的锁信息;向该业务数据库发送该第二回滚指令;其中,该第二回滚指令是该业务客户端在确定任一数据库操作指令包括的数据库操作语句执行失败后发送的。
可选的,该事务分支处理模块,还用于:获取该业务客户端发送的第一设置指令;根据该第一设置指令记录该业务数据库的自动提交功能为开启状态;其中,该第一设置指令是该业务客户端在确定用于实现该事务分支的数据库操作语句的个数等于1时发送的。
可选的,该事务分支处理模块,还用于:获取该业务客户端发送的第二设置指令;根据该第二设置指令记录该业务数据库的自动提交功能为关闭状态;其中,该第二设置指令是该业务客户端在确定用于实现该事务分支的数据库操作语句的个数大于1时发送的。
可选的,该第一创建响应中携带有该事务服务器为该事务分支分配的标识;该事务分支处理模块,还用于:在接收到该事务服务器发送的用于指示该事务分支创建成功的第一创建响应后,在该分布式事务的事务日志中存储该事务分支的标识以及该数据集的对应关系;接收该事务服务器发送的针对该事务分支的第三提交指令,清理该事务日志中记录的该事务分支的标识以及该数据集;其中,该第三提交指令是该事务服务器在接收到该业务客户端发送的针对该分布式事务的提交指令后发送的。
可选的,该第一创建响应中携带有该事务服务器为该事务分支分配的标识;该事务分支处理模块,还用于:在接收到该事务服务器发送的用于指示该事务分支创建成功的第一创建响应后,在该分布式事务的事务日志中存储该事务分支的标识以及该数据集的对应关系;接收该事务服务器发送的针对该事务分支的第三回滚指令,根据该事务分支的标识从该事务日志中获取该数据集,并根据该数据集回滚该事务分支;其中,该第三回滚指令是该事务服务器在接收到该业务客户端发送的针对该分布式事务的回滚指令后发送的。
再一方面,提供了一种业务客户端,应用于分布式事务处理系统,该分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端,该业务客户端包括:
处理模块,用于根据该分布式事务中该业务客户端待执行的事务分支,生成用于实现该事务分支一个或多个数据库操作语句;
应用程序接口模块,用于根据该一个或多个数据库操作语句,生成一个或多个数据库操作指令,每个数据库操作指令包括:至少一个数据库操作语句以及该分布式事务的上下文,该分布式事务的上下文包括该分布式事务的标识;
数据库驱动器,用于向第一网络代理节点发送该一个或多个数据库操作指令,其中,该第一网络代理节点和该业务客户端部署于同一业务服务器。
可选的,该应用程序接口模块,还用于:响应于业务请求,向该事务服务器发送该分布式事务的创建请求;接收该事务服务器发送的该分布式事务的标识;
该业务客户端还包括:服务调用模块,用于向参与该分布式事务的第二业务客户端发送服务调用请求,该服务调用请求中携带有该分布式事务的标识;该处理模块,还用于根据该业务请求,确定该分布式事务中该业务客户端待执行的事务分支。
可选的,该处理模块,还用于:接收该第一网络代理节点发送的该事务分支的提交结果;接收该第二业务客户端响应于该服务调用请求发送的服务调用响应;根据该提交结果和该服务调用响应,向该事务服务器发送针对该分布式事务的提交指令或者回滚指令;其中,针对该分布式事务的提交指令用于指示提交该分布式事务包括的各个事务分支,针对该分布式事务的提交指令用于指示回滚该分布式事务包括的各个事务分支。
可选的,该处理模块,还用于:接收第二业务客户端发送的服务调用请求,该服务调用请求中携带有该分布式事务的上下文;根据该服务调用请求,确定该分布式事务中该业务客户端待执行的事务分支。
可选的,该处理模块,还用于:确定该数据库操作语句的个数等于1,指示该数据库驱动器向第一业务数据库发送第一设置指令,该第一设置指令指示将自动提交功能设置为开启状态。
可选的,该处理模块,还用于:确定该数据库操作语句的个数大于1,指示该数据库驱动器向第一业务数据库发送第二设置指令,该第二设置指令指示将自动提交功能设置为关闭状态。
可选的,该处理模块,还用于:接收每个数据库操作指令包括的数据库操作语句的执行结果;根据该执行结果确定每个数据库操作指令包括的数据库操作语句均执行成功,指示该数据库驱动器向该第一业务数据库发送针对该事务分支的第二提交指令。
可选的,该业务客户端还包括:接收每个数据库操作指令包括的数据库操作语句的执行结果;根据该执行结果确定任一数据库操作指令包括的数据库操作语句执行失败,指示该数据库驱动器向该第一业务数据库发送针对该事务分支的第二回滚指令。
再一方面,提供了一种网络代理节点,该网络代理节点包括:存储器,处理器及存储在该存储器上并可在该处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述方面所提供的由该网络代理节点执行的分布式事务的处理方法。
再一方面,提供了一种业务客户端,该业务客户端包括:存储器,处理器及存储在该存储器上并可在该处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述方面所提供的由第一业务客户端执行的分布式事务的处理方法。
再一方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行如上述方面所提供的由该网络代理节点执行的分布式事务的处理方法。
再一方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行如上述方面所提供的由第一业务客户端执行的分布式事务的处理方法。
再一方面,提供了一种分布式事务处理系统,该分布式事务处理系统包括:事务服务器,多个业务服务器,以及多个业务数据库;
每个业务服务器包括如上述方面所提供的网络代理节点,以及如上述方面所提供的业务客户端。
综上所述,本申请提供了一种分布式事务的处理方法、装置及系统,本申请提供的方案在处理分布式事务的过程中,业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口(例如try、confirm和cancel接口),从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
附图说明
图1是本申请实施例提供的一种分布式事务处理系统的结构示意图;
图2是本申请实施例提供的另一种分布式事务处理系统的结构示意图;
图3是本申请实施例提供的一种分布式事务的处理方法的流程图;
图4是本申请实施例提供的另一种分布式事务的处理方法的流程图;
图5是本申请实施例提供的一种网络代理节点拦截数据包的方法流程图;
图6是本申请实施例提供的又一种分布式事务处理系统的结构示意图;
图7是本申请实施例提供的再一种分布式事务处理系统的结构示意图。
具体实施方式
下面结合附图详细介绍本申请实施例提供的分布式事务的处理方法、装置及系统。
图1是本申请实施例提供的一种分布式事务处理系统的结构示意图,如图1所示,该系统可以包括:多个业务服务器01,事务服务器02,以及多个业务数据库03。其中,每个业务数据库03对应于一个业务服务器01,每个业务数据库03用于存储其对应的业务服务器01的业务数据。并且,每个业务数据库03部署在一个数据库服务器中。
在本申请实施例中,该分布式事务处理系统可以采用服务网格(service mesh)架构来实现业务服务器01之间的通信,从而确保各个业务服务器01中业务客户端011内运行的服务能够被可靠调用。如图1所示,该系统中的每个业务服务器01中除了部署有业务客户端011,还可以部署有网络代理节点012。各个业务服务器01中的网络代理节点012可以组成服务网格,该服务网格可以实现不同业务服务器01中的业务客户端011之间的通信,业务客户端011与事务服务器02的通信以及业务客户端011与业务数据库03的通信。
可选的,该每个业务服务器01中可以运行有一个或多个虚拟机,业务客户端011和网络代理节点012可以部署在相同虚拟机中,也可以分别部署在不同虚拟机中。或者,该每个业务服务器01中可以运行有一个或多个容器,业务客户端011和网络代理节点012可以部署在相同容器中,也可以分别部署在不同容器中。
该业务服务器01、该事务服务器02以及部署业务数据库03的数据库服务器中的每个服务器可以是一台物理服务器,或者可以是由若干台物理服务器组成的物理服务器集群,又或者可以是一个云计算中心。
可选的,该多个业务服务器01、该事务服务器02以及部署业务数据库03的数据库服务器中的任意两个服务器均可以为相互独立的物理服务器。即事务服务器02、各个业务客户端011和各个业务数据库03之间均物理隔离,由此可以确保该事务服务器02、每个业务客户端011以及每个业务数据库03的运行性能。
或者,该多个业务服务器01、该事务服务器02以及部署业务数据库03的数据库服务器中的至少两个服务器可以部署在同一个物理服务器中。例如,多个业务服务器01可以部署在同一个物理服务器中。
该分布式事务处理系统中的多个业务服务器01可以参与实现同一个分布式事务(也可以称为全局事务),其中每个业务服务器01可以实现该分布式事务中的一个事务分支(针对该业务服务器01而言,也可以称为该业务服务器01的本地事务)。事务服务器02则负责协调整个分布式事务的处理过程,例如,可以处理分布式事务的发起、事务分支的创建、分布式事务的提交或回滚、以及分布式事务的超时检查等工作。
可选的,图2是本申请实施例提供的另一种分布式事务处理系统的结构示意图,如图2所示,该系统可以包括用于实现分布式事务的第一业务服务器01a,以及至少一个第二业务服务器01b。图2中仅示意性示出了一个第二业务服务器01b。其中,该第一业务服务器01a可以为用于启动该分布式事务的业务服务器,因此也可以称为主业务服务器。每个第二业务服务器01b作为该分布式事务的参与者之一,也可以称为从业务服务器。并且,参考图2可以看出,该第一业务服务器01a中第一业务客户端011a的业务数据可以存储在第一业务数据库03a中,第二业务服务器01b中第二业务客户端011b的业务数据可以存储在第二业务数据库03b中。
在本申请实施例中,每个业务服务器01可以通过对其对应的业务数据库03中的业务数据执行一次或多次操作,来实现一个事务分支。该事务分支可以是分布式事务的一个事务分支,也可以不是分布式事务的分支,即该事务分支也可以不参与分布式事务。其中,对业务数据库03中的业务数据每执行一次操作,业务服务器01中的业务客户端011均需生成一条数据库操作语句,并在业务数据库03中执行该数据库操作语句。当业务数据库03接收到业务客户端011发送的提交指令后,才会基于数据库操作语句的执行结果持久化更新其业务数据,即执行提交操作。
因此,若一个事务分支仅包含一次针对业务数据库03的操作,则业务服务器01中的业务客户端011为了实现该事务分支,仅需生成并执行一条数据库操作语句,该数据库操作语句执行完成即可提交该事务分支。若一个事务分支包含多次针对业务数据库的操作,则业务服务器01中的业务客户端011为了实现该事务分支,需生成并执行多个数据库操作语句,该多个数据库操作语句均执行完成才可以提交该事务分支。
基于此,本申请实施例提供的每个业务服务器01中的业务客户端011,若确定用于实现其待执行的事务分支的数据库操作语句的个数等于1,则可以将其对应的业务数据库03的自动提交功能设置为开启状态,即业务数据库03可以自动提交事务分支。若业务客户端011确定用于实现其待执行的事务分支的数据库操作语句的个数大于1,则可以将其对应的业务数据库03的自动提交功能设置为关闭状态,即业务数据库03需要在接收到业务客户端011发送的提交指令后,才可以提交事务分支。
图3是本申请实施例提供的一种分布式事务的处理方法的流程图,该方法可以应用于如图1或图2所示的系统中。本申请实施例以该方法应用于如图2所示的系统,且以该第一业务客户端待执行的事务分支中仅包含一次针对数据库的操作为例进行说明。参考图3,该方法可以包括:
步骤101、第一业务客户端向事务服务器发送分布式事务的创建请求。
第一业务客户端在接收到业务请求后,若确定该业务请求所请求的服务需要通过该第一业务客户端以及至少一个第二业务客户端共同参与实现,则可以响应于该业务请求,向事务服务器发送分布式事务的创建请求。
示例的,假设该第一业务客户端为A银行的业务客户端,该业务请求为从A银行的第一账户向B银行的第二账户进行转账的转账请求。由于该转账请求所请求的转账服务需要该A银行的业务客户端以及B银行的业务客户端共同参与实现,因此A银行的业务客户端可以响应于该业务请求,向事务服务器发送分布式事务的创建请求。
步骤102、事务服务器向第一业务客户端发送该分布式事务的标识。
事务服务器接收到分布式事务的创建请求后,可以为该分布式事务分配标识(identification,ID),并将该分布式事务的标识发送至第一业务客户端。
可选的,如图2所示,该第一业务客户端011a中可以部署有应用程序接口(application programming interface,API)模块0111,该API模块0111包括启动事务(Begin Transaction)API。第一业务客户端011a可以通过调用该Begin Transaction API来向事务服务器02发送分布式事务的创建请求R1,以获取该分布式事务的ID,进而构建该分布式事务的上下文。该Begin Transaction API的输入参数可以包括该事务服务器02的地址,返回值可以包括该分布式事务的ID。若由于事务服务器02故障等因素导致分配ID失败,则该返回值可以为-1。其中,事务服务器02的地址为第一业务客户端011a本地存储的,且该事务服务器02的地址可以包括该事务服务器的互联网协议(Internet protocol,IP)地址和端口号。该Begin Transaction API的输入参数的数据类型可以为字符串型(string),返回值的数据类型可以为长整型(long)。
参考图2还可以看出,第一业务客户端011a还包括通信模块0112,该API模块0111发送的分布式事务的创建请求R1可以通过该通信模块0112发送至第一网络代理节点012a,然后再由该第一网络代理节点012a透传至事务服务器02。相应的,该事务服务器02返回的分布式事务的ID也可以由该第一网络代理节点012a透传至第一业务客户端011a的通信模块0112,然后再由通信模块0112传输至API模块0111。
步骤103、第一业务客户端生成用于实现该分布式事务中待执行的事务分支的一个数据库操作语句。
第一业务客户端接收到分布式事务的ID后,即可根据该业务请求,确定分布式事务中第一业务客户端待执行的事务分支,并生成用于实现该分布式事务中待执行的事务分支的一个数据库操作语句。其中,该第一业务客户端对应的第一业务数据库可以为关系型数据库,该数据库操作语句可以为结构化查询语言(structured query language,SQL)语句。
参考图2还可以看出,第一业务客户端011a还包括处理模块0115,该处理模块0115可以生成用于实现该分布式事务中待执行的事务分支的一个数据库操作语句。
示例的,假设该业务请求为从A银行的第一账户向B银行的第二账户转账1000元的转账请求,则该A银行的业务客户端可以确定其待执行的事务分支为:将第一账户的余额扣款1000元。相应的,该A银行的业务客户端可以生成用于指示将第一账户的余额减少1000的数据库操作语句。
步骤104、第一业务客户端向第一业务数据库发送第一设置指令。
由于用于实现该事务分支的数据库操作语句的个数等于1,因此第一业务客户端可以确定该数据库操作语句执行完成后即可提交该事务分支,进而可以向第一业务数据库发送第一设置指令,该第一设置指令用于指示将该第一业务数据库的自动提交功能设置为开启状态。
示例的,参考图2,该第一业务客户端011a还包括数据库驱动器(DB driver)0113。该处理模块0115可以在检测到数据库操作语句的个数等于1时,指示该数据库驱动器0113通过通信模块0112向第一业务数据库03发送第一设置指令。
步骤105、第一网络代理节点获取该第一设置指令,并记录第一业务数据库的自动提交功能为开启状态。
由于第一业务客户端发送至第一业务数据库的第一设置指令需要通过第一网络代理节点转发,因此第一网络代理节点可以获取到该第一设置指令,并可以根据该第一设置指令记录第一业务数据库的自动提交功能为开启状态。并且,第一网络代理节点可以在完成状态记录后,再将该第一设置指令转发至该第一业务数据库。
第一网络代理节点通过记录该第一业务数据库的自动提交功能的状态,可以确保在后续创建事务分支时,能够根据记录的状态准确地确定该第一业务数据库的自动提交功能是否开启。进而,该第一网络代理节点可以根据该自动提交功能的状态确定用于实现事务分支的数据库操作语句的个数是否大于1,并可以根据数据库操作语句的个数的不同,采用不同的方式获取该事务分支的锁信息,并创建该事务分支。
示例的,第一网络代理节点中可以记录有第一业务数据库的状态标识,第一网络代理节点可以在获取到该第一设置指令后,将该状态标识设置为true,以指示该第一业务数据库的自动提交功能为开启状态。
在本申请实施例中,如图2所示,该第一网络代理节点012a可以包括连接管理模块0121,解析模块0122以及透传模块0123。该连接管理模块0121可以拦截第一业务客户端011a发送的每个数据包,并检测每个数据包的接收方是否为该第一业务数据库03a。若数据包的接收方为该第一业务数据库03a,则连接管理模块0121可以将该数据包发送至解析模块0122,解析模块0122可以解析该数据包。若该数据包的接收方不为该第一业务数据库03a,则连接管理模块0121可以将该数据包发送至透传模块0123,透传模块0123可以直接透传该数据包。其中,透传是指将数据包直接传输到目的地址,而不解析数据包的内容,也不对数据包的内容做任何改变。
以图2为例,假设第一网络代理节点012a接收到第一业务客户端011a发送的分布式事务的创建请求R1,则由于该分布式事务的创建请求R1的接收方为事务服务器02,而并非是第一业务数据库03a,因此第一网络代理节点012a的透传模块0123可以直接向事务服务器02透传该分布式事务的创建请求R1。
步骤106、第一业务客户端基于该一个数据库操作语句和该分布式事务的上下文生成一个数据库操作指令。
在本申请实施例中,第一业务客户端可以将分布式事务的上下文与该数据库操作语句组合,从而生成一个数据库操作指令。该分布式事务的上下文包括该分布式事务的标识。并且,还可以包括该事务服务器的地址,该事务服务器的地址是第一业务客户端中预先存储的。
由于该数据库操作指令中携带有分布式事务的上下文,使得第一网络代理节点可以基于该数据库操作指令来创建和处理事务分支。由于无需第一业务客户端创建和处理事务分支,因此对第一业务客户端原有业务逻辑的影响较小,从而有效降低了第一业务客户端应用于分布式事务处理系统的开发成本。
可选的,第一业务客户端可以根据该第一业务数据库的数据库类型(DB type)所对应的语法格式,将分布式事务的上下文作为注释(hint)添加在该数据库操作语句中,从而得到一个数据库操作指令。例如,参考图2,该第一业务客户端011a的API模块0111还包括操作指令创建API,第一业务客户端011a可以通过调用该操作指令创建API生成数据库操作指令L1。其中,该操作指令创建API的输入参数可以包括:数据库操作语句、数据库类型以及分布式事务的上下文,该数据库操作语句的数据类型和数据库类型的数据类型可以均为string,该分布式事务的上下文的数据类型可以为long。该操作指令创建API的返回值即为携带有分布式事务的上下文的数据库操作指令。若操作指令创建API执行失败,则返回值为空。该返回值的数据类型可以为string。
并且,为了便于该第一网络代理节点识别该数据库操作指令中的分布式事务的上下文,第一业务客户端还可以在数据库操作指令中添加分布式事务关键字,该分布式事务关键字可以用于指示该数据库操作指令中添加有分布式事务的上下文。
示例的,假设该分布式事务关键字为AA,该分布式事务的标识为ID1,事务服务器的IP地址为x.x.x.x,并且该用于指示将第一账户“yy”的余额减少1000的数据库操作语句为SQL语句:
UPDATE table1 SET a1=a1-1000 WHERE b1='yy';
则第一业务客户端通过操作指令创建API对该SQL语句和分布式事务的上下文进行组合后,生成的数据库操作指令可以为:
/*AA;ID:ID1;IP:x.x.x.x*/UPDATE table1 SET a1=a1-1000 WHERE b1='yy'。
步骤107、第一业务客户端向第一业务数据库发送该数据库操作指令。
第一业务客户端生成该数据库操作指令后,即可向第一业务数据库发送该数据库操作指令。
可选的,参考图2,该第一业务客户端011a中的数据库驱动器0113可以将API模块0111生成的数据库操作指令L1发送至第一业务数据库03a。由于第一网络代理节点012a可以拦截第一业务客户端011a发送的数据包,因此如图2所示,该第一网络代理节点012a可以获取到该第一业务客户端011a发送的数据库操作指令L1。该数据库操作指令L1可以用于供获取到该数据库操作指令的第一网络代理节点创建并处理该事务分支。
步骤108、第一业务客户端向第二业务客户端发送服务调用请求。
由于该分布式事务还需要第二业务服务器中的第二业务客户端参与实现,因此第一业务客户端还需要向该第二业务客户端发送服务调用请求。该服务调用请求中可以携带有该分布式事务的上下文。其中,该服务调用请求可以为远程过程调用(remote procedurecall,RPC)请求。
示例的,参考图2,第一业务客户端011a还包括服务调用模块0114,该服务调用模块0114可以向第二业务客户端011b发送服务调用请求Q1,该服务调用请求Q1可以通过第一网络代理节点012a以及第二网络代理节点012b透传至第二业务客户端011b。其中,第一网络代理节点012a在拦截到该服务调用请求Q1后,可以识别出该服务调用请求Q1的接收方不为该第一业务数据库03a,因此第一网络代理节点012a可以直接向第二业务客户端011b转发该数据包。
假设该第一业务客户端011a接收到的业务请求为从A银行的第一账户向B银行的第二账户转账1000元的转账请求,则该A银行的业务客户端可以向B银行的业务客户端发送用于指示将该第二账户的余额增加1000的服务调用请求。
步骤109、第一网络代理节点获取该数据库操作指令,并从第一业务数据库中获取该数据库操作语句所针对的数据集。
由于该数据库操作指令的接收方为第一业务数据库,因此第一网络代理节点可以获取该数据库操作指令,并从第一业务数据库中获取该数据库操作语句所针对的数据集。可选的,第一网络代理节点可以从该数据库操作指令中解析出数据库操作语句,然后创建并运行数据集获取语句,从而可以从第一业务数据库中获取到该数据库操作语句所针对的数据集。
示例的,如图2所示,该第一网络代理节点012a还包括事务分支处理模块0124以及数据库驱动器0125。该解析模块0122可以从数据库操作指令中解析出数据库操作语句(例如SQL语句)和分布式事务的上下文,并将数据库操作语句和分布式事务的上下文发送至事务分支处理模块0124。该事务分支处理模块0124可以创建数据集获取语句。例如,该事务分支处理模块0124创建的数据集获取语句可以为:Select for update。之后,事务分支处理模块0124可以通过数据库驱动器0125运行该数据集获取语句:Select for update,从而得到该数据库操作语句所针对的数据集。
需要说明的是,在本申请实施例中,第一网络代理节点在获取到该第一业务客户端发送的数据库操作指令后,还可以先检测该数据库操作指令中是否携带有分布式事务的上下文。若该数据库操作指令中携带有该分布式事务的上下文,则可以获取该数据库操作语句所针对的数据集并继续执行后续操作。
若该数据库操作指令中并未携带分布式事务的上下文,则第一网络代理节点可以确定该数据库操作指令中的数据库操作语句并非用于实现分布式事务中的事务分支,因此可以直接向第一业务数据库透传该数据库操作指令,而无需获取该数据集,也无需再执行后续操作。
步骤110、第一网络代理节点获取该数据集的锁信息。
由于在上述步骤105中,第一网络代理节点已经根据第一设置指令确定该第一业务数据库的自动提交功能为开启状态,因此可以确定该数据库操作指令中的数据库操作语句可独立实现一个事务分支。进而,该第一网络代理节点可以获取该数据库操作语句所针对的数据集的锁信息,该数据集的锁信息即为该事务分支的锁信息。例如,参考图2,第一网络代理节点012a中的事务分支处理模块0124可以获取该数据库操作语句所针对的数据集的锁信息。
其中,该数据库操作语句所针对的数据集可以是指该数据库操作语句所操作的数据的集合。该数据集的锁信息可以用于在第一业务数据库中唯一标识该数据库操作语句所针对的数据集。例如,该数据集的锁信息可以包括该数据集所在数据表的表名,以及该数据集所在行的主键。
步骤111、第一网络代理节点向该事务服务器发送事务分支创建请求。
第一网络代理节点获取到数据集的锁信息,即事务分支的锁信息后,即可向事务服务器发送事务分支创建请求。该事务分支创建请求中可以包括该数据集的锁信息以及该分布式事务的标识。例如,参考图2,第一网络代理节点012a中的事务分支处理模块0124可以向事务服务器02发送事务分支创建请求S1。
需要说明的是,对于该第一业务数据库的自动提交功能为开启状态,且第一业务客户端待执行的事务分支参与了分布式事务的场景。由于第一网络代理节点除了需要在第一业务数据库中执行数据库操作语句,还需要执行获取数据集,获取数据集的锁信息,以及请求创建事务分支等操作,且上述操作均执行成功后才能提交事务分支。因此,第一网络代理节点在向事务服务器申请创建分布式事务的事务分支之前,还需要向该第一业务数据库发送第二设置指令,该第二设置指令用于指示该第一业务数据库将其自动提交功能设置为关闭状态。由此,可以确保该第一业务数据库不会在数据库操作语句执行完成后自动提交事务分支,而是能够在该第一网络代理节点确定该事务分支创建成功后,再在该第一网络代理节点的指示下提交该事务分支。其中,该第二设置指令可以是事务分支处理模块0124通过数据库驱动器0125发送至第一业务数据库03a的。
步骤112、事务服务器向第一网络代理节点发送创建响应。
事务服务器接收到该事务分支的创建请求后,可以基于该数据集的锁信息检测是否能够创建该事务分支。
若事务服务器检测到该创建请求中数据集的锁信息与其所存储的其他事务分支的锁信息均不同,则可以确定用于实现该事务分支的数据库操作语句所针对的数据集未被加锁,因此可以确定能够创建该事务分支。该事务服务器进而可以为该事务分支分配标识,并向第一网络代理节点发送用于指示该事务分支创建成功的第一创建响应,该第一创建响应携带该事务分支的标识。并且,事务服务器还可以存储该创建请求中的数据集的锁信息,即为该数据库操作语句所针对的数据集进行加锁。
若事务服务器检测到该创建请求中的数据集的锁信息与其所存储的其他某个事务分支的锁信息相同,则可以确定用于实现该事务分支的数据库操作语句所针对的数据集已被加锁,因此可以确定无法创建该事务分支。该事务服务器进而可以向第一网络代理节点发送用于指示该事务分支创建失败的第二创建响应。
步骤113、第一网络代理节点检测事务分支是否创建成功。
第一网络代理节点接收到事务服务器发送的创建响应后,即可根据该创建响应检测事务分支是否创建成功。若该第一网络代理节点接收到的创建响应为用于指示该事务分支创建失败的第二创建响应,则第一网络代理节点可以执行步骤114;若第一网络代理节点接收到的创建响应为用于指示该事务分支创建成功的第二创建响应,则第一网络代理节点可以执行步骤115。例如,第一网络代理节点011a中的事务分支处理模块0124可以根据接收到的创建响应,检测事务分支是否创建成功。
步骤114、第一网络代理节点向该第一业务数据库发送针对该事务分支的第一回滚指令。
若第一网络代理节点接收到了事务服务器发送的第二创建响应,则可以确定该事务分支创建失败,进而可以向第一业务数据库发送针对该事务分支的第一回滚指令。第一业务数据库可以响应于该第一回滚指令,执行回滚操作。示例的,第一业务数据库可以响应于该第一回滚指令,将其自动提交功能恢复至开启状态。
例如,第一网络代理节点011a中的事务分支处理模块0124可以通过数据库驱动器0125向第一业务数据库03a发送针对该事务分支的第一回滚指令。
步骤115、第一网络代理节点在该第一业务数据中执行该数据库操作语句。
若第一网络代理节点接收到了事务服务器发送的第一创建响应,则可以确定该事务分支创建成功,进而可以在该第一业务数据中执行该数据库操作语句。
例如,参考图2,第一网络代理节点012a中的事务分支处理模块0124可以通过数据库驱动器0125在该第一业务数据03a中执行SQL语句。
步骤116、第一网络代理节点在该分布式事务的事务日志中存储该事务分支的标识以及该数据集的对应关系。
第一网络代理节点执行完成该数据库操作语句后,还可以在该分布式事务的事务日志中记录该事务分支的标识以及该数据库操作语句所针对的数据集的对应关系,以便后续需要回滚该事务分支时,可以基于该事务日志中记录的数据集执行回滚操作。其中,该事务日志可以为该第一业务数据库中创建的用于记录分布式事务的相关数据的日志表。例如,第一网络代理节点011a中的事务分支处理模块0124可以在该分布式事务的事务日志中对应存储该事务分支的标识以及该数据集。
需要说明的是,上述步骤115和步骤116也可以在步骤109之后且在步骤111之前执行,也即是,该第一网络代理节点也可以先执行数据库操作语句,然后再请求创建事务分支。相应的,在上述步骤114中,该第一业务数据库在执行回滚操作时,还需要将其业务数据回滚至执行该数据库操作语句之前的状态。由此可知,通过在确定事务分支创建成功之后再执行该数据库操作语句,可以避免在执行该数据库操作语句之后,若又确定该事务分支创建失败,导致之前执行的数据库操作语句无效的问题。也即是,在事务分支创建失败的场景中不再执行数据库操作语句,可以避免浪费第一业务服务器的计算资源。
步骤117、第一网络代理节点向该第一业务数据库发送针对该事务分支的第一提交指令。
第一网络代理节点在确定事务分支创建成功,并将该事务分支的标识以及数据集对应记录至分布式事务的事务日志之后,即可向第一业务数据库发送针对该事务分支的第一提交指令,该第一提交指令用于指示第一业务数据库提交该事务分支。例如,第一网络代理节点011a中的事务分支处理模块0124可以通过数据库驱动器0125向第一业务数据库03a发送针对该事务分支的第一提交指令。
步骤118、第一网络代理节点向该第一业务客户端发送该事务分支的提交结果。
第一网络代理节点向该第一业务数据库发送针对该事务分支的第一提交指令之后,还可以接收该第一业务数据库返回的提交响应。若第一业务数据库正常完成事务分支的提交,则该提交响应可以指示事务分支提交成功。相应的,第一网络代理节点可以向该第一业务客户端发送用于指示该事务分支提交成功的提交结果。若第一业务数据库由于故障等因素导致事务分支提交失败,则该提交响应可以指示事务分支提交失败。相应的,第一网络代理节点可以向该第一业务客户端发送用于指示该事务分支提交失败的提交结果。例如,第一网络代理节点011a中的事务分支处理模块0124可以向第一业务客户端011a发送该事务分支的提交结果。
需要说明的是,第一网络代理节点在发送该第一提交指令之后,还可以删除其缓存的锁信息。并且,第一网络代理节点若确定该事务分支提交失败,则还可以向该第一业务数据库发送针对该事务分支的第四回滚指令,并向事务服务器发送携带有该事务分支的标识的通知消息。其中,该第四回滚指令可以用于指示该第一业务数据库执行回滚操作,该通知消息可以用于指示该事务服务器删除该事务分支的锁信息,即指示该事务服务器为该事务分支放锁。
第一网络代理节点在向第一业务数据库发送完成该第一回滚指令,或者向第一业务客户端发送该事务分支的提交结果之后,即可完成该分布式事务的第一阶段的操作。该第一阶段也可以称为请求阶段或者表决阶段。由于在实现分布式事务的第一阶段的操作的过程中,事务分支的创建和处理均可以由网络代理节点来实现,而业务客户端仅需要调用启动事务API和操作指令创建API,上述API的调用对业务客户端原有的业务逻辑的影响较小,因此可以有效降低业务客户端适配分布式事务处理架构的成本。
步骤119、第二业务客户端向该第一业务客户端发送服务调用响应。
在本申请实施例中,第二业务客户端在接收到第一业务客户端发送的携带有分布式事务的上下文的服务调用请求后,可以基于该服务调用请求确定该第二业务客户端待执行的事务分支,进而可以生成用于实现该事务分支的数据库操作语句。
示例的,假设该第二业务客户端为B银行的业务客户端,且该B银行的业务客户端接收到的服务调用请求用于指示将该第二账户的余额增加1000,则该B银行的业务客户端可以生成用于指示该第二账户的余额增加1000的数据库操作语句。
参考图2可以看出,该第二业务客户端011b中也部署有API模块0111、通信模块0112、数据库驱动器0113、服务调用模块0114以及处理模块0115。该第二业务客户端011b的处理模块0115可以通过调用该API模块0111生成数据库操作指令L2,并通过数据库驱动器0113向第二业务数据库03b发送该数据库操作指令L2。如图2所示,该第二网络代理节点012b中的连接管理模块0121可以获取该数据库操作指令L2,解析模块0122可以解析该数据库操作指令L2。进而事务分支处理模块0124可以基于解析后的数据库操作指令L2,向事务服务器01发送事务分支创建请求S2,以创建并处理事务分支。该第二网络代理节点012b的事务分支处理模块0124处理完成事务分支后,可以向第二业务客户端011b返回事务分支的提交结果。
该第二业务客户端011b的处理模块0115若根据该提交结果确定该事务分支提交成功,则可以向第一业务客户端011a发送用于指示服务调用成功的服务调用响应。第二业务客户端011b的处理模块0115若根据该提交结果确定该事务分支提交失败,则可以向第一业务客户端011a发送用于指示服务调用失败的服务调用响应。该服务调用响应可以通过第二网络代理节点012b和第一网络代理节点012a透传至该第一业务客户端011a。
也即是,在上述步骤108之后,第二业务客户端011b可以执行上述步骤103、步骤104以及步骤106至步骤108所示的方法,第二网络代理节点012b可以执行上述步骤105,以及步骤109至步骤118所示的方法。其中,该第二业务客户端011b以及第二网络代理节点012b执行的操作可以参考上述步骤103至步骤118的相关描述,此处不再赘述。
需要说明的是,第二业务客户端011b的处理模块0115在接收到第一业务客户端011a发送的服务调用请求后,若确定其运行自身的服务即可实现该待执行的事务分支,则可以无需调用其他业务客户端的服务,即无需执行上述步骤108所示的方法。若第二业务客户端011b的处理模块0115确定还需要调用第三业务服务器中的第三业务客户端的服务,则可以指示服务调用模块0114执行上述步骤108所示的方法。相应的,该第三业务服务器中的第三业务客户端和第三网络代理节点也需执行上述步骤103至步骤118所示的方法。也即是,除了该第一业务服务器和第二业务服务器之外,该第三业务服务器也是该分布式事务的参与者之一。
还需要说明的是,第一业务客户端也可以在确定其事务分支提交成功后再向第二业务客户端发送该服务调用请求。也即是,上述步骤108也可以在步骤118之后执行。相应的,该第一业务客户端向第二业务客户端发送的服务调用请求中携带的分布式事务的上下文还可以包括:该第一网络代理节点执行的事务分支的标识。该事务分支的标识可以是该第一网络代理节点接收到第一创建响应后发送至第一业务客户端的。
若第二业务客户端接收到的服务调用请求中所携带的分布式事务的上下文还包括该第一网络代理节点执行的事务分支的标识,则该第二业务客户端生成的数据库操作指令中携带的分布式事务的上下文也包括该第一网络代理节点执行的事务分支的标识。由此,该第二网络代理节点向事务服务器发送的事务分支创建请求中即可携带该分布式事务的标识,以及该第一网络代理节点执行的事务分支的标识。事务服务器接收到该事务分支创建请求后,即可确定该第一业务客户端调用了第二业务客户端的服务。也即是,事务服务器可以基于事务分支创建请求中携带的事务分支的标识,明确各个业务客户端之间的服务调用情况。
还需要说明的是,第一业务客户端也可以在确定第二业务客户端的服务调用成功后,再生成数据库操作语句。即上述步骤108和步骤109也可以在步骤103之前执行。或者,上述步骤108也可以与步骤103同步执行,即第一业务服务器和第二业务服务器可以同步处理事务分支,由此可以确保分布式事务的处理效率。
对于第一业务客户端处理完其事务分支后再发送服务调用请求的场景,若该第一业务客户端确定其事务分支创建失败,或者事务分支提交失败,则可以提前确定该分布式事务执行失败。因此,第一业务客户端也无需再向第二业务客户端发送服务调用请求,即第一业务客户端可以无需再执行该步骤108。由此,可以避免浪费第二业务服务器的计算资源。
同理,对于第一业务客户端先调用第二业务客户端的服务,然后再处理其事务分支的场景,若该第一业务客户端确定第二业务客户端的服务调用失败,也可以提前确定该分布式事务执行失败。因此,第一业务客户端也无需再执行上述步骤103、步骤104、步骤106和步骤107。由此,可以避免浪费该第一业务服务器的计算资源。
步骤120、第一业务客户端根据该提交结果和该服务调用响应,向该事务服务器发送针对该分布式事务的提交指令或者回滚指令。
第一业务客户端接收到第一网络代理节点发送的事务分支的提交结果,以及第二业务客户端发送的服务调用响应后,若确定该第一业务服务器中的事务分支提交成功,且该第二业务客户端的服务调用成功,则可以确定用于实现该分布式事务的各个事务分支均提交成功,因此可以向事务服务器发送针对该分布式事务的提交指令。该提交指令用于指示提交该分布式事务包括的各个事务分支。
若第一业务客户端确定该第一业务服务器中的事务分支提交失败,或者该第二业务客户端的服务调用失败,则可以向事务服务器发送针对该分布式事务的回滚指令,该回滚指令用于指示回滚该分布式事务包括的各个事务分支。其中,针对该分布式事务的提交指令或者回滚指令中均携带有该分布式事务的上下文。
需要说明的是,在本申请实施例中,该第一业务客户端可以调用多个第二业务客户端的服务。相应的,第一业务客户端可以接收到该多个第二业务客户端发送的服务调用响应。则第一业务客户端需要在确定该第一业务服务器中的事务分支提交成功,且每个第二业务客户端的服务均调用成功后,才可以确定用于实现该分布式事务的各个事务分支均提交成功,并发送针对该分布式事务的提交指令。同理,第一业务客户端若确定该第一业务服务器中的事务分支提交失败,或者任一第二业务客户端的服务调用失败,则可以发送针对该分布式事务的回滚指令。
示例的,如图2所示,该第一业务客户端011a中的API模块0111还可以包括提交/回滚事务API。第一业务客户端011a的处理模块0115可以通过调用该提交事务(CommitTransaction)API,向事务服务器02发送针对该分布式事务的提交指令R2,或者可以通过调用该回滚事务(Rollback Transaction)API,向事务服务器02发送针对该分布式事务的回滚指令R2。参考图2可以看出,该针对该分布式事务的提交或回滚指令R2可以由第一网络代理节点012a的透传模块0123透传至事务服务器02。
该提交事务API以及该回滚事务API中每个API的输入参数均可以包括事务服务器的地址,以及该分布式事务的标识。且该提交事务API的返回值为0可以表示提交成功,返回值为-1可以表示提交失败。同理,该回滚事务API的返回值为0可以表示回滚成功,返回值为-1可以表示回滚失败。其中,该提交事务API以及该回滚事务API中每个API的返回值的数据类型可以为整型(int)。
还需要说明的是,若第一业务客户端根据已接收的提交结果或者已接收到的部分服务调用响应即可确定该分布式事务执行失败,则可以直接向事务服务器发送针对该分布式事务的回滚指令,而无需再等待所有的提交结果和服务调用响应均接收到后再发送该回滚指令。由此,可以有效提高分布式事务的处理效率。
步骤121、事务服务器向每个参与该分布式事务的业务服务器中的网络代理节点发送针对事务分支的第三提交指令或者第三回滚指令。
事务服务器接收到第一业务客户端发送的针对该分布式事务的提交指令或者回滚指令后,可以先确定参与该分布式事务各个业务服务器,以及每个业务服务器所执行的事务分支。进而可以分别向每个业务服务器中的网络代理节点发送针对该业务服务器所执行的事务分支的第三提交指令或者第三回滚指令。该第三提交指令和第三回滚指令中均可以携带有该业务服务器所执行的事务分支的标识。
示例的,参考图2,假设参与分布式事务的业务服务器包括第一业务服务器01a和第二业务服务器01b,并且第一业务服务器01a执行了该分布式事务的事务分支1,第二业务服务器01b执行了该分布式事务的事务分支2。则事务服务器02在接收到该第一业务客户端011a发送的针对该分布式事务的提交指令后,可以向第一网络代理节点012a发送针对该事务分支1的第三提交指令Z1,并可以向第二网络代理节点012b发送针对该事务分支2的第三提交指令Z2。若第二业务服务器01b还调用第三业务服务器中的业务客户端执行了事务分支3,则该事务服务器02还需要向该第三业务服务器中的网络代理节点012b发送针对该事务分支3的第三提交指令。
步骤122、第一网络代理节点处理接收到的指令。
第一网络代理节点若接收到该事务服务器发送的针对该事务分支的第三提交指令,则可以根据该第三提交指令中携带的事务分支的标识,清理该分布式事务的事务日志中记录的该事务分支的标识以及对应的数据集。
第一网络代理节点若接收到该事务服务器发送的针对该事务分支的第三回滚指令,则可以根据该第三回滚指令中携带的事务分支的标识,从分布式事务的事务日志中获取对应的数据集。然后第一网络代理节点可以基于该数据集创建数据集回滚语句,并在第一业务数据库中执行该数据集回滚语句,从而回滚该事务分支。也即是,第一网络代理节点可以通过执行该数据集回滚语句,将该第一业务数据库中的业务数据恢复至执行事务分支之前的状态。
示例的,若用于实现该事务分支的数据库操作语句为更新(update)语句,则该第一网络代理节点创建的数据集回滚语句也可以为update语句。若用于实现该事务分支的数据库操作语句为插入(insert)语句,则该第一网络代理节点创建的数据集回滚语句可以为删除(delete)语句。若用于实现该事务分支的数据库操作语句为delete语句,则该第一网络代理节点创建的数据集回滚语句可以为insert语句。
需要说明的是,第二网络代理节点接收到该事务服务器发送的第三提交指令或第三回滚指令后,也可以通过上述步骤122所示的方法处理其接收到的指令,本申请实施例对此不再赘述。例如,参考图2,每个网络代理节点中的事务分支处理模块0124可以用于处理接收到的指令。各个网络代理节点在处理完成事务服务器发送的第三提交指令或第三回滚指令之后,即可完成该分布式事务的第二阶段的操作。该第二阶段也可以称为提交阶段或者执行阶段。
基于上文描述可知,在实现分布式事务的第二阶段的操作的过程中,事务分支的提交或回滚均可以由网络代理节点来实现,而业务客户端仅需要调用提交/回滚事务API,该API的调用对业务的侵入性较低,即对业务客户端原有的业务逻辑的影响较小,因此可以有效降低业务客户端适配分布式事务处理架构,以实现分布式改造时的成本。
还需要说明的是,若某个网络代理节点在上述步骤122之前,由于事务分支创建失败或者事务分支提交失败已经执行过回滚操作,则在上述步骤122中,该网络代理节点可以无需再处理该第三回滚指令。
或者,每个网络代理节点也可以在上述步骤117后,向事务服务器发送事务分支的提交结果,事务服务器进而可以根据该提交结果确定每个业务服务器中的事务分支是否执行成功。相应的,在上述步骤121中,事务服务器可以仅向事务分支执行成功的业务服务器中的网络代理节点发送该第三回滚指令,而无需再向事务分支执行失败的业务服务器中的网络代理节点发送该第三回滚指令。
综上所述,本申请实施例提供了一种分布式事务的处理方法,该分布式事务的处理方法中,业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口(例如try、confirm和cancel接口),从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
并且,相比于传统的TCC技术,本申请实施例提供的方案在实现分布式事务的过程中,事务分支的创建和处理均可以由网络代理节点来实现,而业务客户端仅需要调用启动事务API、操作指令创建API以及提交/回滚事务API,上述API的调用对业务的侵入性较低,即对业务客户端原有的业务逻辑的影响较小,因此可以有效降低业务客户端在平台即服务(platform as a service,PaaS)平台中适配分布式事务处理架构,以实现务分布式改造时的成本,提高了业务客户端进行分布式改造时的效率。而且,上述启动事务API、操作指令创建API以及提交/回滚事务API均可以由PaaS平台提供,由于上述API的功能较为简单,因此可以支持多种编程语言。由此可以确保采用不同编程语言开发实现的业务客户端在进行分布式改造时,都可以部署上述API,从而能够以较低的开发成本实现跨编程语言的分布式事务处理系统。
此外,由于该分布式事务处理系统中的各个业务客户端均采用数据库协议与业务数据库进行数据交互,而网络代理节点可以通过携带有分布式事务的上下文的数据库操作指令来创建和处理事务分支,因此即使该分布式事务处理系统中的各个业务客户端采用不同的编程语言开发实现,也不会对网络代理节点创建和处理事务分支造成影响。也即是,基于本申请实施例提供的方案,网络代理节点仅需支持数据库协议即可适配于采用不同编程语言开发得到的业务客户端。由此可知,本申请实施例的方案能够以较低的成本,使得跨编程语言的分布式事务处理系统实现分布式事务的数据一致性。
图4是本申请实施例提供的另一种分布式事务的处理方法的流程图,该方法可以应用于如图1或图2所示的系统中。本申请实施例以该方法应用于如图2所示的系统,且以该第一业务客户端待执行的事务分支包含多次针对数据库的操作为例进行说明。参考图4,该方法可以包括:
步骤201、第一业务客户端向事务服务器发送分布式事务的创建请求。
步骤201的实现过程可以参考图3所示实施例中步骤101的相关描述,此处不再赘述。
步骤202、事务服务器向第一业务客户端发送为该分布式事务分配的标识。
步骤202的实现过程可以参考图3所示实施例中步骤102的相关描述,此处不再赘述。
步骤203、第一业务客户端生成用于实现该分布式事务中待执行的事务分支的多个数据库操作语句。
步骤203的实现过程可以参考图3所示实施例中步骤103的相关描述,此处不再赘述。
步骤204、第一业务客户端向第一业务数据库发送第二设置指令。
由于用于实现该事务分支的数据库操作语句的个数大于1,因此第一业务客户端可以确定该多个数据库操作语句均执行完成后才可以提交该事务分支,进而可以向第一业务数据库发送第二设置指令,该第二设置指令用于指示将第一业务数据库的自动提交功能设置为关闭状态。例如,参考图2,第一业务客户端011a的处理模块0115可以在检测到数据库操作语句的个数大于1时,指示数据库驱动器0113向第一业务数据库03a发送第二设置指令。
步骤205、第一网络代理节点获取该第二设置指令,并记录第一业务数据库的自动提交功能为关闭状态。
由于第一业务客户端发送至第一业务数据库的第二设置指令需要通过第一网络代理节点转发,因此第一网络代理节点可以获取到该第二设置指令,并可以根据该第二设置指令记录第一业务数据库的自动提交功能为关闭状态。并且,第一网络代理节点可以在完成状态记录后,将该第二设置指令转发至该第一业务数据库。该第一网络代理节点记录第一业务数据库的自动提交功能为关闭状态,可以确定用于实现事务分支的数据库操作语句的个数大于1。进而,该第一网络代理节点在接收到数据库操作指令后,即可确定应采用何种方式获取事务分支的锁信息,并创建事务分支。
示例的,第一网络代理节点中可以记录有第一业务数据库的状态标识,第一网络代理节点可以在获取到该第二设置指令后,将该状态标识设置为false,以指示该第一业务数据库的自动提交功能为关闭状态。例如,第一网络代理节点012a中的事务分支处理模块0124可以记录该第一业务数据库的状态标识。
步骤206、第一业务客户端基于该多个数据库操作语句和该分布式事务的上下文生成多个数据库操作指令。
在本申请实施例中,对于用于实现该事务分支的每个数据库操作语句,第一业务客户端均可以将分布式事务的上下文与该数据库操作语句组合,从而生成一个数据库操作指令。由于在本实施例中,用于实现该事务分支的数据库操作语句的个数大于1,因此第一业务客户端基于该多个数据库操作语句可以生成多个数据库操作指令。其中,每个数据库操作指令均包括至少一个数据库操作语句以及该分布式事务的上下文。在本申请实施例中,至少一个是指一个或多个,多个是指两个或两个以上。例如,该每个数据库操作指令可以包括一个数据库操作语句。生成每个数据库操作指令的过程可以参考图3所示实施例中步骤106的相关描述,此处不再赘述。
步骤207、第一业务客户端向第一业务数据库发送多个数据库操作指令。
第一业务客户端生成该多个数据库操作指令后,即可将该多个数据库操作指令依次发送至该第一业务数据库。
例如,参考图2,第一网络代理节点012a中的数据库驱动器0113可以向第一业务数据库03a发送多个数据库操作指令。
步骤208、第一业务客户端向第二业务客户端发送服务调用请求。
步骤208的实现过程可以参考图3所示实施例中步骤108的相关描述,此处不再赘述。
步骤209、第一网络代理节点获取该多个数据库操作指令,并从第一业务数据库中获取每个数据库操作语句所针对的数据集。
对于获取到的每个数据库操作指令,第一网络代理节点均可以从该数据库操作指令中解析出数据库操作语句,进而从第一业务数据库中获取该数据库操作语句所针对的数据集。其中,获取每个数据库操作语句所针对的数据集的过程可以参考图3所示实施例中步骤109的相关描述,此处不再赘述。
步骤210、第一网络代理节点获取每个数据库操作语句所针对的数据集的锁信息。
该每个数据库操作语句所针对的数据集的锁信息可以包括该数据集所在数据表的表名,以及该数据集所在行的主键。例如,第一网络代理节点012a中的事务分支处理模块0124可以获取每个数据库操作语句所针对的数据集的锁信息。
步骤211、第一网络代理节点存储每个数据库操作语句所针对的数据集以及该每个数据库操作语句所针对的数据集的锁信息。
在本申请实施例中,第一网络代理节点若确定该第一业务数据库的自动提交功能处于关闭状态,则可以确定用于实现事务分支的数据库操作语句的个数大于1。进而,第一网络代理节点可以确定在用于实现事务分支的多个数据库操作语句均执行成功后,才可以根据获取到的锁信息请求创建该事务分支,因此该第一网络代理节点需先存储该每个数据库操作语句所针对的数据集以及该每个数据库操作语句所针对的数据集的锁信息。并且,为了便于后续创建或回滚事务分支,第一网络代理节点可以将分布式事务的标识,用于实现该事务分支的多个数据库操作语句所针对的数据集,以及该数据集的锁信息进行对应存储。也即是,该第一网络代理节点可以将用于实现同一个事务分支的多个数据库操作语句所针对的数据集进行合并存储,并可以将该多个数据库操作语句所针对的数据集的锁信息进行合并存储。例如,第一网络代理节点012a中的事务分支处理模块0124可以存储该每个数据库操作语句所针对的数据集以及该每个数据库操作语句所针对的数据集的锁信息。
示例的,假设分布式事务的标识为ID1,在上述步骤203中,第一业务客户端生成的用于实现待执行的事务分支的数据库操作语句包括Y1、Y2和Y3,该三条数据库操作语句所针对的数据集分别为D1、D2和D3,该三个数据集的锁信息分别为S1、S2和S3。则该第一网络代理节点可以存储分布式事务的标识ID1,与数据集D1、D2和D3的合集,以及锁信息S1、S2和S3的合集的对应关系。
步骤212、第一网络代理节点在该第一业务数据库中执行每个数据库操作语句。
例如,第一网络代理节点012a中的事务分支处理模块0124在存储每个数据库操作语句所针对的数据集和每个数据库操作语句所针对的数据集的锁信息之后,即可通过数据库驱动器0125在该第一业务数据03a中执行每个数据库操作指令中的数据库操作语句。
步骤213、第一网络代理节点向第一业务客户端发送每个数据库操作语句的执行结果。
第一网络代理节点每执行完成一条数据库操作语句,即可向第一业务客户端发送该数据库操作语句的执行结果。该执行结果可以用于指示该数据库操作语句执行成功或者执行失败。例如,第一网络代理节点012a中的事务分支处理模块0124可以向第一业务客户端011a发送每个数据库操作语句的执行结果。
步骤214、第一业务客户端检测每个数据库操作语句是否均执行成功。
第一业务客户端可以根据第一网络代理节点发送的执行结果,检测用于实现该事务分支的每个数据库操作语句是否均执行成功。若任一数据库操作语句执行失败,则第一业务客户端可以执行步骤215;若每个数据库操作语句均执行成功,则第一业务客户端可以执行步骤218。例如,第一业务客户端011a中的处理模块0115可以检测每个数据库操作语句是否均执行成功。
步骤215、第一业务客户端向第一业务数据库发送针对该事务分支的第二回滚指令。
第一业务客户端若检测到任一数据库操作语句执行失败,则可以确定该事务分支未执行成功,因此可以向第一业务数据库发送针对该事务分支的第二回滚指令。例如,第一业务客户端011a中的处理模块0115可以在检测到任一数据库操作语句执行失败时,指示数据库驱动器0113发送该第二回滚指令。
步骤216、第一网络代理节点删除存储的数据集和锁信息。
第一网络代理节点若获取到该第一业务客户端发送的针对该事务分支的第二回滚指令,则可以确定该事务分支执行失败,因此可以删除其存储的每个数据库操作语句所针对的数据集,以及每个数据库操作语句所针对的数据集的锁信息,避免该数据集和锁信息占用过多的存储空间。例如,第一网络代理节点012a中的事务分支处理模块0124可以删除存储的每个数据库操作语句所针对的数据集,以及每个数据库操作语句所针对的数据集的锁信息。
步骤217、第一网络代理节点向第一业务数据库发送该第二回滚指令。
第一网络代理节点接收到该第二回滚指令后,还可以将该第二回滚指令转发至该第一业务数据库。该第一业务数据库接收到该第二回滚指令后,即可回滚该事务分支。例如,第一网络代理节点012a中的事务分支处理模块0124可以通过数据库驱动器0125向第一业务数据库03a发送该第二回滚指令。
步骤218、第一业务客户端向第一业务数据库发送针对该事务分支的第二提交指令。
第一业务客户端若检测到用于实现该事务分支的多个数据库操作语句均执行成功,则可以确定该事务分支执行成功,因此可以向第一业务数据库发送针对该事务分支的第二提交指令。例如,第一业务客户端011a的处理模块0115可以在检测到用于实现该事务分支的多个数据库操作语句均执行成功时,指示数据库驱动器0113发送该第二提交指令。
步骤219、第一网络代理节点获取存储的每个数据库操作语句所针对的数据集的锁信息。
第一网络代理节点若获取到该第一业务客户端发送的针对该事务分支的第二提交指令,则可以获取通过上述步骤211存储的每个数据库操作语句所针对的数据集的锁信息。该第一网络代理节点获取到的多个数据库操作语句所针对的数据集的锁信息即为事务分支的锁信息。例如,第一网络代理节点012a中的事务分支处理模块0124可以获取存储的每个数据库操作语句所针对的数据集的锁信息。
需要说明的是,若第一网络代理节点接收到的数据库操作指令中的数据库操作语句不会更改第一业务数据库中的数据,例如当该数据库操作语句为查询语句时,则第一网络代理节点不会获取并存储该数据库操作语句所针对的数据集的锁信息。因此,第一网络代理节点在获取到该第二提交指令后,若未获取到其预先存储数据集的锁信息,即第一网络代理节点在接收到第二提交指令之前并未存储任何数据集的锁信息,则第一网络代理节点可以直接转发该第二提交指令,而无需再执行后续操作。
步骤220、第一网络代理节点向该事务服务器发送事务分支创建请求。
第一网络代理节点获取到事务分支的锁信息后,即可向事务服务器发送事务分支创建请求。该事务分支创建请求中可以包括该数据集的锁信息以及该分布式事务的标识。例如,第一网络代理节点012a中的事务分支处理模块0124可以向该事务服务器02发送事务分支创建请求。
在该第一网络代理节点发送事务分支创建请求之后,事务服务器可以根据该创建请求中所携带的锁信息检测是否能够创建事务分支。由于该场景中,创建请求中携带的事务分支的锁信息包括多个数据集的锁信息,因此事务服务器可以在确定每个数据集的锁信息均与其所存储的其他事务分支的锁信息不同时,确定能够创建该事务分支。若事务服务器检测到任一数据集的锁信息与其所存储的其他事务分支的锁信息相同,则可以确定无法创建该事务分支。
在步骤220之后,该分布式事务处理系统即可继续执行上述图3所示实施例中步骤112至步骤122所示的方法,故此处不再赘述。
综上所述,本申请实施例提供了一种分布式事务的处理方法,该分布式事务的处理方法中,网络代理节点可以基于业务数据库的自动提交功能的状态,准确地确定用于实现事务分支的数据库操作语句的个数是否大于1。进而,该网络代理节点可以根据该数据库操作语句的个数的不同,采用不同的方式获取锁信息并创建事务分支,从而有效提高了创建事务分支的灵活性。
在本申请实施例提供的分布式事务处理系统中,每个业务服务器中的网络代理节点均可以拦截该业务服务器中业务客户端发送的数据包,并可以检测该业务客户端发送的数据包的接收方是否为业务数据库,若该数据包的接收方为业务数据库,则网络代理节点可以获取该数据包,并对该数据包进行解析。若该数据包的接收方不为该业务数据库,则网络代理节点可以直接转发该数据包。
为了实现对业务客户端发送至业务数据库的数据包的有效拦截,参考图5,每个业务服务器中的网络代理节点还可以执行如下操作:
步骤301、拦截业务客户端发送的数据包。
步骤302、检测该数据包是否为新建连接请求。
对于业务客户端发送的每个数据包,网络代理节点均可以检测该数据包是否为新建连接请求。若该数据包为新建连接请求,则网络代理节点可以执行步骤303;若该数据包不为新建连接请求,则网络代理节点可以执行步骤306。
步骤303、新建连接。
若该业务客户端发送的数据包为新建连接请求,则网络代理节点可以与该新建连接请求所请求的连接方新建连接。例如,网络代理节点可以创建与该连接方的套接字(socket)连接。之后,网络代理节点可以执行步骤304。
步骤304、检测该连接是否为与业务数据库的连接。
在完成与连接方的连接后,网络代理节点可以继续检测该连接是否为与业务数据库的连接。若该连接为与业务数据库的连接,则可以执行步骤305。若该连接不为与业务数据库的连接,则可以继续执行步骤301,即继续拦截业务客户端发送的数据包。例如,若该连接为与事务服务器的连接,则网络代理节点可以继续执行步骤301。
可选的,网络代理节点可以根据业务客户端与该连接方之间的连接协议,检测该连接是否为与业务数据库的连接。
步骤305、标记该连接。
若网络代理节点检测到该连接为与业务数据库的连接,则可以标记该连接。例如,网络代理节点可以在该连接的属性描述字段中添加检测标记,从而实现对该连接的标记。通过标记该与业务数据库的连接,可以便于后续快速检测业务客户端发送的数据包的接收方是否为该业务数据库。之后,网络代理节点可以继续执行步骤301,即继续拦截业务客户端发送的数据包。
步骤306、检测该数据包是否属于标记的连接。
在上述步骤302中,若网络代理节点检测到该数据包不为新建连接请求,则可以继续检测该数据包是否属于标记的连接,也即是,继续检测该数据包是否为发送至业务数据库的数据包。例如,该网络代理节点可以检测该数据包所属的连接的属性描述字段中是否添加有检测标记。若添加有该检测标记,则可以确定该数据包属于标记的连接;若未添加检测标记,则可以确定该数据包不属于标记的连接。
若该数据包属于标记的连接,则网络代理节点可以确定该数据包为发送至业务数据库的数据包,因此可以执行步骤307;若该数据包不属于标记的连接,则网络代理节点可以确定该数据包不为发送至业务数据库的数据包,因此可以执行步骤308。
示例的,参考图2,每个网络代理节点可以包括连接管理模块0121,上述步骤301至步骤306可以由该连接管理模块0121实现。
步骤307、获取并解析该数据包。
若网络代理节点检测到该数据包属于标记的连接,则可以获取并解析该数据包。例如,网络代理节点可以基于数据库协议解析该数据包。参考图2,每个网络代理节点可以包括解析模块0122,该解析模块0122可以解析该数据包。
可选的,网络代理节点可以先检测该数据包是否为用于设置业务数据库的自动提交状态的设置指令,若该数据包为该设置指令,则网络代理节点可以执行上述步骤105或者步骤205所示的方法。若该数据包不为该设置指令,则网络代理节点可以继续检测该数据包是否为针对事务分支的提交指令或回滚指令。
若该数据包为针对事务分支的提交指令,则网络代理节点可以执行上述步骤218和步骤219所示的方法;若该数据包为针对事务分支的回滚指令,则网络代理节点可以执行上述步骤216所示的方法。若该数据包不为针对事务分支的提交指令或回滚指令,则网络代理节点可以继续检测该数据包是否为携带有分布式事务的上下文的数据库操作指令。
若该数据包中并未携带分布式事务的上下文,则网络代理节点可以直接向业务数据库转发该数据包;若该数据包为携带有分布式事务的上下文的数据库操作指令,则网络代理节点可以执行上述步骤109或步骤209所示的方法。
在本申请实施例中,由于网络代理节点仅需解析业务客户端发送至业务数据库的数据包,而业务客户端均基于数据库协议与业务数据库进行数据交互,因此该网络代理节点仅需支持数据库协议即可适配于不同编程语言开发得到的业务客户端。也即是,本申请实施例提供的方案可以应用于跨编程语言的分布式事务处理系统中。
步骤308、透传该数据包。
若网络代理节点检测到该数据包不属于标记的连接,则可以直接透传该数据包。例如,若该数据包为发送至事务服务器或者其他业务服务器的数据包,则网络代理节点可以直接透传该数据包。参考图2,每个网络代理节点可以包括透传模块0123,该透传模块0123可以透传该数据包。
综上所述,本申请实施例提供的网络代理节点拦截数据包的方法中,由于网络代理节点可以在新建与业务数据库的连接时标记该连接,因此可以便于后续快速检测业务客户端发送的数据包的接收方是否为该业务数据库,从而有效提高了检测数据包的接收方的效率。并且,由于网络代理节点根据业务客户端发送至业务数据库的数据包即可实现事务分支的创建和处理,因此网络代理节点仅需对业务客户端发送至业务数据库的数据包进行解析,而对于发送至其他接收方的数据包则可以直接透传。由此可以避免增加网络代理节点解析的数据包的数量,提高网络代理节点解析数据包的效率。
需要说明的是,本申请实施例提供的分布式事务的处理方法的步骤先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。例如,步骤106可以在步骤105之前执行,步骤206可以在步骤205之前执行;步骤108可以在步骤107之前执行,步骤208可以在步骤207之前执行。或者步骤115和步骤116可以在步骤111之前执行。又或者,步骤119也可以在步骤118之前执行。再或者,步骤108也可以在步骤109之后执行,步骤208也可以在步骤209之后执行,例如步骤108可以在步骤118之后执行,步骤208可以在步骤218之后执行。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。
综上所述,本申请实施例提供了一种分布式事务的处理方法,该分布式事务的处理方法中,业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口(例如try、confirm和cancel接口),从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
并且,相比于传统的TCC技术,本申请实施例提供的方案在实现分布式事务的过程中,事务分支的创建和处理均可以由网络代理节点来实现,而业务客户端仅需要调用启动事务API、操作指令创建API以及提交/回滚事务API,上述API的调用对业务的侵入性较低,即对业务客户端原有的业务逻辑的影响较小,因此可以有效降低业务客户端在平台即服务PaaS平台中适配分布式事务处理架构,以实现业务分布式改造时的成本,提高了业务客户端进行分布式改造时的效率。而且,上述启动事务API、操作指令创建API以及提交/回滚事务API均可以由PaaS平台提供,由于上述API的功能较为简单,因此可以支持多种编程语言。由此可以确保采用不同编程语言开发实现的业务客户端在进行分布式改造时,都可以部署上述API,从而能够以较低的开发成本实现跨编程语言的分布式事务处理系统。
此外,由于该分布式事务处理系统中的各个业务客户端均采用数据库协议与业务数据库进行数据交互,而网络代理节点可以通过携带有分布式事务的上下文的数据库操作指令来创建和处理事务分支,因此即使该分布式事务处理系统中的各个业务客户端采用不同的编程语言开发实现,也不会对网络代理节点创建和处理事务分支造成影响。也即是,基于本申请实施例提供的方案,网络代理节点仅需支持数据库协议即可适配于采用不同编程语言开发得到的业务客户端。由此可知,本申请实施例的方案能够以较低的成本,使得跨编程语言的分布式事务处理系统实现分布式事务的数据一致性。
本申请实施例提供了一种网络代理节点,该网络代理节点可以部署于分布式事务处理系统的业务服务器中,例如可以部署于如图1或图2所示的分布式事务处理系统的业务服务器01中。参考图1和图2可以看出,该分布式事务处理系统还包括事务服务器02和多个业务数据库03,且该业务服务器01中还部署有业务客户端011。如图2所示,该网络代理节点包括:连接管理模块0121、解析模块0122、透传模块0123、事务分支处理模块0124以及数据库驱动器0125。
该连接管理模块0121,用于接收业务客户端发送的一个或多个数据库操作指令,并将该一个或多个数据库操作指令发送至解析模块0122。
该解析模块0122,用于获取并解析该业务客户端发送的每个数据库操作指令,该每个数据库操作指令包括:数据库操作语句以及分布式事务的上下文,其中,该一个或多个数据库操作指令包括的数据库操作语句用于实现该分布式事务的事务分支,该分布式事务的上下文包括该分布式事务的标识。该解析模块0122还用于将解析得到的数据库操作语句以及分布式事务的上下文发送至事务分支处理模块0124。该解析模块0122的功能实现可以参考上述方法实施例中步骤109和步骤209的相关描述。
该事务分支处理模块0124,用于:在该业务数据库中执行该数据库操作语句;以及向该事务服务器发送事务分支创建请求,该事务分支创建请求包括该分布式事务的标识。该事务分支处理模块0124的功能实现可以参考上述方法实施例中步骤111和步骤220的相关描述。
可选的,该事务分支处理模块0124,还用于:获取数据集的锁信息,该数据集是该一个或多个数据库操作指令包括的数据库操作语句所针对的,该数据集的锁信息用于在该业务数据库中标识该数据集;相应的,该事务分支创建请求还包括该数据集的锁信息。
可选的,该事务分支处理模块0124可以用于:确定该业务数据库的自动提交功能处于开启状态,在接收到该事务服务器发送的用于指示该事务分支创建成功的第一创建响应后,在该业务数据库中执行每个数据库操作指令包括的数据库操作语句。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤115的相关描述。
该事务分支处理模块0124,还可以用于:在接收到该事务服务器发送的用于指示该事务分支创建成功的第一创建响应后,向该业务数据库发送针对该事务分支的第一提交指令。
可选的,该事务分支处理模块0124,还可以用于:在接收到该事务服务器发送的用于指示该事务分支创建失败的第二创建响应后,向该业务数据库发送针对该事务分支的第一回滚指令。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤112至步骤114以及步骤117的相关描述。
可选的,该事务分支处理模块0124,还可以用于确定该业务数据库的自动提交功能处于关闭状态,向该业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果;在获取到该业务客户端发送的针对该事务分支的第二提交指令后,获取该数据集的锁信息。
其中,若用于实现该事务分支的该数据库操作语句的个数大于1,则该业务数据库的自动提交功能被该业务客户端设置为关闭状态;该第二提交指令是该业务客户端在根据该执行结果确定用于实现该事务分支的每个数据库操作语句均执行成功后发送的。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤210至步骤213,以及步骤219的相关描述。
可选的,该事务分支处理模块0124,还可以用于在向该业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果之后,获取该业务客户端发送的针对该事务分支的第二回滚指令,删除该数据集的锁信息,并向该业务数据库发送该第二回滚指令;其中,该第二回滚指令是该业务客户端在确定用于实现该事务分支的任一该数据库操作语句执行失败后发送的。其中,该第二提交指令和第二回滚指令均可以是通过连接管理模块0121和解析模块0122发送至事务分支处理模块0124的。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤216和步骤217的相关描述。
可选的,该事务分支处理模块0124可以用于:获取该业务客户端发送的第一设置指令,根据该第一设置指令记录该业务数据库的自动提交功能为开启状态;其中,该第一设置指令是该业务客户端在确定用于实现该事务分支的该数据库操作语句的个数等于1时发送的。
可选的,该事务分支处理模块0124可以用于:获取该业务客户端发送的第二设置指令,根据该第二设置指令记录该业务数据库的自动提交功能为关闭状态;该第二设置指令是该业务客户端在确定用于实现该事务分支的该数据库操作语句的个数大于1时发送的。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤105和步骤205的相关描述。
可选的,该第一创建响应中携带有该事务服务器为该事务分支分配的标识;该事务分支处理模块0124还可以用于:
在接收到该第一创建响应后,在该分布式事务的事务日志中存储该事务分支的标识以及该数据集的对应关系;接收该事务服务器发送的针对该事务分支的第三提交指令,清理该事务日志中记录的该事务分支的标识以及该数据集。或者,接收该事务服务器发送的针对该事务分支的第三回滚指令,根据该事务分支的标识从该事务日志中获取该数据集,并根据该数据集回滚该事务分支。
其中,该第三提交指令是该事务服务器在接收到该业务客户端发送的针对该分布式事务的提交指令后发送的,该第三回滚指令是该事务服务器在接收到该业务客户端发送的针对该分布式事务的回滚指令后发送的。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤116和步骤122的相关描述。
可选的,该事务分支处理模块0124还可以用于:
在向该业务数据库发送针对事务分支的第一提交指令之后,删除该数据集的锁信息。若确定该事务分支提交成功,则向该业务客户端发送用于指示该事务分支提交成功的提交结果;若确定该事务分支提交失败,则向该业务客户端发送用于指示该事务分支提交失败的提交结果,向该业务数据库发送针对该事务分支的第四回滚指令,并向该事务服务器发送携带有该事务分支的标识的通知消息,该通知消息用于指示该事务服务器删除该事务分支的锁信息。该事务分支处理模块0124的功能实现还可以参考上述方法实施例中步骤118的相关描述。
可选的,该连接管理模块0121可以用于:若检测到该业务客户端发送的数据包的接收方为该业务数据库,则将该数据包发送至解析模块0122;若检测到该业务客户端发送的数据包的接收方不为该业务数据库,则将该数据包发送至透传模块0123。该连接管理模块0121的功能实现可以参考上述方法实施例中步骤301至步骤306的相关描述。
该解析模块0122,用于解析该数据包。该解析模块0122的功能实现可以参考上述方法实施例中步骤307的相关描述。
该透传模块0123,用于向该接收方转发该数据包,即透传该数据包。该透传模块0123的功能实现可以参考上述方法实施例中步骤308的相关描述。
综上所述,本申请实施例提供了一种网络代理节点,该网络代理节点可以根据数据库操作指令中携带的分布式事务的上下文以及数据库操作语句来创建和处理事务分支。由于网络代理节点可以创建和处理事务分支,因此无需业务客户端部署用于创建和处理事务分支的接口(例如try、confirm和cancel接口),从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的网络代理节点中的各模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例提供了一种业务客户端,该业务客户端可以部署于分布式事务处理系统的业务服务器中,例如可以部署于如图1或图2所示的分布式事务处理系统的业务服务器01。参考图1和图2可以看出,该分布式事务处理系统还包括事务服务器02和多个业务数据库03,且该业务服务器01中还部署有网络代理节点。如图2所示,该业务客户端可以包括:API模块0111、通信模块0112、数据库驱动器0113、服务调用模块0114以及处理模块0115。下文以该业务客户端为第一业务服务器01a中的第一业务客户端011a,且该第一业务服务器01a还包括第一网络代理节点012a为例进行说明。
该处理模块0115,用于根据分布式事务中该第一业务客户端待执行的事务分支,生成用于实现该事务分支的一个或多个数据库操作语句。该处理模块0115的功能实现可以参考上述方法实施例中步骤103以及步骤203的相关描述。
该API模块0111,用于基于该一个或多个数据库操作语句和该分布式事务的上下文生成一个或多个数据库操作指令,其中每个数据库操作指令包括:至少一个数据库操作语句以及该分布式事务的上下文,该上下文包括该分布式事务的标识。该API模块0111的功能实现可以参考上述方法实施例中步骤106以及步骤206的相关描述。
该数据库驱动器0113,用于向第一业务数据库发送该一个或多个数据库操作指令,该一个或多个数据库操作指令用于供获取到该一个或多个数据库操作指令的该第一网络代理节点创建并处理该事务分支。该数据库驱动器0113的功能实现可以参考上述方法实施例中步骤107以及步骤207的相关描述。
可选的,该API模块0111,还用于响应于业务请求,向该事务服务器发送该分布式事务的创建请求;以及接收该事务服务器发送的该分布式事务的标识。该API模块0111的功能实现还可以参考上述方法实施例中步骤101、步骤102、步骤201以及步骤202的相关描述。
该服务调用模块0114,用于向参与该分布式事务的第二业务客户端发送服务调用请求,该服务调用请求中携带有该分布式事务的标识。该服务调用模块0114的功能实现可以参考上述方法实施例中步骤108以及步骤208的相关描述。
可选的,该处理模块0115,还用于根据该业务请求,确定该分布式事务中该第一业务客户端待执行的事务分支。
该处理模块0115,还用于接收该第一网络代理节点发送的该事务分支的提交结果,以及接收该第二业务客户端响应于该服务调用请求发送的服务调用响应。
该处理模块0115,还可以用于根据该提交结果和该服务调用响应,指示该API模块0111向该事务服务器发送针对该分布式事务的提交指令或者回滚指令,其中,针对该分布式事务的提交指令用于指示提交该分布式事务包括的各个事务分支,针对该分布式事务的提交指令用于指示回滚该分布式事务包括的各个事务分支。该处理模块0115的功能实现还可以参考上述方法实施例中步骤118至步骤120的相关描述。
可选的,该处理模块0115,还可以用于:接收第二业务客户端发送的服务调用请求,该服务调用请求中携带有该分布式事务的上下文;根据该服务调用请求,确定该分布式事务中该第一业务客户端待执行的事务分支。
可选的,该处理模块0115还可以用于:
确定用于实现该事务分支的数据库操作语句的个数等于1,指示该数据库驱动器0113向该第一业务数据库发送第一设置指令,该第一设置指令用于指示将自动提交功能设置为开启状态的。
或者,确定用于实现该事务分支的数据库操作语句的个数大于1,指示该数据库驱动器0113向该第一业务数据库发送第二设置指令,该第二设置指令用于指示将自动提交功能设置为关闭状态的。该处理模块0115的功能实现还可以参考上述方法实施例中步骤104以及步骤204的相关描述。
可选的,该处理模块0115还可以用于:
在指示数据库驱动器0113向该第一业务数据库发送用于指示将自动提交功能设置为关闭状态的第二设置指令之后,接收该第一网络代理节点发送的每个数据库操作指令包括的数据库操作语句的执行结果;
根据该执行结果确定用于实现该事务分支的每个数据库操作语句均执行成功,指示该数据库驱动器0113向该第一业务数据库发送针对该事务分支的第二提交指令。
或者,根据该执行结果确定用于实现该事务分支的任一该数据库操作语句执行失败,指示该数据库驱动器0113向该第一业务数据库发送针对该事务分支的第二回滚指令。该处理模块0115的功能实现还可以参考上述方法实施例中步骤213至步骤215,以及步骤218的相关描述。
需要说明的是,该业务客户端中的API模块0111和数据库驱动器0113发送的各个请求或指令均通过该通信模块0112发送。
综上所述,本申请实施例提供了一种业务客户端,该业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口(例如try、confirm和cancel接口),从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的业务客户端中的各模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
应理解的是,本申请实施例提供的网络代理节点和业务客户端还可以用专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logic device,PLD)实现,上述PLD可以是复杂程序逻辑器件(complexprogrammable logical device,CPLD),现场可编程门阵列(field-programmable gatearray,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现上述方法实施例提供的分布式事务的处理方法,当通过软件实现上述方法实施例提供的分布式事务的处理方法时,该网络代理节点和业务客户端中的各个模块也可以为软件模块。
下面对本申请实施例提供的分布式事务处理系统的架构进行说明,如图6所示,该分布式事务处理系统可以为一种服务器集群,该服务器集群中包括至少一个服务器1000,各个服务器1000间通过通信网络建立通信通路。
每个服务器1000中包括总线1001、处理器1002、通信接口1003以及存储器1004。处理器1002、存储器1004和通信接口1003之间通过总线1001通信。
其中,处理器1002可以由一个或者多个通用处理器构成,例如中央处理器(central processing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmable logicdevice,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD)、现场可编程逻辑门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
存储器1004可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器1004还可以包括非易失性存储器(non-volatilememory,NVM),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘(hard diskdrive,HDD)或固态硬盘(solid-state drive,SSD)。存储器1004还可以包括上述种类的组合。
存储器1004中存储存可执行代码,处理器1002可以读取存储器1004中的该可执行代码实现功能,还可以通过通信接口1003与其他服务器进行通信。
在本申请实施例中,每个服务器1000中的处理器1002可以实现下述功能中的一种或多种:至少一个业务客户端011的功能,至少一个网络代理节点012的功能,事务服务器02的功能,以及至少一个业务数据库03的功能。也即是,该每个服务器1000中的处理器1002可以仅实现业务客户端011、网络代理节点012、事务服务器02和业务数据库03中的一个节点的功能,或者也可以实现多个节点的功能。相应的,存储器1004中存储有用于实现该处理器1002的功能的模块。
在本申请实施例中,多个服务器1000中的处理器1001可以协调工作,执行本申请实施例提供的分布式事务的处理方法。
可选的,如图7所示,该分布式事务处理系统可以包括多个业务服务器2000,一个事务服务器3000以及多个数据库服务器4000。图7中仅示意性示出了两个业务服务器2000以及两个数据库服务器4000。
其中,每个业务服务器2000包括总线2001、处理器2002、通信接口2003以及存储器2004。处理器2002、存储器2004和通信接口2003之间通过总线2001通信。该事务服务器3000包括总线3001、处理器3002、通信接口3003以及存储器3004。处理器3002、存储器3004和通信接口3003之间通过总线3001通信。每个数据库务服务器4000包括总线4001、处理器4002、通信接口4003以及存储器4004。处理器4002、存储器4004和通信接口4003之间通过总线4001通信。上述处理器2002、处理器3002以及处理器4002的类型可以参见处理器1002的相关说明,此处不再赘述。上述存储器2004、存储器3004以及存储器4004的类型可以参见存储器1004的相关说明,此处不再赘述。
在本申请实施例中,每个业务服务器2000中的处理器2002可以通过运行存储器2004中的计算机程序来实现一个业务客户端011的功能,以及一个网络代理节点012的功能。相应的,如图7所示,每个业务服务器2000中的存储器2004中存储有业务客户端011的各个模块(例如API模块0111、通信模块0112、数据库驱动器0113以及服务调用模块0114),以及网络代理节点012的各个模块(例如连接管理模块0121、解析模块0122、透传模块0123、事务分支处理模块0124以及数据库驱动器0125)。
事务服务器3000中的处理器3002可以通过运行存储器3004中的计算机程序来实现上述实施例中事务服务器02的功能。每个数据库服务器4000中的处理器4002可以通过运行存储器4004中的计算机程序来实现上述实施例中业务数据库03的功能。
综上所述,本申请实施例提供了一种分布式事务处理系统,该系统中的每个业务服务器均包括业务客户端和网络代理节,该网络代理节点可以拦截业务客户端发送的数据包。其中,业务客户端发送至业务数据库的数据库操作指令中可以携带有分布式事务的上下文,使得网络代理节点可以基于该分布式事务的上下文,以及该数据库操作语句来创建和处理事务分支。由于可以通过网络代理节点来创建和处理事务分支,因此无需该业务客户端部署用于创建和处理事务分支的接口,从而有效降低了业务客户端应用于分布式事务处理系统的开发成本。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行如上述方法实施例中由该网络代理节点执行的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行如上述方法实施例中由该业务客户端执行的步骤。
本申请实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述方法实施例中由该网络代理节点执行的步骤。
本申请实施例还提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述方法实施例中由该业务客户端执行的步骤。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (32)

1.一种分布式事务的处理方法,其特征在于,应用于分布式事务处理系统,所述分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端;所述方法包括:
所述网络代理节点获取所述业务客户端发送的一个或多个数据库操作指令,每个数据库操作指令包括:数据库操作语句以及所述分布式事务的上下文,所述一个或多个数据库操作指令包括的数据库操作语句用于实现所述分布式事务的事务分支,所述分布式事务的上下文包括所述分布式事务的标识;
所述网络代理节点在所述业务数据库中执行每个数据库操作指令包括的数据库操作语句;
所述网络代理节点向所述事务服务器发送事务分支创建请求,所述事务分支创建请求包括所述分布式事务的标识。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述网络代理节点获取数据集的锁信息,所述数据集是所述一个或多个数据库操作指令包括的数据库操作语句所针对的,所述数据集的锁信息用于在所述业务数据库中标识所述数据集;
所述事务分支创建请求还包括所述数据集的锁信息。
3.根据权利要求1或2所述的方法,其特征在于,所述网络代理节点在所述业务数据库中执行每个数据库操作指令包括的数据库操作语句,包括:
所述网络代理节点确认所述业务数据库的自动提交功能处于开启状态;
所述网络代理节点在接收到所述事务服务器发送的用于指示所述事务分支创建成功的第一创建响应后,在所述业务数据库中执行每个数据库操作指令包括的数据库操作语句;
所述方法还包括:所述网络代理节点响应于所述第一创建响应,向所述业务数据库发送针对所述事务分支的第一提交指令。
4.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述网络代理节点接收所述事务服务器发送的用于指示所述事务分支创建失败的第二创建响应;
所述网络代理节点响应于所述第二创建响应,向所述业务数据库发送针对所述事务分支的第一回滚指令。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述网络代理节点确认所述业务数据库的自动提交功能处于关闭状态;
所述网络代理节点向所述业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果;
所述网络代理节点获取数据集的锁信息,包括:
所述网络代理节点在获取到所述业务客户端发送的针对所述事务分支的第二提交指令后,获取所述数据集的锁信息;
其中,所述第二提交指令是所述业务客户端在根据所述执行结果确定每个数据库操作指令包括的数据库操作语句均执行成功后发送的。
6.根据权利要求5所述的方法,其特征在于,在所述网络代理节点向所述业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果之后,所述方法还包括:
所述网络代理节点获取所述业务客户端发送的针对所述事务分支的第二回滚指令,删除所述数据集的锁信息;
所述网络代理节点向所述业务数据库发送所述第二回滚指令;
其中,所述第二回滚指令是所述业务客户端在确定任一数据库操作指令包括的数据库操作语句执行失败后发送的。
7.根据权利要求3或5或6所述的方法,其特征在于,所述方法还包括:
所述网络代理节点获取所述业务客户端发送的第一设置指令;
所述网络代理节点根据所述第一设置指令记录所述业务数据库的自动提交功能为开启状态;
其中,所述第一设置指令是所述业务客户端在确定用于实现所述事务分支的数据库操作语句的个数等于1时发送的。
8.根据权利要求3或5或6所述的方法,其特征在于,所述方法还包括:
所述网络代理节点获取所述业务客户端发送的第二设置指令;
所述网络代理节点根据所述第二设置指令记录所述业务数据库的自动提交功能为关闭状态;
其中,所述第二设置指令是所述业务客户端在确定用于实现所述事务分支的数据库操作语句的个数大于1时发送的。
9.根据权利要求1至8任一所述的方法,其特征在于,所述第一创建响应中携带有所述事务服务器为所述事务分支分配的标识;所述方法还包括:
所述网络代理节点在接收到所述事务服务器发送的用于指示所述事务分支创建成功的第一创建响应后,在所述分布式事务的事务日志中存储所述事务分支的标识以及所述数据集的对应关系;
所述网络代理节点接收所述事务服务器发送的针对所述事务分支的第三提交指令,清理所述事务日志中记录的所述事务分支的标识以及所述数据集;
其中,所述第三提交指令是所述事务服务器在接收到所述业务客户端发送的针对所述分布式事务的提交指令后发送的。
10.根据权利要求1至8任一所述的方法,其特征在于,所述第一创建响应中携带有所述事务服务器为所述事务分支分配的标识;所述方法还包括:
所述网络代理节点在接收到所述事务服务器发送的用于指示所述事务分支创建成功的第一创建响应后,在所述分布式事务的事务日志中存储所述事务分支的标识以及所述数据集的对应关系;
所述网络代理节点接收所述事务服务器发送的针对所述事务分支的第三回滚指令,根据所述事务分支的标识从所述事务日志中获取所述数据集,并根据所述数据集回滚所述事务分支;
其中,所述第三回滚指令是所述事务服务器在接收到所述业务客户端发送的针对所述分布式事务的回滚指令后发送的。
11.一种分布式事务的处理方法,其特征在于,应用于分布式事务处理系统,所述分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端;所述方法包括:
第一业务客户端根据所述分布式事务中所述第一业务客户端待执行的事务分支,生成用于实现所述事务分支一个或多个数据库操作语句;
所述第一业务客户端根据所述一个或多个数据库操作语句,生成一个或多个数据库操作指令,每个数据库操作指令包括:至少一个数据库操作语句以及所述分布式事务的上下文,所述分布式事务的上下文包括所述分布式事务的标识;
所述第一业务客户端向第一网络代理节点发送所述一个或多个数据库操作指令,其中,所述第一网络代理节点和所述第一业务客户端部署于同一业务服务器。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端响应于业务请求,向所述事务服务器发送所述分布式事务的创建请求;
所述第一业务客户端接收所述事务服务器发送的所述分布式事务的标识;
所述第一业务客户端向参与所述分布式事务的第二业务客户端发送服务调用请求,所述服务调用请求中携带有所述分布式事务的标识;
所述第一业务客户端根据所述业务请求,确定所述分布式事务中所述第一业务客户端待执行的事务分支。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端接收所述第一网络代理节点发送的所述事务分支的提交结果;
所述第一业务客户端接收所述第二业务客户端响应于所述服务调用请求发送的服务调用响应;
所述第一业务客户端根据所述提交结果和所述服务调用响应,向所述事务服务器发送针对所述分布式事务的提交指令或者回滚指令;
其中,针对所述分布式事务的提交指令用于指示提交所述分布式事务包括的各个事务分支,针对所述分布式事务的提交指令用于指示回滚所述分布式事务包括的各个事务分支。
14.根据权利要求11所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端接收第二业务客户端发送的服务调用请求,所述服务调用请求中携带有所述分布式事务的上下文;
所述第一业务客户端根据所述服务调用请求,确定所述分布式事务中所述第一业务客户端待执行的事务分支。
15.根据权利要求11至14任一所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端确定所述数据库操作语句的个数等于1,向第一业务数据库发送第一设置指令,所述第一设置指令指示将自动提交功能设置为开启状态。
16.根据权利要求11至14任一所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端确定所述数据库操作语句的个数大于1,向第一业务数据库发送第二设置指令,所述第二设置指令指示将自动提交功能设置为关闭状态。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端接收每个数据库操作指令包括的数据库操作语句的执行结果;
所述第一业务客户端根据所述执行结果确定每个数据库操作指令包括的数据库操作语句均执行成功,向所述第一业务数据库发送针对所述事务分支的第二提交指令。
18.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述第一业务客户端接收每个数据库操作指令包括的数据库操作语句的执行结果;
所述第一业务客户端根据所述执行结果确定任一数据库操作指令包括的数据库操作语句执行失败,向所述第一业务数据库发送针对所述事务分支的第二回滚指令。
19.一种网络代理节点,其特征在于,应用于分布式事务处理系统,所述分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端;所述网络代理节点包括:
解析模块,用于获取所述业务客户端发送的一个或多个数据库操作指令,每个数据库操作指令包括:数据库操作语句以及所述分布式事务的上下文,所述一个或多个数据库操作指令包括的数据库操作语句用于实现所述分布式事务的事务分支,所述分布式事务的上下文包括所述分布式事务的标识;
事务分支处理模块,用于在所述业务数据库中执行每个数据库操作指令包括的数据库操作语句,以及向所述事务服务器发送事务分支创建请求,所述事务分支创建请求包括所述分布式事务的标识。
20.根据权利要求19所述的网络代理节点,其特征在于,所述事务分支处理模块还用于:
获取数据集的锁信息,所述数据集是所述一个或多个数据库操作指令包括的数据库操作语句所针对的,所述数据集的锁信息用于在所述业务数据库中标识所述数据集;
所述事务分支创建请求还包括所述数据集的锁信息。
21.根据权利要求19或20所述的网络代理节点,其特征在于,所述事务分支处理模块,用于:
确认所述业务数据库的自动提交功能处于开启状态;
在接收到所述事务服务器发送的用于指示所述事务分支创建成功的第一创建响应后,在所述业务数据库中执行每个数据库操作指令包括的数据库操作语句;
所述事务分支处理模块,还用于:响应于所述第一创建响应,向所述业务数据库发送针对所述事务分支的第一提交指令。
22.根据权利要求19或20所述的网络代理节点,其特征在于,所述事务分支处理模块,还用于:
接收所述事务服务器发送的用于指示所述事务分支创建失败的第二创建响应;
响应于所述第二创建响应,向所述业务数据库发送针对所述事务分支的第一回滚指令。
23.根据权利要求20所述的网络代理节点,其特征在于,所述事务分支处理模块,还用于:
确认所述业务数据库的自动提交功能处于关闭状态;
向所述业务客户端发送每个数据库操作指令包括的数据库操作语句的执行结果;
在获取到所述业务客户端发送的针对所述事务分支的第二提交指令后,获取所述数据集的锁信息;
其中,所述第二提交指令是所述业务客户端在根据所述执行结果确定每个数据库操作指令包括的数据库操作语句均执行成功后发送的。
24.一种业务客户端,其特征在于,应用于分布式事务处理系统,所述分布式事务处理系统包括多个业务服务器、事务服务器和业务数据库,每个业务服务器包括网络代理节点和业务客户端;所述业务客户端包括:
处理模块,用于根据所述分布式事务中所述业务客户端待执行的事务分支,生成用于实现所述事务分支一个或多个数据库操作语句;
应用程序接口模块,用于根据所述一个或多个数据库操作语句,生成一个或多个数据库操作指令,每个数据库操作指令包括:至少一个数据库操作语句以及所述分布式事务的上下文,所述分布式事务的上下文包括所述分布式事务的标识;
数据库驱动器,用于向第一网络代理节点发送所述一个或多个数据库操作指令,其中,所述第一网络代理节点和所述业务客户端部署于同一业务服务器。
25.根据权利要求24所述的业务客户端,其特征在于,所述应用程序接口模块,还用于:
响应于业务请求,向所述事务服务器发送所述分布式事务的创建请求;
接收所述事务服务器发送的所述分布式事务的标识;
所述业务客户端还包括:
服务调用模块,用于向参与所述分布式事务的第二业务客户端发送服务调用请求,所述服务调用请求中携带有所述分布式事务的标识;
所述处理模块,还用于根据所述业务请求,确定所述分布式事务中所述业务客户端待执行的事务分支。
26.根据权利要求25所述的业务客户端,其特征在于,所述处理模块,还用于:
接收所述第一网络代理节点发送的所述事务分支的提交结果;
接收所述第二业务客户端响应于所述服务调用请求发送的服务调用响应;
根据所述提交结果和所述服务调用响应,向所述事务服务器发送针对所述分布式事务的提交指令或者回滚指令;
其中,针对所述分布式事务的提交指令用于指示提交所述分布式事务包括的各个事务分支,针对所述分布式事务的提交指令用于指示回滚所述分布式事务包括的各个事务分支。
27.根据权利要求24所述的业务客户端,其特征在于,所述处理模块,还用于:
接收第二业务客户端发送的服务调用请求,所述服务调用请求中携带有所述分布式事务的上下文;
根据所述服务调用请求,确定所述分布式事务中所述业务客户端待执行的事务分支。
28.一种网络代理节点,其特征在于,所述网络代理节点包括:存储器,处理器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至10任一所述的分布式事务的处理方法。
29.一种业务客户端,其特征在于,所述业务客户端包括:存储器,处理器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求11至18任一所述的分布式事务的处理方法。
30.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行如权利要求1至10任一所述的分布式事务的处理方法。
31.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行如权利要求11至18任一所述的分布式事务的处理方法。
32.一种分布式事务处理系统,其特征在于,所述分布式事务处理系统包括:多个业务服务器,事务服务器,以及多个业务数据库;
每个所述业务服务器包括如权利要求19至23,以及28任一所述的网络代理节点,以及如权利要求24至27,以及29任一所述的业务客户端。
CN202010544092.5A 2020-02-29 2020-06-15 分布式事务的处理方法、装置及系统 Pending CN113326272A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2020/114407 WO2021169243A1 (zh) 2020-02-29 2020-09-10 分布式事务的处理方法、装置及系统

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010132037 2020-02-29
CN2020101320375 2020-02-29

Publications (1)

Publication Number Publication Date
CN113326272A true CN113326272A (zh) 2021-08-31

Family

ID=77413409

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010544092.5A Pending CN113326272A (zh) 2020-02-29 2020-06-15 分布式事务的处理方法、装置及系统

Country Status (2)

Country Link
CN (1) CN113326272A (zh)
WO (1) WO2021169243A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113947434A (zh) * 2021-10-21 2022-01-18 北京沃东天骏信息技术有限公司 一种多业务组件组合场景的业务处理方法和装置
CN117453750A (zh) * 2023-12-21 2024-01-26 平凯星辰(北京)科技有限公司 数据处理方法、装置、电子设备及存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356888A (zh) * 2021-12-30 2022-04-15 中国民航信息网络股份有限公司 事务处理方法及装置、存储介质及电子设备
CN117632140B (zh) * 2023-12-07 2024-07-05 易方达基金管理有限公司 一种业务流程处理方法、装置及存储介质
CN118296073B (zh) * 2024-06-05 2024-09-06 恒生电子股份有限公司 事务执行方法、装置及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8356007B2 (en) * 2010-10-20 2013-01-15 Microsoft Corporation Distributed transaction management for database systems with multiversioning
CN106033437B (zh) * 2015-03-13 2020-01-10 阿里巴巴集团控股有限公司 一种分布式事务处理方法及系统
CN107797850B (zh) * 2016-08-30 2021-09-21 阿里巴巴集团控股有限公司 分布式事务处理的方法、装置与系统
CN110019443B (zh) * 2017-09-08 2023-08-11 阿里巴巴集团控股有限公司 非关系型数据库事务处理方法、装置及电子设备
CN110765178B (zh) * 2019-10-18 2021-03-05 京东数字科技控股有限公司 分布式事务的处理方法及装置、计算机可存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113947434A (zh) * 2021-10-21 2022-01-18 北京沃东天骏信息技术有限公司 一种多业务组件组合场景的业务处理方法和装置
CN117453750A (zh) * 2023-12-21 2024-01-26 平凯星辰(北京)科技有限公司 数据处理方法、装置、电子设备及存储介质
CN117453750B (zh) * 2023-12-21 2024-03-15 平凯星辰(北京)科技有限公司 数据处理方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
WO2021169243A1 (zh) 2021-09-02

Similar Documents

Publication Publication Date Title
CN113326272A (zh) 分布式事务的处理方法、装置及系统
US11856065B2 (en) Data transmission for service integration between a virtual private cloud and an intranet
CN103036717B (zh) 分布式数据的一致性维护系统和方法
US7801997B2 (en) Asynchronous interconnect protocol for a clustered DBMS
CN113268471B (zh) 处理分布式事务的方法、代理连接池、系统、设备及介质
CN112015811B (zh) 用于区块链系统的节点管理的方法、节点和计算设备
US10140121B2 (en) Sending a command with client information to allow any remote server to communicate directly with client
WO2021184878A1 (zh) 用于区块链系统的节点管理的方法、节点和计算设备
WO2022134797A1 (zh) 一种数据分片存储方法、装置、计算机设备和存储介质
US12032952B2 (en) Service upgrade method, apparatus, and system
CN111694873B (zh) 虚拟资源包的处理方法、装置及数据库服务器
CN112035062B (zh) 云计算的本地存储的迁移方法、计算机设备及存储介质
CN114827115B (zh) 容器内Web服务的访问方法、装置、电子设备及存储介质
CN110019873A (zh) 人脸数据处理方法、装置及设备
CN114448895A (zh) 一种应用访问方法、装置、设备及介质
CN112148436A (zh) 去中心化的tcc事务管理方法、装置、设备及系统
CN108496157B (zh) 使用扩展接口提供运行时跟踪的系统和方法
CN113515352B (zh) 分布式事务异库模式反交易调用方法及装置
WO2004114570A2 (en) Method of rebooting a multi-device cluster while maintaining cluster operation
CN112395104A (zh) 一种分布式事务上下文在路由层传递的实现方法与装置
EP3341853B1 (en) Message processing node and database in a message processing system and methods of operating the same
US20060117321A1 (en) Interface for application components
CN115643271A (zh) 一种云上多应用数据同步方法、装置、服务器及介质
CN114218236A (zh) 一种数据库集群元数据管理方法
CN115190040A (zh) 虚拟机高可用的实现方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
TA01 Transfer of patent application right

Effective date of registration: 20220211

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

TA01 Transfer of patent application right
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination