分布式学习2-一致性协议(2pc3pc)

问题:

一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的acid特性,需要有一个协调者的组件来统一调度所有的分布式节点的执行逻辑。这个协调者需要做两项工作,一是负责协调参与者的行为,二是最终决定参与者是否要把最终的事务进行真正的提交,基于这个思想,衍生出二阶提交和三阶提交两种协议。

2PC

第一阶段:提交事务请求(投票阶段)

  1. 将事务内容发送给参与者,并询问是否可以进行事务提交
  2. 参与者执行事务,将执行内容计入事务日志
  3. 参与者向协调者返回执行结果

第二阶段:执行事务提交

因为第一阶段会产生两种结果,执行成功,或者执行失败,所以这个阶段包含两种可能。

执行事务提交:

  1.  发送提交请求
  2. 事务提交
  3. 反馈事务处理结果
  4. 完成事务

中断事务:

  1. 发起回滚请求
  2. 事务回滚
  3. 反馈事务回滚结果
  4. 中断事务

3PC 

3pc是在2pc的基础上进行了改进,提出了三段提交协议

阶段一:CanCommit

  1. 事务询问,询问是否可以执行事务提交操作,等待参与者的反应
  2. 事务的参与者向协调者进行相应,反馈yes,进入预备状态,否则反馈no

阶段二:PreCommit

由于阶段一同样会有两种结果,所以此阶段包含两种可能

执行事务预提交(返回的结果都为yes)

  1. 发送预提交请求
  2. 事务预提交
  3. 各参与者向协调者反馈事务执行的相应

中断事务

  1. 发送中断请求
  2. 中断事务

阶段三:doCommit

该阶段将真正的将事务进行提交,会存在以下两种可能

执行提交:

  1. 发送提交请求
  2. 事务提交
  3. 反馈事务提交结果
  4. 完成事务

中断事务:

  1. 发送中断请求
  2. 事务回滚
  3. 反馈事务回滚结果
  4. 中断事务

需要注意的是,一但进入阶段三,可能会出现一下两种故障

  1. 协调者故障
  2. 协调者跟参与者网络不同,

无论出现那种故障,最终都会导致参与者无法收到协调者的命令。针对这种异常,参与者在等待超时之后,继续进行事务提交。

 

 

你可能感兴趣的:(分布式)