补偿性事务是什么:
TCC(Try Confifirm Cancel),是服务化的二阶段编程模型,采用的补偿机制:
TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。
它分为三个步骤:
1.Try 阶段主要是对业务系统做检测及资源预留。
2. Confifirm阶段主要是对业务系统做确认提交, Try阶段执行成功并开始执行Confifirm阶段时,默认 Confifirm阶段是不会出错的。即:只要Try成功,Confifirm一定成功。
3. Cancel阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
使用场景:
业务需要:
举个例子,假入你要向A 转账,思路大概是:
我们有一个本地方法,里面依次调用步骤:
1、首先在 Try 阶段,要先调用远程接口把 你 和 A 的钱给冻结起来。
2、在Confifirm阶段,执行远程调用的转账的操作,转账成功进行解冻.
3、如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法(Cancel)
技术需要:
不同组件不能在一个事务种完成,mysql+redis数据同步
优缺点:
优点:
性能提升:具体业务来实现控制资源锁的粒度变小,不会锁定整个资源
数据最终一致性:基于Confifirm和Cancel的幂等性,保证事务最终完成确认或者取消,保证数据的一致性。
可靠性:解决了 XA 协议的协调者单点故障问题,由主业务方发起并控制整个业务活动,业务活动管理器也变成多点,引入集群。
缺点:
TCC 的 Try、Confifirm 和 Cancel 操作功能要按具体业务来实现,业务耦合度较高,提高了开发成本。