TCC原理
TCC 与 Seara AT 事务一样都是两阶段事务, 它与AT事务的主要区别为:
- TCC 对业务代码侵入严重
每个阶段的数据操作都要自己进行编码来实现,事务框架无法自动处理。 - TCC 效率更高
不必对数据加全局锁,允许多个事务同时操作数据。
第一阶段 Try:
以账户服务为例, 当下订单时要扣减用户账户金额:
假如用户购买100元商品,就要扣减100元
TCC 事务就要首先对这100元的扣减金额进行预留,或者说是先冻结这100元
第二阶段 Confirm
如果第一阶段能够顺利完成,那么说明“扣减金额”业务(分支业务)最终肯定是可以成功的。
当全局事务提交时,TC会可控制当前分支事务进行提交,如果提交失败,TC会反复尝试,知道成功为止。
当全局事务时,就可以使用冻结的金额来最终实现业务数据操作:
第二阶段 Cancel
如果全局事务回滚,就把冻结的金额进行解冻,恢复到以前的状态,TC 会控制当前分支事务回滚,如果回滚失败,TC会反复尝试,直到回滚完成终止。
多个事务并发的情况
多个TCC全局事务允许并发,它们执行扣减金额时,只需要冻结各自的金额即可:
Seata TCC事务模式
Seata 支持TCC 事务模式,与 AT 模式相同,也需要以下组件来支持全局事务的控制:
- TC 事务协调器
- TM 事务管理器
- RM 资源管理器