分布式事务处理方法、协调装置、数据库及电子设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种分布式事务处理方法、协调装置、数据库及电子设备。
背景技术
事务是指由一个或多个资源管理操作构成的一个操作序列。分布式事务是指操作序列中的操作涉及多个分布式数据库的事务。读一致性是指事务执行过程中的中间状态不容易被观察到的分布式事务处理方式。
分布式事务的协调装置常根据X/Open XA协议(简称XA协议)进行分布式事务的处理。但是,XA协议没有对如何实现分布式事务的全局的读一致性做出说明。
发明内容
本申请实施例提供了一种分布式事务处理方法、协调装置、数据库及电子设备,以在解决分布式事务的读一致性的问题。
为解决上述技术问题,本申请实施例是这样实现的:
第一方面,提出了一种分布式事务处理方法,应用于分布式事务的协调装置,所述方法包括:
接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
第二方面,提出了一种分布式事务的协调装置,包括:
第一接收模块,用于接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
第一发送模块,用于在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
第二发送模块,用于响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
第三方面,提出了一种分布式事务处理方法,应用于分布式数据库,所述方法包括:
响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
第四方面,提出了一种分布式数据库,包括:
第一响应模块,用于响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
第二响应模块,用于响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
第三响应模块,用于响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
第五方面,提出了一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
第六方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
第七方面,提出了一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:
响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
第八方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:
响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
由以上本申请实施例提供的技术方案可见,本申请实施例提供的方案至少具备如下一种技术效果:由于协调装置可以通过子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为该分布式事务涉及的所有分布式数据库执行该分布式事务的子事务的预提交指令之后返回的时间戳中的最大的一个,使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本说明书实施例提供的分布式事务处理系统的架构示意图。
图2是本说明书实施例提供的分布式事务处理方法的流程示意图之一。
图3是本说明书实施例提供的分布式事务处理方法的流程示意图之二。
图4是本说明书实施例提供的分布式事务处理方法的流程示意图之三。
图5是本说明书实施例提供的分布式事务处理方法的交互时序示意图。
图6是本说明书实施例提供的一种电子设备的结构示意图。
图7是本说明书实施例提供的另一种电子设备的结构示意图。
图8是本说明书实施例提供的分布式事务的协调装置的结构示意图之一。
图9是本说明书实施例提供的分布式事务的协调装置的结构示意图之二。
图10是本说明书实施例提供的分布式数据库的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决分布式事务的读一致性问题,本说明书实施例提供一种分布式事务处理方法。为了更清楚地理解本方案,下面先结合图1所示的架构图对本说明书实施例提供的分布式事务处理方法的应用场景进行说明。
如图1所示,本说明书实施例提供的分布式事务处理系统可以包括:至少一个应用(如应用A和应用B)、分布式事务的协调装置和至少一个分布式数据库(如数据库A和数据库B)。在该分布式事务处理系统中,提供不同服务的应用通过分布式事务的协调装置访问分布式数据库。
在图1的基础上,本说明书实施例提供了一种可应用于协调装置的分布式事务处理方法,以及一种可应用于分布式数据库的分布式事务处理方法,下面分别进行介绍。
如图2所示,本说明书实施例提供的一种分布式事务处理方法,可以应用于分布式事务的协调装置,该方法可以包括:
步骤202、接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳。
第一分布式事务可以是任意的分布式事务,如任意的读事务或任意的写事务,第一分布式事务包括多个子事务,且这多个子事务的实现依赖多个分布式数据库,或者说,第一分布式事务涉及多个分布式数据库(如n个分布式数据库),这多个数据库可以是SQL数据库也可以是其他类型的数据库,为了方便说明,下文中以SQL数据库为例对分布式数据库实现的内容进行介绍。
在相关技术中,协调装置常采用两阶段提交协议(Two Phase CommitmentProtocol,2PC)进行分布式事务的处理,其中,第一阶段是预提交阶段,协调装置向分布式事务涉及的所有分布式数据库发送预提交指令(如发送XA Prepare语句),以使这些分布式数据库将能否成功处理该分布式事务的子事务的结果反馈给协调装置;第二阶段是正式提交阶段,如果所有分布式数据库反馈的结果为成功,则协调装置通知所有分布式数据库开始执行该分布式事务的相应子事务并提交,如果有一个分布式数据库反馈的结果为失败,则协调装置通知所有分布式数据库进行回滚。
在本实施例中,也沿用两阶段提交协议,但是在第一阶段,第一分布式事务涉及的所有数据库不仅要返回能否成功处理所述第一分布式事务的子事务的结果,还要返回执行所述第一分布式事务的相应子事务的预提交指令时的时间戳。
步骤204、在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳。
假如第一分布式事务共涉及n个分布式数据库,则在收到这n个数据库返回的执行所述第一分布式事务的相应子事务的时间戳V,得到V1至Vn这n个时间戳之后,向第一分布式事务涉及的n个分布式数据库分别发送携带有MAX(V1,V2,…,Vn)的时间戳更新指令,以使第一分布式事务涉及的n个分布式数据库将MAX(V1,V2,…,Vn)作为自身的全局时间戳。
分布式数据库的全局时间戳可以用于确定分布式事务的读取时间戳,一般情况下,协调装置在向一个分布式数据库发送一个子事务的开始指令(如XA Start)时,会根据该分布式数据库的当前全局时间戳给该子事务分配读取时间戳,通常是复制该分布式数据库的当前全局时间戳作为该子事务的读取时间戳。
步骤206、响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
进入前文所说的第二阶段之后,第一分布式事务的参与者会向协调装置发起第一分布式事务的提交请求,此时,如果第一分布式事务涉及的所有分布式数据库反馈的结果为成功,则协调装置在收到提交请求之后会向所述第一分布式事务涉及的所有分布式数据库分别发送子事务提交指令(如发送XA Commit语句),且作为一个例子,发送的子事务提交指令还携带有MAX(V1,V2,…,Vn),以使分布式数据库将第一分布式事务的子事务的提交时间戳设置为MAX(V1,V2,…,Vn),并按所设置的提交时间戳提交第一分布式事务的子事务。
本说明书实施例提供的一种分布式事务处理方法,由于协调装置可以通过子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为该分布式事务涉及的所有分布式数据库执行该分布式事务的子事务的预提交指令之后返回的时间戳中的最大的一个,使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
可选地,在另一实施例中,图1提供的一种分布式事务处理方法还可以包括:
响应于第二分布式事务的子事务开始请求,复制目标分布式数据库的当前全局时间戳作为所述第二分布式事务的子事务的读取时间戳;
向所述第二分布式事务涉及的分布式数据库发送所述第二分布式事务的子事务开始指令,所述子事务开始指令中携带有所述读取时间戳。
其中,第二分布式事务可以是除上述第一分布式事务以外的任何分布式事务。目标分布式数据库是用于执行第二分布式事务的子事务的分布式数据库。目标分布式数据库的当前全局时间戳是目标分布式数据库在协调装置收到第二分布式事务的子事务开始请求时的全局时间戳。
前文已经说过,分布式数据库的全局时间戳可以用于确定分布式事务的读取时间戳,一般情况下,协调装置在向一个分布式数据库发送一个子事务的开始指令(如XAStart)时,会根据该分布式数据库的当前全局时间戳给该子事务分配读取时间戳,通常是复制该分布式数据库的当前全局时间戳作为该子事务的读取时间戳。
在相关技术中,如果第一分布式事务的子事务和第二分布式事务的子事务访问的数据库对象不同,则第一分布式事务的子事务和第二分布式事务的子事务的处理互不影响;如果第一分布式事务的子事务和第二分布式事务的子事务访问同一分布式数据库中的同一数据对象,常通过在分布式数据库中开启串行化隔离解决全局的读一致性问题,但这会导致读事务与读事务、读事务与写事务之间形成互斥,降低并发性能。
因此,在本说明书实施例中,如果第一分布式事务的子事务和第二分布式事务的子事务访问同一分布式数据库中的同一数据对象,被访问的分布式数据库可以用于根据第二分布式事务的读取时间戳和所述第一分布式事务的提交时间戳,确定所述第一分布式事务的子事务和所述第二分布式事务的子事务的执行顺序,并按所述执行顺序执行所述第一分布式事务的子事务和所述第二分布式事务的子事务。
具体的,如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库用于确定所述第二分布式事务的子事务的执行顺序在所述第一分布式事务的子事务之前;如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库用于确定所述第一分布式事务的子事务的执行顺序在所述第二分布式事务的子事务之前。
也即,在所述第一分布式事务的子事务和所述第二分布式事务的子事务访问同一分布式数据库中的同一数据对象的情况下,如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库可以确定第二分布式事务的子事务读取第一分布式事务的子事务修改前的数据库对象,而不必等到修改之后;如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库可以确定第二分布式事务的子事务读取第一分布式事务的子事务修改后的数据库对象。这使得第一分布式事务的子事务的处理,不影响第二分布式事务的子事务的处理,从而避免出现第一分布式事务和第二分布式事务互斥的现象,因此可以提升并发性能。
在本实施例中,第一分布式事务的子事务可以是读事务或写事务,第二分布式事务的子事务也可以是读事务或写事务。可选地,第一分布式事务的子事务为写事务,所述第二分布式事务的子事务为读事务。
在本实施例中,如果被访问的分布式数据库的锁机制为表级锁,则被访问的同一数据对象为被访问的分布式数据库中的目标数据表;如果被访问的分布式数据库的锁机制为行级锁,则被访问的同一数据对象为被访问的分布式数据库中的目标数据表中的目标记录。
为了便于理解,下面通过几个例子进行说明。
在第一个例子中,第一分布式事务A的子事务的提交时间戳大于第二分布式事务B的子事务的读取时间戳,例如,假如B在物理时间上先到达协调装置,且B的子事务是一个读事务,A的子事务和B的子事务涉及的同一分布式数据库的当前全局时间戳为100,则可以将100确定为B的子事务的读取时间戳;A在物理时间上后到达协调装置,且A的子事务是一个写事务,A对应的MAX(V1,V2,…,Vn)为120,则将A和B涉及的同一分布式数据库的当前全局时间戳由100更新为120,并将A的子事务的提交时间戳也更新为120,即可出现A的子事务的提交时间戳(120)大于B的子事务的读取时间戳(100)的情况。此时A和B涉及的同一分布式数据库可以先处理B的子事务,后处理A的子事务,也即A和B涉及的同一分布式数据库可以使B的子事务读取A的子事务写入前的数据库对象。
如出现状态1:在协调装置向分布式数据库发送第一分布式事务的子事务提交指令之前,第一分布式事务的子事务均处于准备(Prepare)状态,这个时候如果收到其他读事务(第二分布式事务的子事务),该读事务将会读取到第一分布式事务的子事务执行之前的数据对象。
在第二个例子中,第一分布式事务A的子事务的提交时间戳等于第二分布式事务B的子事务的读取时间戳,例如,假如A在物理时间上先到达协调装置,且A的子事务是一个写事务,A对应的MAX(V1,V2,…,Vn)为120,则将A和B涉及的同一分布式数据库的当前全局时间戳由100更新为120,并将A的子事务的提交时间戳也更新为120;B在物理时间上后到达协调装置,且B的子事务是一个读事务,则可以复制当前全局时间戳120作为B的读取时间戳,即可出现A的子事务的提交时间戳(120)等于B的子事务的读取时间戳(120)的情况。此时A和B涉及的同一分布式数据库也可以先处理B的子事务,后处理A的子事务,也即A和B涉及的同一分布式数据库可以使B的子事务读取A的子事务写入前的数据库对象。
如出现状态2:在协调装置向第一分布式事务涉及的部分分布式数据库发送子事务提交指令之后,如果这个时候收到其他读事务(第二分布式事务的子事务),对于已经收到第一分布式事务的子事务提交指令的分布式数据库,该读事务将会读取到第一分布式事务的子事务执行后的数据对象;对于未收到第一分布式事务的子事务提交指令的分布式数据库,该读事务将会被阻塞,直到收到第一分布式事务的子事务提交指令,最终该读事务也会读取到第一分布式事务的子事务执行后的数据对象。
在第三个例子中,第一分布式事务A的子事务的提交时间戳小于第二分布式事务B的子事务的读取时间戳,例如,假如A在物理时间上先到达协调装置,且A的子事务是一个写事务,A对应的MAX(V1,V2,…,Vn)为120,则将A和B涉及的同一分布式数据库的当前全局时间戳由100更新为120,并将A的子事务的提交时间戳也更新为120;另一第二分布式事务C在物理时间上比A后到达协调装置,且C的子事务是一个写事务,C对应的MAX(V1,V2,…,Vn)为130,则将A、B和C涉及的同一分布式数据库的当前全局时间戳又从120更新为130,并将C的子事务的提交时间戳也更新为130;B在物理时间上比C后到达协调装置,且B的子事务是一个读事务,则可以复制当前全局时间戳130作为B的读取时间戳,即可出现A的子事务的提交时间戳(120)小于B的子事务的读取时间戳(130)的情况。此时A和B涉及的同一分布式数据库也可以先处理A的子事务,后处理B的子事务,也即A和B涉及的同一分布式数据库可以使B的子事务读取A的子事务写入后的数据库对象。
如出现状态3:在协调装置向第一分布式事务涉及的所有分布式数据库发送子事务提交指令之后,如果这个时候收到其他的读事务(第二分布式事务的子事务),该读事务将会读取到第一分布式事务的子事务执行之后的数据对象。
可以理解,在上述状态1和状态3中,读写事务、读读事务均不会互斥,并发性能高。在上述状态2中,读读事务不会互斥,读写虽然会阻塞,但是在正常情况下,协调装置是并行的向第一分布式事务涉及的所有分布式数据库发送子事务提交指令的,不同分布式数据库收到子事务提交指令的时间间隔通常很小,因此状态2持续的时间很短,可以认为读写事务几乎不会收到影响,因此并发性能也较高。
由此可见,本说明书实施例提供的一种分布式事务处理方法,可以在解决分布式事务的读一致性(具体理由请参见上文对图1所示的实施例的分析)的同时,还可以提升并发性能。
可选地,如图3所示,上述任一实施例提供的一种分布式事务处理方法,在步骤202之前,还可以包括:
步骤208、响应于第一分布式事务的开启请求,返回所述第一分布式事务的事务上下文。
第一分布式事务的开启请求可以是第一分布式事务的参与者发起的,第一分布式事务的参与者可以是应用A。
第一分布式事务的事务上下文(context),是指第一分布式事务的描述信息,通过这个描述信息就能准确地知道是该事务是什么事务,包括哪些子事务等信息。
步骤210、响应于所述第一分布式事务的子事务开启请求,开启所述第一分布式事务的子事务。
第一分布式事务的子事务的开启请求也可以是第一分布式事务的参与者发起的,如由应用B发起。
步骤212、接收所述第一分布式事务的子事务的预设信息,所述预设信息用于确定执行所述第一分布式事务的目标子事务的目标分布式数据库和所述目标子事务的业务内容。
步骤214、向所述目标分布式数据库发送所述目标子事务的开始指令和所述预设信息。
如果分布式数据库为SQL数据库,那么上述预设信息可以是SQL语句,这里的SQL语句是应用的业务SQL语句,属于业务逻辑。协调装置拦截并解析SQL语句的目的是找到执行第一分布式事务的子事务的相应分布式数据库。解析后发给分布式数据库的目的是让分布式数据库执行该SQL语句中描述的业务内容。
步骤216、响应于所述第一分布式事务的子事务的预提交请求,向所述第一分布式事务涉及的分布式数据库发送所述第一分布式事务的相应子事务的预提交指令,所述第一分布式事务的子事务是根据所述事务上下文确定的。
第一分布式事务的参数参与者可以向协调装置发起第一分布式事务的子事务的预提交请求,协调装置在接收到预提交请求之后,可以向第一分布式事务涉及的分布式数据库发送所述第一分布式事务的相应子事务的预提交指令(如XA Prepare)。然后转入步骤202,以实现本说明书提供的分布式事务处理方法的目的。
以上是对应用于协调装置的一种分布式事务处理方法的说明,下面结合图4对应用于分布式数据库的一种分布式事务处理方法进行说明。
需要说明的是,本说明书实施例提供的应用于分布式数据库的一种分布式事务处理方法,与上文中的应用于协调装置的一种分布式事务处理方法相对应,因此下文对用于分布式数据库的一种分布式事务处理方法介绍的较为简要,相关细节请参见上文中对应用于协调装置的一种分布式事务处理方法的描述。
如图4所示,本说明书实施例提供的一种分布式事务处理方法,可应用于分布式数据库,该方法可以包括:
步骤402、响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳。
第一分布式事务可以是任意的分布式事务,第一分布式事务包括多个子事务,且这多个子事务的实现依赖多个分布式数据库,或者说,第一分布式事务涉及多个分布式数据库(如n个分布式数据库)。
本实施例中,在两阶段提交的第一阶段,协调装置向分布式事务涉及的所有分布式数据库发送预提交指令(如发送XA Prepare语句),分布式数据库在收到XA Prepare之后,会向协调装置反馈能否成功处理该分布式事务的子事务的结果,以及执行所述第一分布式事务的相应子事务的预提交指令时的时间戳。
步骤402、响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个。
假如第一分布式事务共涉及n个分布式数据库,则协调装置会收到V1至Vn这n个时间戳,收到后会向这n个分布式数据库分别发送携带有MAX(V1,V2,…,Vn)的时间戳更新指令,分布式数据库在收到携带有MAX(V1,V2,…,Vn)的时间戳更新指令之后,可以将自身的全局时间戳更新为MAX(V1,V2,…,Vn)。分布式数据库的全局时间戳可以用于确定分布式事务的读取时间戳。
步骤404、响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
进入前文所说的第二阶段之后,第一分布式事务的参与者会向协调装置发起第一分布式事务的提交请求,此时,如果第一分布式事务涉及的所有分布式数据库反馈的结果为成功,则协调装置在收到提交请求之后会向所述第一分布式事务涉及的所有分布式数据库分别发送携带有MAX(V1,V2,…,Vn)的子事务提交指令(如XA Commit语句),分布式数据库可以根据该子事务提交指令中携带的MAX(V1,V2,…,Vn),将第一分布式事务的子事务的提交时间戳设置为MAX(V1,V2,…,Vn),并按所设置的提交时间戳提交第一分布式事务的子事务。
本说明书实施例提供的一种分布式事务处理方法,由于第一分布式事务涉及的分布式数据库,可以通过来自协调装置的子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为该分布式事务涉及的所有分布式数据库返回的时间戳中的最大的一个,使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
可选地,在另一实施例中,图4所示的一种分布式事务处理方法,还可以包括:接收第二分布式事务的子事务的开始指令,所述开始指令中携带有所述第二分布式事务的子事务的读取时间戳,且所述读取时间戳是所述协调装置对所述分布式数据库的当前全局时间戳进行复制得到的。
第二分布式事务可以是除第一分布式事务外的任一分布式事务。
可选地,图4所示的一种分布式事务处理方法,还可以包括:
在所述第一分布式事务的子事务和所述第二分布式事务的子事务访问所述分布式数据库中的同一数据对象的情况下,根据述读取时间戳和所述提交时间戳确定所述第一分布式事务的子事务和所述第二分布式事务的子事务的执行顺序;
按所述执行顺序执行所述第一分布式事务的子事务和所述第二分布式事务的子事务。
具体的,根据述读取时间戳和所述提交时间戳确定所述第一分布式事务的子事务和所述第二分布式事务的子事务的执行顺序,可以包括:
如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则确定所述第二分布式事务的子事务的执行顺序在所述第一分布式事务的子事务之前;
如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则确定所述第一分布式事务的子事务的执行顺序在所述第二分布式事务的子事务之前。
也即,在所述第一分布式事务的子事务和所述第二分布式事务的子事务访问同一分布式数据库中的同一数据对象的情况下,如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库可以确定第二分布式事务的子事务读取第一分布式事务的子事务修改前的数据库对象,而不必等到修改之后;如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库可以确定第二分布式事务的子事务读取第一分布式事务的子事务修改后的数据库对象。这使得第一分布式事务的子事务的处理,不影响第二分布式事务的子事务的处理,从而避免出现第一分布式事务和第二分布式事务互斥的现象,因此可以提升并发性能。
在本实施例中,第一分布式事务的子事务可以是读事务或写事务,第二分布式事务的子事务也可以是读事务或写事务。可选地,第一分布式事务的子事务为写事务,所述第二分布式事务的子事务为读事务。
在本实施例中,如果所述分布式数据库的锁机制为表级锁,则被访问的同一数据对象为所述分布式数据库中的目标数据表;如果所述分布式数据库的锁机制为行级锁,则被访问的同一数据对象为所述分布式数据库中的目标数据表中的目标记录。
由此可见,本说明书实施例提供的一种分布式事务处理方法,可以在解决分布式事务的读一致性(具体理由请参见上文对图1所示的实施例的分析)的同时,还可以提升并发性能。
可选地,在步骤402之前,图4所示的方法还可以包括:接收所述第一分布式事务的子事务的开始指令和预设信息,所述预设信息用于确定所述第一子事务的业务内容。
相应的,在步骤406中,按所述提交时间戳提交所述第一分布式事务的相应子事务,包括:按所述提交时间戳执行所述第一子事务的业务内容并提交。
为了更清楚地理解本说明书提供的技术方案,下面结合图5所示的交互时序示意图,对本说明书提供的分布式事务处理方法进行详细的说明。
如图5所示,本说明书实施例提供的分布式事务处理方法,可应用于分布式事务处理系统中,该分布式事务梳理系统可以包括应用A、应用B、应用C、协调装置、数据库A和数据库B(需要说明的是,在本说明书实施例中涉及的数据库指的是分布式数据库,为了方便说明,有时简称为数据库),该方法可以包括:
步骤501、应用A向协调装置发送第一分布式事务的开启请求,并接收协调装置返回的第一分布式事务的事务上下文。
步骤502、应用A通过远程过程调用(Remote Procedure Call,RPC)等方式调用第一分布式事务的参与者之一应用B,并将第一分布式事务的事务上下文发送给应用B。
步骤503、应用B向协调装置发送第一分布式事务的子事务1的开启请求。
子事务1也是应用B的本地事务。
步骤504、应用B向协调装置发送第一分布式事务的子事务1的SQL语句1。
步骤505、协调装置向数据库A发送第一分布式事务的子事务1的开始指令(如XAStart)。
数据A是根据SQL语句1确定出的用于执行第一分布式事务的子事务1的分布式数据库。
步骤506、协调装置向数据库A发送第一分布式事务的子事务1的SQL语句1。
步骤507、应用B向协调装置发送第一分布式事务的子事务1的预提交请求。
步骤508、协调装置向数据库A发送第一分布式事务的子事务1的预提交指令(XAPrepare)。
步骤509、数据库A向协调装置返回执行第一分布式事务的子事务1的预提交指令的时间戳V1。
步骤510、应用A通过RPC等方式调用第一分布式事务的参与者之一应用C,并将第一分布式事务的事务上下文发送给应用C。
步骤511、应用C向协调装置发送第一分布式事务的子事务2的开启请求。
子事务2也是应用C的本地事务。
步骤512、应用C向协调装置发送第一分布式事务的子事务2的SQL语句2。
步骤513、协调装置向数据库B发送第一分布式事务的子事务2的开始指令(如XAStart)。
数据B是根据SQL语句2确定出的用于执行第一分布式事务的子事务2的分布式数据库。
步骤514、协调装置向数据库B发送第一分布式事务的子事务2的SQL语句2。
步骤515、应用C向协调装置发送第一分布式事务的子事务2的预提交请求。
步骤516、协调装置向数据库B发送第一分布式事务的子事务2的预提交指令(XAPrepare)。
步骤517、数据库B向协调装置返回执行第一分布式事务的子事务2的预提交指令的时间戳V2。
需要说明的是,在本实施例中,仅以第一分布式事务包括子事务1和子事务2,涉及数据库A和数据库B为例,说明了第一分布式事务涉及的数据库返回执行第一分布式事务的子事务1和子事务的时间戳V1和V2的过程,推而广之,通重复执行步骤502至步骤509,或者通过重复执行步骤510至步骤517,可以实现第一分布式事务涉及的其他分布式数据库返回执行第一分布式事务的其他子事务的时间戳V3至Vn。
步骤518、协调装置接收应用A发送的第一分布式事务的提交请求。
步骤519、协调装置在接收到第一分布式事务涉及的所有分布式数据库返回的时间戳后,向数据库A发送携带有MAX(V1,V2,…,Vn)的时间戳更新指令,以使数据库A将自身的全局时间戳更新为MAX(V1,V2,…,Vn)。
步骤520、协调装置在接收到第一分布式事务涉及的所有分布式数据库返回的时间戳后,向数据库B发送携带有MAX(V1,V2,…,Vn)的时间戳更新指令,以使数据库B将自身的全局时间戳更新为MAX(V1,V2,…,Vn)。
步骤521、协调装置向数据库A发送携带有MAX(V1,V2,…,Vn)的子事务提交指令,该子事务提交指令用于指示数据库A提交第一分布式事务的子事务1,并将提交时间戳设置为MAX(V1,V2,…,Vn)。
步骤522、协调装置向数据库B发送携带有MAX(V1,V2,…,Vn)的子事务提交指令,该子事务提交指令用于指示数据库A提交第一分布式事务的子事务2,并将提交时间戳设置为MAX(V1,V2,…,Vn)。
需要说明的是,应用A至应用C可以是同一应用,也可以是不同应用。
不难看出,图5所示的分布式事务处理方法,由于协调装置可以通过子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为MAX(V1,V2,…,Vn),使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
以上是对本说明书实施例提供的一种分布式事务处理方法的说明,下面对本说明书实施例提供的电子设备进行说明。
图6是本说明书的一个实施例提供的电子设备的结构示意图。请参考图6,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成协调装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
上述如本说明书图2所示实施例揭示的分布式事务处理方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书一个或多个实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书一个或多个实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图2的分布式事务处理方法,本说明书在此不再赘述。
当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
图7示出了本说明书实施例提供的另一种电子设备的结构示意图,图7所示的电子设备与图6所示的电子设备的不同之处在于,处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成分布式数据库。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
上述如本说明书图4所示实施例揭示的分布式事务处理方法可以应用于图7中的处理器中,或者由图7中的处理器实现。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下操作:
接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳;
在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳;
响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图4所示实施例的方法,并具体用于执行以下操作:
响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳;
响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个;
响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
下面对本说明书实施例提供的分布式事务的协调装置800和分布式数据库1000进行介绍。
图8是本说明书提供的协调装置800的结构示意图。请参考图8,在一种软件实施方式中,协调装置800可包括:第一接收模块801、第一发送模块802和第二发送模块803。
第一接收模块801,用于接收分布式数据库执行第一分布式事务的相应子事务的预提交指令之后返回的时间戳。
第一发送模块802,用于在接收到所述第一分布式事务涉及的所有分布式数据库返回的时间戳后,向所述第一分布式事务涉及的分布式数据库发送时间戳更新指令,所述时间戳更新指令用于指示将返回的最大时间戳作为所述第一分布式事务涉及的分布式数据库的全局时间戳。
分布式数据库的全局时间戳可以用于确定分布式事务的读取时间戳。
第二发送模块803,用于响应于所述第一分布式事务的提交请求,向所述第一分布式事务涉及的分布式数据库发送子事务提交指令,所述子事务提交指令用于指示将第一分布式事务的相应子事务提交,并将提交时间戳设置为所述最大时间戳。
本说明书实施例提供的协调装置,由于可以通过子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为该分布式事务涉及的所有分布式数据库执行该分布式事务的子事务的预提交指令之后返回的时间戳中的最大的一个,使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
可选地,在另一实施例中,图8提供的协调装置800,还可以包括:复制模块和开始指令发送模块。
复制模块,用于响应于第二分布式事务的子事务开始请求,复制目标分布式数据库的当前全局时间戳作为所述第二分布式事务的子事务的读取时间戳。
开始指令发送模块,用于向所述第二分布式事务涉及的分布式数据库发送所述第二分布式事务的子事务开始指令,所述子事务开始指令中携带有所述读取时间戳。
其中,第二分布式事务可以是除上述第一分布式事务以外的任何分布式事务。目标分布式数据库是用于执行第二分布式事务的子事务的分布式数据库。目标分布式数据库的当前全局时间戳是目标分布式数据库在协调装置收到第二分布式事务的子事务开始请求时的全局时间戳。
在本说明书实施例中,如果第一分布式事务的子事务和第二分布式事务的子事务访问同一分布式数据库中的同一数据对象,被访问的分布式数据库可以用于根据第二分布式事务的读取时间戳和所述第一分布式事务的提交时间戳,确定所述第一分布式事务的子事务和所述第二分布式事务的子事务的执行顺序,并按所述执行顺序执行所述第一分布式事务的子事务和所述第二分布式事务的子事务。
具体的,如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库用于确定所述第二分布式事务的子事务的执行顺序在所述第一分布式事务的子事务之前;如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则被访问的分布式数据库用于确定所述第一分布式事务的子事务的执行顺序在所述第二分布式事务的子事务之前。
本说明书实施例提供的协调装置800,可以在解决分布式事务的读一致性(具体理由请参见上文对图1所示的实施例的分析)的同时,还可以提升并发性能。
可选地,如图9所示,上述任一实施例提供的协调装置800,还可以包括:返回模块804、开启模块805、第二接收模块806、第三发送模块807和第四发送模块808。
返回模块804,用于响应于第一分布式事务的开启请求,返回所述第一分布式事务的事务上下文。
开启模块805,用于响应于所述第一分布式事务的子事务开启请求,开启所述第一分布式事务的子事务。
第二接收模块806,用于接收所述第一分布式事务的子事务的预设信息,所述预设信息用于确定执行所述第一分布式事务的目标子事务的目标分布式数据库和所述目标子事务的业务内容。
第三发送模块807,用于向所述目标分布式数据库发送所述目标子事务的开始指令和所述预设信息。
第四发送模块808,用于响应于所述第一分布式事务的子事务的预提交请求,向所述第一分布式事务涉及的分布式数据库发送所述第一分布式事务的相应子事务的预提交指令,所述第一分布式事务的子事务是根据所述事务上下文确定的。
协调装置800能够实现图2或图3的方法实施例的方法,具体可参考图2或图3所示实施例的分布式事务处理方法,不再赘述。
图10是本说明书提供的分布式数据库1000的结构示意图。请参考图10,在一种软件实施方式中,分布式数据库1000可包括:第一响应模块1001、第二响应模块1002和第三响应模块1003。
第一响应模块1001,用于响应于第一分布式事务的相应子事务的预提交指令,向分布式事务的协调装置返回执行所述第一分布式事务的相应子事务的预提交指令的时间戳。
第二响应模块1002,用于响应于携带有最大时间戳的时间戳更新指令,将所述最大时间戳作为自身的全局时间戳,所述最大时间戳是所述第一分布式事务涉及的所有分布式数据库返回的时间戳中最大的一个。
第三响应模块1003,用于响应于携带有所述最大时间戳的子事务提交指令,将所述第一分布式事务的相应子事务的提交时间戳设置为所述最大时间戳,并按所述提交时间戳提交所述第一分布式事务的相应子事务。
本说明书实施例提供的分布式数据库1000,由于可以通过来自协调装置的子事务提交指令,将第一分布式事务的所有子事务的提交时间戳均设置为该分布式事务涉及的所有分布式数据库返回的时间戳中的最大的一个,使得第一分布式子事务的所有子事务的提交时间戳相同,从而保证第一分布式事务的所有子事务都有相同的先后关系,使得第一分布式事务读取时,要么都读取到另外一个分布式事务的所有子事务的修改内容,要么都读取到另外一个分布式子事务的修改前的内容,因此可以保证分布式事务的读一致性。
可选地,在另一实施例中,图10所示的分布式数据库1000,还可以包括:第一开始指令接收模块,用于接收第二分布式事务的子事务的开始指令,所述开始指令中携带有所述第二分布式事务的子事务的读取时间戳,且所述读取时间戳是所述协调装置对所述分布式数据库的当前全局时间戳进行复制得到的。
可选地,在另一实施例中,图10所示的分布式数据库1000,还可以包括:执行顺序确定模块和执行模块。
执行顺序确定模块,用于在所述第一分布式事务的子事务和所述第二分布式事务的子事务访问所述分布式数据库中的同一数据对象的情况下,根据述读取时间戳和所述提交时间戳确定所述第一分布式事务的子事务和所述第二分布式事务的子事务的执行顺序。
执行模块,用于按所述执行顺序执行所述第一分布式事务的子事务和所述第二分布式事务的子事务。
具体的,执行顺序确定模块可用于:如果所述第一分布式事务的子事务的提交时间戳大于或等于所述第二分布式事务的子事务的读取时间戳,则确定所述第二分布式事务的子事务的执行顺序在所述第一分布式事务的子事务之前;如果所述第一分布式事务的子事务的提交时间戳小于所述第二分布式事务的子事务的读取时间戳,则确定所述第一分布式事务的子事务的执行顺序在所述第二分布式事务的子事务之前。
本说明书实施例提供的分布式数据库1000,可以在解决分布式事务的读一致性(具体理由请参见上文对图1所示的实施例的分析)的同时,还可以提升并发性能。
可选地,在另一实施例中,图10所示的分布式数据库1000,还可以包括另一接收模块,用于接收所述第一分布式事务的子事务的开始指令和预设信息,所述预设信息用于确定所述第一子事务的业务内容。
相应的,第三响应模块1003,可用于按所述提交时间戳执行所述第一子事务的业务内容并提交。
分布式数据库1000能够实现图4的方法实施例的方法,具体可参考图4所示实施例的分布式事务处理方法,此处不再赘述。
总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制时,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。