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 分布式事务解决方案 tcc-tansaction

tcc-transaction有两个拦截器:

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

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

事务恢复机制:

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

这里注意操作的幂等性:

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