首页 > 编程知识 正文

责任链模式事务,分布式事务模式

时间:2023-05-05 14:32:39 阅读:204203 作者:3024

文章目录 TCC 基本原理第一阶段 Try第二阶段 Confirm第二阶段 Cancel多个事务并发的情况 Seata TCC事务模式



项目源码: https://gitee.com/benwang6/seata-samples




TCC 基本原理

TCC 与 Seata 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 资源管理器

下一节,我们还是以订单业务为例,来演示 Seata 如何实现 TCC 事务。



项目源码: https://gitee.com/benwang6/seata-samples




版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。