来源:云栖社区  |  作者:绍辉  |  原文地址见文末

常见的分布式解决方案有:

  • 最大努力通知型事务
  • 可靠消息一致性事务
  • TCC事务

一、TCC简介

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

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

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

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

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

三、总结

蚂蚁金服使用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 实现框架的压力测试:https://blog.csdn.net/yongyou890410/article/details/82719062

原文地址:https://yq.aliyun.com/articles/609854

tcc-transaction代码示例:https://www.cnblogs.com/sessionbest/p/9396663.html

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

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

    1.TCC简介 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题: TCC是服务化的两阶段编程模型,其Try.Confirm.Cancel 3个方法均由业务编码实现: 其中 ...

  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. 网络通信基础知识普及篇
  2. NSOperation下载网络图片(四)
  3. php管理员登录文件,使用PHP文件重置管理员密码(Drupal 8)
  4. jenkis编译报错:需要class,interface或enum
  5. Redis的搭建和Redis的集群搭建
  6. Media Query在SAP Spartacus里的用途
  7. Linux(ubuntu)——FTP服务器
  8. labview曲线上两点画延长线_零失手的‘万能眼线公式’,关键鼻翼延长线、画出适合自己的眼线...
  9. Windows域控设置 AD域策略屏蔽端口 禁用端口【全域策略生效】
  10. 设置gradle远程仓库_有幸得到Alibaba内部Gradle实战笔记,趁双节来狂补
  11. linux —— ubuntu 初次安装问题
  12. M-LSD 面向轻量化实时线段检测
  13. autojs识别二维码
  14. CNC加工中心的刀具补偿详解
  15. 频宽、带宽和频带关系
  16. layui layer诡异bug记录
  17. Windows Moblie上的网络连接
  18. VTS 固态雷达 OCEANGARD
  19. 渲染函数render
  20. Word中跨页表格都显示表头

热门文章

  1. 2021级C语言大作业 - 霓虹深渊
  2. 2019级C语言大作业 - 十步万度
  3. 从入门到入土:Python爬虫学习|Selenium自动化模块学习|简单入门|轻松上手|自动操作浏览器进行处理|chrome|PART01
  4. ubuntu英伟达显卡驱动安装记录2
  5. React 的开发成本太高了?
  6. 一个关于 TensorFlow 的悲剧故事
  7. Compose Multiplatform 正式官宣,与 Flutter 必有一战?
  8. 名校大厂 AI 高手云集,芒果 TV 音视频算法大赛硕果累累
  9. 从内存布局上看,Rust的胖指针到底胖在栈上还是堆上?
  10. 微软高层人士变动!张祺晋升为微软公司全球资深副总裁