分布式事务处理方法、系统及装置
文献发布时间:2023-06-19 16:08:01
技术领域
本发明涉及分布式事务处理技术领域,尤其涉及一种分布式事务处理方法、系统及装置。
背景技术
事务(Transaction)是一个操作序列为实现特定业务功能而访问数据库的最小逻辑工作单位。分布式事务是指一个事务可能涉及多个数据库操作。
通常情况下,分布式事务处理系统通常包括计算节点、存储节点和元数据节点三类组件。存储节点主要负责存储数据,并基于数据变更复制机制组成集群来实现高可用机制。元数据节点负责存储集群的元数据,包括集群拓扑结构和集群管理的用户数据的元数据。计算节点用于接收到事务处理请求,并按照照预设的业务规则对该事务处理请求对应的事务进行处理。
在相关分布式处理技术中,计算节点在进行事务处理过程中,先从元数据节点上的元数据集群或者元数据存储系统中获得集群元数据和用户元数据,后将获取到的元数据临时缓存在本地使用。如果计算节点或元数据节点发生故障造成元数据丢失和错乱,就会导致计算节点临时缓存的元数据不是最新的,从而在事务处理过程中引发处理错误。
发明内容
基于此,有必要针对上述问题,本发明提出了一种分布式事务处理方法、系统及装置,可以避免元数据过时以及元数据过时引发的事务处理错误,同时提升事务处理效率,降低计算、传输和存储开销。
第一方面,本发明提供了一种分布式事务处理方法包括:首先,使用计算节点根据命令语句启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT,命令语句包括客户端发送的数据定义语言DDL语句或数据操纵语言DML语句,本地事务分支CT在计算节点上完成运行;其次,使用计算节点对命令语句进行解析得到解析结果,解析结果包括命令语句的内部表示和执行状态;最后,根据解析结果,使用计算节点在本地的元数据表中新建或修改元数据,新建或修改元数据与命令语句相关,元数据表存储在计算节点上。
可选的,在第一方面的一种可能的实现方式中,若命令语句为DDL语句,分布式事务处理方法还包括:
使用计算节点在计算节点与元数据节点的连接中启动分布式事务GT在元数据节点上的事务分支MT,事务分支MT在元数据节点上执行;
若事务分支MT在元数据节点上执行成功,使用元数据节点向计算节点发送MT执行成功消息;
若事务分支MT在元数据节点上执行中断,使用元数据节点重新恢复执行事务分支MT直至执行成功,并向计算节点发送MT执行失败消息。
可选的,在第一方面的一种可能的实现方式中,分布式事务处理方法还包括:
使用计算节点在计算节点与元数据节点的连接中发送DDL事务日志至元数据节点,以使得元数据节点存储DDL事务日志至本地。
可选的,在第一方面的一种可能的实现方式中,若存储节点支持DDL语句执行,分布式事务处理方法还包括:
使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST;
使用存储节点接收计算节点发送的DDL语句,并在事务分支ST中执行DDL语句;
若事务分支ST在存储节点上执行成功,使用存储节点向计算节点发送ST执行成功消息;
若事务分支ST在存储节点上执行中断,使用存储节点重新恢复执行事务分支ST直至执行成功,并向计算节点发送ST执行失败消息。
可选的,在第一方面的一种可能的实现方式中,若命令语句为DML语句,分布式事务处理方法还包括:
使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST,事务分支ST在存储节点上执行;
当计算节点收到客户端发送的提交事务命令时,利用计算节点启动分布式事务GT提交流程,提交事务命令的执行过程包括存储节点结束事务分支ST。
可选的,在第一方面的一种可能的实现方式中,提交事务命令包括第一提交命令和第二提交命令,利用计算节点启动分布式事务GT提交流程,包括:
使用计算节点向第一类存储节点发送第一提交命令,第一类存储节点为在分布式事务GT执行过程中执行过写操作的存储集群对应的存储节点;
使用计算节点向第二类存储节点发送第二提交命令,第二类存储节点为在分布式事务GT执行过程中执行过只读操作的存储集群对应的存储节点。
可选的,在第一方面的一种可能的实现方式中,该分布式事务处理方法还包括:
若第一提交命令全部成功返回计算节点,利用计算节点将决定提交的提交决定写入事务日志中;
若第一提交命令没有全部成功返回计算节点,利用计算节点决定回滚的提交决定写入事务日志中;
在利用计算节点将决定提交或决定回滚的提交决定写入事务日志之后,使用计算节点向第一类存储节点发送第一提交命令;
利用计算节点提交本地事务分支CT。
可选的,在第一方面的一种可能的实现方式中,上述利用计算节点将决定提交或决定回滚的提交决定写入事务日志,具体包括:
若元数据集群可以访问,利用计算节点将决定提交或决定回滚的提交决定写入元数据集群的事务日志中;
若元数据集群不可以访问,利用计算节点将决定提交或决定回滚的提交决定写入存储集群中任意一个可以正常写入的存储节点的事务日志中。
第二方面,本发明提供了一种分布式事务处理系统,其特征在于,包括:计算节点、存储节点和元数据节点;使用计算节点、存储节点和元数据节点执行如上述第一方面及其任意一种实现方式中的分布式事务处理方法。
第三方面,本发明提供了一种分布式事务处理装置,其特征在于,分布式事务处理装置应用于分布式事务处理系统;分布式事务处理系统提供多种事务处理服务;分布式事务处理系统包括多个事务协调器,以及多个存储器,事务协调器与存储器一一对应的设置,分布式事务处理装置包括:
命令启动模块,用于:使用计算节点根据命令语句启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT,命令语句包括客户端发送的数据定义语言DDL语句或数据操纵语言DML语句;
解析模块,用于使用计算节点对命令语句进行解析得到解析结果,解析结果包括命令语句的内部表示和执行状态,本地事务分支CT在计算节点上完成运行;
处理模块,用于根据解析结果,使用计算节点在本地的元数据表中新建元数据或修改目标元数据,新建的元数据或目标元数据与命令语句相关,元数据表存储在计算节点上。
第四方面,本发明提供了一种分布式事务处理装置,其特征在于,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被处理器执行时,使处理器执行如上述第一方面及其任意一种实现方式中所述的分布式事务处理方法。
本发明提供的技术方案具有以下有益效果:
在本发明的分布式事务处理方法中,计算节点上存储有元数据表并且支持本地的事务分支处理,计算节点不需要反复从元数据节点获取元数据而是从本地存储的元数据表中获取,可以避免元数据过时以及元数据过时引发的事务处理错误,同时提升事务处理效率,降低计算、传输和存储开销,同时确保系统具备完备的容错和容灾能力。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
通过结合附图对本发明示例性实施方式进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显,其中,在本发明示例性实施方式中,相同的参考标号通常代表相同部件。
图1为本发明实施例中分布式事务处理系统的一个系统结构示意图;
图2为本发明实施例中分布式事务处理方法的一个实施例流程示意图;
图3为本发明实施例中分布式事务处理方法中的DDL分布式事务处理机制的一个流程示意图;
图4为本发明实施例中分布式事务处理方法中的DML分布式事务处理机制的一个流程示意图;
图5为本发明实施例中分布式事务处理装置的一个结构示意图;
图6为本发明实施例中分布式事务处理装置的另一个结构示意图;
图7为本发明实施例中分布式事务处理装置的另一个结构示意图;
图8为本发明实施例中分布式事务处理装置的另一个结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的实施方式。虽然附图中显示了本发明的实施方式,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语“第一”、“第二”、“第三”等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
为了便于理解本发明实施例中的技术方案,下面先对本发明中涉及的一个基本概念进行说明,具体如下:
集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。当用户请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data aboutdata),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
本发明中的技术方案主要用于分布式事务处理,具体适用于分布式数据库管理系统(Distributed DataBase Management System,DDBMS)的分布式事务处理(DistributedTransaction Processing,DTP)。
图1为本发明实施例中DDBMS系统的一个系统结构示意图。
如图1所示,本发明实施例中DDBMS系统包括:计算节点101、存储节点102和元数据节点103三类组件,其中计算节点101用于接收到事务处理请求,并按照照预设的业务规则对该事务处理请求对应的事务进行处理。存储节点102主要负责存储数据,并基于数据变更复制机制组成集群来实现高可用机制。元数据节点103负责存储集群的元数据,包括集群拓扑结构和集群管理的用户数据的元数据。
具体的,计算节点101主要负责以下工作:1、接受客户端连接请求,验证请求,建立连接状态;2、处理客户端连接发送过来的查询请求,并且返回结果给客户端;3、与存储节点交互完成数据读写实现分布式事务协调器(Distributed Transaction Coordinator,DTC)的协调功能,完成分布式事务的可靠提交。
DDBMS系统执行的查询请求主要分为两类,一类为数据定义语言(DataDefinition Language,DDL),即用户定义数据的存储方法(比如表,容器等)的语句;另一类为数据操纵语言(Data Manipulation Language,DML),即在已经建立好的存储单位中(比如表,容器等)读写数据的语句。
对DDBMS系统进行说明之后,下面结合附图对本发明实施例中的分布式事务处理方法进行说明。
图2为本发明实施例中分布式事务处理方法的一个实施例流程示意图。
如图2所示,本发明实施例中分布式事务处理方法包括:
201、使用计算节点根据命令语句启动启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT。
命令语句包括客户端发送的查询请求,客户端与计算节点之间建立了连接状态。计算节点接收到命令语句后按照预设的业务规则启动相应的分布式事务GT,并且启动该分布式事务GT在计算节点上的本地事务分布CT。命令语句包括DDL语句或DML语句。
分布式事务GT在元数据集群中(即元数据节点上)和存储集群中(即存储节点上)均有事务分支。分布式事务GT在元数据集群中的事务分支称为事务分支MT,分布式事务GT在存储集群中的事务分支称为事务分支ST。命令语言的种类不同,相应的业务规则也不同,计算节点启动的事务分支也不同。
当命令语句为DDL语句时,计算节点采用DDL分布式事务处理机制执行DDL语句,计算节点在启动本地的事务分支CT的同时,启动在元数据节点上的事务分支MT。
可选的,由于在DDBMS系统中部分存储节点支持DDL语句,另一部分存储节点不支持DDL语句,若存储节点支持DDL语句,计算节点在执行DDL语句时,计算节点也会启动存储节点上的事务分支ST。
当命令语句为DML语句时,计算节点采用DML分布式事务处理机制执行DDL语句,计算节点在启动本地的事务分支CT的同时,启动在存储节点上的事务分支ST。
与相关技术的区别在于,分布式事务GT在计算节点上的事务分支CT是在计算节点上运行的,即计算节点在本地的事务分支CT中读写本地元数据,可以确保在分布式事务运行期间计算节点中的元数据和存储节点中的用户数据的读写访问的数据一致性。
202、使用计算节点对命令语句进行解析得到解析结果。
在启动分布式事务及其相应的事务分支后,使用计算节点在本地的事务分支CT中解析该命令语句并查询本地的元数据表以建立命令语句的内部表示和执行状态,即解析结果。
命令语句的内部表示和执行状态是指该命令语句解析后在节点内部可以被节点识别、执行的一种表示方式,如创建对象、数据结构表等。
具体的,以示例方式对创建对象的内部表示和执行状态进行说明,例如,一个事务开始开始执行语句如“start transaction”语句,解析后事务管理器会创建一个事务Transaction对象。随着后续客户端在这个连接中发送DDL或者DML语句在这个事务(标记为GT)中执行语句,每个语句都会读写若干个存储集群(即shard或者storage shard)。计算节点的分布式事务处理器模块就会在Transaction对象中就会记录GT只读访问了那几个存储集群,写入了那几个存储集群;每个存储集群的状态至少包括其当前主节点的连接信息(ip,port,用户名,密码等)以便与目标节点建立连接并反复发送语句然后接受结果。
以昆仑分布式数据库集群为例对上述的存储集群进行简单介绍,一个昆仑分布式数据库集群包含若干个存储集群和若干个计算节点。每个存储集群存储一部分数据,shard之间的数据没有交集。一个昆仑数据库集群的所有计算节点的功能和地位完全相同,主要用于完成分布式查询处理和分布式事务处理,以及连接认证和访问控制等。
以示例方式对创建对象的内部表示和执行状态进行说明,例如,一个查询语句如“select*from t1”语句,经过解析之后得到一个‘查询计划’数据结构plan,plan中引用这已经打开的需要查询的表t1(即打开的表的数据结构),以及经过查询优化后执行这个查询的方式和参数(即描述全表扫描操作的数据结构,该数据结构引用打开的表t1,并且包含当前扫描到的文件页号和页内偏移,需要返回的列的集合,以及描述查询条件的数据结构)。
得到解析结果之后,计算节点根据命令语句的内部表示和执行状态确定与该命令语句相关的元数据。
203、根据解析结果使用计算节点在本地的元数据表中新建或修改元数据。
在确定与该命令语句相关的元数据后,计算节点在本地的元数据表中进行查询,查到后使用命令语句的内部表示和执行状态对相关元数据进行修改或新建元数据,以使得计算节点完成分布式事务GT在该计算节点本地的事务分支CT。
综上所述,在本发明的分布式事务处理方法中,计算节点上存储有元数据表并且支持本地的事务分支处理,计算节点不需要反复从元数据节点获取元数据而是从本地获取,可以避免元数据过时以及元数据过时引发的事务处理错误,同时提升事务处理效率,降低计算、传输和存储开销,同时确保系统具备完备的容错和容灾能力。
如上文中所述,当命令语句为DDL语句时,计算节点采用DDL分布式事务处理机制执行DDL语句。当命令语句为DML语句时,计算节点采用DML分布式事务处理机制执行DDL语句。
下面将结合附图分布对本发明实施例中分布式事务处理方法中DDL分布式事务处理机制、和DML分布式事务处理机制进行说明。
图3为本发明实施例中分布式事务处理方法中的DDL分布式事务处理机制的一个流程示意图。
301、使用计算节点根据DDL语句启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT。
计算节点接收客户端发送的DDL语句后,启动相应的分布式事务GT以及该分布式事务GT在计算节点本地的事务分支CT。
进而,计算节点使用计算节点对DDL语句进行解析得到解析结果,并根据解析结果使用计算节点在本地的元数据表中新建或修改元数据,以完成该事务分支CT。
接下来,计算节点启动分布式事务GT其他事务分支如事务分支MT、事务分支ST。
需要说明的是,步骤301中计算节点启动并执行分布式事务GT在计算节点本地的事务分支CT与上述图2对应实施例中的分布式事务GT的事务分支CT的执行方式相同,其详细描述可参阅上述图2对应实施例中相关部分的描述,对此此处不再赘述。
302、使用计算节点在计算节点与元数据节点的连接中启动分布式事务GT在元数据节点上的事务分支MT。
在DDBMS系统中,计算节点和元数据节点之间建立了连接MetaConn。计算节点通过计算节点和元数据节点之间建立了连接MetaConn中启动分布式事务GT在元数据节点上的事务分支MT,该事务分支MT在元数据节点上执行。
进一步的,若事务分支MT在元数据节点上执行成功,使用元数据节点向计算节点发送MT执行成功消息,以告知计算节点事务分支MT执行成功。
进一步的,若事务分支MT在元数据节点上执行中断,使用元数据节点重新恢复执行事务分支MT直至执行成功,并向计算节点发送MT执行失败消息,以告知计算节点事务分支MT执行过程中出现过错误。
需要说明的是,由于元数据节点独立支持本地的事务分支MT处理,在事务分支MT执行过程中发生故障导致执行中止时,元数据节点可以重新恢复(即自动回滚)执行事务分支MT,可以确保元数据节点故障的情况下,事务分支MT都可以正确地恢复。
通过上述操作,元数据节点可以独立执行并完成事务分支MT。
303、使用计算节点在计算节点与元数据节点的连接中发送DDL事务日志至元数据节点。
在分布式事务处理过程中,计算节点会得到相应的操作记录表如DDL事务日志以记录本次分布式事务处理流程,DDL事务日志的功能在于可以利用其对分布时事务处理做恢复或重放确保分布式DDL事务的一致性。其中一致性是指在分布式事务处理中,读操作总是能读取到之前完成的写操作结果。
在DDL分布式事务处理机制中,增加了DDL事务日志,并且把它存储在本地即元数据表中,使得计算节点可以利用事务日志做恢复和重放,确保分布式事务的一致性,并且多个计算节点之间也可以通过事务日志完成集元数据表中元数据的数据同步。
可选的,304、使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST。
由于在DDBMS系统中并非所有存储节点均支持DDL语句执行,部分存储节点并不支持DDL语句执行,因此,步骤304是可选的。
在存储节点支持DDL语句执行的DDBMS系统中,计算节点与存储节点之间建立了连接StoreConn,计算节点在连接StoreConn中启动分布式事务GT在存储节点上的事务分支ST。
事务分支ST启动后,存储节点通过连接StoreConn接收计算节点发送的DDL语句,进而存储节点在事务分支ST中执行DDL语句。
进一步的,若事务分支ST在存储节点上执行成功,使用存储节点向计算节点发送ST执行成功消息,以通知计算节点事务分支ST执行成功;
在进一步的,若事务分支ST在存储节点上执行中断,使用存储节点重新恢复执行事务分支ST直至执行成功,并向计算节点发送ST执行失败消息,以通知计算节点事务分支ST执行过程中出现错误。
与元数据节点类似,由于存储节点独立支持本地的事务分支ST处理,在事务分支ST执行过程中发生故障导致执行中止时,存储节点可以重新恢复(即自动回滚)执行事务分支ST,可以确保元数据节点故障的情况下,事务分支ST都可以正确地恢复。
305、在分布式事务GT及其事务分支执行完成后,计算节点执行提交流程以提交分布式事务GT。
在分布式事务GT及其事务分支执行完成后,计算节点通过连接MetaConn提交分布式事务GT的事务分支MT,在存储节点支持DDL语句执行时计算节点还会通过连接StoreConn提交分布式事务GT的事务分支ST,计算节点提交分布式事务GT的事务分支CT,以完成整个分布式事务的提交流程。
综上所述,本发明实施例中的分布式事务处理方法的DDL分布式事务处理机制中,由于计算节点和元数据节点均可以独立支持本地的事务分支处理,因此不仅可以在计算节点、元数据节点两类组件之间实现分布式的分布式事务处理,一方面可以确保系统所有节点的元数据一致性,同时计算节点和元数据节点可独立承担大量并发负载,提升分布式事务处理的运行速度和响应速度;另一方面,当事务分支MT执行过程中执行中断时,元数据节点会重新恢复执行相应的事务分支MT(即自动回滚)直至执行成功,确保分布式事务MT发生执行中断时也可以正确地恢复,避免造成元数据丢失或错乱。
在进一步的,在DDL分布式事务处理机制中,在存储节点支持所述DDL语句执行的情况下,存储节点还可以具有独立执行DDL事务中在存储节点上的事务分支ST的能力,并且发生事务分支ST执行中断时可以独立重新恢复执行事务分支ST,不仅实现了存储节点独立执行事务分支ST的功能,而且确保了分布式事务S发生执行中断时也可以正确地恢复,避免造成存储数据丢失或错乱。
图4为本发明实施例中分布式事务处理方法中的DML分布式事务处理机制的一个流程示意图。
401、使用计算节点根据DML语句启动启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT。
计算节点接收客户端发送的DML语句后,启动相应的分布式事务GT以及该分布式事务GT在计算节点本地的事务分支CT。
进而,计算节点使用计算节点对DML语句进行解析得到解析结果,并根据解析结果使用计算节点在本地的元数据表中新建或修改元数据,以完成该事务分支CT。
需要说明的是,步骤401中计算节点启动并执行分布式事务GT在计算节点本地的事务分支CT与上述图2对应实施例中的分布式事务GT的事务分支CT的执行方式相同,其详细描述可参阅上述图2对应实施例中相关部分的描述,对此此处不再赘述。
402、使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST。
如上文中所述,在DDBMS系统中,计算节点与存储节点之间建立了连接StoreConn,计算节点在连接StoreConn中启动分布式事务GT在存储节点上的事务分支ST。
启动后,存储节点启动事务分支ST并执行DML语句,其中该DML语句由计算节点通过连接StoreConn发送至存储节点。
403、当计算节点收到客户端发送的提交事务命令时,利用计算节点启动分布式事务GT提交流程。
客户端发送的提交事务命令包括commit命令或prepare命令,用于指示把执行分布式事务GT所作的修改保存到存储集群中。其中,提交事务命令的过程中包括存储节点结束事务分支ST。
可选的,提交事务命令包括第一提交命令和第二提交命令,利用计算节点启动分布式事务GT提交流程,包括:1)、使用计算节点向第一类存储节点发送第一提交命令,第一类存储节点为在分布式事务GT执行过程中执行过写操作的存储集群对应的存储节点;2)、使用计算节点向第二类存储节点发送第二提交命令,第二类存储节点为在分布式事务GT执行过程中执行过只读操作的存储集群对应的存储节点。
通过第一提交命令和第二提交命令可以指示存储节点将在分布式事务GT及其分支事务过程中修改(即读写)全部保存至相应的存储集群,以结束存储节点上的事务分支ST。
另外,当计算节点收到客户端发送的提交事务命令时,计算节点也会对其在本地执行的事务分支CT进行提交,以结束整个分布式事务GT提交流程。
404、在第一提交事务命令返回计算节点之后,利用计算节点将决定提交或决定回滚的提交决定写入元数据集群或存储集群的事务日志中。
在第一提交事务命令全部返回计算节点之后,计算节点会生成相应的提交决定,并将提交决定写入元数据集群或存储集群的事务日志中,可以将提交决定存储在元数据集群或存储集群中可以更好的对提交决定进行存储以防丢失。
应理解,第一提交命令存在全部成功返回计算节点或没有全部成功返回计算节点两种情况,其中第一提交命令没有全部成功返回为存在至少一个第一提交命令没有成功返回计算节点。同样,相应的提交决定也分为决定提交或决定回滚的提交命令两种。
具体可选的,若第一提交命令全部成功返回计算节点,利用计算节点将决定提交的提交决定写入事务日志中;若第一提交命令没有全部成功返回计算节点,利用计算节点决定回滚的提交决定写入事务日志中。
进而,在利用计算节点将决定提交或决定回滚的提交决定写入事务日志之后,使用计算节点向上述第一类存储节点发送第一提交命令。
最后,利用计算节点提交本地事务分支CT,以完成整个DML语句的分布式事务处理流程。
上述决定提交或决定回滚的提交决定只需要写入元数据集群或存储集群中进行保存即可,具体保存可以是在元数据集群中的任意一个元数据节点的事务日志中,也可以是存储集群中任意一个可以正常写入的存储节点的事务日志中。
在DDBMS系统中存在元数据集群不可访问的情况,此种情况下决定提交或决定回滚的提交决定只能写入存储集群的事务日志中。相应的,在元数据集群可访问的情况,决定提交或决定回滚的提交决定可以择一写入任意一个可以正常写入的存储节点或元数据节点的事务日志中,首选的,将决定提交或决定回滚的提交决定写入存储集群的事务日志中。
具体可选的,上述利用计算节点将决定提交或决定回滚的提交决定写入事务日志,具体包括::
若元数据集群可以访问,利用计算节点将决定提交或决定回滚的提交决定写入元数据集群的事务日志中;
若元数据集群不可以访问,利用计算节点将决定提交或决定回滚的提交决定写入存储集群中任意一个可以正常写入的存储节点的事务日志中。
综上所述,本发明实施例中的分布式事务处理方法的DML分布式事务处理机制中,在计算节点中实现事务处理功能,在计算节点的本地事务中读写本地元数据表中的元数据,确保在分布式事务运行期间计算节点中的元数据和存储节点中的用户数据的读写访问的数据一致性;同时,计算节点和存储节点均可独立执行事务处理,可以确保集群的计算节点或者存储节点任何时候发生故障,被中断提交分布式事务都可以恢复,提高可靠性。
与前述应用功能实现方法实施例相对应,本发明还提供了一种分布式事务处理装置、系统及相应的实施例。
图5为本发明实施例中分布式事务处理装置的一个结构示意图。
该分布式事务处理装置应用于分布式事务处理系统;分布式事务处理系统提供多种事务处理服务;分布式事务处理系统包括多个事务协调器,以及多个存储器,事务协调器与存储器一一对应的设置。
如图5所示,本发明实施例中分布式事务处理装置50包括:命令启动模块501、解析模块502和处理模块503,其中命令启动模块501,用于:使用计算节点根据命令语句启动分布式事务GT和分布式事务GT在计算节点本地的事务分支CT,命令语句包括客户端发送的数据定义语言DDL语句或数据操纵语言DML语句;解析模块502,用于使用计算节点对命令语句进行解析得到解析结果,解析结果包括命令语句的内部表示和执行状态,本地事务分支CT在计算节点上完成运行;处理模块503,用于根据解析结果,使用计算节点在本地的元数据表中新建元数据或修改目标元数据,新建的元数据或目标元数据与命令语句相关,元数据表存储在计算节点上。
图6为本发明实施例中分布式事务处理装置的另一个结构示意图。
与图5相比,图6所示的装置结构中新增加了DDL事务处理模块504。
可选的,在本发明实施例的一种实施方式中,若命令语句为DDL语句,分布式事务处理装置50还包括:DDL事务处理模块504,并用于执行以下操作:
使用计算节点在计算节点与元数据节点的连接中启动分布式事务GT在元数据节点上的事务分支MT,事务分支MT在元数据节点上执行;
若事务分支MT在元数据节点上执行成功,使用元数据节点向计算节点发送MT执行成功消息;
若事务分支MT在元数据节点上执行中断,使用元数据节点重新恢复执行事务分支MT直至执行成功,并向计算节点发送MT执行失败消息。
可选的,在本发明实施例的一种实施方式中,DDL事务处理模块504还用于:使用计算节点在计算节点与元数据节点的连接中发送DDL事务日志至元数据节点,以使得元数据节点存储DDL事务日志至本地。
可选的,在本发明实施例的一种实施方式中,若存储节点支持DDL语句执行,DDL事务处理模块504还用于执行以下操作:
使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST;
使用存储节点接收计算节点发送的DDL语句,并在事务分支ST中执行DDL语句;
若事务分支ST在存储节点上执行成功,使用存储节点向计算节点发送ST执行成功消息;
若事务分支ST在存储节点上执行中断,使用存储节点重新恢复执行事务分支ST直至执行成功,并向计算节点发送ST执行失败消息。
图7为本发明实施例中分布式事务处理装置的另一个结构示意图。
与图5相比,图7所示的装置结构中新增加了DDL事务处理模块505。
可选的,在本发明实施例的一种实施方式中,若命令语句为DML语句,分布式事务处理装置50还包括:DML事务处理模块505,并用于执行以下操作:
使用计算节点在计算节点与存储节点的连接中启动分布式事务GT在存储节点上的事务分支ST,事务分支ST在存储节点上执行;
当计算节点收到客户端发送的提交事务命令时,利用计算节点启动分布式事务GT提交流程,提交事务命令的执行过程中包括存储节点结束事务分支ST。
可选的,在本发明实施例的一种实施方式中,提交事务命令包括第一提交命令和第二提交命令,DML事务处理模块505具体用于执行以下操作以启动分布式事务GT提交流程:
使用计算节点向第一类存储节点发送第一提交命令,第一类存储节点为在分布式事务GT执行过程中执行过写操作的存储集群对应的存储节点;
使用计算节点向第二类存储节点发送第二提交命令,第二类存储节点为在分布式事务GT执行过程中执行过只读操作的存储集群对应的存储节点。
可选的,在本发明实施例的一种实施方式中,DML事务处理模块505还用于执行以下操作:若第一提交命令全部成功返回计算节点,DML事务处理模块505利用计算节点将决定提交的提交决定写入事务日志中;
若第一提交命令没有全部成功返回计算节点,DML事务处理模块505利用计算节点决定回滚的提交决定写入事务日志中;
在DML事务处理模块505利用计算节点将决定提交或决定回滚的提交决定写入事务日志之后,DML事务处理模块505使用计算节点向第一类存储节点发送第一提交命令;
DML事务处理模块505利用计算节点提交本地事务分支CT。
可选的,在本发明实施例的一种实施方式中,上述DML事务处理模块505利用计算节点将决定提交或决定回滚的提交决定写入事务日志具体执行以下操作:
若元数据集群可以访问,DML事务处理模块505利用计算节点将决定提交或决定回滚的提交决定写入元数据集群的事务日志中;
若元数据集群不可以访问,DML事务处理模块505利用计算节点将决定提交或决定回滚的提交决定写入存储集群中任意一个可以正常写入的存储节点的事务日志中。
另外,本发明实施例中提供了一种分布式事务处理系统包括计算节点、存储节点和元数据节点;使用计算节点、存储节点和元数据节点执行如上述方法实施例中所述的分布式事务处理方法。
综上所述,在本发明的分布式事务处理装置中,计算节点上存储有元数据表并且支持本地的事务分支处理,计算节点不需要反复从元数据节点获取元数据而是从本地获取,可以避免元数据过时以及元数据过时引发的事务处理错误,同时提升事务处理效率,降低计算、传输和存储开销,同时确保系统具备完备的容错和容灾能力。
图8为本发明实施例中分布式事务处理装置的另一个结构示意图。
图8为本发明实施例中提供的分布式事务处理装置的一个结构示意图。
如图8所示,本发明实施例中分布式事务处理装置80包括存储器801和处理器802。存储器上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行上述任一实施例中的方法。
处理器802可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器801可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器802或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器801可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器801可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
存储器801上存储有可执行代码,当可执行代码被处理器802处理时,可以使处理器802执行上文述及的方法中的部分或全部。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中部分或全部步骤的计算机程序代码指令。
或者,本发明还可以实施为一种计算机可读存储介质(或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当可执行代码(或计算机程序、或计算机指令代码)被分布式事务处理装置(或电子设备、服务器等)的处理器执行时,使处理器执行根据本发明的上述方法的各个步骤的部分或全部。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
- 跨系统分布式事务处理方法和分布式事务处理的系统
- 消息处理方法和装置、分布式事务处理系统及计算机设备