Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1855789
  • 博文数量: 38
  • 博客积分: 690
  • 博客等级: 中士
  • 技术积分: 3715
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-27 14:06
文章分类

全部博文(38)

文章存档

2018年(8)

2016年(4)

2015年(2)

2014年(1)

2013年(3)

2012年(20)

分类: 云计算

2012-07-15 21:30:37

   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()

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

ivyliner2012-07-17 17:17:45

不错的思想,学习了.