1、TCC简介

TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题;

TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现;

其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消;

如下图所示,业务实现TCC服务之后,该TCC服务将作为分布式事务的其中一个资源,参与到整个分布式事务中;事务管理器分2阶段协调TCC服务,在第一阶段调用所有TCC服务的Try方法,在第二阶段执行所有TCC服务的Confirm或者Cancel方法;

2、用户在实现TCC服务时,有以下注意事项

  • 1、业务操作分两阶段完成:

如下图所示,接入TCC前,业务操作只需要一步就能完成,但是在接入TCC之后,需要考虑如何将其分成2阶段完成,把资源的检查和预留放在一阶段的Try操作中进行,把真正的业务操作的执行放在二阶段的Confirm操作中进行;

TCC服务要保证第一阶段Try操作成功之后,二阶段Confirm操作一定能成功;

  • 2、允许空回滚;

如下图所示,事务协调器在调用TCC服务的一阶段Try操作时,可能会出现因为丢包而导致的网络超时,此时事务协调器会触发二阶段回滚,调用TCC服务的Cancel操作;

TCC服务在未收到Try请求的情况下收到Cancel请求,这种场景被称为空回滚;TCC服务在实现时应当允许空回滚的执行;

  • 3、防悬挂控制;

如下图所示,事务协调器在调用TCC服务的一阶段Try操作时,可能会出现因网络拥堵而导致的超时,此时事务协调器会触发二阶段回滚,调用TCC服务的Cancel操作;在此之后,拥堵在网络上的一阶段Try数据包被TCC服务收到,出现了二阶段Cancel请求比一阶段Try请求先执行的情况;

用户在实现TCC服务时,应当允许空回滚,但是要拒绝执行空回滚之后到来的一阶段Try请求;

  • 4、幂等控制:

无论是网络数据包重传,还是异常事务的补偿执行,都会导致TCC服务的Try、Confirm或者Cancel操作被重复执行;用户在实现TCC服务时,需要考虑幂等控制,即Try、Confirm、Cancel 执行一次和执行多次的业务结果是一样的;

  • 5、业务数据可见性控制;

TCC服务的一阶段Try操作会做资源的预留,在二阶段操作执行之前,如果其他事务需要读取被预留的资源数据,那么处于中间状态的业务数据该如何向用户展示,需要业务在实现时考虑清楚;通常的设计原则是“宁可不展示、少展示,也不多展示、错展示”;

  • 6、业务数据并发访问控制;

TCC服务的一阶段Try操作预留资源之后,在二阶段操作执行之前,预留的资源都不会被释放;如果此时其他分布式事务修改这些业务资源,会出现分布式事务的并发问题;

用户在实现TCC服务时,需要考虑业务数据的并发控制,尽量将逻辑锁粒度降到最低,以最大限度的提高分布式事务的并发性;

3、总结

蚂蚁金服使用TCC有10年历史,在TCC应用方面积累了大量实践经验;除了上述TCC服务的设计注意事项外,我们在解决用户高并发、高可用需求方面也提供了解决方案,我们对分布式事务做了极致的性能优化以支持双11等大促的高并发需求,我们基于蚂蚁LDC架构的高可用方案能使分布式事务服务达到99.99%的可用性;

蚂蚁金服大部分业务系统均采用TCC的方式接入分布式事务,但设计TCC服务时要遵循大量设计规范,这无疑对用户提了非常高的要求;为了简化用户接入分布式事务的门槛,蚂蚁金服的分布式事务框架(SOFA-DTX)推出了FMT(Framework-managed transactions)模式和XA模式,这两种模式均不需要用户实现TCC服务,用户只需要关注自身业务SQL便可;DTX的三种模式:TCC、FMT和XA相互之间是功能互补,相辅相成的,形成了蚂蚁金服完善的分布式事务解决方案。

SOFA-DTX全面覆盖金融场景,金融级容灾保障、提供丰富的接入模式并且使用简洁易于接入;目前已经应用在支付宝、网上银行、蚂蚁财富、芝麻信用、南京银行等项目中。

[转]分布式事务之TCC服务设计和实现注意事项相关推荐

  1. 分布式事务之TCC服务设计和实现注意事项!

    来源:云栖社区  |  作者:绍辉  |  原文地址见文末 常见的分布式解决方案有: 最大努力通知型事务 可靠消息一致性事务 TCC事务 一.TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用 ...

  2. 我说分布式事务之TCC

    来源:http://t.cn/E4miiwy 接触分布式相关的开发已经有一段时间了,自然绕不开分布式事务.从本文开始,我将带领大家了解常见的分布式事务的解决方案,深入原理,浅出实践,让我们在今后的开发 ...

  3. 分布式事务模型--TCC

    本文来说下分布式事务模式之TCC,接着上文XA Specification来说 文章目录 概述 TCC TCC 模型将事务的提交划分为两个阶段 举个例子 特点剖析 本文小结 概述 事务是一组不可分组的 ...

  4. 分布式事务:TCC两阶段异步补偿型

    点击上方"田守枝的技术博客",关注我 提示:可能有人在公众号上看过这篇文章,这是我2018年2月份在我的博客上写的文章,现在搬到公众号上来,搬上来之前已经被其他公众号抄袭了,懒的投 ...

  5. 分布式事务 - Seata - TCC模式

    目录 一.什么是TCC 二.AT & TCC区别 及 适用场景 三.代码集成示例 3.1 升级Seata 1.5.2 3.2 示例场景说明 3.3 TCC核心接口定义 3.4 TCC相关阶段规 ...

  6. java tcc事务 例子_分布式事务之TCC事务模型

    正文 我们先套一个业务场景进去,如下图所示 那页面点了支付按钮,调用支付服务,那我们后台要实现下面三个步骤 [1] 订单服务-修改订单状态 [2] 账户服务-扣减金钱 [3] 库存服务-扣减库存 达到 ...

  7. java分布式事务——seata,tcc解决方案总结!

    目录 1.分布式事务基础理论 1.1.CAP理论 1.2.BASE理论 2.分布式事务解决方案之2PC(两阶段提交) 2.2.1 XA方案 2.2.2 Seata方案 2.2.3分布式事务解决方案之T ...

  8. 分布式事务框架-TCC

    TCC事务框架应该具备故障恢复机制 一个TCC事务框架,若是没有故障恢复的保障,是不称其为分布式事务框架的. 分布式事务管理框架的职责,不是做出全局事务提交/回滚的指令,而是管理全局事务提交/回滚的过 ...

  9. android 开源Spanner,著名的分布式事务数据库谷歌Spanner设计有坑!

    CAP定理指出,在网络分区的情况下,不可能同时保证一致性和可用性.由于网络分区在可扩展的分布式系统中理论上是可行的,因此现代可扩展数据库系统的架构师分为两大阵营:优先考虑可用性的阵营(NoSQL阵营) ...

最新文章

  1. feign session 调用_springboot使用feign调用session传递失效解决方案
  2. ASP.NET MVC过滤器(一)
  3. python 绘制围棋棋盘_围棋之规则基础(一)
  4. 黑马公开课——运行原理与GC学习笔记
  5. blood vessel 图像分割_单图像九宫格形式发送朋友圈
  6. 相对寻址问题求解总结
  7. css float用法 有关div溢出
  8. 比特红:万物可直播、人人能带货
  9. 苹果手机android解锁,解锁教程:Android和iOS手机锁屏密码忘了怎么办?
  10. @Deprecated 的功能
  11. 阿里巴巴icon font导入CSS
  12. 什么是MBTI,16种人格类型详解
  13. vscode 设置setting文件
  14. 每天一个Lodash源码解析
  15. 基于最大熵Maxent-ArcGis地理分布预测教程
  16. 【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性、DOM增删改查
  17. java连接sftp工具类
  18. ACM程序设计书中题目--J(大写字母的更替)
  19. 《MVC》——ViewData、ViewBag、TempData、model
  20. Opencv每日函数 图像分割模块 watershed分水岭算法

热门文章

  1. SkyWalking8.1.0 部署和使用
  2. Orchard Core 1.0.0 正式发布!
  3. ASP.NET Core文件上传IFormFile于Request.Body的羁绊
  4. 我的2020年终总结:新的角色,新的开始
  5. 网络知识 | 《图解TCP/IP》读书笔记(上)
  6. 双城生活,一种相对无奈且幸福的选择
  7. 在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)
  8. 欢迎来到 C# 9.0(Welcome to C# 9.0)
  9. .NET Core + K8S + Loki 玩转日志聚合
  10. [GitHub] 75+的 C# 数据结构和算法实现