CN108279986B - 一种分布式事务处理方法及装置 - Google Patents
一种分布式事务处理方法及装置 Download PDFInfo
- Publication number
- CN108279986B CN108279986B CN201711486720.3A CN201711486720A CN108279986B CN 108279986 B CN108279986 B CN 108279986B CN 201711486720 A CN201711486720 A CN 201711486720A CN 108279986 B CN108279986 B CN 108279986B
- Authority
- CN
- China
- Prior art keywords
- service end
- result
- service
- data
- submitting
- 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.)
- Active
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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/566—Grouping or aggregating service requests, e.g. for unified processing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式事务处理方法及装置,包括:消息服务器在接收到第一业务端的第一提交结果后,再将第一操作数据发送给第二业务端,第二业务端才开始执行第二本地事务,这样,将全局事务演变为了多个本地事务,每个业务端的业务的执行无需锁定系统资源,节省了系统资源。并且,在保障全局事务一致性的前提下,当存在多个并发业务端时,提高了事务执行的效率,提高了高并发事务的容忍度。除此之外,在消息服务器中创建监控消息队列,监控消息服务器和各个业务端之间的所有的交互信息,并将交互信息发送给相应的业务端,这样降低了各业务端之间的耦合性,进而保障了全局事务的一致性。
Description
技术领域
本发明涉及分布式事务领域,尤其涉及一种分布式事务处理方法及装置。
背景技术
事务是指作为单个逻辑工作单元执行的一系列操作,要买完全的执行要么完全不执行,即要么保证全部成功,要不全部失败,不能出现部分成功的情况。例如:通过银行转账,从A账户转100块钱到B账户为一个事务,该事物若是提交成功,必须保证A账户扣除100块钱,同时B账户增加100块钱;或者由于某些原因该事物提交事变,也就是转账不成功,该情况下,A账户不能扣掉100块钱,B账户也不能增加100块钱;这样才可以保障事务的一致性。
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理服务器分别位于不同的分布式系统的不同节点上,简单的说,指一个事务可能涉及多个数据库操作,分布式事务处理的关键是必须保证多个数据库的操作要么都成功,要么都失败。
针对于分布式事务,现有技术中通常采用XA协议。其中,XA协议是指由X/Open组织提出的作为资源管理器与事务管理器之间进行通信的接口标准的分布式交易处理规范。XA协议一般包括两个阶段:
第一阶段:交易中间件请求所有相关数据库准备提交(即预提交)各自的事务分支,以确认是否所有相关数据库都可以提交各自的事务分支。当某一数据库收到预提交后,查看是否能够执行该提交操作,并将预提交结果记录下来,并将预提交结果反馈给交易中间件;
第二阶段:当交易中间件接收到所有的数据库反馈的预提交结果后,若是全部都可以提交,则通知所有的数据库执行提交,若是其中任何一个数据库反馈的预提交结果为提交失败时,通知其它的数据库执行回滚的操作。
但是,所有的异构数据库必须支持XA协议,但是不是有的数据库都支持XA协议;并且,所有的数据库在执行预提交操作时,需要锁定资源管理器的资源,这样严重耗费,并且在存在多个并发事务的情况下,高并发事务的容忍度低。
发明内容
有鉴于此,本发明实施例提供了一种分布式事务处理方法及装置,解决了现有技术中,现有的方法的通用性差,耗费系统资源以及高并发事务容忍度低的问题。
本发明公开了一种分布式事务处理方法,所述方法应用于消息服务器,包括:
接收第一业务端发送的第一操作的数据;
当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为提交成功的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果。
可选的,在接收到第一业务端发送的第一操作的数据后,还包括:
建立监听消息队列,所述监听消息队列用于监听所述第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息,并在接收到交互信息后反馈给相应的业务端。
可选的,还包括:当监听到所述消息服务器成功接收到了所述第一业务端的第一操作的数据后,向所述第一业务端反馈第一监听信息,以使所述第一业务端在接收到所述的第一监听信息后根据所述第一操作的数据执行第一本地事务。
可选的,还包括:
监听是否接收到所述第二业务端发送的预制结果;
当接收到所述第二业务端发送的预制结果后,向所述第二业务端反馈第二监听信息,以使所述第二业务端依据所述第一操作的数据执行第二本地事务。
可选的,在向所述第二业务端反馈第二监听信息之前,所述方法还包括:
在预设的标识数据库中记录所述第一操作的标识。
可选的,所述方法还包括:
在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作,得到第二操作组;
将所述第二操作组与所述标识数据库进行差异性计算,得到所述标识数据库中不包含的第三操作;所述第三操作属于第二操作组;
将所述第三操作的数据发送给所述第二业务端。
可选的,所述方法还包括:
定期查询是否接收到第一操作的数据对应的第一提交结果;
若未接收到所述第一操作数据对应的第一提交结果,向所述第一业务端核查所述第一操作的数据的执行情况。
可选的,还包括:
定期查询是否接收到第一操作的数据对应的第二提交结果;
若未接收到所述第一操作数据对应的第二提交结果,向所述第二业务端核查所述第一操作的数据的执行情况。
可选的,所述当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作,包括:
当任何一个第二业务端发送的第二本地事务的第二提交结果为驳回的情况下,向其它的第二业务端器和所述第一业务端器反馈回滚消息,以使所述其它的第二业务端器和所述第一业务端器执行回滚操作。
可选的,还包括:
当向所述第一业务端器发送所述第二本地事务的执行结果对应的消息后,删除所述标识数据库中所述第一操作的标识。
本发明实施例还提供了一种分布式事务处理装置,所述装置应用于消息服务器,包括:
接收单元,用于接收第一业务端发送的第一操作的数据;
第一发送单元,用于当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为本地提交的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
反馈单元,用于当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果。
可选的,还包括:
消息队列建立单元,用于建立监听消息队列,所述监听消息队列用于监听所述第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息,并在接收到交互信息后反馈给相应的业务端。
有鉴于此,本发明实施例提供了一种分布式事务处理方法及装置,包括:接收第一业务端发送的第一操作的数据;当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为本地提交的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果。由此,实施例通过在第一业务端执行完了第一本地事务后,并且消息服务器接收到第一提交结果后,再将第一操作数据发送给第二业务端,第二业务端才开始执行第二本地事务,这样,将一个全局事务划分成多个本地事务,无需锁定系统资源,并且,在保障全局事务一致性的前提下,当存在多个并发业务端时,提高了事务执行的效率。
除此之外,在消息服务器中创建监控消息队列,监控消息服务器和各个业务端之间的所有的交互信息,并将交互信息发送给相应的业务端,这样降低了各业务端之间的耦合性,进而保障了全局事务的一致性。并且,在消息服务器接收到第二业务端反馈的预制结果后,在标识数据库中保存已发送给第二业务终端的第一次操作的标识,这样,保证了业务的幂等性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1示出了本发明实施例提供的一种分布式事务处理方法的场景示意图;
图2示出了本发明实施例提供的一种分布式事务处理方法的流程示意图;
图3示出了一种消息服务器的稽查方法的流程示意图;
图4示出了一种消息服务器的又一稽查方法的流程示意图;
图5示出了本发明实施例提供的一种分布式事务处理方法的又一流程示意图;
图6示出了本发明实施例提供的一种分布式事务处理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参考图1,示出了本发明实施例提供的一种分布式事务处理方法的场景示意图,该场景中包括:第一业务端101、消息服务器102和第二业务端103;其中第二业务端102可以包括至少一个业务端。第一业务端101向消息服务器102发送第一操作的数据,消息服务器102在接收到第一本地事务的第一提交结果后,在该第一提交结果为提交成功的前提下,将第一操作的数据发送给第二业务端103;当消息服务器102接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将该第二提交结果的处理信息反馈给其它的第二业务端102和第一业务端101。
由此可知,本实施例通过在第一业务端执行完了第一本地事务后,并且消息服务器接收到第一提交结果后,再将第一操作数据发送给第二业务端,第二业务端才开始执行第二本地事务,这样,将一个全局事务划分成多个本地事务,无需锁定系统资源,并且,在保障全局事务一致性的前提下,当存在多个并发业务端时,提高了事务执行的效率。
参考图2,示出了本发明实施例提供的一种分布式事务处理方法的流程示意图,所述方法应用于消息服务器,该方法包括:
S201:接收第一业务端发送的第一操作的数据;
本实施例中,第一业务端可以发起第一操作的业务端,其中该业务端可以包括:业务服务、数据库和事务监听模块,或者该第一业务端可以仅为业务服务,其中,业务服务指项目中具备操作数据库能力的一个业务,并且该业务服务之间可以通过http形式的API相互调用。
当第一业务端接收到第一操作后,第一业务端将该第一操作的数据发送到消息服务器,消息服务器保存该第一操作的数据。
其中,该第一操作的数据为执行第一操作所需的原始数据,例如:第一操作的数据为从银行的A账户转账到余额宝的B账户,转账金额为100。
本实施例中,为了保证每个业务端和消息服务器的一致性,进而保障多个业务端全局事务的一致性,接收到第一业务端发送的第一操作的数据后,在消息服务器中建立监听消息队列;该监听消息队列用于监听第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息。
其中,交互信息可以包括:消息服务器接收第一业务端发送的第一操作数据的情况,第一业务端依据第一操作的数据执行第一本地事务的情况等,即第一提交结果。
本实施例中,为了保证消息服务器中接收到的消息的可靠性,第一业务端可以在接收到了消息服务器的第一监听信息后,即第一业务端确定了消息服务器已成功接收第一操作的数据后,依据第一操作执行第一本地事务。
举例说明:假设第一业务端包括:第一业务服务、数据库和事务监听模块,第一业务服务在接收到消息服务器反馈的第一监听信息后,第一业务服务将第一变更数据保存到数据库,并提交第一本地事务,本地事务监听模块监听第一本地事务的提交情况,并将第一本地事务的第一提交结果反馈给消息服务器。
具体的,还包括:
当监听到所述消息服务器成功接收到了所述第一业务端的第一操作的数据后,向所述第一业务端反馈第一监听信息,以使所述第一业务端在接收到所述的第一监听信息后根据所述第一操作的数据执行第一本地事务。
S202:当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为提交成功的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
本实施例中,消息服务器接收到第一提交结果后,若是第一提交结果为驳回,则消息服务器不再执行该第一操作,并删除该第一操作的数据。
若是消息服务器接收到的第一提交结果为成功的情况下,表示第一业务端已经成功提交了第一本地事务,例如:假设第一操作的数据为从A银行账户转账到B的余额宝账户,转账金额为100元,则若已经执行了在A的银行账户扣除100块钱的操作后,表示第一本地事务提交成功。
在消息服务器确定了第一业务端成功提交了第一本地事务后,在将第一操作的数据发送给第二业务端,也就是在第一本地事务执行完成后,再通知第二业务端执行第二本地事务。
本实施例中,第二业务端可以为一个业务端也可以为多个业务端,在第二业务端为多个业务端的情况下,可以理解为,当消息服务器接收到第一业务端发送的第一本地事务确认提交后,将第一次操作的数据发送给每一个第二业务端,以使每个第二业务端并行执行相应的业务操作。
本实施例中,为了保证消息服务器接收到的第二业务端的消息的准确性,可以通过上文提到的监控消息队列监控消息服务器和第二业务端之间的交互信息,具体的,还包括:
监听是否接收到所述第二业务端发送的预制结果;
当接收到所述第二业务端发送的预制结果后,向所述第二业务端反馈第二监听信息,以使所述第二业务端依据所述第一操作的数据执行第二本地事务。
其中,预制结果可以为第二业务端在接收到第一操作的数据后,可以得到的一个预期的结果。例如:若第一操作的数据为:从A银行账户转账到B的余额宝账户,转账金额为100元,第二业务端发送给消息服务器的预制结果可以为:在B的余额宝账户增加100元。其中,第二业务端向消息服务器发送预制消息的目的是为了告知消息服务器,第二业务端接收到了第一操作的消息。
在第二业务端执行了第二本地事务后,会得到第二本地事务的提交结果,将该提交结果反馈给消息服务器。
为了保证第二业务端的幂等性,其中幂等性为调用多次产生的业务结果与调用一次产生的业务结果相同,即为了保证第二业务终端不会重复接收到同一操作,并反复执行同一操作,在消息服务器接收到第二业务端反馈的预制结果后,在标识数据库中保存已发送给第二业务终端的第一次操作的标识,具体的,还包括:
将所述第一操作的标识记录到预设的标识数据中。
该标识数据库是为了,在消息服务器宕机并重新恢复工作的情况下,不会重复的向第二业务服务器发送操作的数据,具体的,还包括:
在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作;
在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作,得到第二操作组;
将所述第二操作组与所述标识数据库进行差异性计算,得到所述标识数据库中不包含的第三操作;所述第三操作属于第二操作组;
将所述第三操作的数据发送给所述第二业务端。
其中,第二操组作为消息服务器中当前保存的所有的操作,标识数据库中保存的是已发送给第二业务端的操作,第三操作为第二操作组中除去标识数据库中的操作后,剩余的操作。
S203:当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果。
其中,若是第二业务端仅包括一个业务端,则第二业务端执行了第二本地事务后,将该本地事务的第二提交结果反馈给消息服务器,若该第二提交结果为成功提交时,消息服务器告知第一业务端,则表示该第一操作已经成功被执行。若该本地事务的第二提交结果为驳回,则消息服务器告知第一业务终端执行回滚操作。
其中,若第二业务端包括多个业务端,则若第二业务端执行了第二本地事务后,将该本地事务的第二提交结果反馈给消息服务器,若任何一个第二业务端反馈的第二提交结果为成功提交时,消息服务器将成功提交的信息告知第一业务端和其它的第二业务终端,当所有的第二业务端发送的提交结果均为成功提交时,表示该第一操作被成功执行,同时也保证了全局事务的一致性。若任何一个第二业务端反馈的第二提交结果为驳回时,消息服务器向其它的第二业务端和第一业务端发送回滚的消息,其它的第二业务端器和所述第一业务端器根据该回滚的信息执行回滚操作,具体的,S103包括:
当任何一个第二业务端发送的第二本地事务的第二提交结果为驳回的情况下,向其它的第二业务端器和所述第一业务端器反馈回滚消息,以使所述其它的第二业务端器和所述第一业务端器执行回滚操作。
在该全局事务执行完成后,即该第一操作涉及的所有业务端均执行完成后,在标识数据库中删除第一操作的标识,具体的,包括:
当向所述第一业务端器发送所述第二本地事务的执行结果对应的消息后,删除所述标识数据库中所述第一操作的标识。
除此之外,还需要删除消息服务器中保存的第一操作的数据。
本实施例中,消息服务器在接收到第一业务端的第一提交结果后,再将第一操作数据发送给第二业务端,第二业务端才开始执行第二本地事务,这样,将全局事务演变为了多个本地事务,每个业务端的业务的执行无需锁定系统资源,节省了系统资源。并且,在保障全局事务一致性的前提下,当存在多个并发业务端时,提高了事务执行的效率,提高了高并发事务的容忍度。
除此之外,在消息服务器中创建监控消息队列,监控消息服务器和各个业务端之间的所有的交互信息,并将交互信息发送给相应的业务端,这样降低了各业务端之间的耦合性,进而保障了全局事务的一致性。
需要说明的是,本实施例中提到的消息服务器为可以实现本实施例提到的分布式事务处理方法的任何一种服务器或者相关设备。
本实施例中,消息服务器由于网络或者服务不可用等原因无法通信,此时第一业务端已经执行了第一本地事务,但是在将第一本地事务的第一提交结果发送给消息服务器时,没有发送成功,那么消息服务器中记录的第一业务服务执行第一本地事务的情况和第一业务端记载的对第一本地事务的执行情况会存在差异,为了避免该差异,消息服务器可以进行定期的稽查,具体的,参考图3,示出了本发明实施例提供的一种消息服务器的稽查方法的流程示意图,包括:
S301:定期查询是否接收到第一操作的数据对应的第一提交结果;
S302:若未接收到所述第一操作数据对应的第一提交结果,向所述第一业务端核查所述第一操作的数据的执行情况。
本实施例中,若是第一业务终端出现问题,或者第一业务端和消息服务器端的通信产生问题,导致某一个操作在一段时间内一直处于未执行的状态,则消息服务器会一直向第一业务端发送稽查信息,直到收到第一业务端反馈的第一提交结果为止,这样保障了第一业务端和消息服务器中信息的一致性,进而保障了全局事务的一致性。
同理,为了保证第二业务端和消息服务器的一致性,进而保证全局事务的一致性,消息服务器也可以对未收到第二业务终端的反馈信息的操作进行稽查,具体的参考图4,包括:
S401:定期查询是否接收到第一操作的数据对应的第二提交结果;
S402:若未接收到所述第一操作数据对应的第二提交结果,向所述第二业务端核查所述第一操作的数据的执行情况。
本实施例中,保证第二业务端和消息服务器的一致性,进而保证全局事务的一致性。
参考图5,示出了本发明实施例提供的一种分布式事务处理方法的流程示意图,在本实施例中,该方法包括:
S501:第一业务端将第一操作的数据发送给消息服务器;
本实施例中,假设第一业务端包括:第一业务服务、数据库和事务监控模块,可以是第一业务端中的第一业务服务将第一操作的数据发送给消息服务器。
S502:在消息服务器中建立监听消息队列,以监听消息服务器和所述第一操作涉及的业务端之间的交互信息;
本实施例中,消息队列的目的述监听第一次操作数据涉及的各个业务端与消息服务器之间的交互信息,并将交互信息传输到相应的业务端。
S503:当监听到消息服务器成功接收到第一操作的数据时,向第一业务端反馈第一监听信息;
S504:第一业务端接收到第一监听信息后,根据第一操作的数据执行第一本地事务,并将第一本地事务的第一提交结果发送给消息服务器;
举例说明:在第一业务端的第一业务服务接收到第一监听信息后,将变更的数据保存到数据库中,并提交第一本地服务,当事务监听模块监听到第一提交结果后,将第一提交结果反馈给消息服务器。
S505:消息服务器接收到所述第一本地事务的第一提交结果后,在所述第一提交结果为本地提交的情况下,将所述第一操作的数据发送给第二业务端;
S506:当第二业务端接收到第一操作的数据后,将第一操作的预制结果反馈给消息服务器;
S507:当消息服务器接收到第二业务端发送的预制结果后,在预设的标识数据库中保存所述第一操作的标识;所述第二业务端包括至少一个业务端;
S508:第二业务端依据第一操作的数据执行第二本地事务,并将所述第二本地事务的第二提交结果反馈给消息服务器;
本实施例中,假设第二业务端包括:第二业务服务、数据库和事务监控模块,第二业务服务将变更的数据保存到数据库中,并提交第二本地服务,当事务监听模块监听到第二提交结果后,将第二提交结果反馈给消息服务器。
S509:若任何一个第二本地事务的提交结果为驳回时,将回滚消息发送给其它的第二业务端和第一业务端;
S510:其它第二业务端和第一业务端执行回滚操作。
本实施例中,消息服务器在接收到第一业务端的第一提交结果后,再将第一操作数据发送给第二业务端,这样,将全局事务演变为了多个本地事务,这样每个业务端的业务的执行无需锁定系统资源,节省了系统资源。并且,当存在多个并发业务端时,提高了高并发事务的容忍度。
参考图6,示出了本发明实施例提供的一种分布式事务处理装置的结构示意图,在本实施例中,该装置包括:
接收单元601,用于接收第一业务端发送的第一操作的数据;
第一发送单元602,用于当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为本地提交的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
反馈单元603,用于当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果。
可选的,还包括:
消息队列建立单元,用于建立监听消息队列,所述监听消息队列用于监听所述第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息,并在接收到交互信息后反馈给相应的业务端。
可选的,还包括:
第一反馈单元,用于当监听到所述消息服务器成功接收到了所述第一业务端的第一操作的数据后,向所述第一业务端反馈第一监听信息,以使所述第一业务端在接收到所述的第一监听信息后根据所述第一操作的数据执行第一本地事务。
可选的,还包括:
监听单元,用于监听是否接收到所述第二业务端发送的预制结果;
第二反馈单元,用于当接收到所述第二业务端发送的预制结果后,向所述第二业务端反馈第二监听信息,以使所述第二业务端依据所述第一操作的数据执行第二本地事务。
可选的,还包括:
记录单元,用于在预设的标识数据库中记录所述第一操作的标识。
可选的,还包括:
获取单元,用于在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作,得到第二操作组;
差异计算单元,用于将所述第二操作组与所述标识数据库进行差异性计算,得到所述标识数据库中不包含的第三操作;所述第三操作属于第二操作组;
第二发送单元,用于将所述第三操作的数据发送给所述第二业务端。
可选的,还包括:
第一查询单元,用于定期查询是否接收到第一操作的数据对应的第一提交结果;
第一核查单元,用于若未接收到所述第一操作数据对应的第一提交结果,向所述第一业务端核查所述第一操作的数据的执行情况。
可选的,还包括:
第二查询单元,用于定期查询是否接收到第一操作的数据对应的第二提交结果;
第二核查单元,用于若未接收到所述第一操作数据对应的第二提交结果,向所述第二业务端核查所述第一操作的数据的执行情况。
可选的,所述反馈单元,包括:
反馈子单元,用于当任何一个第二业务端发送的第二本地事务的第二提交结果为驳回的情况下,向其它的第二业务端器和所述第一业务端器反馈回滚消息,以使所述其它的第二业务端器和所述第一业务端器执行回滚操作。
可选的,还包括:
删除单元,用于当向所述第一业务端器发送所述第二本地事务的执行结果对应的消息后,删除所述标识数据库中所述第一操作的标识。
通过本实施例的装置,将一个全局事务划分成多个本地事务,无需锁定系统资源,并且,在保障全局事务一致性的前提下,当存在多个并发业务端时,提高了事务执行的效率。
除此之外,在消息服务器中创建监控消息队列,监控消息服务器和各个业务端之间的所有的交互信息,并将交互信息发送给相应的业务端,这样降低了各业务端之间的耦合性,进而保障了全局事务的一致性。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种分布式事务处理方法,其特征在于,所述方法应用于消息服务器,包括:
接收第一业务端发送的第一操作的数据;
当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为提交成功的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果;
在向所述第二业务端反馈第二监听信息之前,所述方法还包括:在预设的标识数据库中记录所述第一操作的标识;
所述方法还包括:在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作,得到第二操作组;将所述第二操作组与所述标识数据库进行差异性计算,得到所述标识数据库中不包含的第三操作;所述第三操作属于第二操作组;将所述第三操作的数据发送给所述第二业务端,所述第二操作组作为所述消息服务器中当前保存的所有的操作。
2.根据权利要求1所述的方法,其特征在于,在接收到第一业务端发送的第一操作的数据后,还包括:
建立监听消息队列,所述监听消息队列用于监听所述第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息,并在接收到交互信息后反馈给相应的业务端。
3.根据权利要求2所述的方法,其特征在于,还包括:当监听到所述消息服务器成功接收到了所述第一业务端的第一操作的数据后,向所述第一业务端反馈第一监听信息,以使所述第一业务端在接收到所述的第一监听信息后根据所述第一操作的数据执行第一本地事务。
4.根据权利要求2所述的方法,其特征在于,还包括:
监听是否接收到所述第二业务端发送的预制结果;
当接收到所述第二业务端发送的预制结果后,向所述第二业务端反馈第二监听信息,以使所述第二业务端依据所述第一操作的数据执行第二本地事务。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
定期查询是否接收到第一操作的数据对应的第一提交结果;
若未接收到所述第一操作数据对应的第一提交结果,向所述第一业务端核查所述第一操作的数据的执行情况。
6.根据权利要求1所述的方法,其特征在于,还包括:
定期查询是否接收到第一操作的数据对应的第二提交结果;
若未接收到所述第一操作数据对应的第二提交结果,向所述第二业务端核查所述第一操作的数据的执行情况。
7.根据权利要求1所述的方法,其特征在于,所述当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作,包括:
当任何一个第二业务端发送的第二本地事务的第二提交结果为驳回的情况下,向其它的第二业务端器和所述第一业务端器反馈回滚消息,以使所述其它的第二业务端器和所述第一业务端器执行回滚操作。
8.根据权利要求1所述的方法,其特征在于,还包括:
当向所述第一业务端器发送所述第二本地事务的执行结果对应的消息后,删除所述标识数据库中所述第一操作的标识。
9.一种分布式事务处理装置,其特征在于,所述装置应用于消息服务器,包括:
接收单元,用于接收第一业务端发送的第一操作的数据;
第一发送单元,用于当接收到所述第一业务端发送的第一本地事务的第一提交结果时,在所述第一提交结果为本地提交的情况下,将所述第一操作的数据发送给第二业务端;所述第二业务端包括至少一个业务端;所述第一提交结果为所述第一业务端根据所述第一操作的数据执行第一本地事务的结果;
反馈单元,用于当接收到任何一个第二业务端发送的第二本地事务的第二提交结果后,将所述第二提交结果对应的处理消息反馈给其它的第二业务端和所述第一业务端,以使所述第一业务端和其它的业务端根据所述消息执行相应的操作;所述第二提交结果为所述第二业务端根据所述第一操作的数据执行第二本地事务的结果;
在向所述第二业务端反馈第二监听信息之前,所述装置还包括:在预设的标识数据库中记录所述第一操作的标识;
所述装置还包括:在所述消息服务器重新恢复工作的情况下,获取所述消息服务器中的所有第二操作,得到第二操作组;将所述第二操作组与所述标识数据库进行差异性计算,得到所述标识数据库中不包含的第三操作;所述第三操作属于第二操作组;将所述第三操作的数据发送给所述第二业务端,所述第二操作组作为所述消息服务器中当前保存的所有的操作。
10.根据权利要求9所述的装置,其特征在于,还包括:
消息队列建立单元,用于建立监听消息队列,所述监听消息队列用于监听所述第一业务端和所述消息服务器的交互信息,以及所述第二业务端和所述消息服务器的交互信息,并在接收到交互信息后反馈给相应的业务端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711486720.3A CN108279986B (zh) | 2017-12-29 | 2017-12-29 | 一种分布式事务处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711486720.3A CN108279986B (zh) | 2017-12-29 | 2017-12-29 | 一种分布式事务处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108279986A CN108279986A (zh) | 2018-07-13 |
CN108279986B true CN108279986B (zh) | 2023-10-03 |
Family
ID=62802834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711486720.3A Active CN108279986B (zh) | 2017-12-29 | 2017-12-29 | 一种分布式事务处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108279986B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110532069B (zh) * | 2019-08-22 | 2021-06-29 | 北京宝兰德软件股份有限公司 | 一种分布式事务提交方法及装置 |
CN112866316A (zh) * | 2019-11-27 | 2021-05-28 | 北京沃东天骏信息技术有限公司 | 一种分布式事务处理的方法和装置 |
CN111626858A (zh) * | 2020-05-28 | 2020-09-04 | 北京金山云网络技术有限公司 | 冲正交易的处理方法、装置、电子设备和计算机可读介质 |
CN111708617A (zh) * | 2020-06-12 | 2020-09-25 | 京东数字科技控股有限公司 | 事务处理方法、装置、设备及计算机可读存储介质 |
CN113242310B (zh) * | 2020-06-30 | 2024-04-12 | 浙江口碑网络技术有限公司 | 基于小程序实现服务的方法及装置 |
CN112765126A (zh) * | 2020-12-31 | 2021-05-07 | 金蝶软件(中国)有限公司 | 数据库事务的管理方法、装置、计算机设备和存储介质 |
CN113254167B (zh) * | 2021-06-07 | 2021-11-16 | 中电金信软件有限公司 | 分布式事务处理方法、装置、系统及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6529932B1 (en) * | 1998-04-01 | 2003-03-04 | Microsoft Corporation | Method and system for distributed transaction processing with asynchronous message delivery |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN106156119A (zh) * | 2015-04-07 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种分布式事务通信方法、系统及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016049584A1 (en) * | 2014-09-26 | 2016-03-31 | Oracle International Corporation | System and method for transaction recovery in a multitenant application server environment |
-
2017
- 2017-12-29 CN CN201711486720.3A patent/CN108279986B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6529932B1 (en) * | 1998-04-01 | 2003-03-04 | Microsoft Corporation | Method and system for distributed transaction processing with asynchronous message delivery |
CN102306197A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 保证跨数据源操作结果一致性的装置和方法 |
CN106156119A (zh) * | 2015-04-07 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种分布式事务通信方法、系统及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108279986A (zh) | 2018-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108279986B (zh) | 一种分布式事务处理方法及装置 | |
CN109636427B (zh) | 基于区块链系统的业务处理方法、装置、介质及电子设备 | |
US6934247B2 (en) | Recovery following process or system failure | |
CN111030784A (zh) | 一种信息同步方法和装置 | |
CN111277639B (zh) | 一种保持数据一致性的方法和装置 | |
WO2023029519A1 (zh) | 一种数据同步方法及装置、计算机设备、存储介质 | |
CN105988862A (zh) | 分布式事务处理方法及装置 | |
CN103488526A (zh) | 在分布式系统中锁定业务资源的系统和方法 | |
CN112118171A (zh) | 消息互通系统、方法、装置、计算机设备及可读存储介质 | |
WO2023186154A1 (zh) | 数据传输系统以及方法 | |
CN111143040A (zh) | 事务处理方法、装置、系统及存储介质 | |
CN115544034A (zh) | 一种数据一致性方法及业务系统 | |
CN114880137A (zh) | 消息处理方法及装置、电子设备及存储介质 | |
PH12015500675B1 (en) | Method and system for transmission management of full configuration synchronization between eml-nml. | |
CN103678614A (zh) | 一种用于开锁业治安管理的信息处理方法 | |
CN114090687A (zh) | 一种数据同步方法及装置 | |
CN113051044A (zh) | 一种基于无服务架构的分布式事务处理方法及装置 | |
CN115271835A (zh) | 一种发票生成方法、装置、电子设备及存储介质 | |
CN108536774B (zh) | 一种结构化数据的同步方法及系统 | |
CN101488134A (zh) | 数据库系统的复制环境内的高性能修改事务的方法及系统 | |
CN112839110B (zh) | 一种分布式系统中基于网络超时的问题处理的实现方法 | |
CN114466071B (zh) | 一种基于MQ PaaS的事务消息处理方法及装置 | |
CN111008222A (zh) | 数据状态查询方法和装置 | |
CN116703584A (zh) | 一种基于两阶段提交机制的交易方法、装置、设备及介质 | |
JP2014203227A (ja) | 端末管理運用システム及び方法 |
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 |