3.分布式事务方案-3PC

1. 3PC是什么

  • 证强一致性的一种分布式事务方案,2PC的改进版

2. 3PC流程

  • 把2PC中的第一阶段拆分成两步,因此整个事务过程分成3个阶段:CanCommit、PreCommit、DoCommit
    • CanCommit阶段:协调者向所有参与者询问你们是否可以完成本次事务?,各个参与者检查下自身状态的健康性,看有没有能力进行事务操作,然后向协调者返回ack消息。
    • PreCommit阶段:
      • 预提交事务:如果所有的参与者都返回yes的话,那么协调者向参与者发送sql,参与者本地执行事务,然后向协调者返回ack消息(注意这里参与者并没有提交事务
      • 中断事务:如果有参与者节点返回no或者协调者在等待参与者节点反馈的过程中超时,协调者就会向所有的参与者发送中断请求
    • DoCommit阶段:
      • 提交事务:如果PreCommit阶段所有参与者返回yes,那么协调者向参与者发送事务commit请求,让每个参与者commit本地事务;
      • 回滚事务:其他情况协调者向参与者发送事务rollback请求

3. 2PC vs 3PC

  • 把2PC中的第一阶段拆分成两步,因此整个事务过程分成3个阶段:CanCommit、PreCommit、DoCommit
  • 同时引入了超时机制:协调者和参与者中都引入超时机制
  • 解决单点故障问题+性能问题:因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit,而不会一直持有事务资源并处于阻塞状态

4. 3PC的使用场景

  • 适用于强一致性、时间敏感度高、分布式事务可以回滚的业务的处理结果,比如金融转账场景
  • 单个服务多个数据源且数据源都是DB,即传统单体

5. 3PC的问题

  • 一致性问题:比如在进入PreCommit阶段后,如果协调者发送的是abort指令,而此时由于网络问题,有部分参与者在等待超时后仍未收到Abort指令的话,那这些参与者就会执行commit,这样就产生了不同参与者之间数据不一致的问题
  • 实现困难
posted @ 2025-07-06 21:50  ThinkerQAQ  阅读(34)  评论(0)    收藏  举报