TCC事务解决方案
适用场景:
适用于具有强隔离性,严格一致性要求,也适用执行时间比较短的业务。
方案优缺点
优点:
1)在应用层实现具体逻辑,锁定资源的粒度小,不会锁定所有资源,性能比较高
2)Confirm阶段和Cancel阶段的方法具备幂等性,能够保证分布式执行完的数据一致性。
3)TCC分布式事务解决方案由主业务发起,无论主业务还是分支事务都能部署为集群模式,解决XA规范的单点故障
缺点:
代码需要耦合到业务中,每个分支都需要拆分为Try,Confirm和Cancel
存在问题:
1.空回滚问题
原因:分支事务所在的服务器宕机或者网络原因等,分支事务调用失败,没有执行Try阶段方法。当恢复调用,TcC执行回滚操作,如果Cancel无法处理,就会出现回滚问题。
解决:创建一个全局事务记录,并生成一个全局唯一的事务ID,另外创建分支事务记录,记录分支事务执行状态。
2.幂等问题
原因:由于网络等原因,导致分支事务调用失败,Tcc引入重试机制,可能导致数据一致性问题。
解决:在分支事务记录中增加事务的执行状态,每次执行分支事务,查询confirm和Cancel阶段的执行状态,判断是否执行。
3.悬挂问题
原因:在调用分支事务的时候,RPC调用超时重试,事务管理器通知对应资源管理器经回滚事务,但是事务回滚后,请求到达执行Try阶段方法,导致资源无法释放。
解决:创建分支事务记录,查询如果执行过Confirm或Cancel就不在执行。