@transaction 提交事务_分布式事务 TCC-Transaction 源码分析——TCC 实现

f17d85563269e0e60a5ac8f31182a100.png

1. 概述

本文分享 TCC 实现。主要涉及如下三个 Maven 项目:

  • tcc-transaction-core :tcc-transaction 底层实现。
  • tcc-transaction-api :tcc-transaction 使用 API。
  • tcc-transaction-spring :tcc-transaction Spring 支持。
你行好事会因为得到赞赏而愉悦同理,开源项目贡献者会因为 Star 而更加有动力为 TCC-Transaction 点赞!传送门

OK,开始我们的第一段 TCC 旅程吧。

ps:笔者假设你已经阅读过《tcc-transaction 官方文档 —— 使用指南1.2.x》。

ps2:未特殊说明的情况下,本文事务指的是 TCC事务

2. TCC 原理

TCC事务为了解决在事务运行过程中大颗粒度资源锁定的问题,业界提出一种新的事务模型,它是基于 业务层面的事务定义。锁粒度完全由业务自己控制。它本质是一种补偿的思路。它把事务运行过程分成 Try、Confirm / Cancel 两个阶段。在每个阶段的逻辑由 业务代码控制。这样就事务的锁粒度可以完全自由控制。业务可以在牺牲隔离性的情况下,获取更高的性能。
  • Try 阶段
  • 完成所有业务检查( 一致性 )
  • 预留必须业务资源( 准隔离性 )
  • Try :尝试执行业务
  • Confirm / Cancel 阶段:
  • 释放 Try 阶段预留的业务资源
  • Cancel 操作满足幂等性
  • 真正执行业务
  • 不做任务业务检查
  • Confirm 操作满足幂等性
  • Confirm :确认执行业务
  • Cancel :取消执行业务
  • Confirm 与 Cancel 互斥

整体流程如下图:

c2d9fe4054a8ddd8d666d1265662fbab.png
  • 红框部分功能由 tcc-transaction-core 实现:
  • 启动业务活动
  • 登记业务操作
  • 提交 / 回滚业务活动
  • 黄框部分功能由 tcc-transaction-http-sample 实现( 官方提供的示例项目 ):
  • Try 操作
  • Confirm 操作
  • Cancel 操作

与 2PC协议 比较

  • 位于业务服务层而非自愿层
  • 没有单独的准备( Prepare )阶段,Try 操作兼备自愿操作与准备能力
  • Try 操作可以灵活选择业务资源的锁定粒度
  • 较高开发成本

参考资料:

  • 《支付宝运营架构中柔性事务指的是什么?》
  • 《分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型》

3. TCC-Transaction 原理

在 TCC 里,一个业务活动可以有多个事务,每个业务操作归属于不同的事务,即一个事务可以包含多个业务操作。TCC-Transaction 将每个业务操作抽象成事务参与者,每个事务可以包含多个参与者

参与者需要声明 try / confirm / cancel 三个类型的方法,和 TCC 的操作一一对应。在程序里,通过 @Compensable 注解标记在 try 方法上,并填写对应的 confirm / cancel 方法,示例代码如下:

// try

@Compensable(confirmMethod = "confirmRecord

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值