JavaDriver JavaDriver
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YoungAnn

西二旗Java老司机一枚 致力于社会主义添砖Java
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 系统设计
  • 电商系统中,如何实现秒杀功能?如何解决商品的超卖问题?
  • 如何解决缓存与数据库不一致的问题?
  • 什么是 CAP ?什么是最终一致性?什么是幂等操作?
  • 简述什么是两阶段提交?
  • 设计 Tiny URL 系统
  • 如何实现唯一的分布式 ID
  • 如何设计定时任务系统
  • 电商-商品系统设计
  • 系统设计
YoungAnn
2022-05-21

简述什么是两阶段提交?

TCC/Try Confirm Cancel模式TCC模式只有在所有的服务的第一阶段(try)都成功的时候才进行第二阶段确认(Confirm)操作,否则进行补偿(Cancel)操作,而在try阶段是不会进行真正的业务处理的。

TCC模式TCC模式的具体流程为两个阶段:Try,业务服务完成所有的业务检查,预留必需的业务资源如果Try在所有服务中都成功,那么执行Confirm操作,Confirm操作不做任何的业务检查(因为try中已经做过),只是用Try阶段预留的业务资源进行业务处理;否则进行Cancel操作,Cancel操作释放Try阶段预留的业务资源。

这么说可能比较模糊,下面我举一个具体的例子,小明在线从招商银行转账100元到广发银行。

这个操作可看作两个服务,服务a从小明的招行账户转出100元,服务b从小明的广发银行帐户汇入100元。

服务a(小明从招行转出100元):try: update cmb_account set balance=balance-100, freeze=freeze+100 where
acc_id=1 and balance>100;

confirm: update cmb_account set freeze=freeze-100 where acc_id=1;

cancel: update cmb_account set balance=balance+100, freeze=freeze-100 where
acc_id=1;

服务b(小明往广发银行汇入100元):try: update cgb_account set freeze=freeze+100 where acc_id=1;

confirm: update cgb_account set balance=balance+100, freeze=freeze-100 where acc_id=1;

cancel: update cgb_account set freeze=freeze-100 where acc_id=1;


具体说明:a的try阶段,服务做了两件事,1:业务检查,这里是检查小明的帐户里的钱是否多余100元;2:预留资源,将100元从余额中划入冻结资金。
a的confirm阶段,这里不再进行业务检查,因为try阶段已经做过了,同时由于转账已经成功,将冻结资金扣除。a的cancel阶段,释放预留资源,既100元冻结资金,并恢复到余额。

b的try阶段进行,预留资源,将100元冻结。b的confirm阶段,使用try阶段预留的资源,将100元冻结资金划入余额。
b的cancel阶段,释放try阶段的预留资源,将100元从冻结资金中减去。从上面的简单例子可以看出,TCC模式比纯业务补偿模式更加复杂,所以在实现上每个服务都需要实现Cofirm和Cancel两个接口。

编辑 (opens new window)
上次更新: 2022/05/22, 00:01:01
什么是 CAP ?什么是最终一致性?什么是幂等操作?
设计 Tiny URL 系统

← 什么是 CAP ?什么是最终一致性?什么是幂等操作? 设计 Tiny URL 系统→

最近更新
01
电商-商品系统设计
12-17
02
关于如何写OKR
12-09
03
对事不对人 vs 对人不对事
12-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 YoungAnnn | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式