首页 未命名正文

两阶段提交算法

helight0 未命名 2015-01-12 57 0 zookerrper

两阶段提交协议是在事务处理、数据库,以及计算机网络中使用的一种原子提交协议(atomic commitment)。它是一个分布式算法,协调在整个分布式原子事务中的参与者的行为(commit或者roll back)。这个协议在一些系统错误发生时仍然能够成功,((两阶段提交协议))但并不能保证对所有错误都能进行容错。为了能做错误恢复,协议的所有参与 者都需要使用日志对协议状态进行记录。 两阶段提交协议中,其中一个节点被设置为coordinator,其他节点设置为cohorts。每个Mutation都会经历两个状态:prepare和commit。Master把mutation持久地写入log的时候,算是准备好了(prepared)。当主和备都准备好后,才进入commit状态,向用户返回成功。 Wikipedia对两阶段提交协议(two-phase commit protocol, 2PC)的描述如下: http://en.wikipedia.org/wiki/Two-phase_commit_protocol 中文wiki http://zh.wikipedia.org/wiki/%E4%BA%8C%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4 dddd 在我内部使用的分布式存储MetaNode中实现具体的两阶段协议又有了些调整。目的上任然是保证一致性提交。

  • 主节点有双重角色,是coordinator也是cohorts。
  • 这里只有两个节点,简化了两阶段协议,只需要主备两个商量一致即可。
  • 加入了timeout机制,访问超时后会给sdk返回结果。
  • 以操作流水号为主要同步依据
  • 日志文件切分是用 sn % max_log_record, 非prepare日志
  • dump记录日志文件最后合并一条日志的流水号sn到fsimg文件
  • 异步节点启动,加载img中的sn号,请求日志是对流水号+1
sdfsdfsdf

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论