阿里4面:聊聊分布式事务的解决方案?

分布式事务四大模式实战:从2PC、TCC到Saga与最终一致性 分布式事务是微服务架构下保障跨服务业务一致性的核心机制,其本质是在网络不可靠、节点可能宕机的现实约束中,实现逻辑上的原子性与最终一致性。它并非单一技术,而是涵盖两阶段提交(2PC)、TCC、Saga和本地消息表+MQ等不同强度与权衡的工程方案。理解各模式的原理差异——如2PC依赖协调者强同步、TCC以代码幂等换无锁性能、Saga用可补偿链路应对长事务、最终一致性以时间换可靠性——是选型落地的前提。这些方案广泛应用于电商下单、库存扣减、支付对账等高并发、多系统协同场景,本文结合Seata、RocketMQ等主 阅读详情

大家好,我们今天分享分布式事务的另一种常见的解决方案:TCC

  • 什么是TCC?
  • TCC场景案例
  • TCC常见框架
  • 自研TCC框架设计思路

什么是TCC?

分布式事务中的几个角色

  • TM:事务管理器,可以理解为分布式事务的发起者
  • 分支事务:事务中的多个参与者,可以理解为一个个独立的事务。

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。

Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。

TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若执行失败,TM会进行重试。

正常流程

try阶段:依次调用参与者的try方法,都返回成功

confirm阶段:依次调用参与者的confirm方法,都返回成功

事务完成。

阿里4面:聊聊分布式事务的解决方案?

 

异常流程

try阶段:依次调用参与者的try方法,前面2个参与者try方法返回yes,而参与者3返回no

cancel阶段:对已经成功的参与者执行cancel操作,注意了:cancel阶段参与者调用的顺序和try阶段参与者的顺序相反,即先调用参与者2的cancel,然后调用参与者1的cancel。

阿里4面:聊聊分布式事务的解决方案?

 

TCC场景案例

案例1:跨库转账

举例,场景为 A 转账 100 元给 B,A和B账户在不同的服务。

账户A
try:
	try幂等校验
	检查余额是否够100元
	A账户扣减100元
confirm:
	空
cancel:
	cancel幂等校验
	A账户增加可用余额100元

账户B
try:
	空
confirm:
	confirm幂等校验
	B账户增加100元
cancel:
	空

案例2:提现到支付宝

举例,大家玩过抖音,有些朋友抖音上面有收益,可以将收益提现到支付宝,假如提现100到支付宝

抖音(账户表:余额、冻结金额)
try:
	try幂等校验
	检查余额是否够100元
	抖音账户表余额-100,冻结金额+100
confirm:
	confirm幂等校验
	抖音账户冻结金额-100
cancel:
	cancel幂等校验
	抖音账户表余额+100,冻结金额-100

账户B
try:
	空
confirm:
	confirm幂等校验
	调用支付宝打款接口,打款100元(对于商户同一笔订单支付宝接口是支持幂等的)
cancel:
	空

TCC常见框架

框架名称github地址star数量tcc-transactionhttps://github.com/changmingxie/tcc-transaction4750hmilyhttps://github.com/Dromara/hmily2900ByteTCChttps://github.com/liuyangming/ByteTCC2450EasyTransactionhttps://github.com/QNJR-GROUP/EasyTransaction2100

自研TCC框架设计思路

涉及到的角色

事务发起者(TM)

  • 发起分布式事务:调用tcc服务注册一个分布式事务订单
  • 调用分支:依次调用每个分支
  • 上报结果:最终将事务所有分支的执行结果汇报给TCC服务
  • 提供补偿接口:给TCC服务使用,tcc服务会调用这个补偿接口对进行补偿操作

事务参与者

  • 提供3个方法:try、confirm、cancel
  • 确保3个方法的幂等性
  • 3个方法返回的结果状态码只有3种(成功、失败、处理中),处理中相当于状态未知,对于状态未知的,会在补偿的过程中进行重试

TCC服务

  • 是一个独立的服务
  • 提供分布式事务订单注册接口:给事务发起者使用【事务发起者调用tcc服务生成一个分布式事务订单(订单状态:0:处理中,1:处理成功,2:处理失败),获取一个分布式订单id:TID】
  • 提供分布式事务结果上报接口:给事务发起者使用【事务发起者在事务的执行过程中将事务的执行结果汇报给TCC服务】
  • 提供事务补偿操作:启动一个job轮询tcc订单中状态为1的订单,继续调用事务发起者进行补偿,最终经过多次补偿,这个订单最终的状态应该为1(成功)或者2(失败);否则人工介入进行处理

时序图

阿里4面:聊聊分布式事务的解决方案?

 

tcc框架技术要点

1、框架应该考虑的地方

开发者应该只用关注分支中3个方法的代码,其他的应该全部交由框架去完成。

2、tcc服务中的事务订单表设计

  • id:订单id
  • bus_order_id:业务方订单id
  • bus_order_type:业务类型 (bus_order_id & bus_order_type 需唯一)
  • request_data:业务请求数据,json格式存储,包含了玩转的业务方请求数据
  • status:状态,0:处理中,100:处理成功,200:处理失败,初始状态为0,最终必须为100或者200

3、关于分支中3个方法幂等的设计

以java中的spring为例,可以通过拦截器来实现,拦截器对分支的3个方法进行拦截,拦截器中实现幂等性的操作。

可以用一张表来实现【分支方法执行记录表:tid、分支、方法(try、confirm、cancel)、状态(0:处理中;100:成功;200:失败)、request_json(请求参数)、response_json(响应参数)】

关于请求参数:这个用来记录整个方法请求的完整参数,内部包含了业务参数,可以采用json格式存储。

响应参数:分支方法的执行结果,以json格式存储。

拦截器中,通过分支 & 方法 这2个条件去查询分支方法执行记录表,如果查询的记录状态为100或者200,那么直接将response_json返回。

4、try阶段同步、其他阶段异步

如果try阶段全部成功,那么confirm阶段最终应该一定是成功的,try阶段如果有失败的,那么需要执行cancel,最终所有的cancel应该也是一定可以成功的;所以try阶段完成之后,其实已经知道最终的结果了,所以try阶段完成之后,后面的confirm或者cancel可以采用异步的方式去执行;提升系统整体的性能。

5、异步上报事务执行结果

发起方将所有分支每个步骤的执行结果及最终事务的执行结果上报给tcc服务,由tcc服务落库,方便运营人员查看事务执行结果以及排错。

6、关于补偿

tcc服务中添加一个补偿job,定时轮询tcc分布式订单表,将状态为处理中的记录撸出来,订单表request_data包含了请求参数,使用request_data去调用事务发起者提供的补偿接口进行补偿操作,直到订单的状态为最终状态(成功或者失败)。

补偿采用衰减的形式,对应同一笔订单采用时间间隔衰减的方式补偿,每次间隔时间:10s、20s、40s、80s、160s、320s。。。

7、人工干预

tcc分布式订单如果长期处于处理中,经过了很多次的补偿,也未能到达最终状态,此时可能业务有问题,需要人工进行补偿,对于这对订单记录需要有监控系统进行报警,提醒开发者进行干预处理。

小结

如果拿TCC事务的处理流程与2PC两阶段提交做比较,2PC通常都是在跨库的DB层面,而TCC则在应用层面的处理,是2PC在应用层面的一种实现,需要通过业务逻辑来实现。这种分布式事务的实现方式的优势在于,可以让应用自己定义数据操作的粒度,使得降低锁冲突、提高吞吐量成为可能。而不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作,代码量比较大。

IEEE投稿完整流程——以IEEE Transactions on Cybernetics为例【附:论文格式模板】 前言 以下是官方的流程,包括了论文的格式和提交的流程,重要!重要!重要! 在IEEE的官网中,也有论文提交的文件 可以直接参考: 中文版: 作者指南 英文版: Manuscripts-Author-Guide 作者指南的版本指导流程可能和最新版的官网不一致!!! 或者在下面的链接中,按照你的论文类型,选择不同的论文模板: IEEE article template 以下以IEEE Transactions on Cybernetics 为例子 IEEE Transactions on Cyberne 阅读详情

相关推荐

Windows 10/11 零基础配置 SillyTavern 连接 Claude API 完整指南(含 Node.js 环境搭建)

本文提供Windows 10/11系统下零基础配置SillyTavern连接Claude API的完整教程,涵盖Node.js环境搭建、SillyTavern初始化及API连接配置等关键步骤。通过详细的操作指南和实用技巧,帮助用户快速搭建AI聊天界面并优化对话体验,实现与Claude AI的高效交互。

weixin_30642561的博客 134

seata分支事务表创建

seata分支事务数据库配置

qq_24844157的博客 358

copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统

下面给出一个完整示例代码,结合 DeepSeek‑R1 的技术方法,实现一个端到端的 VLA(视觉+语言行动)自动驾驶深度强化学习系统。.2f。

ywfwyht的博客 774

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

什么是TCC TCC是try、confirm、cancel三个单词的缩写。 try:预留和锁定业务需要的资源。 conirm:业务确认,当所有的分支事务都成功时执行。 cancel:撤销。如果有一个分支事务执行失败,执行。把预留阶段的资源撤销,相当于事务回滚 执行流程图如下: 执行流程说明: 全局事务发起者向申请开启一个全局事务,并生成一个代表该全局事务的全局事务ID。该全局事务ID会在整个分布式调用链中传递,用于记录事务上下文,追踪和记录状态。 全局事务发起者调用其他服务的try方法,预留资源 各

weixin_44335140的博客 1178

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

STM32 ADC精准采集12V电池电压:从分压电路到软件校准全解析

本文详细解析了STM32 ADC精准采集12V电池电压的全过程,涵盖分压电路设计、电阻选型、ADC配置优化及软件校准方法。针对电池电压监测中的噪声、温漂等挑战,提供了硬件滤波与软件过采样等实战技巧,确保测量精度达到1%以内,满足嵌入式设备对电源管理的严苛要求。

tech5的博客 1014

TCC详解及存在哪些问题

是除可靠消息队列以外的另一种常见的分布式事务机制,它是由数据库专家帕特 · 赫兰德()在2007年撰写的论文《Life beyond Distributed Transactions: An Apostate’s Opinion》中提出的。正式以作为名称的是Atomikos公司,其注册了TCC商标。上次我们分享的使用RocketMQ实现分布式事务,虽然它也能保证最终的结果是相对可靠的,过程也足够简单(相对于TCC来说),但可靠消息队列的整个实现过程完全没有任何隔离性可言。

2301_76166241的博客 4047

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1716

什么是 TCC,和 2PC 有什么区别?

TCC 是 Try-Confirm-Cancel 的缩写,它是一种分布式事务解决方案,采用了基于业务逻辑的补偿机制,将整个分布式事务分解为若干个子事务,每个子事务都有一个 try、confirm 和 cancel 三个操作,通过这些操作来实现分布式事务的执行和回滚。

weixin_43281498的博客 4万+

芯片良率提升:从设计到制造的系统性工程实践

在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率

weixin_42526068的博客 633

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

事务失败返回_阿里4面:聊聊分布式事务的解决方案?

大家好,我们今天分享分布式事务的另一种常见的解决方案:TCC什么是TCC?TCC场景案例TCC常见框架自研TCC框架设计思路什么是TCC?分布式事务中的几个角色TM:事务管理器,可以理解为分布式事务的发起者分支事务:事务中的多个参与者,可以理解为一个个独立的事务。TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销C...

weixin_27729671的博客 206

连接参数详解:Connection Interval, Slave Latency, Supervision Timeout 的协同与调优实战

在低功耗蓝牙(BLE)开发与调试中,Connection Interval(连接间隔)、Slave Latency(从机延迟) 和 Supervision Timeout(监督超时) 是三个核心参数。它们不仅直接影响设备的通信性能、功耗表现和连接稳定性,更是各类技术面试与认证考试的高频考点。本文将从基础概念出发,深入剖析三者的协同机制,结合历年真题解析考点与解题思路,并通过实战案例演示调优方法,快速掌握这一核心知识点。

byte轻骑兵的技术小窝 2761

无法启动分布式事务的解决方法_阿里4面:聊聊分布式事务的解决方案???...

公众号关注“架构师学习营”设为 “星标”,带你学习更多架构师知识!大家好,这里是架构师学习营。本文继续分享分布式事务的另一种常见的解决方案:TCC什么是TCC?TCC场景案例TCC常见框架自研TCC框架设计思路什么是TCC?分布式事务中的几个角色TM:事务管理器,可以理解为分布式事务的发起者分支事务:事务中的多个参与者,可以理解为一个个独立的事务。TCC是Try、Confirm、Can...

weixin_39968861的博客 138

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

聊聊分布式事务,说说解决方案

本文探讨了分布式事务在微服务架构中的重要性及解决方案。首先介绍了数据库事务的ACID特性,并延伸到分布式系统面临的CAP定理和BASE理论。随后详细分析了五种分布式事务处理方案:两阶段提交(2PC)牺牲可用性保证一致性;补偿事务(TCC)通过Try-Confirm-Cancel机制实现;本地消息表采用最终一致性;MQ事务消息依赖消息队列;Sagas模型将长事务拆分为短事务。最后介绍了.NET领域的开源解决方案CAP项目,填补了该领域工具空白。文章指出应根据业务场景选择合适方案,在一致性和可用性之间取得平衡。

ywl470812087的博客 10万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

分布式事务的4种模式

相信很多小伙伴在阅读分布式事务相关文章时,都有碰到过,上来就是分析各种解决方案(全局事务、基于可靠消息、最大努力通知、TCC),又掺杂着两阶段提交协议2PC/TCC(提个小问题2PC和TCC的关系?)看似内容丰满,但看完之后没有条理,记不住这么多。今天从分布式事务4种模式的角度,来聊聊分布式事务理论的发展及其模式的迭代。(再往上层走,才是具体实现,具体实现都是必然的事) 常见分布式事务解...

ljheee的博客 7950

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

简单聊聊分布式事务

本文的主要内容分为四个方面:事务概念、分布式事务问题、解决方案概览、开源方案Seata及AT模式。一、事务概念回顾事务定义:事务是并发控制的单位,业务定义的一个操作序列,这些操作要么都执行...

公众号:Java后端 302

java 2面_Java阿里巴巴面试题分享,一面、二面、三面面经总结

很多人都想要了解Java阿里巴巴面试题,下面就特地给大家分享一下,一起来看看阿里巴巴面试题的一面、二面、三面都会有哪些面试题吧!一、一面(视频面)1、首先做自我介绍2、redis为什么那么快?首先,采用了多路复用io阻塞机制,然后,数据结构简单,操作节省时间最后,运行在内存中,自然速度快。3、hashmap,ConcurrentHashMap,HashTable的数据结构4、你对hash函数的了解...

weixin_30139213的博客 1221

拒绝内卷,腾讯3面+阿里6面一次过,谈谈我的大厂面经

写在开头的闲言碎语 2020年过去了,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,在新的2021年里,也有个一个非常好的开端,我收获了心仪的offer。 简单来说,就如标题一样,我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,腾讯3面+阿里6面,就这么一次性过了,下面就细细聊聊我的大厂面经吧,希望能够给备战金九银十要面试的朋友提供一些经验。 PART1:腾讯3轮面试

javassb的博客 269

开源分布式事务解决方案-Seata,1.0.0版发布了

在经历了25个release之后,Seata于2019年底冬至日前一天21日发布了v1.0.0版本,大家普遍的印象是1.0.0版本的面世,意味着比较稳定,其实Seata在0.4.2版本之...

东南草堂 1101

seata 集群_【视频】 聊聊分布式事务解决方案seata

什么seataSeata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的角色,帮助经济体平稳的度过历年的双11,对各BU业务进行了有力的支撑。经过多年沉淀与积累,商业化产品先后在阿里云、金融云进行售卖。分布式事务出现的场景seata AT 解决方案...

weixin_39737317的博客 229

阿里架构面试官:聊聊分布式事务及系统架构,答出两种就算过

介绍分布式事务之前,先介绍什么是事务。简单的来说就是,一个大的操作由两个或者更多的小的操作共同完成。而这些小的操作又分布在不同的网络主机上。这些操作,要么全部成功执行,要么全部不执行。事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。拿转账的例子来说下什么是分布式事务。

m0_73849256的博客 319

事务回滚什么意思 try_分布式事务的4种模式

相信很多小伙伴在阅读分布式事务相关文章时,都有碰到过,上来就是分析各种解决方案(全局事务、基于可靠消息、最大努力通知、TCC),又掺杂着两阶段提交协议2PC/TCC(提个小问题2PC和TCC的关系?)看似内容丰满,但看完之后没有条理,记不住这么多。今天从分布式事务4种模式的角度,来聊聊分布式事务理论的发展及其模式的迭代。(再往上层走,才是具体实现,具体实现都是必然的事)常见分布式事务解决方案1、...

weixin_39593354的博客 321

简单聊聊世界难题-分布式事务

分布式事务可以说是在分布式架构系统中,比较棘手的问题了.如果根据业务场景制定相应的事务,如利用消息的事务最终一致性解决方案,XA等2PC强一致方案等等.今天就列举一下相关解决方案; 1.根据同步结果保证事务 注:该种方式适用于单一的调用其他服务,利用业务执行顺序,根据同步结果保证事务 1 2 3 4 5 6 7 8 @Transactional @PostMapping public R test() { mapper.delete(); //将

myth_g的博客 387

想去阿里?就不要错过这些Java面试题

前言 相信很多小伙伴都想去大厂工作,今天小编给大家分享下阿里Java面试题和面试流程,希望能够帮助到各位小伙伴。 面试流程 先说下面试流程,一般大公司都有3-4轮技术面,1轮的HR面。 前面几轮技术面主要问的是一些基础、项目实现和拓展,最后一轮技术面是部门老大面,主要就问一些架构、技术和业务的理解,因为这个时候他看的就是你的潜力,就是看你有没有培养的价值。 HR面主要就是跟你聊聊天,很多人在HR面后挂了,一般不是因为你不表现不好,可能是你之前几面的表现一般,公司基于hc、人才配比、与其他候选人的对比等多个

weixin_47955802的博客 1280
上一篇: MyBatis整体架构分析:基础支持层、核心处理层和接口层
下一篇: 一键生成数据库文档,堪称数据库界的Swagger,有点厉害
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值