1.7 KiB
1.7 KiB
2PC - 两阶段提交协议
- 一个节点为管理者,其他节点为参与者
- 协调者要求每个涉及到该事务的服务预提交此操作,并反映是否可以提交
- 根据反映,要求每个服务提交或者回滚
缺点:
- 管理者为单点,故障后整个集群无法使用
- 执行过程中,所有参与事务的节点都是独占状态,其他管理者需要阻塞等待上一个事务完成后才能继续
- 在执行commit过程中,如果只有一部分参与者收到并执行,此时会产生数据不一致
3PC - 三阶段提交协议
为了解决2PC的独占导致占用阻塞问题,引入了超时机制 分为三步
- CanCommit,发生请求询问是否可以调节
- PreCommit,根据CanCommit响应有两种情况。若所有的节点都是Yes,向每个服务发送PreCommit,并要求反馈ACK; 若任意一个节点返回No,或者等待超时,则进行中断操作,向每个服务发生Abort,放弃事务的执行。
- DoCommit,根据PreCommit响应有两种情况。若所有都ACK则发生DoCommit请求,并要求反馈ACK; 若没收到所有的ACK响应,则中断事务
缺点:在执行DoCommit过程中,如果只有一部分参与者收到并执行,此时会产生数据不一致
TCC
参考分布式事务 - TCC事务模型.md
优点:
- TCC解决了跨服务的业务操作原子性问题,可以让应用自己定义数据库操作的粒度,降低锁冲突,提高系统的业务吞吐量。
- TCC的每一阶段都由业务自己控制,避免了长事务,提高了性能。
缺点:
- 业务侵入性强:业务逻辑必须都要实现Try,Confirm,Cancel三个操作