Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1829287
  • 博文数量: 286
  • 博客积分: 3713
  • 博客等级: 少校
  • 技术积分: 2275
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-11 09:47
个人简介

http://blog.chinaunix.net/uid/16979052.html

文章分类

全部博文(286)

文章存档

2018年(1)

2017年(16)

2016年(9)

2015年(17)

2014年(15)

2013年(112)

2012年(116)

分类:

2012-07-17 13:36:46

   2PC协议在多数据中心,多路写的情况下,保证数据一致性而设计的协议。

   2PC思想比较简单,是一个失败,全体不成功;如果成功,就没有一个失败的简单逻辑,实现简单。

   image

   本文讲述其大概流程,client提交数据到N个节点上,其中一个节点选为协调员coordinator,其他作为cohorts(partcipant)2PC做了一些假设:

1、  每个节点都有稳定存储(stable storage), 并且都会每次写操作都有预写日志(write-ahead log)

2、  预写日志永远不会丢失和破坏;

3、  任何节点之间都能互相通信;

4、每个参与者都是blocking的,有资源锁存在。

 

实现表述画一个时序流程图来介绍吧,一目了然。

image

        

   一个更详细的状态机实现

  clip_image004

 

       上图中每个节点,每一步都有log记录,以准备rollback,其中任何一步都有失败的可能,收不到对方的消息。

     在 phase 1阶段,任何错误包括超时错误,都不会产生任何问题。

phase 2阶段,如果是coordinator发出global commit后,有个或几个cohorts失效。就发生了数据不一致的错误,存在一些cohorts更新数据,一些cohorts没有更新数据。但是,coordinator没有机会向所有cohorts发出global abort撤销提交。

     在实际生产环境中,2PC很少被使用。一般使用其改进版:如D2PC()

阅读(1226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~