分布式TCC事务相关问题
TCC分别是Try,Confirm,Cancel,分为三阶段。
- 第一阶段Try:业务检查及资源预留,尝试事务操作但不提交。
- 第二阶段Confirm:事务操作提交。
- 第三阶段Cancel:如果Try阶段发现事务操作无法完成 或者 Confirm阶段出现错误,会撤销已经完成的操作,回滚到事务。
涉及到幂等性,悬挂
幂等性:分布式环境下,用户对于统一操作,无论是发起一次请求还是多次请求,最终的执行结果是一样的。
* 例如:用户A给B转账100元,无论点击确认键多少次确认键,都只是转100元;页面重复刷新等。
* 解决方案:数据加锁、每个事务加上token,处理后token失效,重复提交就拒绝处理。
悬挂:Try阶段由于网络拥堵等原因超时触发了Canel阶段,之后收到了Try阶段的数据包,可能导致数据不一致。
* 解决方案:记录事务的id并加上是否回滚了的标志,每次try之前检查是否已经被标识为回滚成功,如果被标记回滚成功则不进行try操作。
本文来自博客园,作者:ControlO_o,转载请注明原文链接:https://www.cnblogs.com/ControlO-o/p/17623172.html