分布式 系列 一致性协议 2PC

Posted by lichao modified on May 29, 2020

在对一个分布式系统进行架构设计的过程中,往往会在系统的可用性和数据的一致性进行反复的权衡,于是就产生了一致性协议。

二阶段提交算法 2PC(Two-phase commit)

为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的算法。

二阶段提交协议是将一个事务的处理过程分成了投票和执行两个阶段来进行处理,其核心是对每个事务都采用先尝试后提交的处理方式,因此也可以将二阶段提交看作一个强一致性的算法。

第一阶段:提交事务请求

  1. 事务询问:协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
  2. 执行事务:各参与者节点执行事务操作,并将 Undo 和 Redo 信息记入事务日志中。
  3. 各参与者向协调者反馈事务轮询的响应

第二阶段:执行事务提交

协调者根据各个参与者的反馈情况来决定最终是否可以进行事务提交操作。

二阶段提交将事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式

执行事务提交

如果协调者从所有的参与者获得的反馈都是Yes响应, 那么就会执行事务提交。

  1. 发送提交请求:协调者向所有的参与者节点发送commit操作
  2. 事务提交:参数者收到Commit请求后,会正式执行事务提交操作
  3. 反馈事务提交结果:参与者在完成事务提交之后,向协调者返送Ack消息
  4. 完成事务:协调者接收到所有参与者反馈的Ack消息后,完成事务
中断事务

假如任何一个参与者向协调反馈了No响应,或者在等待超时之后,协调者尚无发收到所有参与者的反馈响应,那么就会中断事务。

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

优点

简单 方便

缺点

同步阻塞

单点问题

数据不一致

太过保守