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

一种分布式数据库事务管理方法和系统

文献发布时间:2023-06-19 19:28:50


一种分布式数据库事务管理方法和系统

技术领域

本发明涉及计算机技术领域,特别是涉及一种分布式数据库事务管理方法和系统。

背景技术

随着计算机和大数据技术的发展,分布式事务也越来越被应用到各个领域,所述分布式事务通常指将单个事务拆分为多个部分事务,并由多个参与者节点进行同步处理,如图1所示,其中各参与者节点的部分事务处理是相对独立的,从而提高事务的处理效率。

而在分布式数据库中,为了保证分布式事务的一致性,通常采用两阶段的方式提交分布式事务。其中,两阶段提交包括第一阶段和第二阶段;第一阶段提交为请求阶段,也可理解为一个准备但未开始执行的阶段,即准备阶段;第二阶段为提交阶段,为正式提交事务到数据库。事务只有在两阶段提交均完成之后才可以认为是提交完成。在两阶段中,均可进行取消事务,即进行事务回滚。

目前,在进行第二阶段提交时,通常需要协调者同步等待所有参与者均完成请求阶段响应,确保所有参与者已完成第一阶段响应后才能通知参与者正式提交或取消事务。在这种方式中,协调者存在单点故障的可能性,导致分布式事务无法继续正常进行,现有的一种解决方式是部署多个协调者,如部署多个协调者则需要确保协调者故障后新选举出的协调者知道运行中事务状态,此实现增加了系统复杂度和执行效率。

鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。

发明内容

本发明要解决的技术问题是协调者存在单点故障的可能性,导致分布式事务无法继续正常进行。

本发明采用如下技术方案:

第一方面,本发明提供了一种分布式数据库事务管理方法,包括:

为分布式事务分配唯一的标志号;其中,一个分布式事务被划分为多个部分事务;

当处理目标分布式事务的协调者故障,且第一参与者节点中的第一部分事务的准备阶段已结束时,所述第一参与者节点根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态;

所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

优选的,所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚,具体包括:

若其他参与者节点的部分事务处理状态满足直接提交条件,则所述第一参与者节点进行所述第一部分事务的提交;

若其他参与者节点的部分事务处理状态满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚;

否则,所述第一参与者每间隔预设时间,重新查询所述目标分布式事务在其他参与者节点上的部分事务处理状态,直至查询得到其他参与者节点的部分事务状态满足直接提交条件或满足直接回滚条件时,相应进行第一部分事务的提交或回滚;

若在查询次数达到预设次数后,其他参与者节点的部分事务状态仍不满足直接提交条件或满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚。

优选的,所述若其他参与者节点的部分事务处理状态满足直接提交条件,则所述第一参与者节点进行所述第一部分事务的提交,具体包括:

若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为提交中或已提交状态,或所有参与者节点的部分事务处理状态均为准备阶段已结束,则满足所述直接提交条件,所述第一参与者节点进行所述第一部分事务的提交。

优选的,所述若其他参与者节点的部分事务处理状态满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚,具体包括:

若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为已回滚或回滚中,则满足所述直接回滚条件,所述第一参与者节点进行所述第一部分事务的回滚。

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

各参与者节点在自身的部分事务处理状态发生变动时,根据所对应的分布式事务的标志号,记录所述部分事务处理状态,以便于其他参与者节点根据所述标志号查询所述部分事务处理状态。

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

当参与者节点中执行部分事务提交或部分事务回滚时,根据对应分布式事务的标志号,向其他参与者节点告知自身的部分事务处理状态,以便于其他参与节点根据所述部分事务处理状态,进行各自的部分事务的后续处理。

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

当第一参与者节点出现故障并恢复,且第一参与者节点中的第一部分事务的准备阶段已结束时,所述第一参与者节点根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态;

所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

优选的,所述部分事务处理状态包括准备中、准备阶段已结束、提交中、已提交、回滚中和已回滚。

第二方面,本发明还提供了一种分布式数据库事务管理系统,所述系统用于执行第一方面所述的分布式数据库事务管理方法,所述系统包括全局事务标识生成模块和投票仲裁模块;

所述全局事务标识生成模块用于为分布式事务分配唯一的标志号;其中,一个分布式事务被划分为多个部分事务;

所述投票仲裁模块用于当处理目标分布式事务的协调者故障,且所述第一参与者节点中的第一部分事务的准备阶段已结束时,根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态;并根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

优选的,所述系统还包括事务状态存储模块,所述事务状态存储模块用于在节点的部分事务处理状态发生变动时,根据所对应的分布式事务的标志号,记录所述部分事务处理状态,以便于其他参与者节点根据所述标志号查询所述部分事务处理状态。

第三方面,本发明还提供了一种分布式数据库事务管理装置,用于实现第一方面所述的分布式数据库事务管理方法,所述装置包括:

至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的分布式数据库事务管理方法。

第四方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的分布式数据库事务管理方法。

本发明通过为分布式事务分配一个唯一的标志号,从而使由该分布式事务划分得到的多个部分事务相互关联,在协调者故障时,通过标志号进行部分事务状态的查询,从而使参与者中的部分事务进度能够得到共享,进而对后续的部分事务进行相应的处理,从而确保在协调者故障时,分布式事务依旧能够正常进行。

附图说明

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

图1是本发明实施例提供的一种分布式事务的架构示意图;

图2是本发明实施例提供的一种分布式数据库事务管理方法的流程示意图;

图3是本发明实施例提供的一种分布式数据库事务管理方法的流程示意图;

图4是本发明实施例提供的一种分布式数据库事务管理方法的流程示意图;

图5是本发明实施例提供的一种分布式数据库事务管理系统的架构示意图;

图6是本发明实施例提供的一种分布式数据库事务管理系统的架构示意图;

图7是本发明实施例提供的一种分布式数据库事务管理装置的架构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1:

现有技术中,当协调者故障时,分布式事务无法继续正常进行,为了解决此问题,本发明实施例1提供了一种分布式数据库事务管理方法,如图2所示,包括:

在步骤201中,为分布式事务分配唯一的标志号;其中,一个分布式事务被划分为多个部分事务。

在具体实现中,所述标志号可由全局事务标识生成模块生成,如在分布式事务启动时,为分布式事务生成全局唯一的事务ID,所述标志号后续还可使用事务ID作为替代性表述。

所述分布式事务被划分为多个部分事务,每一部分事务由一个参与者节点进行执行,仅当所有参与者节点的准备阶段结束后,才能够进入提交阶段,各参与者节点提交事务。

在步骤202中,当处理目标分布式事务的协调者故障,且第一参与者节点中的第一部分事务的准备阶段已结束时,所述第一参与者节点根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态。

其中,所述协调者在实际使用中可表现为协调器。当协调者正常运作时,仍通过协调者对各参与者节点的部分事务的后续执行进行管理,仅当协调者故障时,由各参与者节点进行主动查询,以处理自身的部分事务。

所述部分事务处理状态包括准备中、准备阶段已结束、提交中、已提交、回滚中和已回滚。

各参与者节点在自身的部分事务处理状态发生变动时,根据所对应的分布式事务的标志号,记录所述部分事务处理状态,以便于其他参与者节点根据所述标志号查询所述部分事务处理状态。其在实际使用中的一种可选的实施方式为:当部分事务处理状态变动时,参与者节点将部分事务处理状态和对应的分布式事务的事务ID持久化存储,且各参与者节点预留查询接口,从而可通过调用所述查询接口查询部分事务处理状态。

所述部分事务处理状态是针对参与者节点而言的,不同参与者节点的部分事务处理状态可能不同,举例而言,存在一分布式事务,其事务ID为tans_id1,该分布式事务被划分为两部分事务,一部分事务被分配给参与者节点A执行,另一部分事务被参与者节点B执行,参与者节点A和参与者节点B的各执行过程相互独立,从而可能出现参与者节点A的部分事务处理状态为准备阶段已结束,而参与者B的部分事务处理状态仍为准备中的情形,在向参与者节点A和参与者节点B查询部分事务处理状态时,均使用tans_id1进行查询,其也可理解为分布于不同参与者节点上,且属于同一个分布式事务的多个部分事务公用一个事务ID,从而能够通过该事务ID进行全局的分布式事务的状态查询。

所述第一参与者节点和第一部分事务并非是指代特定顺序含义,仅仅是为了让对应限定的对象能够从同类中脱离出来,并且是为了方便描述同类中不同的两个对象或者多个对象方便而加的限定,所述第一参与者节点为所有用于处理目标分布式事务的参与者节点中的一个参与者节点,与之相对应的,处理目标分布式事务的参与者中除了第一参与者节点以外的参与者节点统称为其他参与者节点,所述第一部分事务代指所述第一参与者所处理的部分事务。

在步骤203中,所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

作为一种可选的实施方式,若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为已提交状态,则说明协调者在故障前,以确保所有参与者节点的准备阶段已结束,并已向参与者节点下发事务提交指令,故而所述第一参与者可进行第一部分事务的提交,否则,将第一部分事务回滚。

其中,在进行回滚时,各参与者节点可能存在以下二种情况:

第一种情况:不是所有的参与者都完成了第一阶段(即准备阶段)。

第二种情况:所有参与者完成了第一阶段,但协调者未全部收到第一阶段成功的信息。

以上二种情况中,均可以判断分布式事务可以回滚。因为二种情况事务均未结束,即未给数据库调用上层返回事务已提交成功,此时可以强制回滚事务并通知上层事务失败,从而保证事务一致性。

在实际使用中,还存在一种可能出现的情况为:当协调者接收到所有参与者节点第一阶段成功信息,但第二阶段(即提交阶段)提交命令的下发未得到参与者节点的回应,此时,第二阶段的提交命令可能已成功下发,也可能由于网络异常导致丢包,使其未能够成功下发给参与者节点,此时,协调者通知上层网络通信异常,并断开与各参与者节点之间的连接。由参与者节点投票决定事务最终状态。

在实际使用中,当协调者故障时,分布式事务的每一个参与者节点均会向其他参与者节点查询部分事务处理状态,即每一个参与者节点均会作为第一参与者执行上述步骤201-步骤203的过程,从而通过发起所有参与者节点参与的投票确定自身的部分事务的后续处理流程。

本实施例通过为分布式事务分配一个唯一的标志号,从而使由该分布式事务划分得到的多个部分事务相互关联,并通过在协调者故障时,通过标志号进行部分事务状态的查询,从而使参与者中的部分事务进度能够得到共享,进而对后续的部分事务进行相应的处理,从而确保在协调者故障时,分布式事务依旧能够正常进行。

在实际情况中,还可能出现协调者正常运行,而参与者节点发生故障,导致其未能及时接收到协调者的命令的情况,在此情况下,该参与者节点在故障恢复后,依旧无法正常处理分布式事务的后续流程,针对此问题,本实施例提供了以下优选的实施方式,如图3所示,具体包括:

在步骤301中,当第一参与者节点出现故障并恢复,且第一参与者节点中的第一部分事务的准备阶段已结束时,所述第一参与者节点根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态。

在步骤302中,所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

即当参与者节点故障恢复时,若在所述参与者节点中对应分布式事务的部分事务的第一阶段已完成,则参与者节点在故障恢复后发起投票询问所有的数据节点此分布式事务在各节点上的部分事务处理状态,从而确定后续的部分事务处理流程。需要说明的是,参与者节点故障恢复时和协调者故障时分布式事务的处理基于同一构思,其区别在于,协调者故障时,以各参与者节点分别作为第一参与者节点,向其他参与者节点请求部分事务处理状态,当参与者节点故障恢复时,以故障恢复的节点作为第一参与者节点,进行部分事务处理状态的查询和后续的处理。故在后续实施例中,凡是适用于协调者故障时的实施方式均适用于参与者节点的故障恢复。

其中,当存在其他参与者节点故障,而无法查询到参与者节点上的部分事务处理状态时,可基于与后续实施例中的步骤403的同一构思进行等待后查询,直至故障的参与者节点恢复时,或查询次数达到预设次数后,进行相应操作,其操作与后续实施例中的步骤403和步骤404基于同一构思,在此不再赘述。也可使用备用节点接管故障节点,并提供状态的查询功能。

在实际情况中,分布式事务的执行状态往往存在多种情形,如一些参与者节点仍处于准备中,一些参与者准备阶段已结束,或一些参与者正在部分事务提交中,为了覆盖各种可能的情况,以确保分布式事务处理的完善性,本实施例还提出了以下优选的实施方式,即所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚,如图4所示,具体包括:

在步骤401中,若其他参与者节点的部分事务处理状态满足直接提交条件,则所述第一参与者节点进行所述第一部分事务的提交。

在步骤402中,若其他参与者节点的部分事务处理状态满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚。

在步骤403中,否则,所述第一参与者每间隔预设时间,重新查询所述目标分布式事务在其他参与者节点上的部分事务处理状态,直至查询得到其他参与者节点的部分事务状态满足直接提交条件或满足直接回滚条件时,相应进行第一部分事务的提交或回滚。即当满足直接提交条件时,进行第一部分事务的提交,满足直接回滚条件时,进行第一部分事务的回滚,若两者均不满足,且查询次数未达到预设次数,则间隔预设时间后重新查询。

在步骤404中,若在查询次数达到预设次数后,其他参与者节点的部分事务状态仍不满足直接提交条件或满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚。

其中,所述预设时间和所述预设次数是由本领域技术人员根据经验分析得到的。

所述若其他参与者节点的部分事务处理状态满足直接提交条件,则所述第一参与者节点进行所述第一部分事务的提交,具体包括:

若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为提交中或已提交状态,或所有参与者节点的部分事务处理状态均为准备阶段已结束,则满足所述直接提交条件,所述第一参与者节点进行所述第一部分事务的提交。即所述直接提交条件为:在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为提交中或已提交状态,或所有参与者节点的部分事务处理状态均为准备阶段已结束。

所述若其他参与者节点的部分事务处理状态满足直接回滚条件,则所述第一参与者节点进行所述第一部分事务的回滚,具体包括:

若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为已回滚或回滚中,则满足所述直接回滚条件,所述第一参与者节点进行所述第一部分事务的回滚。即所述直接回滚条件为:在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为已回滚或回滚中。

在实际使用中,当存在一个参与者节点进行了或正在进行部分事务的回滚时,可判断在该部分事务所对应的分布式事务执行失败,需进行整体的分布式事务回滚,为了使分布式事务尽快反应以进行回滚,以确保分布式事务的一致性,还存在一种优选的实施方式,即所述第一参与者节点根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚,还包括:

若在其他参与者节点中,存在至少一个参与者节点的部分事务处理状态为已回滚或回滚中,则所述第一参与者节点进行所述第一部分事务的回滚。

在此基础上,本实施例还提出了一种优选的实施方式,具体包括:

当参与者节点中执行部分事务提交或部分事务回滚时,根据对应分布式事务的标志号,向其他参与者节点告知自身的部分事务处理状态,以便于其他参与节点根据所述部分事务处理状态,进行各自的部分事务的后续处理。

所述以便于其他参与节点根据所述部分事务处理状态,进行各自的部分事务的后续处理具体为:当第一参与者节点接收到其他参与者节点的部分事务处理状态为回滚中时,第一参与者节点对自身的部分事务进行回滚。

当第一参与者节点接收到其他参与者节点的部分事务处理状态为提交中时,若第一参与者节点的部分事务处理状态为准备阶段已结束,则第一参与者节点对自身的部分事务进行提交。

本优选的实施方式通过主动告知自身的部分事务处理状态,使其他参与者节点能够迅速反应,以进行分布式事务的一致化,避免其他参与者节点因继续执行事务而造成不必要的资源和时间浪费。

实施例2:

本发明在提供了实施例1所描述的一种分布式数据库事务管理方法后,本发明实施例还将进一步提供一种分布式数据库事务管理系统,为的是对实施例1中相应方法的系统实现角度做相关阐述,并进一步就其设计原理做相关的深入分析。需要说明的是,实施例1中的方法在本实施例2中均适用,在本实施例中将不再对其进行赘述。

所述分布式数据库事务管理系统用于执行实施例1所述分布式数据库事务管理方法。

本实施例还针对所述系统的架构形式,提供了一种可选的实施方式,如图5所示,具体包括:

所述系统包括全局事务标识生成模块和投票仲裁模块。

所述全局事务标识生成模块用于为分布式事务分配唯一的标志号;其中,一个分布式事务被划分为多个部分事务,如在分布式事务启动时,全局事务标识生成模块为分布式事务生成全局唯一事务ID。

所述投票仲裁模块用于当处理目标分布式事务的协调者故障时,或处理目标分布式事务的第一参与者节点故障恢复,且所述第一参与者节点中的第一部分事务的准备阶段已结束时,根据所述目标分布式事务的标志号,查询所述目标分布式事务在其他参与者节点上的部分事务处理状态;并根据其他参与者节点上的部分事务处理状态,进行所述第一部分事务的提交或回滚。

其中,目标分布式事务的每一个参与者节点对应一个投票仲裁模块。

作为一种优选的实施方式,如图6所示,所述系统还包括事务状态存储模块,所述事务状态存储模块用于在节点的部分事务处理状态发生变动时,根据所对应的分布式事务的标志号,记录所述部分事务处理状态,以便于其他参与者节点根据所述标志号查询所述部分事务处理状态。

实施例3:

如图7所示,是本发明实施例的分布式数据库事务管理装置的架构示意图。本实施例的分布式数据库事务管理装置包括一个或多个处理器21以及存储器22。其中,图7中以一个处理器21为例。

处理器21和存储器22可以通过总线或者其他方式连接,图7中以通过总线连接为例。

存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的分布式数据库事务管理方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行分布式数据库事务管理方法。

存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的分布式数据库事务管理方法。

值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。

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

技术分类

06120115919955