1.TCC事务其实是try-confirm-cancel的简称,将事务的步骤分为三步,属于柔性事务,因为2PC同步阻塞的缘故,就产生了效率高的TCC.
2.TCC可以解决跨库的数据一致性问题,常用于,电商库存扣减业务
- Try操作作为一阶段,负责资源的检查和预留
- Confirm操作作为二阶段提交操作,执行真正的业务
- Cancel是预留资源的取消;
3.补偿性事务
在2PC中,资源会被一直的上锁,但是在TCC中不会一直上锁,TCC会预扣所需的资源,如果try过程成功,就完成扣减资源的过程,但是如果失败,就会通过事务日志,将预扣的资源补偿回去,达到最终一致的效果。
4.2PC和TCC的区别
- 2PC是资源层面的事务,但是TCC是业务层是事务,是能感知到的
- 2PC在进行事务的过程中,整个过程都会上锁,属于强一致性,但是TCC是补偿性事务,不会一直上锁,属于最终一致性。
- 2PC因为会一直占用锁,所以是同步阻塞,性能较差。TCC不会占用锁,是异步阻塞,性能较好
5.注意事项
5.1允许空回滚
在TCC事务的过程中,如果出现网络波动,导致try请求的包丢失,则会造成超时异常,但是就算这样,TCC仍然会通过事务日志回滚到事务执行之前
5.2 防悬挂设置
在高并发请求中,网络拥挤等场景,都会造成try请求操作长时间未到达数据库,所以,会执行而简短的rollback操作,但是就在执行了rollback之后,try请求到达数据库,事务管理器收到了响应,造成了 rollback操作比try请求先执行的事情,所以,在执行 rollback操作之后要拒绝一切try操作。
5.3 幂等控制
无论是网络数据包重传,还是异常事务的补偿执行,都会导致TCC服务的Try、Confirm或者Cancel操作被重复执行;用户在实现TCC服务时,需要考虑幂等控制,即Try、Confirm、Cancel 执行次和执行多次的业务结果是一样的;
相关文章
暂无评论...