常见一致性协议

这是Zookeeper学习总结 的系列文章。

在上一节的理论基础部分也提到,一个分布式系统往往是在可用性与一致性之间平衡。大多都是在保证一致性的前提下,尽可能地提高系统的整体可用性。常见的有二阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft等算法,在本文将介绍他们中的一部分。

2PC

2PC即Two-Phase Commit,二阶段提交。广泛应用在数据库领域,为了使得基于分布式架构的所有节点可以在进行事务处理时能够保持原子性和一致性。绝大部分关系型数据库,都是基于2PC完成分布式的事务处理。
顾名思义,2PC分为两个阶段处理,
阶段一:提交事务请求
事务提交示意图
事务中断示意图

  1. 事务询问。协调者向所有参与者发送事务内容,询问是否可以执行提交操作,并开始等待各参与者进行响应;
  2. 执行事务。各参与者节点,执行事务操作,并将Undo和Redo操作计入本机事务日志;
  3. 各参与者向协调者反馈事务问询的响应。成功执行返回Yes,否则返回No。
    阶段二:执行事务提交
    协调者在阶段二决定是否最终执行事务提交操作。这一阶段包含两种情形:
    执行事务提交
    所有参与者reply Yes,那么执行事务提交。
  4. 发送提交请求。协调者向所有参与者发送Commit请求;
  5. 事务提交。参与者收到Commit请求后,会正式执行事务提交操作,并在完成提交操作之后,释放在整个事务执行期间占用的资源;
  6. 反馈事务提交结果。参与者在完成事务提交后,写协调者发送Ack消息确认;
  7. 完成事务。协调者在收到所有参与者的Ack后,完成事务。

中断事务
事情总会出现意外,当存在某一参与者向协调者发送No响应,或者等待超时。协调者只要无法收到所有参与者的Yes响应,就会中断事务。

  1. 发送回滚请求。协调者向所有参与者发送Rollback请求;
  2. 回滚。参与者收到请求后,利用本机Undo信息,执行Rollback操作。并在回滚结束后释放该事务所占用的系统资源;
  3. 反馈回滚结果。参与者在完成回滚操作后,向协调者发送Ack消息;
  4. 中断事务。协调者收到所有参与者的回滚Ack消息后,完成事务中断。

猜你喜欢

转载自www.cnblogs.com/jenkov/p/distribute_sys_protocols.html