[发明专利]一种非阻塞式容错的分布式事务提交方法及系统有效
申请号: | 201510595324.9 | 申请日: | 2015-09-17 |
公开(公告)号: | CN105183544B | 公开(公告)日: | 2018-08-31 |
发明(设计)人: | 朱妤晴 | 申请(专利权)人: | 中国科学院计算技术研究所 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F17/30 |
代理公司: | 北京律诚同业知识产权代理有限公司 11006 | 代理人: | 祁建国;梁挥 |
地址: | 100190 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 阻塞 容错 分布式 事务 提交 方法 系统 | ||
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)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院计算技术研究所,未经中国科学院计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510595324.9/1.html,转载请声明来源钻瓜专利网。