Java基础之《分布式事务(3)—TCC分布式事务》

一、什么是TCC分布式事务

1、定义
TCC是try confirm cancel的单词首字母缩写,是一个类似2阶段提交的柔性分布式事务解决方案。

2、来源
国内最早关于TCC报道,是2008年InfoQ上对阿里程立博士的一篇采访,经过程立博士的这一次传道之后,TCC在国内逐渐被大家广为了解并接受。

二、TCC的三大核心方法
Java基础之《分布式事务(3)—TCC分布式事务》_第1张图片

1、try
用来尝试业务的执行,就是在提交事务之前做数据的校验。

2、confirm
确认执行业务,例如下订单成功,就是在这里操作的。

3、cancel
取消执行业务,例如回滚订单。

三、TCC分布式事务应用场景,商城购物下订单

1、第一阶段:冻结

2、第二阶段:确认或取消库存

3、数据库里面必须有一张库存表
product_id:商品ID
total_inventory:库存数据量
lock_inventory:冻结数量

4、库存TCC操作原理
4-1、try
1)完成所有业务的检查(数据一致性检查)
----下订单的时候检查库存是否充足
2)预留必须的业务资源(隔离性)
----冻结库存sql = total_inventory - 1,locak_inventory + 1

4-2、confirm
1)不做任何业务检查,因为在try阶段已经做了检查
2)只使用try阶段预留的资源,try阶段已经有冻结库存,故confirm只操作冻结库存即可
3)真正执行业务,下单操作解冻库存sql = locak_inventory - 1

4-3、cancel
如果下单取消业务执行
1)释放try阶段预留的资源,释放库存sql = total_inventory + 1,locak_inventory - 1

四、分布式TCC开源框架

1、常见TCC开源框架
(1)seata
地址:https://github.com/seata/seata
说明:seata是2019年1月开源,它是基于阿里云的全局事务服务GTS,https://www.aliyun.com/aliware/txc的开源版本

(2)tcc-transaction
地址:https://github.com/changmingxie/tcc-transaction
说明:tcc-transaction不和底层使用的rpc框架耦合,也就是使用dubbo、thrift、web service、http等都可

(3)tx-lcn
地址:https://github.com/codingapi/tx-lcn
说明:LCN框架在2017年6月发布第一个版本,从开始1.0,已经发展到了5.0版本。支持dubbo、springcloud等常见框架

(4)hmily
地址:https://github.com/yu199195/hmily
说明:由碧桂园工程师开发,异步高性能分布式事务tcc开源框架。支持dubbo、springcloud、motan等rpc框架进行分布式事务

(5)byteTCC
地址:https://github.com/liuyangming/ByteTCC
说明:由北京新奥集团工程师开发,是一个兼容JTA规范的基于TCC机制的分布式事务管理器

(6)easyTransaction
地址:https://github.com/QNJR-GROUP/EasyTransaction
说明:柔性事务,分布式事务,TCC,SAGA,可靠消息,最大努力交付消息,事务消息,补偿,全局事务,自动补偿。可一站式解决以上分布式事务问题

dubbo时代tcc-transaction用的比较多,springcloud时代hmily用的比较多

你可能感兴趣的:(JAVA基础,java)