CN105183544A - 一种非阻塞式容错的分布式事务提交方法及系统 - Google Patents
一种非阻塞式容错的分布式事务提交方法及系统 Download PDFInfo
- Publication number
- CN105183544A CN105183544A CN201510595324.9A CN201510595324A CN105183544A CN 105183544 A CN105183544 A CN 105183544A CN 201510595324 A CN201510595324 A CN 201510595324A CN 105183544 A CN105183544 A CN 105183544A
- Authority
- CN
- China
- Prior art keywords
- node
- initial
- request
- distributed transaction
- nodes
- 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.)
- Granted
Links
Abstract
本发明提出一种非阻塞式容错的分布式事务提交方法,该方法将分布式事务的数据存储在多个节点,多个节点共同执行所述分布式事务,选取所述多个节点或系统外中的一个节点作为初始第一节点,所述初始第一节点为分布式事务取得全局唯一事务标识符;所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。本发明具有高可扩展性、高效低延时、容错高可用的优点。
Description
技术领域
本发明涉及数据库和分布式系统技术领域,特别涉及一种非阻塞式容错的分布式事务提交方法及系统。
背景技术
事务可以保证金融交易的顺利进行,亦可保证一组数据访问操作的正确执行,为了保证事务的原子性,数据库系统需要执行一个事务的全部操作,或者不执行一个事务的任何操作,原子性允许多个操作联合起来产生结果,但是系统中的失效会妨碍原子性的保证,例如,若分布式系统中的一个设备或通讯失效,一个事务相关的分数据库中可能会将事务执行完成,而有的则回滚事务,假如存储事务相关数据的分数据库不能回滚到事务开始前的一个稳定状态,这将使得分数据库处于不同的状态中,从而导致系统数据的毁坏。
在一个分布式系统中,分布式事务的原子性由原子提交协议(AtomicCommitProtocol,ACP)保证,当前,最新技术水平系统常用的ACP有以下几个:
1、两阶段提交(2PC)——业界标准、使用最广泛
在过去30多年时间里,分布式原子提交操作是由“两阶段提交”协议或其变异方案来保证的,此协议共分为两阶段,即协议开始时,参与节点发送“准备好”消息或“回滚”消息给协调节点,参与节点决定本地是否已经“准备好”提交事务或者只能“回滚”事务,并将决定和相关数据写入日志中,在第一阶段,协调节点决定提交或回滚事务,如果协调节点收到了所有参与节点的“准备好”消息,协调节点可以决定提交事务,如果协调节点收到任何一个参与节点的“回滚”消息,协调节点只能回滚事务;在第二阶段,协调节点将决定写入日志,并向所有参与节点发送消息通知它们提交或回滚事务,参与节点可以相应地处理事务。
因为协调节点单方决定事务的结果,单个参与节点的失效不会阻塞事务,如果一个参与节点在发送“准备好”或“回滚”消息前失效或失联了,协调节点在等待一定时间后会单方面决定回滚事务,但是,两阶段提交在某些情况下依然会阻塞,例如,如果所有参与节点发送了“准备好”消息后协调节点失效了,参与节点将会被阻塞直到协调节点恢复并确定事务的结果。
2、三阶段提交(3PC)——同步系统模型下的非阻塞式协议
三阶段提交协议希望通过增加一个阶段来可以解决两阶段提交的阻塞问题,在该阶段中,一个关于事务提交或回滚的初步决定被发送给参与节点,如果协调节点失效了,参与节点中的一个将被选出作为新的协调节点来继续执行协议,当失效的协调节点恢复后,它将成为参与节点而不再是协调节点,但是,在很多应用中,由于实际系统并不符合同步系统模型,实现传统的三阶段提交并不可行,而且,三阶段提交也会阻塞,如果多个参与节点失效了或如果存在一个通讯故障,三阶段提交的另一个缺陷是过高的通讯代价。
3、最新的分布式提交协议
由于高可用性和容错性的需求,大规模系统一般都采用复制策略,最新的分布式提交协议是基于此假设提出的,此类协议中,最著名的包括Spanner、复制提交、MDCC、消息期货等。Spanner采用了2PC加上著名的容错协议Paxos来分层实现,将2PC实现层次基于Paxos复制共识层次进行实现;复制提交与Spanner的差别在于,它将Paxos复制共识层次基于2PC层次实现;MDCC将复制与提交揉合在一起,利用Paxos和Paxos的变体算法实现事务参与节点的提交共识达成;消息期货要求参与节点将提交请求写入日志,而日志通过可容错协议进行复制和共享,来实现提交共识的达成。其它最新的提交协议的主要思想与上述协议基本类似。
在这些协议中,像Spanner这样,将2PC实现于容错共识协议层次上,其通讯代价是两个协议通讯代价之和,存在通讯代价高的问题;像复制提交这样,将容错共识协议实现于2PC层次上,将引入2PC的阻塞问题,导致单个数据中心的事务阻塞;MDCC必须与乐观并发控制一起使用,后者存在当负载大时性能低下的问题,同时,当存在共识冲突时需要执行修复过程,而修复过程的通讯代价极高;消息期货也只能与乐观并发控制一起使用,同时,共享日志在现实中难以实现和保证。
一发明提供了一种基于分布式实时数据库系统的事务提交方法,包括:协调者将第一个发送完成数据操作的消息的参与者作为候选协调者,并向候选协调者发送准备消息和任命消息;协调者发送准备消息至普通参与者和协调者本身;协调者接收并依据所述候选协调者、普通参与者和协调者本身在接收到所述准备消息后,各自处理各自的子事务后所得到的各自的处理反馈消息,发送最终决定消息至候选协调者、普通参与者和协调者本身;候选协调者、普通参与者和协调者本身在预设时间内均未接收到所述最终决定消息的情况下,候选协调者自动转换为协调者,返回执行接收所有参与者的完成数据操作的消息这一步骤。该发明降低了阻塞的概率,提高了事务提交的实时性,与本发明的区别在于,本发明是可替代2PC的分布式事务提交方法,无需利用事务协调者,而该发明是基于2PC提出的分布式事务提交方法,利用了一个候选协调者,无法应对协调者和候选协调者同时失效的情况。
发明内容
针对现有技术的不足,本发明提出一种非阻塞式容错的分布式事务提交方法及系统。
本发明提出一种非阻塞式容错的分布式事务提交方法,包括:
步骤1,定位所述分布式事务数据存储的多个节点,所述多个节点共同执行所述分布式事务,选取所述多个节点中或系统外的一个节点作为初始第一节点;
步骤2,取得所述分布式事务的全局唯一事务标识符;
步骤3,所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。
所述的非阻塞式容错的分布式事务提交方法,包括:
所述多个节点中的每一个节点都对应一个全局节点标识符,所有的全局节点标识符被单调排序,且所述多个节点的每一个节点分别存储所述分布式事务的部分数据,并负责所述分布式事务在节点上的数据操作,且对于需要容错保证的、所述分布式事务涉及的每个所述数据项,分别存储在三个或三个以上的复本,且所述复本至少分布在三个或三个以上的不同节点上。
所述的非阻塞式容错的分布式事务提交方法,包括:
所述多个节点记录所述初始第一节点的状态信息,以便判断所述初始第一节点是否失效,所述多个节点及所述初始第一节点记录参与所述分布式事务的所有节点的全局节点标识符。
所述的非阻塞式容错的分布式事务提交方法,还包括分布式事务提交修复步骤:
如果任一节点发现所述初始第一节点失效,则发现所述初始第一节点失效的节点向所述多个节点中的其他节点申请成为新初始第一节点,并开始分布式事务提交修复流程,直到完成分布式事务提交过程。
所述的非阻塞式容错的分布式事务提交方法,所述分布式事务提交修复步骤的具体步骤为:
(1)任一节点发现初始第一节点失效后,向所述多个节点中的其他节点发送申请成为初始第一节点的申请请求,并设置申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)所述其他节点中收到申请请求后,所述其他节点分别更新所述其他节点收到过的申请请求中全局节点标识符最小的节点,并向申请成为初始第一节点回复见到过的最大的轮数s,以及申请请求中全局节点标识符最小的节点,并更新所述其他节点分别见到过的申请请求中的最大轮数s,其中s的初始值为0,如果所述其他节点已收到初始第一节点对分布式事务的提交或回滚请求,所述其他节点在回复信息中包含所述其他节点收到的初始第一节点的请求为提交分布式事务请求或回滚分布式事务请求,以及所述初始第一节点请求所在的轮数t;
(3)申请成为初始第一节点的节点在收到多个节点回复后,如果对于所述分布式事务所涉及的每个所述数据项,都存在:存储所述数据项的复本的节点中超过一半的节点回复信息中,所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,且最大轮数s小于r,则进行(3c),如果节点回复信息中存在比申请成为初始第一节点的节点的全局节点标识符更小的全局节点标识符,则申请成为初始第一节点的节点终止分布式事务提交修复流程;如果节点回复信息中所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,则申请成为初始第一节点的节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1),
(3C)在节点回复信息中找到最大的t及t所对应的初始第一节点的请求,如果节点回复信息不存在任何节点接受过初始第一节点的请求,则设初始第一节点的请求为回滚事务,向所有节点发送接受请求,接受请求中包含当前轮数r、申请成为初始第一节点的节点的全局节点标识符与初始第一节点的请求;
(4)多个节点中的每个节点接受请求后,多个节点中的每个节点更新见到过的申请节点中的最小全局节点标识符,更新其见到过的申请中的最大的轮数s,如果多个节点中的一个节点未确认过任何接受请求,且所述多个节点中的一个节点的s与接受请求的轮数r相等,则所述多个节点中的一个节点执行该接受请求并相应回滚或提交分布式事务,同时更新所接受请求的轮数t为s,记录已接受请求,向当前初始第一节点回复成功信息,如果多个节点中的一个节点接受执行过接受请求,且执行的接受请求与请求同为回滚或提交请求,则更新t为s,并向当前初始第一节点回复成功信息;
(5)申请成为初始第一节点的节点在发送接受请求,并收到多个节点回复后,如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,如果回复节点不足多个节点的一半,则申请成为初始第一节点的节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1)。
本发明还提出一种非阻塞式容错的分布式事务提交系统,包括:
事务数据定位模块,用于定位所述分布式事务数据存储的多个节点,所述多个节点共同执行所述分布式事务,所述多个节点中或系统外的一个节点为初始第一节点;
全局事务标识符获取模块,用于取得所述分布式事务的全局唯一事务标识符;
提交模块,用于所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。
所述的非阻塞式容错的分布式事务提交系统,包括:
所述多个节点中的每一个节点都对应一个全局节点标识符,所有的全局节点标识符被单调排序,且所述多个节点的每一个节点分别存储所述分布式事务的部分数据,并负责所述分布式事务在节点上的数据操作,且对于需要容错保证的、所述分布式事务涉及的每个所述数据项,分别存储在三个或三个以上的复本,且所述复本至少分布在三个或三个以上的不同节点上。
所述的非阻塞式容错的分布式事务提交系统,包括:
所述多个节点记录所述初始第一节点的状态信息,以便确认所述初始第一节点是否失效,所述多个节点及所述初始第一节点记录参与所述分布式事务的所有节点的全局节点标识符。
所述的非阻塞式容错的分布式事务提交系统,还包括分布式事务提交修复模块:
用于如果任一节点发现所述初始第一节点失效,则发现所述初始第一节点失效的节点向所述多个节点中的其他节点申请成为新初始第一节点,并开始分布式事务提交修复流程,直到完成分布式事务提交过程。
所述的非阻塞式容错的分布式事务提交系统,所述分布式事务提交修复模块的具体作用为:
(1)任一节点发现初始第一节点失效后,向所述多个节点中的其他节点发送申请成为初始第一节点的申请请求,并设置申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)所述其他节点中收到申请请求后,所述其他节点分别更新所述其他节点收到过的申请请求中全局节点标识符最小的节点,并向申请成为初始第一节点回复见到过的最大的轮数s,以及申请请求中全局节点标识符最小的节点,并更新所述其他节点分别见到过的申请请求中的最大轮数s,其中s的初始值为0,如果所述其他节点已收到初始第一节点对分布式事务的提交或回滚请求,所述其他节点在回复信息中包含所述其他节点收到的初始第一节点的请求为提交分布式事务请求或回滚分布式事务请求,以及所述初始第一节点请求所在的轮数t;
(3)申请成为初始第一节点的节点在收到多个节点回复后,如果对于所述分布式事务所涉及的每个所述数据项,都存在:存储所述数据项的复本的节点中超过一半的节点回复信息中,所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,且最大轮数s小于r,则进行(3c),如果节点回复信息中存在比申请成为初始第一节点的节点的全局节点标识符更小的全局节点标识符,则申请成为初始第一节点的节点终止分布式事务提交修复流程;如果节点回复信息中所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,则申请成为初始第一节点的节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1),
(3C)在节点回复信息中找到最大的t及t所对应的初始第一节点的请求,如果节点回复信息不存在任何节点接受过初始第一节点的请求,则设初始第一节点的请求为回滚事务,向所有节点发送接受请求,接受请求中包含当前轮数r、申请成为初始第一节点的节点的全局节点标识符与初始第一节点的请求;
(4)多个节点中的每个节点接受请求后,多个节点中的每个节点更新见到过的申请节点中的最小全局节点标识符,更新其见到过的申请中的最大的轮数s,如果多个节点中的一个节点未确认过任何接受请求,且所述多个节点中的一个节点的s与接受请求的轮数r相等,则所述多个节点中的一个节点执行该接受请求并相应回滚或提交分布式事务,同时更新所接受请求的轮数t为s,记录已接受请求,向当前初始第一节点回复成功信息,如果多个节点中的一个节点接受执行过接受请求,且执行的接受请求与请求同为回滚或提交请求,则更新t为s,并向当前初始第一节点回复成功信息;
(5)申请成为初始第一节点的节点在发送接受请求,并收到多个节点回复后,如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,如果回复节点不足多个节点的一半,则申请成为初始第一节点的节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1)。
由以上方案可知,本发明的优点在于:
本发明与现有技术相比,具有高可扩展性、高效低延时、容错高可用的优点,使得事务提交在操作个数、节点数目、数据量、访问量等方面不受限制,满足应用不断发展的需求,使用本发明,可降低事务提交和执行过程的延时,可增加系统处理事务的吞吐率,使系统可容忍节点的失效、部件的失效以及访问客户端的失效;在多数据中心的情形下,即使发生了断电导致单个数据中心不可访问,系统仍然可用,即被应用访问;同时,增加系统节点总数和总数据量,不影响事务提交性能。
附图说明
图1为本发明方法流程图;
图2为本发明系统架构图。
具体实施方式
本发明的前提条件为:
(A)计算节点(具备内存、CPU和联网能力的计算机),并且具有唯一的全局节点标识符,全局节点标识符可单调排序;
(B)如果一个分布式事务的数据项有容错需求,则所述数据项至少在n个节点上存储,n大于等于3;
(C)每一个分布式事务具有全局唯一的事务标识符。
以下为本发明的具体步骤,如图1所示:
在一个或多个硬件设备上实现多个节点,定位所述分布式事务数据存储的多个节点,该多个节点共同执行同一分布式事务,其中该一个或多个硬件设备之一被配置为实现该多个节点中的一个或多个,或者多个硬件设备被配置实现该多个节点中的一个,该多个节点中的每一个都对应一个全局节点标识符,全局节点标识符被单调排序,排序的大小仅具有比较意义而非绝对意义,该多个节点的每一个分别存储该事务操作的部分数据,其负责事务在该节点上数据的操作;
由该多个节点存储同一分布式事务所操作的数据;
如果一个分布式事务的数据项有容错需求,则所述数据项至少在n个节点上存储,n大于等于3;
由该多个节点中的某个节点兼任初始第一节点或选取系统外的一个节点作为初始第一节点,一个分布式事务存在唯一的初始第一节点;
由初始第一节点确定该分布式事务的全局事务标识符,并向其它节点提交事务的操作请求;
初始第一节点在确认分布式事务可提交的情况下,向其它节点发起事务的提交操作请求;
其它节点在节点本地对分布式事务进行提交后,向初始第一节点发送确认提交消息;
初始第一节点收集足够的确认提交消息后,完成事务提交过程;
如果其它任一节点发现初始第一节点失效,该任一节点可向所有其它节点申请成为第一节点,并开始事务提交修复流程,直到完成事务提交过程。
该全局事务标识符是多个全局事务标识符之一,其中该多个全局事务标识符的每一个标识多个分布式事务的每一个的提交。
初始第一节点通过一次或多次向其它节点提交分布式事务的操作请求和发送参与分布式事务的多个节点的全局节点标识符,并通过其它节点返回的回复确认分布式事务是否可提交,其中初始第一节点针对该分布式事务所操作的每个数据项至少从大于n/2个节点处收到确认提交回复消息后,完成分布式事务提交过程。
多个节点记录初始第一节点的状态,以便确认初始第一节点是否失效。
多个节点记录参与该分布式事务的所有节点的全局节点标识符。
本发明分布式事务提交修复流程为:
(1)一个或多个节点发现第一节点失效后,
(1a)向所有多个节点申请成为第一节点,给予此申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)多个节点中的一个收到多个节点之一的成为第一节点申请后,
(2a)该节点更新其见到过的申请节点中的最小全局节点标识符,向申请节点回复收到过的最大的轮数s以及见到过的申请节点中的最小全局节点标识符,并更新其收到过的申请中的最大轮数s,其中s的初始值为0;
(2b)如果该节点已收到初始第一节点对分布式事务的提交或回滚要求,该节点在回复中包含其收到的初始第一节点的要求是提交事务还是回滚事务,以及该要求所在的轮数t;
(3)申请成为第一节点的节点在收到多个节点回复后,
(3a)如果超过一半的节点回复中,该申请节点的全局节点标识符为其所见最小全局节点标识符,且最大轮数s都小于r,
(3a1)则进行(3c)
(3b)如果不满足(3a)条件,
(3b1)如果回复中存在比该节点全局节点标识符更小的全局节点标识符,则该节点终止其事务提交修复流程;
(3b2)如果回复中该节点全局节点标识符为最小全局节点标识符,则该节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1a)
(3c)在回复中找到最大的t及其所对应的第一节点的要求outcome,
(3c1)如果回复中不存在任何节点接受过第一节点的要求,则outcome为回滚分布式事务
(3c2)向所有多个节点发送接受请求,请求中包含当前轮数r、该申请节点的全局节点标识符和outcome
(4)多个节点中的一个收到多个节点之一的接受请求后,该节点更新其见到过的申请节点中的最小全局节点标识符,更新其收到过的申请中的最大轮数s,
(4a)如果该节点未确认过任何接受请求,且该节点的s与接受请求的轮数r相等,则该节点执行该接受请求outcome并相应回滚或提交分布式事务,同时更新其所接受请求的轮数t为s,记录其已接受请求,向该接受请求的发出节点(当前初始第一节点)回复成功;
(4b)如果该节点执行过接受请求,且其执行的接受请求与outcome同为回滚或提交,则更新t为s,并向该接受请求的发出节点(当前初始第一节点)回复成功;
(5)申请成为第一节点的节点在发送接受请求,并收到多个节点回复后,
(5a1)如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,分布式事务提交过程完成;
(5a2)如果回复节点不足多个节点的一半,则该节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1a)。
多个设备中的一个或多个失效或错误可能导致多个节点中的一个或多个失效;多个节点可能由于各种原因无法相互通讯亦可视为多个节点中的一个或多个失效。
本发明还提出一种非阻塞式容错的分布式事务提交系统,包括:
事务数据定位模块,用于定位所述分布式事务数据存储的多个节点,所述多个节点共同执行所述分布式事务,所述多个节点或系统外中的一个节点为初始第一节点;
全局事务标识符获取模块,用于取得所述分布式事务的全局唯一事务标识符;
提交模块,用于所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。
所述多个节点中的每一个节点都对应一个全局节点标识符,所有的全局节点标识符被单调排序,且所述多个节点的每一个节点分别存储所述分布式事务的部分数据,并负责所述分布式事务在节点上的数据操作,且对于需要容错保证的、所述分布式事务涉及的每个所述数据项,分别存储在三个或三个以上的复本,且所述复本至少分布在三个或三个以上的不同节点上。
所述多个节点记录所述初始第一节点的状态信息,以便确认所述初始第一节点是否失效,所述多个节点及所述初始第一节点记录参与所述分布式事务的所有节点的全局节点标识符。
分布式事务提交修复模块:
用于如果任一节点发现所述初始第一节点失效,则发现所述初始第一节点失效的节点向所述多个节点中的其他节点申请成为新初始第一节点,并开始分布式事务提交修复流程,直到完成分布式事务提交过程。
所述分布式事务提交修复模块的具体作用为:
(1)任一节点发现初始第一节点失效后,向所述多个节点中的其他节点发送申请成为初始第一节点的申请请求,并设置申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)所述其他节点中收到申请请求后,所述其他节点分别更新所述其他节点收到过的申请请求中全局节点标识符最小的节点,并向申请成为初始第一节点回复见到过的最大的轮数s,以及申请请求中全局节点标识符最小的节点,并更新所述其他节点分别见到过的申请请求中的最大轮数s,其中s的初始值为0,如果所述其他节点已收到初始第一节点对分布式事务的提交或回滚请求,所述其他节点在回复信息中包含所述其他节点收到的初始第一节点的请求为提交分布式事务请求或回滚分布式事务请求,以及所述初始第一节点请求所在的轮数t;
(3)申请成为初始第一节点的节点在收到多个节点回复后,如果对于所述分布式事务所涉及的每个所述数据项,都存在:存储所述数据项的复本的节点中超过一半的节点回复信息中,所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,且最大轮数s小于r,则进行(3c),如果节点回复信息中存在比申请成为初始第一节点的节点的全局节点标识符更小的全局节点标识符,则申请成为初始第一节点的节点终止分布式事务提交修复流程;如果节点回复信息中所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,则申请成为初始第一节点的节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1),
(3C)在节点回复信息中找到最大的t及t所对应的初始第一节点的请求,如果节点回复信息不存在任何节点接受过初始第一节点的请求,则设初始第一节点的请求为回滚事务,向所有节点发送接受请求,接受请求中包含当前轮数r、申请成为初始第一节点的节点的全局节点标识符与初始第一节点的请求;
(4)多个节点中的每个节点接受请求后,多个节点中的每个节点更新见到过的申请节点中的最小全局节点标识符,更新其见到过的申请中的最大的轮数s,如果多个节点中的一个节点未确认过任何接受请求,且所述多个节点中的一个节点的s与接受请求的轮数r相等,则所述多个节点中的一个节点执行该接受请求并相应回滚或提交分布式事务,同时更新所接受请求的轮数t为s,记录已接受请求,向当前初始第一节点回复成功信息,如果多个节点中的一个节点接受执行过接受请求,且执行的接受请求与请求同为回滚或提交请求,则更新t为s,并向当前初始第一节点回复成功信息;
(5)申请成为初始第一节点的节点在发送接受请求,并收到多个节点回复后,如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,如果回复节点不足多个节点的一半,则申请成为初始第一节点的节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1)。
该多个节点发现第一节点失效的方式可以是计时,也可以是通过特定的设备实现。
全局唯一节点标识符可通过软件方法在节点本地计算实现,也可通过专用设备分配置实现。
全局唯一分布式事务标识符可通过软件方法在初始第一节点本地计算实现,也可通过专用设备分配实现。
该多个节点上的数据存储可以是易失性介质,也可以是非易失性介质。
该多个节点执行其所存储数据相关分布式事务操作的过程符合数据库事务的要求。
如果一个分布式事务的数据项有容错需求,则所述数据项至少在n个节点上存储,n大于等于3,这n个节点中不会有超过一半的节点同时失效。
以下为本发明的一实施例,如下所示:
无错过程:应用向初始第一节点发起关于事务T的提交需求,初始第一节点根据事务执行过程对T的处理结果,向T的所有参与节点(存储事务数据项及其复本的物理节点)发送参与节点集合和提交(回滚)请求,任一参与节点收到此要求后,记录参与节点集合和提交(回滚)结果,并在本地执行事务提交(回滚)过程,然后向初始第一节点回复处理结果,初始第一节点收到足够多的回复后,即对每个数据项收到超过半数复本节点的回复,向应用确认事务提交(回滚)完毕。
恢复过程:提交过程中,某参与节点N通过计时超时发现当前初始第一节点失效,N依次向参与节点集合中的最小编号节点发送替换初始第一节点请求,直到提交过程完成。如果N发现比其编号小的节点全部失效,则N开始向活跃的参与节点要求成为第一节点,其它活跃参与节点确认N为当前活跃节点中的最小编号节点,并回复N其是否已经收到提交决定,以及具体的提交决定,N收到足够多的回复后,即对每个数据项收到超过半数复本节点的回复,N从回复的提交决定中,确定对事务进行提交或回滚,N向活跃的参与节点发送提交决定,任一参与节点收到此要求后,记录参与节点集合和提交(回滚)结果,并在本地执行事务提交(回滚)过程,然后向N回复处理结果,N收到足够多的回复后,即对每个数据项收到超过半数复本节点的回复,向应用确认事务提交(回滚)完毕。
Claims (10)
1.一种非阻塞式容错的分布式事务提交方法,其特征在于,包括:
步骤1,定位所述分布式事务数据存储的多个节点,所述多个节点共同执行所述分布式事务,选取所述多个节点中或系统外的一个节点作为初始第一节点;
步骤2,取得所述分布式事务的全局唯一事务标识符;
步骤3,所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。
2.如权利要求1所述的非阻塞式容错的分布式事务提交方法,其特征在于,包括:
所述多个节点中的每一个节点都对应一个全局节点标识符,所有的全局节点标识符被单调排序,且所述多个节点的每一个节点分别存储所述分布式事务的部分数据,并负责所述分布式事务在节点上的数据操作,且对于需要容错保证的、所述分布式事务涉及的每个所述数据项,分别存储在三个或三个以上的复本,且所述复本至少分布在三个或三个以上的不同节点上。
3.如权利要求1所述的非阻塞式容错的分布式事务提交方法,其特征在于,包括:
所述多个节点记录所述初始第一节点的状态信息,以便判断所述初始第一节点是否失效,所述多个节点及所述初始第一节点记录参与所述分布式事务的所有节点的全局节点标识符。
4.如权利要求1所述的非阻塞式容错的分布式事务提交方法,其特征在于,还包括分布式事务提交修复步骤:
如果任一节点发现所述初始第一节点失效,则发现所述初始第一节点失效的节点向所述多个节点中的其他节点申请成为新初始第一节点,并开始分布式事务提交修复流程,直到完成分布式事务提交过程。
5.如权利要求4所述的非阻塞式容错的分布式事务提交方法,其特征在于,所述分布式事务提交修复步骤的具体步骤为:
(1)任一节点发现初始第一节点失效后,向所述多个节点中的其他节点发送申请成为初始第一节点的申请请求,并设置申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)所述其他节点中收到申请请求后,所述其他节点分别更新所述其他节点收到过的申请请求中全局节点标识符最小的节点,并向申请成为初始第一节点回复见到过的最大的轮数s,以及申请请求中全局节点标识符最小的节点,并更新所述其他节点分别见到过的申请请求中的最大轮数s,其中s的初始值为0,如果所述其他节点已收到初始第一节点对分布式事务的提交或回滚请求,所述其他节点在回复信息中包含所述其他节点收到的初始第一节点的请求为提交分布式事务请求或回滚分布式事务请求,以及所述初始第一节点请求所在的轮数t;
(3)申请成为初始第一节点的节点在收到多个节点回复后,如果对于所述分布式事务所涉及的每个所述数据项,都存在:存储所述数据项的复本的节点中超过一半的节点回复信息中,所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,且最大轮数s小于r,则进行(3c),如果节点回复信息中存在比申请成为初始第一节点的节点的全局节点标识符更小的全局节点标识符,则申请成为初始第一节点的节点终止分布式事务提交修复流程;如果节点回复信息中所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,则申请成为初始第一节点的节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1),
(3C)在节点回复信息中找到最大的t及t所对应的初始第一节点的请求,如果节点回复信息不存在任何节点接受过初始第一节点的请求,则设初始第一节点的请求为回滚事务,向所有节点发送接受请求,接受请求中包含当前轮数r、申请成为初始第一节点的节点的全局节点标识符与初始第一节点的请求;
(4)多个节点中的每个节点接受请求后,多个节点中的每个节点更新见到过的申请节点中的最小全局节点标识符,更新其见到过的申请中的最大的轮数s,如果多个节点中的一个节点未确认过任何接受请求,且所述多个节点中的一个节点的s与接受请求的轮数r相等,则所述多个节点中的一个节点执行该接受请求并相应回滚或提交分布式事务,同时更新所接受请求的轮数t为s,记录已接受请求,向当前初始第一节点回复成功信息,如果多个节点中的一个节点接受执行过接受请求,且执行的接受请求与请求同为回滚或提交请求,则更新t为s,并向当前初始第一节点回复成功信息;
(5)申请成为初始第一节点的节点在发送接受请求,并收到多个节点回复后,如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,如果回复节点不足多个节点的一半,则申请成为初始第一节点的节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1)。
6.一种非阻塞式容错的分布式事务提交系统,其特征在于,包括:
事务数据定位模块,用于定位所述分布式事务数据存储的多个节点,所述多个节点共同执行所述分布式事务,所述多个节点中或系统外的一个节点为初始第一节点;
全局事务标识符获取模块,用于取得所述分布式事务的全局唯一事务标识符;
提交模块,用于所述初始节点向除所述初始第一节点之外的节点发起所述分布式事务的提交请求,除所述初始第一节点之外的节点分别在本地对所述分布式事务进行提交后,向所述初始第一节点发送确认提交消息,对于所述分布式事务涉及的每个数据项,所述初始第一节点收集到所述数据项的复本所在的多个节点中一半以上的确认提交消息后,完成所述分布式事务的提交过程。
7.如权利要求6所述的非阻塞式容错的分布式事务提交系统,其特征在于,包括:
所述多个节点中的每一个节点都对应一个全局节点标识符,所有的全局节点标识符被单调排序,且所述多个节点的每一个节点分别存储所述分布式事务的部分数据,并负责所述分布式事务在节点上的数据操作,且对于需要容错保证的、所述分布式事务涉及的每个所述数据项,分别存储在三个或三个以上的复本,且所述复本至少分布在三个或三个以上的不同节点上。
8.如权利要求6所述的非阻塞式容错的分布式事务提交系统,其特征在于,包括:
所述多个节点记录所述初始第一节点的状态信息,以便确认所述初始第一节点是否失效,所述多个节点及所述初始第一节点记录参与所述分布式事务的所有节点的全局节点标识符。
9.如权利要求6所述的非阻塞式容错的分布式事务提交系统,其特征在于,还包括分布式事务提交修复模块:
用于如果任一节点发现所述初始第一节点失效,则发现所述初始第一节点失效的节点向所述多个节点中的其他节点申请成为新初始第一节点,并开始分布式事务提交修复流程,直到完成分布式事务提交过程。
10.如权利要求9所述的非阻塞式容错的分布式事务提交系统,其特征在于,所述分布式事务提交修复模块的具体作用为:
(1)任一节点发现初始第一节点失效后,向所述多个节点中的其他节点发送申请成为初始第一节点的申请请求,并设置申请轮数r,使r比所述任一节点见到过的最大的轮数s都大;
(2)所述其他节点中收到申请请求后,所述其他节点分别更新所述其他节点收到过的申请请求中全局节点标识符最小的节点,并向申请成为初始第一节点回复见到过的最大的轮数s,以及申请请求中全局节点标识符最小的节点,并更新所述其他节点分别见到过的申请请求中的最大轮数s,其中s的初始值为0,如果所述其他节点已收到初始第一节点对分布式事务的提交或回滚请求,所述其他节点在回复信息中包含所述其他节点收到的初始第一节点的请求为提交分布式事务请求或回滚分布式事务请求,以及所述初始第一节点请求所在的轮数t;
(3)申请成为初始第一节点的节点在收到多个节点回复后,如果对于所述分布式事务所涉及的每个所述数据项,都存在:存储所述数据项的复本的节点中超过一半的节点回复信息中,所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,且最大轮数s小于r,则进行(3c),如果节点回复信息中存在比申请成为初始第一节点的节点的全局节点标识符更小的全局节点标识符,则申请成为初始第一节点的节点终止分布式事务提交修复流程;如果节点回复信息中所述申请请求的节点的全局节点标识符为所见申请成为初始第一节点的节点中的最小全局节点标识符,则申请成为初始第一节点的节点更新其本地所见最大轮数s,使s大于所有回复信息中的s,并继续步骤(1),
(3C)在节点回复信息中找到最大的t及t所对应的初始第一节点的请求,如果节点回复信息不存在任何节点接受过初始第一节点的请求,则设初始第一节点的请求为回滚事务,向所有节点发送接受请求,接受请求中包含当前轮数r、申请成为初始第一节点的节点的全局节点标识符与初始第一节点的请求;
(4)多个节点中的每个节点接受请求后,多个节点中的每个节点更新见到过的申请节点中的最小全局节点标识符,更新其见到过的申请中的最大的轮数s,如果多个节点中的一个节点未确认过任何接受请求,且所述多个节点中的一个节点的s与接受请求的轮数r相等,则所述多个节点中的一个节点执行该接受请求并相应回滚或提交分布式事务,同时更新所接受请求的轮数t为s,记录已接受请求,向当前初始第一节点回复成功信息,如果多个节点中的一个节点接受执行过接受请求,且执行的接受请求与请求同为回滚或提交请求,则更新t为s,并向当前初始第一节点回复成功信息;
(5)申请成为初始第一节点的节点在发送接受请求,并收到多个节点回复后,如果回复节点超过多个节点的一半以上,则分布式事务提交修复流程完成,如果回复节点不足多个节点的一半,则申请成为初始第一节点的节点更新轮数r使其大于所见过的所有轮数,并继续步骤(1)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510595324.9A CN105183544B (zh) | 2015-09-17 | 2015-09-17 | 一种非阻塞式容错的分布式事务提交方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510595324.9A CN105183544B (zh) | 2015-09-17 | 2015-09-17 | 一种非阻塞式容错的分布式事务提交方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105183544A true CN105183544A (zh) | 2015-12-23 |
CN105183544B CN105183544B (zh) | 2018-08-31 |
Family
ID=54905640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510595324.9A Active CN105183544B (zh) | 2015-09-17 | 2015-09-17 | 一种非阻塞式容错的分布式事务提交方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105183544B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107172656A (zh) * | 2016-03-07 | 2017-09-15 | 京东方科技集团股份有限公司 | 非阻塞请求处理方法及装置 |
CN107330786A (zh) * | 2017-05-19 | 2017-11-07 | 杭州云象网络技术有限公司 | 一种基于权重的区块链网络节点通信方法 |
CN108701157A (zh) * | 2016-01-28 | 2018-10-23 | 甲骨文国际公司 | 分布式事务处理系统中有保证的提交结果 |
WO2020134199A1 (zh) * | 2018-12-24 | 2020-07-02 | 华为技术有限公司 | 实现数据一致性的方法和装置、服务器和终端 |
CN112650561A (zh) * | 2019-10-11 | 2021-04-13 | 中兴通讯股份有限公司 | 事务管理方法、系统、网络设备和可读存储介质 |
WO2021259240A1 (zh) * | 2020-06-22 | 2021-12-30 | 中兴通讯股份有限公司 | 分布式事务处理方法、终端及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
CN102404383A (zh) * | 2010-09-28 | 2012-04-04 | 微软公司 | 在分布式基础设施中执行计算 |
CN103885895A (zh) * | 2012-12-19 | 2014-06-25 | 国际商业机器公司 | 容错集群存储系统中的写入性能 |
-
2015
- 2015-09-17 CN CN201510595324.9A patent/CN105183544B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101273333A (zh) * | 2005-04-13 | 2008-09-24 | 普罗格雷斯软件公司 | 容错分布式锁定管理 |
CN102404383A (zh) * | 2010-09-28 | 2012-04-04 | 微软公司 | 在分布式基础设施中执行计算 |
CN103885895A (zh) * | 2012-12-19 | 2014-06-25 | 国际商业机器公司 | 容错集群存储系统中的写入性能 |
Non-Patent Citations (2)
Title |
---|
刘波等: "一种改进的分布式实时事务调度协议", 《小型微型计算机系统》 * |
桑玉真等: "一种基于非阻塞的分布式数据库原子提交协议", 《计算机工程与应用》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108701157A (zh) * | 2016-01-28 | 2018-10-23 | 甲骨文国际公司 | 分布式事务处理系统中有保证的提交结果 |
CN108701157B (zh) * | 2016-01-28 | 2022-03-01 | 甲骨文国际公司 | 分布式事务处理系统中有保证的提交结果 |
CN107172656A (zh) * | 2016-03-07 | 2017-09-15 | 京东方科技集团股份有限公司 | 非阻塞请求处理方法及装置 |
CN107172656B (zh) * | 2016-03-07 | 2021-01-22 | 京东方科技集团股份有限公司 | 非阻塞请求处理方法及装置 |
CN107330786A (zh) * | 2017-05-19 | 2017-11-07 | 杭州云象网络技术有限公司 | 一种基于权重的区块链网络节点通信方法 |
CN107330786B (zh) * | 2017-05-19 | 2020-06-26 | 杭州云象网络技术有限公司 | 一种基于权重的区块链网络节点通信方法 |
WO2020134199A1 (zh) * | 2018-12-24 | 2020-07-02 | 华为技术有限公司 | 实现数据一致性的方法和装置、服务器和终端 |
CN112650561A (zh) * | 2019-10-11 | 2021-04-13 | 中兴通讯股份有限公司 | 事务管理方法、系统、网络设备和可读存储介质 |
WO2021068850A1 (zh) * | 2019-10-11 | 2021-04-15 | 中兴通讯股份有限公司 | 事务管理方法、系统、网络设备和可读存储介质 |
WO2021259240A1 (zh) * | 2020-06-22 | 2021-12-30 | 中兴通讯股份有限公司 | 分布式事务处理方法、终端及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105183544B (zh) | 2018-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105183544A (zh) | 一种非阻塞式容错的分布式事务提交方法及系统 | |
US8140623B2 (en) | Non-blocking commit protocol systems and methods | |
CN103116596B (zh) | 在分布式数据库中执行快照隔离的系统和方法 | |
Kraska et al. | MDCC: Multi-data center consistency | |
CN104094228B (zh) | 用于支持基于二阶段提交调用的严格定序的事务恢复的系统和方法 | |
US9141480B2 (en) | Handling failed transaction peers in a distributed hash table | |
US10366106B2 (en) | Quorum-based replication of data records | |
US20200218823A1 (en) | Method and system for a distributed computing system | |
US20020161869A1 (en) | Cluster resource action in clustered computer system incorporating prepare operation | |
CN110502319B (zh) | 分布式事务的处理方法、装置、电子设备及存储介质 | |
US6823356B1 (en) | Method, system and program products for serializing replicated transactions of a distributed computing environment | |
CN102882927A (zh) | 一种云存储数据同步框架及其实现方法 | |
CN101183377A (zh) | 一种基于消息中间件的高可用性数据库集群 | |
CN101706811A (zh) | 一种分布式数据库系统事务提交方法 | |
US20190052709A1 (en) | Clustered storage system synchronization | |
CN103473318A (zh) | 一种面向内存数据网格的分布式事务保障方法 | |
US10282457B1 (en) | Distributed transactions across multiple consensus groups | |
EP1821218A2 (en) | Method for enhancing the operation of a database | |
CN109783204A (zh) | 一种分布式事务处理方法、装置及存储介质 | |
US11968311B2 (en) | Multi-shard transactions in a Byzantine computing environment | |
US6873987B1 (en) | Method, system and program products for recovering from failures within a shared nothing distributed computing environment | |
CN110830582B (zh) | 一种基于服务器集群选主方法和装置 | |
US20210218827A1 (en) | Methods, devices and systems for non-disruptive upgrades to a replicated state machine in a distributed computing environment | |
US20130006920A1 (en) | Record operation mode setting | |
Beyer et al. | Increasing availability in a replicated partitionable distributed object system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |