learn_note/分布式/分布式事务.md

1.7 KiB
Raw Blame History

2PC - 两阶段提交协议

  • 一个节点为管理者,其他节点为参与者
  • 协调者要求每个涉及到该事务的服务预提交此操作,并反映是否可以提交
  • 根据反映,要求每个服务提交或者回滚

缺点:

  1. 管理者为单点,故障后整个集群无法使用
  2. 执行过程中,所有参与事务的节点都是独占状态,其他管理者需要阻塞等待上一个事务完成后才能继续
  3. 在执行commit过程中如果只有一部分参与者收到并执行此时会产生数据不一致

3PC - 三阶段提交协议

为了解决2PC的独占导致占用阻塞问题引入了超时机制 分为三步

  1. CanCommit发生请求询问是否可以调节
  2. PreCommit根据CanCommit响应有两种情况。若所有的节点都是Yes向每个服务发送PreCommit并要求反馈ACK 若任意一个节点返回No或者等待超时则进行中断操作向每个服务发生Abort放弃事务的执行。
  3. DoCommit根据PreCommit响应有两种情况。若所有都ACK则发生DoCommit请求并要求反馈ACK 若没收到所有的ACK响应则中断事务

缺点在执行DoCommit过程中如果只有一部分参与者收到并执行此时会产生数据不一致

TCC

参考分布式事务 - TCC事务模型.md

优点:

  1. TCC解决了跨服务的业务操作原子性问题可以让应用自己定义数据库操作的粒度降低锁冲突提高系统的业务吞吐量。
  2. TCC的每一阶段都由业务自己控制避免了长事务提高了性能。

缺点:

  1. 业务侵入性强业务逻辑必须都要实现TryConfirmCancel三个操作