TCC 分布式事务解决方案 tcc-tansaction

TCC模式:由阿里技术人员提出

将一个任务拆分三个操作 Try,Confirm,Cancel

如果有一个Func()方法,则在Tcc模式中就变成了三个方法:

tryFunc

confirmFunc

cancelFunc

Tcc模式大致实现思路:

  1. 主业务会向事务管理器注册并启动服务,事务管理器是一个概念上全局事务管理机制,它会生成全局的事务ID用于记录整个事务链路
  2. 主业务服务调用全部从业务的Try操作时,事务管理器利用本地事务记录相关事务日志,设置状态为预提交
  3. 调用从业务的try操作就是核心代码,将try操作和confirm,cancel操作绑定:借助配置文件,或者spring注解
  4. 当所有try操作成功,事务管理器通过Tcc事务上下文切面执行Confirm操作,将状态设置为成功,否则执行Cancel,设置状态为预提交,进行重试,因此Tcc通过补偿方式保证事务的一致性

tcc-transaction 实现原理:

通过@Compensable进行切面拦截,从而实现Tcc模式

tcc-transaction有两个拦截器:

  1. 可补偿事务拦截器
  2. 资源协调者拦截器

事务恢复机制:

tcc-tansaction框架基于Quartz实现调度,按照一定频率对事务进行重试,如果单个事务超过最大重试次数,则不再重试,需要手工介入解决

这里注意操作的幂等性:

  1. 创建数据库唯一索引,防止数据重复插入,如果遇到分库,可以先查询一次数据库,再执行插入操作
  2. 避免并发操作可以通过锁机制,如:悲观锁,乐观锁。可以使用分布式锁,它是一种悲观锁的实现
  3. 也可以引入状态机制

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值