掌桥专利:专业的专利平台
掌桥专利
首页

事务链执行方法、装置及设备

文献发布时间:2024-04-18 20:02:18


事务链执行方法、装置及设备

技术领域

本申请涉及微服务架构技术领域,具体地涉及一种事务链执行方法、装置及设备。

背景技术

分布式事务seata框架下的自动交易AT(Auto Transaction)模式是一种无侵入的分布式事务解决方案。在AT模式下,各服务端执行各自对应的本地事务,实现本地事务的提交或回滚等操作,从而完成事务链的执行。但是,在本地事务执行出现问题时,各服务端需要依赖各自对应的服务端数据库进行反向事务补偿,所以服务端对于数据库的依赖程度较高,一旦出现数据库性能不足或数据库宕机等情况时,AT模式会发生补偿失败等错误。

发明内容

本发明实施例提供了一种事务链执行方法、装置及设备,用以解决现有技术中服务端对于自身数据库性能依赖程度较高的问题。

第一方面,本发明实施例提供了一种事务链执行方法,所述方法应用于事务链中的任一服务端,所述方法包括:

将目标数据保存到目标数据库,所述目标数据包括第一数据,所述第一数据为未经过服务端执行本地事务所修改的数据;

当通过所述目标数据库确定事务链中任意服务端报错时,通过所述目标数据库中的目标数据执行数据回滚;

提交所述本地事务或完成所述数据回滚后,在所述目标数据库中添加事务完成标记,所述事务完成标记用于确定所述事务链执行完成。

可选的,所述通过所述目标数据库中的目标数据执行数据回滚,包括:

通过所述目标数据库中的第一数据对服务端数据库中的数据进行覆盖。

可选的,所述目标数据还包括第二数据,所述第二数据为经过服务端执行本地事务所修改后的数据,所述通过所述目标数据库中的目标数据执行数据回滚,包括:

当通过所述目标数据库确定事务链中任意服务端报错且所述本地事务完成提交时,确定服务端数据库中的数据与所述目标数据库中的第二数据是否一致;

如果不一致,则确定数据变更是否为可预知型变更;

当为可预知型变更时,基于当前业务逻辑确定需要保留的数据;

当为不可预知型变更时,保存所述服务端数据库中的数据,并通过所述目标数据库中的第一数据执行数据回滚。

可选的,所述方法还包括:

当待执行本地事务操作的数据为共享型数据时,确定是否存在与所述共享型数据相关的事务正在执行;

当存在与所述共享型数据相关的事务正在执行时,停止执行所述本地事务;

当不存在与所述共享型数据相关的事务正在执行时,通过执行所述本地事务对所述共享型数据进行操作。

可选的,所述确定是否存在与所述共享型数据相关的事务正在执行,包括:

确定所述目标数据库中是否存在执行标记;

当所述目标数据库中存在所述执行标记时,确定存在与所述共享性数据相关的事务正在执行。

可选的,所述当不存在与所述共享型数据相关的事务正在执行时,通过执行所述本地事务对所述共享型数据进行操作,包括:

执行本地事务前,在所述目标数据库中添加执行标记,并在提交所述本地事务或完成所述数据回滚后删除所述执行标记。

可选的,所述方法还包括:

对所述第一数据添加时间标记;

当所述时间标记过期时,确定本地事务是否完成提交;

如果本地事务完成提交,则删除所述目标数据库中的第一数据;

如果本地事务未完成提交,则通过所述目标数据库中的第一数据执行数据回滚,并删除所述目标数据库中的第一数据。

第二方面,本发明实施例提供了一种事务链执行装置,所述装置包括:

保存模块,将目标数据保存到目标数据库,所述目标数据包括未经过执行本地事务所修改的第一数据;

回滚模块,当通过所述目标数据库确定事务链中任意服务端报错时,通过所述目标数据库中的目标数据执行数据回滚;

添加模块,提交所述本地事务或完成所述数据回滚后,在所述目标数据库中添加事务完成标记,所述事务完成标记用于确定所述事务链执行完成。

第三方面,本发明实施例提供了一种电子设备,包括:

至少一个处理器;以及

与所述处理器通信连接的至少一个存储器,其中:

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如第一方面任一项所述的方法。

第四方面,本发明实施例提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行第一方面任一项所述的方法。

本发明实施例不使用服务端自身的服务端数据库来执行数据补偿,而是基于Redis缓存原理,使用非当前数据库,即目标数据库来代替服务端自身数据库存储目标数据并执行回滚等补偿操作,防止服务端自身数据库出现问题而导致的数据补偿失败,即使数据库存在问题仍可以正常回滚。同时,通过使用乐观锁机制,用以在高并发且数据不会重复或者可预计型问题的情况下,尽可能的保证数据一致性且不影响接口性能;并通过使用悲观锁模式,用以对共享数据进行操作时,减少因事务期间的其他调用而导致的数据脏写问题。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1所示为本申请实施例提供的一种事务链执行方法的流程图;

图2所示为本申请实施例提供的一种事务链执行装置的结构示意图;

图3所示为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为了更好的理解本申请的技术方案,下面结合附图对本申请实施例进行详细描述。

应当明确,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

分布式事务seata框架下的自动交易AT模式是一种无侵入的分布式事务解决方案。在AT模式下,用户只需要在自己所对应的服务端发起事务或执行对应的操作,之后事务链中的其他节点,即其他服务端会根据用户所对应服务端发起事务的完成情况,执行各自对应的本地事务,实现本地事务的提交或回滚等操作,从而完成事务链的执行。

但是,现有的AT模式仍存在一些问题。在本地事务执行出现问题时,各服务端需要依赖各自对应的服务端数据库进行反向事务补偿,所以服务端对于数据库的依赖程度较高,一旦出现数据库性能不足或数据库宕机等情况时,AT模式会发生补偿失败等错误。

同时,AT模式下各服务端并发执行各自对应的本地事务,并在完成后提交本地事务。但是各服务端不会对本地已经提交的数据进行加锁,在本地事务提交后且下游其他服务端的事务未提交时,很可能会因为其他服务端所新提交的事务造成数据的继续改变,从而造成数据丢失、数据回滚后与预期不一致等问题。

另外,当操作的数据为共享型数据时,即多个服务端可能会对同一个共享型数据执行本地服务以修改其数值时,会存在脏写等问题。

为解决上述问题,本发明实施例提供了一种事务链执行方法,该方法可以应用于事务链中的任一服务端,如图1所示,该方法的具体步骤包括:

S101,将目标数据保存到目标数据库。

具体的,目标数据包括未经过执行本地事务所修改的第一数据,即,服务端在实际执行本地事务之前,会将未经修改的数据保存到目标数据库中。

其中,目标数据库一般为Redis数据库,且目标数据库中设置有多个分区,目标数据库的每一个分区均与一个服务端对应,用于存储该服务端所存储的目标数据。

S102,当通过目标数据库确定事务链中任一服务端报错时,通过目标数据库中的目标数据执行数据回滚。

具体的,事务链中的各服务端并发执行各自的本地事务。当目标数据库确定事务链中任意一个或多个服务端执行本地事务发生错误时,会指示事务链上所有的服务端执行数据回滚,以恢复原始数据。服务端在接收到目标数据库所下达的指令后,从目标数据库中调取出预存的第一数据,并通过第一数据对自身服务段数据库中当前的数据进行覆盖,以完成数据回滚。

S103,提交本地事务或完成数据回滚后,在目标数据库中添加事务完成标记。事务完成标记用于确定事务链执行完成。

具体的,服务端在执行本地事务成功后,会提交本地事务,实现数据的更新;服务端在执行本地事务失败后则会通过目标数据库指示其他服务端执行数据回滚。

当本地事务完成提交,或完成数据回滚后,确定事务链在本服务端所需要执行的事务全部完成,在目标数据库中添加事务完成标记。当目标数据库确定事务链中全部的服务端都已经添加事务完成标记后,事务链执行完成。

本发明实施例不使用服务端自身的服务端数据库来执行数据补偿,而是基于Redis缓存原理,使用非当前数据库,即目标数据库来代替服务端自身数据库存储目标数据并执行回滚等补偿操作,防止服务端自身数据库出现问题而导致的数据补偿失败,即使数据库存在问题仍可以正常回滚。

可选的,在一些实施例中,在执行S101将目标数据保存到目标数据库时,会对目标数据中的第一数据添加时间标记。服务端在实际执行本地事务时,会根据时间标记来确定第一数据是否过期,并在过期时将其自动删除,无需手动删除。

具体的,对第一数据添加时间标记,以确定其是否到期。当时间标记到期时,通过是否添加事务完成标记来确定是否已经完成了本地事务,并完成了本地事务的提交。当本地事务已经完成提交时,删除目标数据库中的第一数据;当事务链未完成提交时,则确定在本地事务的执行过程中出现错误,通过第一数据执行数据回滚,并在执行数据回滚后从目标数据库中删除第一数据。

可选的,在一些实施例中,为了避免在本地事务提交后且其他服务端的事务未提交时,因为其他服务端所新提交的事务造成数据的继续改变,从而造成数据丢失、数据回滚后与预期不一致等问题,本发明实施例提供了一种乐观锁机制用以解决该问题。

具体的,服务端除了会在执行S101时将第一数据作为目标数据保存在目标数据库中,还会在完成本地事务后,将经过执行本地事务所修改得到的第二数据作为目标数据保存在目标数据库中。

当通过目标数据库确定事务链中任意服务端报错,即需要执行数据回滚,且本地事务已经执行完成并提交时,确定数据库中的第二数据与当前服务端数据库中的数据是否一致。若一致,则表示该数据在提交事务后并未受到下游其他服务端所执行事务的修改,正常执行数据回滚即可;若不一致,则表示该数据在提交事务后由受到了下游其他服务端所执行事务的修改,导致已经提交的数据又发生了变化,需要进一步确定当前数据是否有效以及是否执行回滚。

其中,当第二数据与当前服务端数据库中的数据不一致时,需要进一步确定数据变更是否为可预知型变更,当为可预知型变更时,即可以明确确定是由于哪个下游服务端执行事务所造成的数据修改时,基于当前的业务逻辑确定服务端数据库内的数据是否准确,以及服务端数据库内需要保留的数据;当为不可预知型变更时,则保存当前服务端数据库中的数据,并通过目标数据库中的第一数据执行回滚。完成数据补救后,通过通知消息提示工作人员执行进一步处理。

本发明实施例通过使用乐观锁机制,用以在高并发且数据不会重复或者可预计型问题的情况下,尽可能的保证数据一致性且不影响接口性能。

可选的,在一些实施例中,为了避免多个服务端对同一共享型数据执行本地事务,造成该共享型数据出现脏写的问题,本发明实施例提供了一种悲观锁机制用以解决该问题。

具体的,服务端在开启对共享型数据执行本地事务前,需要确定事务链中是否存在于该共享型数据相关的其他事务正在执行。只有在确定不存在与该共享型数据相关的事务正在执行时,才可以开始执行本地事务,对该共享型数据进行编辑;当确定事务链中存在其他服务端正在执行与该共享型数据相关的事务时,则需要等待该服务端提交对应事务后,再开始执行本地事务。

其中,服务端通过执行标记来确定事务链中是否存在与该共享型数据相关的其他事务正在执行。当服务端开区执行本地事务时,会在目标数据库中添加一个执行标记,并在提交本地事务后或执行完数据回滚后从目标数据库中删除该执行标记。其他服务端在执行本地事务前会查询在目标数据库中是否存在执行标记,当存在时,则确定存在服务端正在执行与该共享型数据相关的事务,本地事务无法开启执行;当不存在时,则可以开启执行本地事务。

本发明实施例通过使用悲观锁机制,用以对共享数据进行操作时,减少因事务期间的其他调用而导致的数据脏写问题。

对应上述事务链执行方法,本申请实施例还提供了一种事务链执行装置。参见图2,为本申请实施例提供的一种事务链执行装置的结构示意图,事务链执行装置可以包括:保存模块201、回滚模块202和添加模块203。

保存模块201,将目标数据保存到目标数据库,所述目标数据包括未经过执行本地事务所修改的第一数据;

回滚模块202,当通过所述目标数据库确定事务链中任意服务端报错时,通过所述目标数据库中的目标数据执行数据回滚;

添加模块203,提交所述本地事务或完成所述数据回滚后,在所述目标数据库中添加事务完成标记,所述事务完成标记用于确定所述事务链执行完成。

图3为本说明书电子设备一个实施例的结构示意图。如图3所示,上述电子设备可以包括至少一个处理器;以及与上述处理单元通信连接的至少一个存储器,其中:存储器存储有可被处理单元执行的程序指令,上述处理器调用上述程序指令能够执行本实施例提供的事务链执行方法。

其中,上述电子设备可以为能够与用户进行智能对话的设备,例如:云服务器,本说明书实施例对上述电子设备的具体形式不作限定。可以理解的是,这里的电子设备即为方法实施例中提到的机器。

图3示出了适于用来实现本说明书实施方式的示例性电子设备的框图。图3显示的电子设备仅仅是一个示例,不应对本说明书实施例的功能和使用范围带来任何限制。

如图3所示,电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:一个或者多个处理器310、通信接口320、存储器330,连接不同系统组件(包括存储器330、通信接口320和处理器310)的通信总线340。

通信总线340表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。

电子设备典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

存储器330可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)和/或高速缓存存储器。电子设备可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。存储器330可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本说明书各实施例的功能。

具有一组(至少一个)程序模块的程序/实用工具,可以存储在存储器330中,这样的程序模块包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块通常执行本说明书所描述的实施例中的功能和/或方法。

处理器310通过运行存储在存储器330中的程序,从而执行各种功能应用以及数据处理,例如实现本说明书所示实施例提供的事务链执行方法。

本说明书实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行本说明书所示实施例提供的事务链执行方法。

上述非暂态计算机可读存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(Read Only Memory;以下简称:ROM)、可擦式可编程只读存储器(Erasable ProgrammableRead Only Memory;以下简称:EPROM)或闪存、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本说明书操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LocalArea Network;以下简称:LAN)或广域网(Wide Area Network;以下简称:WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本说明书的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本说明书的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本说明书的实施例所属技术领域的技术人员所理解。

取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

需要说明的是,本说明书实施例中所涉及的终端可以包括但不限于个人计算机(Personal Computer;以下简称:PC)、个人数字助理(Personal Digital Assistant;以下简称:PDA)、无线手持设备、平板电脑(Tablet Computer)、手机、MP3播放器、MP4播放器等。

在本说明书所提供的实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,在本说明书各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(Processor)执行本说明书各个实施例所述方法的部分步骤。

以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。

相关技术
  • 家电设备操作执行方法、装置、家电设备及可读存储介质
  • 一种基于区块链的链货币兑换方法、装置、设备和介质
  • 数据库事务处理方法、装置、设备和计算机可读存储介质
  • 一种事务处理方法、装置、设备及可读存储介质
  • 一种事务信息的传输方法、系统、装置、计算设备和介质
  • 区块链结构以及区块链事务执行方法、装置、设备和介质
  • 事务调度方法、事务执行方法、装置和计算机设备
技术分类

06120116585807