CN109885382A - 跨***分布式事务处理方法和分布式事务处理的*** - Google Patents
跨***分布式事务处理方法和分布式事务处理的*** Download PDFInfo
- Publication number
- CN109885382A CN109885382A CN201910040738.3A CN201910040738A CN109885382A CN 109885382 A CN109885382 A CN 109885382A CN 201910040738 A CN201910040738 A CN 201910040738A CN 109885382 A CN109885382 A CN 109885382A
- Authority
- CN
- China
- Prior art keywords
- subsystem
- message
- distributed transaction
- confirmation
- transaction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 40
- 238000012790 confirmation Methods 0.000 claims abstract description 101
- 238000005096 rolling process Methods 0.000 claims abstract description 57
- 230000009471 action Effects 0.000 claims abstract description 52
- 238000000034 method Methods 0.000 claims abstract description 13
- 230000004044 response Effects 0.000 claims abstract description 10
- 239000003607 modifier Substances 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 12
- 230000001360 synchronised effect Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 4
- 239000004744 fabric Substances 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 abstract description 15
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005194 fractionation Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Landscapes
- Hardware Redundancy (AREA)
Abstract
本发明提供了一种跨***分布式事务处理方法和分布式事务处理的***。该方法包括:主***开启分布式事务;主***向分***发送尝试执行事务的尝试请求;分***响应于尝试请求,执行尝试操作;分***将尝试操作的执行结果反馈至主***;主***根据接收到的执行结果向消息服务***发送消息,其中,当主***收到的执行结果均为成功时,向消息服务***发送确定执行事务的确认消息,当主***接收到任一执行结果为失败时,向消息服务***发送回滚执行事务的回滚消息;消息服务***发布接收到的消息;分***监听消息服务***发布的消息,当监听到确认消息时,执行确认操作,当监听到回滚消息时,执行回滚操作。通过本发明,能够避免上述中心化单点现象。
Description
技术领域
本发明涉及分布式事务处理技术领域,尤其涉及一种跨***分布式事务处理方法和分布式事务处理的***,以及计算机设备和计算机可读存储介质。
背景技术
跨***分布式事务处理是为了解决应用拆分带来的跨***业务操作原子性的问题,例如:商城***涉及营销***、积分支付***和收银台***等,在购买商品时,会同时使用到券、积分、电子账户的支付,因此需要通过跨***分布式事务处理,确保用户的一个购买动作涉及到的多个支付过程都在一个事务中执行。
在跨***分布式事务处理方法中,通常会采用TCC的方案,其中,TCC包括了三个动作,分别是try(尝试操作)、confirm(确认操作)、cancel(回滚操作),现有技术的跨***分布式事务处理方案会存在一个事务协调器,来控制整个TCC的过程,所有涉及分布式事务的接口都会依赖这个事务协调器,一旦事务协调器出现问题,会导致整个业务异常,存在中心化单点现象。
因此,提供一种跨***分布式事务处理方法和分布式事务处理的***,以避免上述中心化单点现象,是本领域需要解决的技术问题。
发明内容
本发明的目的是提供一种跨***分布式事务处理方法和分布式事务处理的***,以及计算机设备和计算机可读存储介质,用于解决现有技术存在的上述问题。
为了实现上述目的,本发明提供了一种跨***分布式事务处理方法。
该跨***分布式事务处理方法包括:主***开启分布式事务,其中,分布式事务包括若干子事务,每个子事务由一个分***处理;主***向分***发送尝试执行事务的尝试请求;分***响应于尝试请求,执行尝试操作;分***将尝试操作的执行结果反馈至主***;主***根据接收到的执行结果向消息服务***发送消息,其中,当主***收到的执行结果均为成功时,向消息服务***发送确定执行事务的确认消息,当主***接收到任一执行结果为失败时,向消息服务***发送回滚执行事务的回滚消息;消息服务***发布接收到的消息;分***监听消息服务***发布的消息,当监听到确认消息时,执行确认操作,当监听到回滚消息时,执行回滚操作。
为了实现上述目的,本发明提供了一种分布式事务处理的***。
该分布式事务处理的***包括主***、分***和消息服务***,其中,主***用于开启分布式事务,向分***发送尝试执行事务的尝试请求,其中,分布式事务包括若干子事务,每个子事务由一个分***处理;分***用于响应于尝试请求,执行尝试操作,并将尝试操作的执行结果反馈至主***;主***还用于根据接收到的执行结果向消息服务***发送消息,其中,当主***收到的执行结果均为成功时,向消息服务***发送确定执行事务的确认消息,当主***接收到任一执行结果为失败时,向消息服务***发送回滚执行事务的回滚消息;消息服务***用于发布接收到的消息;分***还用于监听消息服务***发布的消息,当监听到确认消息时,执行确认操作,当监听到回滚消息时,执行回滚操作。
为了实现上述目的,本发明提供了一种计算机设备。
该计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现本发明提供的任意一种跨***分布式事务处理方法的步骤。
为了实现上述目的,本发明提供了一种计算机可读存储介质。
该计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现本发明提供的任意一种跨***分布式事务处理方法的步骤。
与现有技术相比,采用本发明提供的跨***分布式事务处理方法和分布式事务处理的***、计算机设备及存储介质,至少实现以下技术效果:
通过消息服务***发布确认消息,分***通过监听消息服务***发布的确认消息来统一处理分布式事务各个子事务,在任一分***执行尝试操作的执行结果为失败时,通过消息服务***发布回滚消息,分***通过监听消息服务***发布的确认回滚消息统一回滚,整体保证不同分***间对分布式事务的一致性,并且,消息服务***仅进行消息发布,相比事务协调器,在跨***分布式事务处理中更加稳定和可靠,避免使用事务协调器而出现中心化单点的问题。
附图说明
图1为本发明实施例一提供的跨***分布式事务处理方法的步骤流程图;
图2为本发明实施例一提供的跨***分布式事务处理方法的流程示意图;
图3为本发明实施例二提供的跨***分布式事务处理方法的步骤流程图;
图4为本发明实施例三提供的跨***分布式事务处理方法的步骤流程图;
图5为本发明实施例六提供的分布式事务处理***的框图;
图6为本发明实施例七提供的计算机设备的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供了一种跨***分布式事务处理方法,该处理方法涉及主***、消息服务***和若干分***之间的交互,由主***和若干分***完成事务本身的执行,消息服务***用于将主***的消息广播给各分***,各分***进行消息的监听。
具体地,主***为分布式事务开启的入口,各分***执行分布式事务中的子事务,消息服务***负责发布主***发送的确认消息和回滚消息,各分***监听消息服务***发布的消息,根据监听到的消息执行相应的动作。例如,主***为商城服务***,分***涉及订单服务***、库存服务***等,商城服务***发生一次交易,需要订单服务***增加订单,库存服务***减少库存。
图1为本发明实施例一提供的跨***分布式事务处理方法的步骤流程图,图2为本发明实施例一提供的跨***分布式事务处理方法的流程示意图,关于该实施例提供的跨***分布式事务处理方法,具体包括以下步骤:
步骤S101:主***开启分布式事务。
其中,主***作为事务开启的入口,开启分布式事务,一个分布式事务包括若干子事务,每个子事务由一个分***处理,例如,商城服务***发生交易时,商城服务***为主***,主***开启包括增加订单和减少库存两个子事务的分布式事务。
步骤S102:主***向分***发送尝试执行事务的尝试请求。
主***开启分布式事务后,首先向每个处理子事务的分***发送尝试执行事务的尝试请求,其中,尝试请求可包括子事务的事务标识等信息,例如,商城服务***分别向订单服务***和库存服务***发送尝试请求,向订单服务***发送的尝试请求包括标识“增加订单”这一子事务的事务标识,向库存服务***发送的尝试请求包括标识“减少库存”这一子事务的事务标识。
步骤S103:分***响应于尝试请求,执行尝试操作。
其中,尝试操作(try)也即尝试执行子事务,包括完成执行子事务所需的所有业务检查,并预留必须的业务资源。每个分***在接收到尝试请求后,均进行针对自身子事务的尝试操作。
步骤S104:分***将尝试操作的执行结果反馈至主***。
其中,执行结果包括成功和失败,执行结果为成功时,说明分***执行尝试操作时,能够按照预定的要求完成操作,执行结果为失败时,说明分***执行尝试操作时,无法按照预定的要求完成操作,预定的要求包括执行时间,执行逻辑等,例如,库存服务***执行尝试操作时,如果库存已经为0,则执行“减少库存”的尝试操作时,继续减少库存会使库存为出现负数,不满足执行逻辑,执行结果为失败。
尝试操作并不是真正执行子事务,相当于对执行子事务的“彩排”和“预演”,并不真正对数据库中的数据进行更改,各个分***在执行尝试操作之后,无论有怎样的执行结果,均会将执行结果反馈至主***。
步骤S105:主***根据接收到的执行结果向消息服务***发送消息。
其中,当主***收到的执行结果均为成功时,也即,每个分***均能够在尝试操作中成功执行子事务,说明分布式事务包括的各个子事务均能够正常执行,能够保证事务的一致性,此时,向消息服务***发送确定执行事务的确认消息,以使各个分***执行确认操作(confirm),真正完成所有子事务的执行。
当主***接收到任一执行结果为失败时,说明分布式事务包括的子事务中存在不能够正常执行的子事务,为了保证事务的一致性,向消息服务***发送回滚执行事务的回滚消息,以使分***执行回滚操作(cancel),将尝试操作进行回滚,所有分***回到初始状态。
步骤S106:消息服务***发布接收到的消息。
消息服务***与现有技术中的事务协调器不同,不做事务的协调和管理,仅仅做消息的发布,相比事务协调器,在跨***分布式事务处理中更加稳定和可靠。消息服务***仅作为消息的发布方,对主***发送的消息进行发布,无论是确认消息还是回滚消息,消息服务***作为消息发布方,均会将其发布。
步骤S107:分***监听消息服务***发布的消息,当监听到确认消息时,执行确认操作,当监听到回滚消息时,执行回滚操作。
各分***可集成消息监听端,通过消息监听端监听消息服务***发布的消息,其中,消息服务***在进行消息发布时,可发布消息队列,该消息队列由多个消息构成,每个消息均可包括一个子事务的事务标识,分***通过监听消息中的事务标识,来确定是否要进行相应的处理,当某分***监听到某个消息包括的事务标识为该分***处理的子事务的事务标识时,该分***需要对这一消息进行处理,具体地,这一消息为到确认消息时,执行确认操作,这一消息为回滚消息时,执行回滚操作。也即,该步骤中描述的分***监听到确认消息,是指分***监听到某个确认消息包括的事务标识为该分***处理的子事务的事务标识,该步骤中描述的分***监听到回滚消息,是指分***监听到某个回滚消息包括的事务标识为该分***处理的子事务的事务标识。
分***通过监听消息服务***发布消息,来进行确认操作或回滚操作,能够保证各个分***统一处理分布式事务,避免不同分***间出现处理不一致的情况。
采用该实施例提供的跨***分布式事务处理方法,通过消息服务***发布确认消息,分***通过监听消息服务***发布的确认消息来统一处理分布式事务各个子事务,在任一分***执行尝试操作的执行结果为失败时,通过消息服务***发布回滚消息,分***通过监听消息服务***发布的确认回滚消息统一回滚,整体保证不同分***间对分布式事务的一致性,并且,消息服务***仅进行消息发布,相比事务协调器,在跨***分布式事务处理中更加稳定和可靠,避免使用事务协调器而出现中心化单点的问题。
实施例二
本发明实施例二提供了一种在上述实施例一的基础上优选的跨***分布式事务处理方法,相关部分可参考上述实施例,需要特别说明的是,在该实施例中,主***对应的数据库中设置有第一事务表,各分***对应的数据库中分贝设置有第二事务表。第一事物表中设置若干条分布式事务的记录,每条分布式事务的记录包括分布式事务的事务标识以及事务状态;第二事物表中设置若干条子事务的记录,每条子事务的记录包括子事务的事务标识以及事务状态,分布式事务的事务标识可以包括所有子事务的事务标识,其中,事务状态包括:事务开始、尝试完成、回滚中、回滚完成、确认中和确认完成。在此基础上,图3为本发明实施例二提供的跨***分布式事务处理方法的步骤流程图,如图3所示,该实施例具体包括如下的步骤:
步骤S201:主***在第一事务表中***分布式事务。
主***在开启分布式事务时,首先在第一事务表中写入一条新的分布式事务的记录,并将该条新的分布式事务的记录中的事务状态设置为事务开始。
步骤S202:主***向分***发送尝试执行事务的尝试请求。
步骤S203:分***响应于尝试请求,执行尝试操作。
步骤S204:在第二事务表中***子事务。
分***在执行尝试操作之后,在第二事务表中写入一条新的子事务的记录,并将该条新的子事务的记录中的事务状态设置为尝试完成。
步骤S205:分***将尝试操作的执行结果反馈至主***。
步骤S206:主***接收到各分***发送的执行结果。
步骤S207:主***将第一事务表中分布式事务的状态修改为尝试完成。
步骤S208:主***向消息服务***发送消息。
步骤S209:主***修改第一事务表中的信息。
其中,主***向消息服务***发送确认消息后,主***修改第一事务表中的信息,具体是将第一事务表中分布式事务的状态修改为确认完成,主***向消息服务***发送回滚消息后,主***修改第一事务表中的信息,具体是将分布式事务的状态修改为回滚完成。
步骤S210:消息服务***发布接收到的消息。
步骤S211:分***监听消息服务***发布的消息。
步骤S212a:分***在监听到确认消息后,将第二事务表中子事务的状态修改为确认中。
步骤S213a:分***执行确认操作。
步骤S214a:分***将第二事务表中子事务的状态修改为确认完成。
步骤S212b:分***在监听到回滚消息后,将第二事务表中子事务的状态修改为回滚中。
步骤S213b:分***或者执行回滚操作。
步骤S214b:分***将第二事务表中子事务的状态修改为回滚完成。
采用该实施例提供的跨***分布式事务处理方法,在避免使用事务协调器而出现中心化单点的问题的基础上,主***维护第一事务表,分***维护第二事物表,在各个动作节点完成时,修改第一事物表和第二事务表中相应事务的事务状态,能够从第一事务表和第二事物表中获取到主***和分***在分布式事务处理过程中的进度。
实施例三
本发明实施例三提供了一种在上述实施例二的基础上优选的跨***分布式事务处理方法,相关部分可参考上述实施例,需要特别说明的是,在该实施例中,跨***分布式事务处理方法还涉及调度任务***,该调度任务***通过第一事务表和第二事物表中的事务状态,对事务的执行进行调度,其中,关于主***、分***和消息服务***三者之间完成跨***分布式事务处理的部分可参考上述实施例二的相关描述,此处不再赘述,在本实施例中,重点说明调度任务***对事务的执行进行调度的过程,图4为本发明实施例二提供的跨***分布式事务处理方法的步骤流程图,在上述实施例二的基础上,如图4所示,该实施例三还包括如下的步骤:
步骤S215:调度任务***查询第一事务表中分布式事务的状态和第二事务表中子事务的状态。
其中,可根据第一事务表中分布式事务的事务标识和第二事务表中子事务的事务标识进行查询,例如,第一事务表中分布式事务的事务标识为ABC,对应的第二事务表中子事务的事务标识为A、B或C。
步骤S216:当第一事务表中分布式事务的状态为确认完成,第二事务表中子事务的状态为尝试完成时,调度任务***向分***发送执行确认操作的命令。当第一事务表中分布式事务的状态为回滚完成,第二事务表中子事务的状态为尝试完成时,调度任务***向分***发送执行回滚操作的命令。
也即主***已经向消息服务***发送了确认消息,但分***并没有执行确认操作,此时,调度任务***向分***发送执行确认操作的命令;主***已经向消息服务***发送了回滚消息,但分***并没有执行回滚操作,此时,调度任务***向分***发送执行回滚操作的命令。
步骤S217:分***在接收到执行确认操作的命令时,执行确认操作,接收到执行回滚操作的命令时,执行回滚操作。
其中,分***在响应调度任务***发送的执行确认操作的命令,执行确认操作后,将第二事务表中子事务的状态修改为确认完成;分***在响应调度任务***发送的执行回滚操作的命令,执行回滚操作后,将第二事务表中子事务的状态修改为回滚完成。
采用该实施例供的跨***分布式事务处理方法,在避免使用事务协调器而出现中心化单点的问题,以及从第一事务表和第二事物表中获取到主***和分***在分布式事务处理过程中的进度的基础上,通过消息服务***将主***与分***操作不一致的子事务进行调度执行,具体地,当通过消息服务***传递的消息执行失败时,通过调度任务***重复执行,也即通过调度任务***对分***没有正常执行的确认操作或回滚操作重新发送命令,保证了跨***分布式事务处理过程中的可靠性。
实施例四
本发明实施例四提供了一种在上述实施例三的基础上优选的跨***分布式事务处理方法,其中,相同的部分可参考上述实施例二和实施例三的相关描述,此处不再赘述,在该实施例四中,在第二事务表中每条分布式事务的记录还包括子事务的重试次数,其中,调度任务***可多次查询第一事务表中分布式事务的状态和第二事务表中子事务的状态,并根据查收到的差异去向分***发送相应的命令,分***每接收到一次执行确认操作的命令或每接收到一次执行回滚操作的命令,第二事务表中对应的子事务重试次数加1。
在上述步骤S217中,分***接收到执行确认操作的命令后,执行确认操作前,或者,分***接收到执行回滚操作的命令后,执行回滚操作前,修改并读取第二事务表中子事务对应的重试次数,其中,第二事务表中子事务对应的重试次数的初始值为0。分***执行确认操作时,先根据在第二事务表中读取到的子事务对应的重试次数,然后按照阶梯时间间隔执行确认操作;分***执行回滚操作时,先根据在第二事务表中读取到的子事务对应的重试次数,按照阶梯时间间隔执行回滚操作。例如,阶梯时间间隔的间隔是10*2n,单位为秒,n为重试次数,在第一次重试时,间隔20秒执行确认操作或回滚操作,在第二次重试时,间隔40秒执行确认操作或回滚操作。
采用该实施例提供的跨***分布式事务处理方法,在通过调度任务***对分***没有正常执行的确认操作或回滚操作重新发送命令,保证跨***分布式事务处理过程中的可靠性的同时,根据重试次数来计算出阶梯时间间隔,按照阶梯时间间隔调整执行操作的时间,重试的次数越多,间隔执行操作的时间越长,避免不能正常执行的原因在短时间内没有改变而造成重复执行命令资源浪费。
实施例五
本发明实施例五提供了一种在上述实施例二至四的基础上优选的跨***分布式事务处理方法,其中,相同的部分可参考上述实施例二至实施例四的相关描述,此处不再赘述,在该实施例五中,分***对应的数据库中还设置有前置表和主表,其中,前置表和主表在进行分布式事务处理之前相同,业务查询操作都在主表上进行,实现数据强一致性,业务DML操作(data manipulation language)首先在前置表上进行操作,待所有前置表操作完毕,再同时同步到各自主表上。具体地:
在步骤S203中,分***执行尝试操作的步骤包括:分***操作前置表中的数据,包括数据的增加、删除以及修改,具体怎样修改数据,与子事务的内容有关。
步骤S213a中,分***执行确认操作的步骤包括:分***使主表与前置表同步;步骤S213b中,分***执行回滚操作的步骤包括:分***将前置表恢复至执行尝试操作之前的状态,例如在前置表上做UNDO操作。
进一步地,可将尝试操作、确认操作和回滚操作均封装为接口,分***在执行上述各个操作时,通过调用相应的接口完成操作。
进一步地,可以通过添加注解的方式标识执行尝试操作的接口、执行确认操作的接口和执行回滚操作的接口。
具体地:分***操作前置表中的数据的步骤包括:分***调用执行尝试操作的接口,通过执行尝试操作的接口操作前置表中的数据;分***使主表与前置表同步的步骤包括:分***调用执行确认操作的接口,通过执行确认操作的接口使主表与前置表同步;分***将前置表恢复至执行尝试操作之前的状态的步骤包括:分***调用执行回滚操作的接口,通过执行回滚操作的接口将前置表恢复至执行尝试操作之前的状态。
在步骤S202中,主***向分***发送尝试执行事务的尝试请求时,尝试请求包括调用时间和超时时间;
分***在执行尝试操作之后,将执行结果反馈至主***之前,计算当前时间与调用执行尝试操作的接口的调用时间的差值,并判断该差值是否大于或等于超时时间,其中,当差值大于或等于超时时间时,尝试操作的执行结果为失败,当分***不能够按照正常逻辑操作前置表中的数据时,尝试操作的执行结果为失败,当分***能够按照正常逻辑操作前置表中的数据且上述差值小于超时时间时,尝试操作的执行结果为成功。
实施例六
本发明实施例六提供了一种分布式事务处理的***,该***对应上述跨***分布式事务处理方法,相对应的技术特征及技术效果可相互参考,该分布式事务处理的***包括主***10、分***20和消息服务***30。
主***10用于开启分布式事务,向分***20发送尝试执行事务的尝试请求,其中,分布式事务包括若干子事务,每个子事务由一个分***20处理。分***20用于响应于尝试请求,执行尝试操作,并将尝试操作的执行结果反馈至主***10。主***10还用于根据接收到的执行结果向消息服务***30发送消息,其中,当主***10收到的执行结果均为成功时,向消息服务***30发送确定执行事务的确认消息,当主***10接收到任一执行结果为失败时,向消息服务***30发送回滚执行事务的回滚消息。消息服务***30用于发布接收到的消息。分***20还用于监听消息服务***30发布的消息,当监听到确认消息时,执行确认操作,当监听到回滚消息时,执行回滚操作。
可选地,主***10对应的数据库中设置有第一事务表,分***20对应的数据库中设置有第二事务表;主***10开启分布式事务的步骤包括:主***10在第一事务表中***分布式事务,并设置分布式事务的状态为事务开始。主***10在接收到执行结果之后,向消息服务***30发送消息之前,还用于将分布式事务的状态修改为尝试完成;主***10还用于在向消息服务***30发送确认消息后,将分布式事务的状态修改为确认完成;主***10还用于向消息服务***30发送回滚消息后,将分布式事务的状态修改为回滚完成;分***20还用于在执行尝试操作后,在第二事务表中***子事务,并设置子事务的状态为尝试完成;分***20还用于在监听到确认消息后,执行确认操作前,将子事务的状态修改为确认中;分***20还用于在执行确认操作后,将子事务的状态修改为确认完成;分***20还用于在监听到回滚消息后,执行回滚操作前,将子事务的状态修改为回滚中;分***20还用于在执行回滚操作后,将子事务的状态修改为回滚完成。
可选地,该分布式事务处理的***还包括调度任务***,该调度任务***用于查询第一事务表中分布式事务的状态和第二事务表中子事务的状态,当第一事务表中分布式事务的状态为确认完成,第二事务表中子事务的状态为尝试完成时,调度任务***向分***20发送执行确认操作的命令;当第一事务表中分布式事务的状态为回滚完成,第二事务表中子事务的状态为尝试完成时,调度任务***向分***20发送执行回滚操作的命令;分***20还用于接收到执行确认操作的命令时,执行确认操作,接收到执行回滚操作的命令时,执行回滚操作。
可选地,分***20还用于在接收到执行确认操作的命令后,执行确认操作前,或者,接收到执行回滚操作的命令后,执行回滚操作前,修改并读取第二事务表中子事务对应的重试次数,其中,分***20每接收到一次执行确认操作的命令或每接收到一次执行回滚操作的命令,第二事务表中子事务对应的重试次数加1;分***20执行确认操作的步骤包括:分***20根据在第二事务表中读取到的子事务对应的重试次数,按照阶梯时间间隔执行确认操作;分***20执行回滚操作的步骤包括:分***20根据在第二事务表中读取到的子事务对应的重试次数,按照阶梯时间间隔执行回滚操作。
可选地,分***20对应的数据库中还设置有前置表和主表,其中,前置表和主表在进行分布式事务处理之前相同;分***20执行尝试操作的步骤包括:分***20操作前置表中的数据;分***20执行确认操作的步骤包括:分***20使主表与前置表同步;分***20执行回滚操作的步骤包括:分***20将前置表恢复至执行尝试操作之前的状态。
可选地,分***20操作前置表中的数据的步骤包括:分***20调用执行尝试操作的接口,通过执行尝试操作的接口操作前置表中的数据;尝试请求包括调用时间和超时时间;分***20还用于在执行尝试操作之后,将执行结果反馈至主***10之前,计算当前时间与调用时间的差值是否大于或等于超时时间,当差值大于或等于超时时间时,尝试操作的执行结果为失败。
可选地,当分***20能够按照预定逻辑操作前置表中的数据且差值小于超时时间时,尝试操作的执行结果为成功;当分***20不能够按照预定逻辑操作前置表中的数据时,尝试操作的执行结果为失败。
可选地,分***20使主表与前置表同步的步骤包括:分***20调用执行确认操作的接口,通过执行确认操作的接口使主表与前置表同步;分***20将前置表恢复至执行尝试操作之前的状态的步骤包括:分***20调用执行回滚操作的接口,通过执行回滚操作的接口将前置表恢复至执行尝试操作之前的状态。
可选地,通过添加注解的方式标识执行尝试操作的接口、执行确认操作的接口和执行回滚操作的接口。
实施例七
本发明实施例七还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备02至少包括但不限于:可通过***总线相互通信连接的存储器021、处理器022,如图6所示。需要指出的是,图6仅示出了具有组件021-022的计算机设备02,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器021(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器021可以是计算机设备02的内部存储单元,例如该计算机设备02的硬盘或内存。在另一些实施例中,存储器021也可以是计算机设备02的外部存储设备,例如该计算机设备02上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备02的内部存储单元也包括其外部存储设备。本实施例中,存储器021通常用于存储安装于计算机设备02的操作***和各类应用软件,例如上述实施例的分布式事务处理的***的程序代码等。此外,存储器021还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器022在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器022通常用于控制计算机设备02的总体操作。本实施例中,处理器022用于运行存储器021中存储的程序代码或者处理数据,例如运行分布式事务处理的***等。
实施例八
本发明实施例八还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储分布式事务处理的***,被处理器执行时实现上述实施例的跨***分布式事务处理方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种跨***分布式事务处理方法,其特征在于,包括:
主***开启分布式事务,其中,所述分布式事务包括若干子事务,每个所述子事务由一个分***处理;
所述主***向所述分***发送尝试执行事务的尝试请求;
所述分***响应于所述尝试请求,执行尝试操作;
所述分***将所述尝试操作的执行结果反馈至所述主***;
所述主***根据接收到的所述执行结果向消息服务***发送消息,其中,当所述主***收到的所述执行结果均为成功时,向所述消息服务***发送确定执行事务的确认消息,当所述主***接收到任一所述执行结果为失败时,向所述消息服务***发送回滚执行事务的回滚消息;
所述消息服务***发布接收到的消息;
所述分***监听所述消息服务***发布的消息,当监听到所述确认消息时,执行确认操作,当监听到所述回滚消息时,执行回滚操作。
2.根据权利要求1所述的跨***分布式事务处理方法,其特征在于,
所述主***对应的数据库中设置有第一事务表,所述分***对应的数据库中设置有第二事务表;
所述主***开启分布式事务的步骤包括:所述主***在所述第一事务表中***所述分布式事务,并设置所述分布式事务的状态为事务开始;
所述跨***分布式事务处理方法还包括:所述主***在接收到所述执行结果之后,向所述消息服务***发送所述消息之前,将所述分布式事务的状态修改为尝试完成;所述主***向所述消息服务***发送所述确认消息后,将所述分布式事务的状态修改为确认完成;所述主***向所述消息服务***发送所述回滚消息后,将所述分布式事务的状态修改为回滚完成;所述分***在执行所述尝试操作后,在所述第二事务表中***所述子事务,并设置所述子事务的状态为所述尝试完成;所述分***在监听到所述确认消息后,执行所述确认操作前,将所述子事务的状态修改为确认中;所述分***在执行所述确认操作后,将所述子事务的状态修改为所述确认完成;所述分***在监听到所述回滚消息后,执行所述回滚操作前,将所述子事务的状态修改为回滚中;所述分***在执行所述回滚操作后,将所述子事务的状态修改为所述回滚完成。
3.根据权利要求2所述的跨***分布式事务处理方法,其特征在于,所述跨***分布式事务处理方法还包括:
调度任务***查询所述第一事务表中所述分布式事务的状态和所述第二事务表中所述子事务的状态;
当所述第一事务表中所述分布式事务的状态为确认完成,所述第二事务表中所述子事务的状态为尝试完成时,所述调度任务***向所述分***发送执行确认操作的命令;
当所述第一事务表中所述分布式事务的状态为回滚完成,所述第二事务表中所述子事务的状态为尝试完成时,所述调度任务***向所述分***发送执行回滚操作的命令;
所述分***接收到所述执行确认操作的命令时,执行确认操作,接收到所述执行回滚操作的命令时,执行回滚操作。
4.根据权利要求3所述的跨***分布式事务处理方法,其特征在于,
所述跨***分布式事务处理方法还包括:所述分***接收到所述执行确认操作的命令后,执行确认操作前,或者,所述分***接收到所述执行回滚操作的命令后,执行回滚操作前,修改并读取所述第二事务表中所述子事务对应的重试次数,其中,所述分***每接收到一次所述执行确认操作的命令或每接收到一次所述执行回滚操作的命令,所述第二事务表中所述子事务对应的重试次数加1;
所述分***执行所述确认操作的步骤包括:所述分***根据在所述第二事务表中读取到的所述子事务对应的重试次数,按照阶梯时间间隔执行所述确认操作;所述分***执行所述回滚操作的步骤包括:所述分***根据在所述第二事务表中读取到的所述子事务对应的重试次数,按照阶梯时间间隔执行所述回滚操作。
5.根据权利要求2所述的跨***分布式事务处理方法,其特征在于,
所述分***对应的数据库中还设置有前置表和主表,其中,所述前置表和所述主表在进行所述分布式事务处理之前相同;
所述分***执行尝试操作的步骤包括:所述分***操作所述前置表中的数据;
所述分***执行确认操作的步骤包括:所述分***使所述主表与所述前置表同步;
所述分***执行回滚操作的步骤包括:所述分***将所述前置表恢复至执行所述尝试操作之前的状态。
6.根据权利要求5所述的跨***分布式事务处理方法,其特征在于,
所述分***操作所述前置表中的数据的步骤包括:所述分***调用执行尝试操作的接口,通过所述执行尝试操作的接口操作所述前置表中的数据;
所述尝试请求包括调用时间和超时时间;
所述跨***分布式事务处理方法还包括:所述分***在执行所述尝试操作之后,将所述执行结果反馈至所述主***之前,计算当前时间与所述调用时间的差值是否大于或等于所述超时时间,当所述差值大于或等于所述超时时间时,所述尝试操作的执行结果为失败。
7.根据权利要求6所述的跨***分布式事务处理方法,其特征在于,当所述分***能够按照预定逻辑操作所述前置表中的数据且所述差值小于所述超时时间时,所述尝试操作的执行结果为成功;当所述分***不能够按照预定逻辑操作所述前置表中的数据时,所述尝试操作的执行结果为失败。
8.一种分布式事务处理的***,其特征在于,包括主***、分***和消息服务***,其中,
所述主***用于开启分布式事务,向所述分***发送尝试执行事务的尝试请求,其中,所述分布式事务包括若干子事务,每个所述子事务由一个所述分***处理;
所述分***用于响应于所述尝试请求,执行尝试操作,并将所述尝试操作的执行结果反馈至所述主***;
所述主***还用于根据接收到的所述执行结果向所述消息服务***发送消息,其中,当所述主***收到的所述执行结果均为成功时,向所述消息服务***发送确定执行事务的确认消息,当所述主***接收到任一所述执行结果为失败时,向所述消息服务***发送回滚执行事务的回滚消息;
所述消息服务***用于发布接收到的消息;
所述分***还用于监听所述消息服务***发布的消息,当监听到所述确认消息时,执行确认操作,当监听到所述回滚消息时,执行回滚操作。
9.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910040738.3A CN109885382A (zh) | 2019-01-16 | 2019-01-16 | 跨***分布式事务处理方法和分布式事务处理的*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910040738.3A CN109885382A (zh) | 2019-01-16 | 2019-01-16 | 跨***分布式事务处理方法和分布式事务处理的*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109885382A true CN109885382A (zh) | 2019-06-14 |
Family
ID=66926165
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910040738.3A Pending CN109885382A (zh) | 2019-01-16 | 2019-01-16 | 跨***分布式事务处理方法和分布式事务处理的*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109885382A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111580939A (zh) * | 2020-04-01 | 2020-08-25 | 微梦创科网络科技(中国)有限公司 | 一种分级异步处理事务的方法及装置 |
CN111679930A (zh) * | 2020-06-08 | 2020-09-18 | 中国银行股份有限公司 | 一种cics联机交易的单点回滚方法及*** |
CN112148436A (zh) * | 2020-09-23 | 2020-12-29 | 厦门市易联众易惠科技有限公司 | 去中心化的tcc事务管理方法、装置、设备及*** |
CN112799827A (zh) * | 2019-11-14 | 2021-05-14 | 广州凡科互联网科技股份有限公司 | 一种跨服务数据库事务的保证方法 |
CN113051044A (zh) * | 2021-04-20 | 2021-06-29 | 中国工商银行股份有限公司 | 一种基于无服务架构的分布式事务处理方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998039868A2 (en) * | 1997-03-03 | 1998-09-11 | Mylex Corporation | Reliable event delivery system |
US6529932B1 (en) * | 1998-04-01 | 2003-03-04 | Microsoft Corporation | Method and system for distributed transaction processing with asynchronous message delivery |
CN105893395A (zh) * | 2015-01-26 | 2016-08-24 | 阿里巴巴集团控股有限公司 | 分布式事务的消息回查方法及其*** |
CN106775959A (zh) * | 2016-12-06 | 2017-05-31 | 上海亿账通互联网科技有限公司 | 分布式事务处理方法和*** |
CN107332906A (zh) * | 2017-06-30 | 2017-11-07 | 郑州云海信息技术有限公司 | 分布式***事务管理方法及装置 |
CN107766080A (zh) * | 2016-08-23 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 事务消息处理方法、装置、设备及*** |
CN108491252A (zh) * | 2018-03-13 | 2018-09-04 | 万惠投资管理有限公司 | 分布式事务处理方法及分布式*** |
-
2019
- 2019-01-16 CN CN201910040738.3A patent/CN109885382A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998039868A2 (en) * | 1997-03-03 | 1998-09-11 | Mylex Corporation | Reliable event delivery system |
US6529932B1 (en) * | 1998-04-01 | 2003-03-04 | Microsoft Corporation | Method and system for distributed transaction processing with asynchronous message delivery |
CN105893395A (zh) * | 2015-01-26 | 2016-08-24 | 阿里巴巴集团控股有限公司 | 分布式事务的消息回查方法及其*** |
CN107766080A (zh) * | 2016-08-23 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 事务消息处理方法、装置、设备及*** |
CN106775959A (zh) * | 2016-12-06 | 2017-05-31 | 上海亿账通互联网科技有限公司 | 分布式事务处理方法和*** |
WO2018103318A1 (zh) * | 2016-12-06 | 2018-06-14 | 上海壹账通金融科技有限公司 | 分布式事务处理方法和*** |
CN107332906A (zh) * | 2017-06-30 | 2017-11-07 | 郑州云海信息技术有限公司 | 分布式***事务管理方法及装置 |
CN108491252A (zh) * | 2018-03-13 | 2018-09-04 | 万惠投资管理有限公司 | 分布式事务处理方法及分布式*** |
Non-Patent Citations (2)
Title |
---|
王成良;李立新;叶剑;秦小龙;: "一种基于JMS的分布式异步事务处理模型设计", 信息工程大学学报, no. 02, 15 April 2010 (2010-04-15) * |
陈卫峰, 陈志强, 张丽, 高文焕: "基于CORBA的集装箱检查***运行检查分***的设计", 计算机工程, no. 04, 20 April 2001 (2001-04-20) * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799827A (zh) * | 2019-11-14 | 2021-05-14 | 广州凡科互联网科技股份有限公司 | 一种跨服务数据库事务的保证方法 |
CN111580939A (zh) * | 2020-04-01 | 2020-08-25 | 微梦创科网络科技(中国)有限公司 | 一种分级异步处理事务的方法及装置 |
CN111580939B (zh) * | 2020-04-01 | 2023-09-01 | 微梦创科网络科技(中国)有限公司 | 一种分级异步处理事务的方法及装置 |
CN111679930A (zh) * | 2020-06-08 | 2020-09-18 | 中国银行股份有限公司 | 一种cics联机交易的单点回滚方法及*** |
CN111679930B (zh) * | 2020-06-08 | 2023-06-20 | 中国银行股份有限公司 | 一种cics联机交易的单点回滚方法及*** |
CN112148436A (zh) * | 2020-09-23 | 2020-12-29 | 厦门市易联众易惠科技有限公司 | 去中心化的tcc事务管理方法、装置、设备及*** |
CN112148436B (zh) * | 2020-09-23 | 2023-06-20 | 厦门市易联众易惠科技有限公司 | 去中心化的tcc事务管理方法、装置、设备及*** |
CN113051044A (zh) * | 2021-04-20 | 2021-06-29 | 中国工商银行股份有限公司 | 一种基于无服务架构的分布式事务处理方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109885382A (zh) | 跨***分布式事务处理方法和分布式事务处理的*** | |
CN111752957B (zh) | 一种基于缓存化的销售锁定方法及*** | |
CN110708196B (zh) | 数据处理方法及装置 | |
CN111784329B (zh) | 业务数据的处理方法和装置、存储介质、电子装置 | |
CN111667334B (zh) | 审核失败订单处理方法、装置、计算机设备和存储介质 | |
CN107038182A (zh) | 分表数据的完备性检查方法及装置 | |
CN108446171A (zh) | 电子装置、分布式***执行任务分配方法及存储介质 | |
CN111127181A (zh) | 一种凭证记账方法和装置 | |
CN108845866A (zh) | 处理分布式事务的方法和装置 | |
CN110599305A (zh) | 业务处理方法、装置及存储介质 | |
CN115544044A (zh) | 一种数据一致性保持方法、装置、设备和存储介质 | |
CN113179301A (zh) | 文件的下载方法和装置、存储介质、电子装置 | |
CN110275892A (zh) | 面向区块链的数据管理方法、装置、设备及存储介质 | |
CN112445860A (zh) | 一种处理分布式事务的方法和装置 | |
CN113946427A (zh) | 用于多操作***的任务处理方法、处理器及存储介质 | |
CN112632093A (zh) | 工单处理方法、设备、***、存储介质及程序产品 | |
JP4571090B2 (ja) | スケジューラプログラム、サーバシステム、スケジューラ装置 | |
CN114153858B (zh) | 一种MySQL表空间下租户自动更新的方法及装置 | |
CN115643271A (zh) | 一种云上多应用数据同步方法、装置、服务器及介质 | |
CN113177052A (zh) | 一种分布式***业务数据一致性处理方法、装置 | |
CN111752911A (zh) | 一种基于Flume的数据传输方法、***、终端及存储介质 | |
CN112991022A (zh) | 分布式订单***数据利用mq实现最终一致性的方法及*** | |
CN107704557B (zh) | 操作互斥数据的处理方法、装置、计算机设备和存储介质 | |
CN111049938A (zh) | 消息通知方法、装置、电子设备及可读存储介质 | |
CN112819592B (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 |