业务层只需把关注点放到资源预留的try方法,业务补偿的confirm/cancel方法的实现上。try成功或者失败后,由tcc框架进行补偿方法(confirm/cancel)调用,减少业务层重复编码和人工介入的重复劳动。
- 事务与分布式事务
- TCC框架源码解析
- TCC框架使用指南--springcloud版本
- TCC框架使用指南--dubbo版本
-
支持跨服务的嵌套事务(Nested transaction support)
-
支持本地服务内部,多事务资源管理
-
支持跨服务,多个服务参与者的事务
-
基于springboot的自动配置能力,使用简单。
-
采用面向切面编程**,对业务代码侵入性很低。
-
目前支持springcloud,以后会加入对dubbo的支持。
-
本地事务持久化 : mysql。
-
支持事务参与者列表序列化 :hessian,kryo。
-
内置经典的分布式事务场景demo工程,并有swagger-ui可视化界面。
-
内置本地事务状态机,实现confirm和cancel操作不会被多次执行,放宽了幂等性要求。
-
代码易于理解,使用简单和自定义扩展
TCC事务
为了解决在事务运行过程中大颗粒度资源锁定的问题,业界提出一种新的事务模型,它是基于业务层面的事务定义。锁粒度完全由业务自己控制。它本质是一种补偿的思路。它把事务运行过程分成 Try、Confirm / Cancel 两个阶段。在每个阶段的逻辑由业务代码控制。这样就事务的锁粒度可以完全自由控制。业务可以在牺牲隔离性的情况下,获取更高的性能。
-
Try 阶段:尝试执行业务
- 完成所有业务检查( 一致性 )
- 预留必须业务资源( 准隔离性 )
-
Confirm 阶段:确认执行业务
- 真正执行业务,不做任务业务检查
-
Cancel阶段 :取消执行业务
- 释放 Try 阶段预留的业务资源
Confirm 与 Cancel 互斥
java8
mysql
docker
编译代码
mvn package
-
1.在Mysql客户端先执行script/tcc.sql,创建TCC数据库;
-
2.启动服务注册中心:
java -jar tcc-demo-springcloud-eureka-0.0.1-SNAPSHOT.jar
-
3.启动业务服务:
-
库存服务:
tcc-demo-springcloud-inventory
-
账户服务:
tcc-demo-springcloud-account
-
订单服务:
tcc-demo-springcloud-order
-
1.使用docker-componse对demo工程进行服务编排,方便使用
2.在事务状态变更,持久化等操作中,使用事件驱动的方式优化性能
3.进行benchmark测试
4.添加dubbo框架的支持