2pc(Two phase commitment protocol)
一阶段:准备阶段,预留资源
二阶段:
所有资源准备成功 -》提交
出现准备失败 -》 回滚
tcc(try-confirm-cancel) 两阶段提交
三个接口均由编码实现(业务中),事务管理器统一调度,try成功confirm要求一定成功。
try 预留资源(冻结资金),冻结资金是否小于余额。
confirm 所有资源准备成功 -》提交 (扣除冻结资金)
cancel 出现准备失败 -》 回滚(释放冻结资金)
- 隔离性 事务间的隔离性。记录中间表,绑定事务id。业务记录流水
- 空回滚 允许空回滚。(网络波动,try超时,cancel回滚)
- 防悬挂 try拥堵(cancel后try才执行),防止空回滚后的try操作。允许空回滚,但要拒绝空回滚后的try操作(记录流水标记已回滚,try时检查)。
- 幂等 tcc三个操作的幂等性
tcc两阶段提交与saga、seta比较
- tcc两阶段提交适用于金融场景,最终一致。缺点占用资源,系统需要开发tcc三个接口。
- seta无法保证事务隔离性,可能会有脏数据无法回滚。undolog回滚补偿,不占资源。设计遵循客户少钱机构多钱的原则,最终机构补偿。