Chinaunix首页 | 论坛 | 博客
  • 博客访问: 633628
  • 博文数量: 356
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2287
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-08 17:08
文章分类

全部博文(356)

文章存档

2023年(3)

2022年(7)

2021年(33)

2020年(47)

2019年(36)

2018年(221)

2017年(1)

2015年(1)

2013年(7)

我的朋友

分类: 云计算

2018-12-06 15:21: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()

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