当前位置: 首页 > news >正文

seata的TCC模式分析

TCC是 Try- Confirm-Cancel 这3个名词的首字母简称,是一个2阶段提交的变体思路。

Try:对资源的检查和预留;

Confirm: 确认对预留资源的消耗,执行业务操作;

Cancel:预留资源的释放;

TCC的事务交互过程和AT类似,业务先发起全局事务,向TC申请全局XID,再把这个全局XID传递给各个微服务,各微服务在进行本地第一阶段处理之前,都要向

TCC模式最重要的事情就是要把自己的业务模型都拆分为2个阶段,能够支持预留和确认两个阶段,并且需要自行编码来实现try-confirm-cancel对应的业务逻辑,深度侵入业务和代码,当然带来的好处也非常明显,相比AT模式可以大大提高并发度。

常见的电商下单案例中,涉及商品库存扣减、账户金额扣扣减、订单创建 这3大业务,3个业务要支持TCC,首要的是把业务模型拆分为两阶段。

1、库存扣减 2阶段模型

     需要把库存拆分为3部分: 实际库存、可售库存、冻结库存

     其中 实际库存 = 可售库存+ 冻结库存

     Try:增加冻结库存、减少可售库存、实际库存保持不变

     Confirm: 什么都不做;

     Cancel:减少冻结库存,增加可售库存,实际库存不变;

2、账户金额扣减的2阶段模型和库存扣减完全一致。

3、订单创建 2阶段模型

     订单需要增加一个 创建中 状态。

     Try : 订单数据插入DB中,但是订单状态为 创建中;

     Confirm:订单状态变更为 正常状态;

     Cancel:订单状态变更为  无效状态

TCC模式,第1阶段库存、账户、订单这3者其实都是各自提交了本地事务,没有全局锁什么事,第2阶段,无论是Confirm还是Cancel 也都是本地事务提交,也没有全局事务什么事,基于这种模式对于各自业务的总体并发度几乎没有影响,不像AT模式还是有全局的行级锁,整体式是串行的。

http://www.lryc.cn/news/199343.html

相关文章:

  • 常用linux命令【主要用于日志查询,目录切换】
  • Python学习基础笔记七十六——Python装饰器2
  • 生产环境解决用户登录问题的实践
  • 通讯协议学习之路:QSPI协议理论
  • pip安装修改镜像源
  • QCC51XX-QCC30XX系列开发教程(实战篇) 之 12.4-空间音频手机侧和耳机侧接口设计时序图
  • Mysql创建视图中文乱码修改docker里的配置
  • uniapp checkbox样式失效,选中框选中按钮不显示
  • 机器学习-最小二乘法
  • Linux文件管理与用户管理
  • java中什么是不可变类
  • 使用Perl和WWW::Mechanize库编写
  • 智荟雄安,创想未来 | 竹云董事长受邀出席雄安新区2023软件和信息技术服务业创新发展论坛并作主题演讲
  • 【设计模式-1】UML和设计原则
  • 【数据结构】——二叉树的基础知识
  • 日常bug汇总
  • C#使用PPT组件的CreateVideo方法生成视频
  • 数字化体系如何帮助企业拓展裂变增长渠道?数字化营销体系构建?
  • 关于vant 的tabbar功能
  • :style动态绑定,但只要页面发生变化就会执行一次方法
  • 文件的逻辑结构(顺序文件,索引文件)
  • suricata匹配从入门到精通(五)----二次开发保护规则库
  • 软件测试肖sir__python之ui自动化定位方法(2)
  • 【JVM面试题】JVM分代年龄为何是15次?能设置为16吗?
  • java三层架构/表现层-业务层-持久层
  • 视频监控这样做,简单又高效!
  • 掌握 Go 的计时器
  • 嵌入式软件开发笔试面试
  • 【Qt高阶】Linux安装了多个版本的Qt 部署Qt程序,出包【2023.10.17】
  • OpenGL简介