CN110532069A - 一种分布式事务提交方法及装置 - Google Patents
一种分布式事务提交方法及装置 Download PDFInfo
- Publication number
- CN110532069A CN110532069A CN201910779564.2A CN201910779564A CN110532069A CN 110532069 A CN110532069 A CN 110532069A CN 201910779564 A CN201910779564 A CN 201910779564A CN 110532069 A CN110532069 A CN 110532069A
- Authority
- CN
- China
- Prior art keywords
- resource
- transaction
- global transaction
- read
- affairs
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种分布式事务提交方法及装置,包括:接收到提交全局事务的请求后,参与全局事务的所有XA资源,依次采用一阶段事务提交的方式将与全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作;参与全局事务的所有XA资源成功提交全局事务后,在参与全局事务的各个XA资源中,将反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将全局事务的提交同步到所在XA资源的从节点中。本发明实施例提供的分布式事务提交方法及装置减少了事务提交过程中和每个XA资源的交互次数,减少了对每一个XA资源的加锁时间,大幅度提高了全局事务的处理效率。
Description
技术领域
本发明涉及事务处理领域,尤其涉及一种分布式事务提交方法及装置。
背景技术
XA两阶段事务提交协议是X/OPEN组织定义的一个用于分布式事务环境下的两阶段提交协议,用于确保多个参与事务的资源之间的数据一致性和完整性。目前主流的数据库和消息中间件服务器都支持XA协议。
在事务需要提交时,调用每个参与事务的资源XAResource的XAResource.papare来收集投票结果,如果所有的XAResource都返回XAResource.XA_COMMIT,则可以提交事务,调用XAResource.commit来提交事务。如果在第一阶段中,参与事务的XAResource有一个不同意提交,则调用XAResource.rollback来回滚事务。
XA两阶段事务提交协议中,通常的事务提交流程如下:
1)划分原子性操作。图1为现有技术中划分每个XAResource的原子性工作的示意图,如图1所示,划分原子性操作包括:用XAResource.start和XAResource.end划分每个XAResource上的原子性工作。位于XAResource.start和XAResource.end之间的工作,要么提交,要么回滚。
2)提交事务。图2为现有技术中两阶段事务提交的示意图,如图2所示,提交事务包括:在事务需要提交时,第一阶段,调用每个XAResource的XAResource.papare来收集投票结果,如果所有的XAResource都返回XAResource.XA_COMMIT,则可以在第二阶段通过调用XAResource.commit来提交事务。在提交事务的流程中,从执行XAResource.prepare开始,中途等待其他XA资源的投票结果,到执行XAResource.commit提交完成,均需要对XA资源进行加锁防止其他修改。
3)回滚事务。图3为现有技术中两阶段事务回滚的示意图,如图3所示,回滚事务包括:如果在第一阶段中,参与事务的XAResource,有一个不同意提交,则调用XAResource.rollback来回滚事务。在回滚事务的流程中,从执行XAResource.prepare开始,中途等待其他XA资源的投票结果,到执行XAResource.rollback回滚完成,均需要对XA资源进行加锁防止其他修改。
为了确保数据的一致性,XA协议采用严格的两阶段协议来提交事务,由于每次事务提交都需要同XA资源进行多次交互,导致使用XA协议来提交事务的系统事务处理能力较低。严格按照XA两阶段协议来提交事务,每次事务提交时都需要针对每个参与到事务中的XA资源进行投票统计和提交事务两步操作,投票阶段和事务提交阶段会对XA资源中的数据资源加锁以保证数据一致性,加锁的时间越长,越会降低系统处理事务的能力。
以事务正常提交的处理流程为例,图4为投票结果为提交的两阶段事务中资源被锁定的加锁时间的示意图,如图4所示,对于有两个XA资源参与的事务,一个事务从开始到完成需要与每个XA资源至少交互4次,分别为XAResource.start、XAResource.end、XAResource.prepare和XAResource.commit。在整个事务提交阶段,各个XA资源被锁定的时间为从第一阶段提交调用XAResource.prepare开始,中途等待事务管理器收集其他参与事务的XA资源的投票结果,直到调用XAResource.commit提交完成。
以事务被回滚的处理流程为例,图5为投票结果为回滚的两阶段事务中资源被加锁定的锁定时间的示意图,如图5所示,对于有两个XA资源参与的事务,一个事务从开始到完成需要与每个XA资源至少交互4次,分别为XAResource.start、XAResource.end、XAResource.prepare和XAResource.rollback。在整个事务提交阶段,各个XA资源被锁定的时间为从第一阶段提交调用XAResource.prepare开始,中途等待事务管理器收集其他参与事务的XA资源的投票结果,直到调用XAResource.rollback回滚完成。
由此可见,使用两阶段事务提交协议,无论是投票结果为正常提交还是投票结果为回滚,每个参与两阶段事务的XA资源都需要被加锁锁定较长时间,影响事务处理的吞吐率,导致两阶段事务的执行效率较低。
发明内容
本发明实施例提供一种分布式事务提交方法及装置,用以解决目前两阶段事务提交协议中,每个参与两阶段事务的XA资源都需要被加锁锁定较长时间,影响事务处理的吞吐率,导致两阶段事务的执行效率较低的缺陷。
第一方面,本发明实施例提供一种分布式事务提交方法,包括:
接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
第二方面,本发明实施例提供一种分布式事务提交装置,包括:
事务提交单元,用于接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
事务提交成功后处理单元,用于参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述分布式事务提交方法的步骤。
第四方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如所述分布式事务提交方法的步骤
本发明实施例提供的分布式事务提交方法及装置为所有XA资源增加一个读写分离的代理,使用一阶段提交协议来提交事务,在事务提交流程中有效减少了事务提交过程中和每个XA资源的交互次数,同时减少了对每一个XA资源的加锁时间,大幅度提高了全局事务的处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中划分每个XAResource的原子性工作的示意图;
图2为现有技术中两阶段事务提交的示意图;
图3为现有技术中两阶段事务回滚的示意图;
图4为投票结果为提交的两阶段事务中资源被锁定的加锁时间的示意图;
图5为投票结果为回滚的两阶段事务中资源被加锁定的锁定时间的示意图;
图6为一阶段事务提交中划分原子性操作的示意图;
图7为一阶段事务提交中提交事务过程的示意图;
图8为只有一个XA资源参与事务时,使用两阶段提交和一阶段提交两种方式,提交阶段对XA资源的锁定时间对比图;
图9为与XA资源读写分离有关的数据结构的示意图;
图10为本发明实施例所提供的一种分布式事务提交方法的流程图;
图11为本发明另一实施例所提供的一种分布式事务提交方法的流程图;
图12为本发明实施例中XA资源以一阶段事务提交方式提交事务的示意图;
图13为本发明实施例中XA资源提交事务成功后的后续处理的示意图;
图14为本发明实施例中XA资源提交事务失败后的回滚处理的示意图;
图15为本发明实施例的分布式事务提交方法中,若事务提交成功XA资源锁定时间的示意图;
图16为本发明实施例的分布式事务提交方法中,若事务提交失败XA资源锁定时间的示意图;
图17为一种服务器的实体结构示意图;
图18为本发明实施例的分布式事务提交装置的结构示意图;
图19为本发明另一实施例的分布式事务提交装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种分布式事务提交方法,该方法在执行时将XA资源读写分离与一阶段事务提交相结合,在保证能达到两阶段事务提交效果的前提下,能有效减少XA资源的加锁时间。为了便于理解,首先对一阶段事务提交与XA资源读写分离分别予以说明。
一阶段事务提交:顾名思义,一阶段事务提交是指提交事务的过程只有一个阶段,这能减少事务管理器与XA资源的交互次数,降低对XA资源的锁定时间。以全局事务仅有一个XA资源参与事务的应用情形为例,其具体提交流程如下:
1)划分原子性操作。图6为一阶段事务提交中划分原子性操作的示意图,如图6所示,划分原子性操作包括:用XAResource.start和XAResource.end在唯一参与事务的XA资源上划分原子性工作。
2)提交事务。图7为一阶段事务提交中提交事务过程的示意图,如图7所示,提交事务包括:在事务需要提交时,在唯一参与事务的XA资源上调用一阶段提交XAResource.commitOnePhase来提交事务,如果提交成功,则整个事务提交完成,如果提交失败,则整个事务回滚完成。对于一阶段提交,不需要再调用XAResource.rollback来执行回滚操作。
相对于通常的两阶段事务提交协议,采用一阶段事务提交的方式能够节省一次远程调用,减少XA资源的锁定时间,能有效提高事务的处理效率。图8为只有一个XA资源参与事务时,使用两阶段提交和一阶段提交两种方式,提交阶段对XA资源的锁定时间对比图。从图中可以很明显地看出一阶段提交方式较两阶段提及方式对XA资源锁定时间的减少。
以上是以全局事务仅有一个XA资源参与事务的应用情形为例,当有多个XA资源参与全局事务时,同样可以对最后一个XA资源采用一阶段事务提交的方式来优化性能。例如,将有多个XA资源参与的全局事务的最后一个XA资源的提交方式采用一阶段事务提交的方式,这样可以减少最后一个XA资源的锁定时间。
从以上描述可以看出,在事务提交方法中单独采用一阶段事务提交的方式,当参与全局事务的XA资源较少时,能提升事务处理的性能,有效减少XA资源的锁定时间,当参与全局事务的XA资源较多时,只能微弱的提升事务处理的性能,对整体性能的优化有限。
XA资源读写分离:为每个XA资源设定主节点和一个从节点,在主节点上进行数据的修改操作,在从节点上进行数据查询操作,在主节点和从节点之前引入一个读写分离代理,用于读写分离和控制主从XA资源数据同步。
图9为与XA资源读写分离有关的数据结构的示意图,从图中可以看出,读写分离代理包括有事务日志,该事务日志可记录读写分离代理对XA资源主节点或XA资源从节点所做的操作。
图10为本发明实施例所提供的一种分布式事务提交方法的流程图,如图10所示,本发明实施例所提供的分布式事务提交方法包括:
步骤101、客户端发起提交全局事务的请求;
步骤102、接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作UNDO_OPERATION;本步骤的实现可参见图12;
步骤103、参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作UNDO_OPERATION从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。本步骤的实现可参见图13。
本发明实施例所提供的分布式事务提交方法为所有XA资源增加一个读写分离的代理,使用一阶段提交协议来提交事务,在事务提交流程中有效减少了事务提交过程中和每个XA资源的交互次数,同时减少了对每一个XA资源的加锁时间,大幅度提高了全局事务的处理效率。
基于上述任一实施例,图11为本发明另一实施例所提供的一种分布式事务提交方法的流程图,如图11所示,本发明实施例所提供的分布式事务提交方法包括:
步骤111、客户端发起提交全局事务的请求;
步骤112、对参与所述全局事务且之前未曾执行提交事务操作的一个XA资源,使用一阶段事务提交的方式将与事务有关的修改提交到本XA资源的主节点中,同时在本XA资源的读写分离代理的事务日志中记录一个反向操作UNDO_OPERATION;本步骤的实现可参见图12;
步骤113、判断当前XA资源是否已使用一阶段事务提交方式成功提交事务,若是,执行下一步,否则,执行步骤116;
步骤114、判断参与所述全局事务的所有XA资源是否均已使用一阶段事务提交方式成功提交事务,若是,执行下一步,否则,按照顺序选择下一个未曾执行事务提交操作的XA资源,重新执行步骤112;
步骤115、在参与所述全局事务的各个XA资源中,将反向操作UNDO_OPERATION从本XA资源的读写分离代理的事务日志中清除,通知本XA资源的主节点将该事务的提交同步到本XA资源的从节点中;待参与所述全局事务的所有XA资源均已完成本步骤的上述操作后,结束本次事务提交;本步骤的实现可参见图13;
步骤116、在参与所述全局事务的各个XA资源中,若本XA资源尚未提交所述全局事务,直接丢弃该全局事务划分原子操作相关的改动,其中,所述该全局事务划分原子操作相关的改动为与所述全局事务有关的XAResouce.start()调用之后、XAResrouce.end()调用之前的操作;若本XA资源已经提交所述全局事务,从本XA资源的读写分离代理的事务日志中读取该全局事务对应的反向操作UNDO_OPERATION,在本XA资源的主节点中执行该反向操作UNDO_OPERATION,还原对本XA资源的修改;待参与所述全局事务的所有XA资源均已完成本步骤的上述操作后,结束本次事务提交。本步骤的实现可参见图14。
图15为本发明实施例的分布式事务提交方法中,若事务提交成功XA资源锁定时间的示意图,从图15可以看出,采用本发明实施例的分布式事务提交方法后,在正常提交流程中,各个XA资源仅在执行一阶段提交时需要对资源进行加锁,一阶段提交过程对XA资源的锁定时间较短。与之前的图4相比较可以发现,相对于现有技术中的两阶段事务提交协议需要从第一阶段提交调用XAResource.prepare开始,中途等待事务管理器收集其他参与事务的XA资源的投票结果,直到调用XAResource.commit提交完成均保持对XA资源的锁定,本发明实施例所提供的分布式事务提交方法大幅度减少了XA资源的锁定时间。
图16为本发明实施例的分布式事务提交方法中,若事务提交失败(需要回滚事务)XA资源锁定时间的示意图。从图16可以看出,回滚事务流程对各个XA资源的加锁时间为:对于执行一阶段事务提交失败的XA资源,仅在执行一阶段事务提交时需要对资源进行加锁;对于执行一阶段事务提交成功的XA资源,在执行一阶段事务提交时和执行反向操作回滚事务的修改时两个阶段需要对XA资源进行加锁,并且这两个阶段的中途可以将XA资源的锁释放出来。与之前的图5比较可以发现,相对于现有技术中的两阶段事务提交协议需要从第一阶段提交调用XAResource.prepare开始,中途等待事务管理器收集其他参与事务的XA资源的投票结果,直到调用XAResource.rollback回滚完成均保持对XA资源的锁定,本发明实施例所提供的分布式事务提交方法大幅度减少了XA资源的锁定时间。
本发明实施例的分布式事务提交方法主要应用于多个XA资源参与到全局事务中的场景,该方法为所有XA资源增加一个读写分离的代理,使用一阶段提交协议来提交事务,使用反向操作对尚未进行读写同步的数据进行回滚操作,在事务提交和事务回滚流程中有效减少了事务提交和事务回滚过程中和每个XA资源的交互次数,同时减少了对每一个XA资源的加锁时间,大幅度提高了全局事务的处理效率。使用本发明实施例的分布式事务提交方法协调参与全局事务的多个XA资源的事务提交,其效率可以达到未使用全局事务来协调多个XA资源的数据修改的效率,同时能享受两阶段协议带来的保证多个XA资源的数据一致性的好处。
本发明实施例的分布式事务提交方法有着广泛的应用前景,如目前广泛采用的JTA(Java Transaction API)中就可采用本发明实施例所公开的分布式事务提交方法。基于上述任一实施例,本发明实施例又提供了一种分布式事务提交装置,图18为本发明实施例所公开的分布式事务提交装置的结构示意图,如图所示,该装置包括:
事务提交单元,用于接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
事务提交成功后处理单元,用于参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
本发明实施例提供的分布式事务提交装置为所有XA资源增加一个读写分离的代理,使用一阶段提交协议来提交事务,在事务提交流程中有效减少了事务提交过程中和每个XA资源的交互次数,同时减少了对每一个XA资源的加锁时间,大幅度提高了全局事务的处理效率。
基于上述任一实施例,本发明实施例又提供了一种分布式事务提交装置,该装置包括:
事务提交单元1801,用于接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
事务提交成功后处理单元1802,用于参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
基于上述任一实施例,本发明另一实施例还提供了一种分布式事务提交装置,图19为本发明又一实施例所公开的分布式事务提交装置的结构示意图,如图所示,所述分布式事务提交装置包括:
事务提交单元1901,用于接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
事务提交成功后处理单元1902,用于参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
回滚单元1903,用于参与所述全局事务的任一XA资源提交所述全局事务失败,在参与所述全局事务的各个XA资源中,若所在XA资源尚未提交所述全局事务,直接丢弃该全局事务划分原子操作相关的改动;若所在XA资源已经提交所述全局事务,从所在XA资源的读写分离代理的事务日志中读取所述全局事务对应的反向操作,在所在XA资源的主节点中执行该反向操作,还原对所在XA资源的修改。
图17示例了一种电子设备的实体结构示意图,如图17所示,该电子设备可以包括:处理器(processor)1710、通信接口(Communications Interface)1720、存储器(memory)1730和通信总线1740,其中,处理器1710,通信接口1720,存储器1730通过通信总线1740完成相互间的通信。处理器1710可以调用存储器1730中的逻辑指令,以执行如下方法:接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作;参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
此外,上述的存储器1730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的全局事务提交方法,例如包括:接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作;参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种分布式事务提交方法,其特征在于,包括:
接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
2.根据权利要求1所述的分布式事务提交方法,其特征在于,还包括:
参与所述全局事务的任一XA资源提交所述全局事务失败,在参与所述全局事务的各个XA资源中,若所在XA资源尚未提交所述全局事务,直接丢弃该全局事务划分原子操作相关的改动;若所在XA资源已经提交所述全局事务,从所在XA资源的读写分离代理的事务日志中读取所述全局事务对应的反向操作,在所在XA资源的主节点中执行该反向操作,还原对所在XA资源的修改。
3.根据权利要求1或2所述的分布式事务提交方法,其特征在于,所述原子操作包括单个XA资源的原子操作、全局事务的原子操作;所述单个XA资源的原子操作为XAResouce.start()调用之后、XAResrouce.end()调用之前的操作;所述全局事务的原子操作为参与全局事务的每个XA资源上的原子操作的合集。
4.根据权利要求1或2所述的分布式事务提交方法,其特征在于,所述一阶段事务提交的方式采用XAResource.commitOnePhase来提交当前XA资源所要执行的事务,如果提交成功,则整个当前XA资源所要执行的事务提交完成,如果提交失败,则整个当前XA资源所要执行的事务回滚完成。
5.一种分布式事务提交装置,其特征在于,包括:
事务提交单元,用于接收到提交全局事务的请求后,参与所述全局事务的所有XA资源,依次采用一阶段事务提交的方式将与所述全局事务有关的修改提交到所在XA资源的主节点中,在所在XA资源的读写分离代理的事务日志中记录反向操作,所述反向操作用于还原对所在XA资源的修改;其中,所述XA资源至少包括:用于数据修改操作的主节点、用于数据查询操作的从节点、用于控制读写分离和数据同步的读写分离代理;所述读写分离代理包括用于记录对所述主节点或从节点所做操作的事务日志;
事务提交成功后处理单元,用于参与所述全局事务的所有XA资源均成功提交所述全局事务后,在参与所述全局事务的各个XA资源中,将所述反向操作从所在XA资源的读写分离代理的事务日志中清除,通知所在XA资源的主节点将所述全局事务的提交同步到所在XA资源的从节点中。
6.根据权利要求5所述的分布式事务提交装置,其特征在于,还包括:
回滚单元,用于参与所述全局事务的任一XA资源提交所述全局事务失败,在参与所述全局事务的各个XA资源中,若所在XA资源尚未提交所述全局事务,直接丢弃该全局事务划分原子操作相关的改动;若所在XA资源已经提交所述全局事务,从所在XA资源的读写分离代理的事务日志中读取所述全局事务对应的反向操作,在所在XA资源的主节点中执行该反向操作,还原对所在XA资源的修改。
7.根据权利要求5或6所述的分布式事务提交装置,其特征在于,所述原子操作包括单个XA资源的原子操作、全局事务的原子操作;所述单个XA资源的原子操作为XAResouce.start()调用之后、XAResrouce.end()调用之前的操作;所述全局事务的原子操作为参与全局事务的每个XA资源上的原子操作的合集。
8.根据权利要求5或6所述的分布式事务提交装置,其特征在于,所述一阶段事务提交的方式采用XAResource.commitOnePhase来提交当前XA资源所要执行的事务,如果提交成功,则整个当前XA资源所要执行的事务提交完成,如果提交失败,则整个当前XA资源所要执行的事务回滚完成。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至4任一项所述分布式事务提交方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至4任一项所述分布式事务提交方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910779564.2A CN110532069B (zh) | 2019-08-22 | 2019-08-22 | 一种分布式事务提交方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910779564.2A CN110532069B (zh) | 2019-08-22 | 2019-08-22 | 一种分布式事务提交方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110532069A true CN110532069A (zh) | 2019-12-03 |
CN110532069B CN110532069B (zh) | 2021-06-29 |
Family
ID=68664060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910779564.2A Active CN110532069B (zh) | 2019-08-22 | 2019-08-22 | 一种分布式事务提交方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110532069B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113992750A (zh) * | 2020-07-10 | 2022-01-28 | 华为技术有限公司 | 一种全局事务协同方法、装置、设备及介质 |
CN114116144A (zh) * | 2022-01-24 | 2022-03-01 | 北京万里开源软件有限公司 | 一种轻量级全局事务管理器及其控制方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7337441B2 (en) * | 2001-07-17 | 2008-02-26 | Bea Systems, Inc. | System and method for prepreparing a transaction process involving a chain of servers in a circular flow |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN102306200A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 增量数据操作语句的并发应用装置和方法 |
US20150286496A1 (en) * | 2014-04-02 | 2015-10-08 | Red Hat, Inc. | Systems and methods for enlisting single phase commit resources in a two phase commit transaction |
CN106502769A (zh) * | 2016-09-30 | 2017-03-15 | 华为技术有限公司 | 分布式事务处理方法、装置及系统 |
CN106844014A (zh) * | 2015-12-07 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 分布式事务防悬挂的实现方法和装置 |
CN108279986A (zh) * | 2017-12-29 | 2018-07-13 | 亿阳安全技术有限公司 | 一种分布式事务处理方法及装置 |
CN108572959A (zh) * | 2017-03-07 | 2018-09-25 | 中国移动通信集团江西有限公司 | 一种与数据库交互数据的方法和装置 |
EP3382526A1 (en) * | 2017-04-01 | 2018-10-03 | Intel Corporation | Multi-node storage operation |
CN109408201A (zh) * | 2017-08-18 | 2019-03-01 | 中国银联股份有限公司 | 基于分布式数据库的事务管理方法 |
-
2019
- 2019-08-22 CN CN201910779564.2A patent/CN110532069B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7337441B2 (en) * | 2001-07-17 | 2008-02-26 | Bea Systems, Inc. | System and method for prepreparing a transaction process involving a chain of servers in a circular flow |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN102306200A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 增量数据操作语句的并发应用装置和方法 |
US20150286496A1 (en) * | 2014-04-02 | 2015-10-08 | Red Hat, Inc. | Systems and methods for enlisting single phase commit resources in a two phase commit transaction |
CN106844014A (zh) * | 2015-12-07 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 分布式事务防悬挂的实现方法和装置 |
CN106502769A (zh) * | 2016-09-30 | 2017-03-15 | 华为技术有限公司 | 分布式事务处理方法、装置及系统 |
CN108572959A (zh) * | 2017-03-07 | 2018-09-25 | 中国移动通信集团江西有限公司 | 一种与数据库交互数据的方法和装置 |
EP3382526A1 (en) * | 2017-04-01 | 2018-10-03 | Intel Corporation | Multi-node storage operation |
CN109408201A (zh) * | 2017-08-18 | 2019-03-01 | 中国银联股份有限公司 | 基于分布式数据库的事务管理方法 |
CN108279986A (zh) * | 2017-12-29 | 2018-07-13 | 亿阳安全技术有限公司 | 一种分布式事务处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
徐进 等: "基于消息通信的分布式系统最终一致性平台", 《计算机应用》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113992750A (zh) * | 2020-07-10 | 2022-01-28 | 华为技术有限公司 | 一种全局事务协同方法、装置、设备及介质 |
CN114116144A (zh) * | 2022-01-24 | 2022-03-01 | 北京万里开源软件有限公司 | 一种轻量级全局事务管理器及其控制方法 |
CN114116144B (zh) * | 2022-01-24 | 2022-07-26 | 北京万里开源软件有限公司 | 一种轻量级全局事务管理器及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110532069B (zh) | 2021-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3672208B2 (ja) | 階層化トランザクション処理方法 | |
Hellings et al. | Byshard: Sharding in a byzantine environment | |
WO2018103318A1 (zh) | 分布式事务处理方法和系统 | |
KR101993432B1 (ko) | 2-단계 커미트 호출들의 엄격한 순서화에 근거하여 트랜잭션 복구를 지원하는 시스템들 및 방법들 | |
CN103647834B (zh) | 一种用于处理多阶段分布式任务调度的系统及方法 | |
CN110196856B (zh) | 一种分布式数据读取方法及装置 | |
Samaras et al. | Two-phase commit optimizations and tradeoffs in the commercial environment | |
Kobus et al. | Hybrid replication: State-machine-based and deferred-update replication schemes combined | |
CN108845866A (zh) | 处理分布式事务的方法和装置 | |
CN105740085A (zh) | 容错处理方法及装置 | |
CN110532069A (zh) | 一种分布式事务提交方法及装置 | |
CN113157710A (zh) | 区块链数据并行写入方法、装置、计算机设备及存储介质 | |
CN109783578A (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN115617571A (zh) | 一种数据备份方法、装置、系统、设备及存储介质 | |
US11522966B2 (en) | Methods, devices and systems for non-disruptive upgrades to a replicated state machine in a distributed computing environment | |
CN114254036A (zh) | 数据处理方法以及系统 | |
CN112559496A (zh) | 一种分布式数据库事务原子性实现方法及装置 | |
CN112099934A (zh) | 一种批处理方法、系统、计算机设备及存储介质 | |
CN105874435B (zh) | 分布式事务中的非阻塞注册 | |
CN115756765A (zh) | 分布式事务处理方法及装置 | |
CN112162988A (zh) | 一种分布式事务的处理方法、装置和电子设备 | |
EP0817019B1 (en) | Method of stratified transaction processing | |
CN113448706A (zh) | 批量任务处理方法、装置及系统 | |
US20240152429A1 (en) | Recoverable Processes | |
CN113238892B (zh) | 一种分布式系统全局一致性的时间点恢复方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |