分布式事务处理模型:一致性 TCC VS 2PC

如何构造强一致性系统?理解数据一致性里的2PC和TCC模式原理,以及如何做(有图) 通过这篇文章可以了解到2PC和TCC模式的原理和区别,以及如何自制一个数据一致性框架的指导。 阅读详情

TCC(Try-Confirm/Cancel)和2PC(Two-Phase Commit,两阶段提交)是两种常用的分布式事务处理模型,它们在解决分布式系统中的事务一致性问题上各有特点。以下是对两者的详细比较:

一、基本概念

  • TCC:TCC是一种分布式事务处理模型,通过Try、Confirm、Cancel三个阶段来处理事务。Try阶段进行业务检查和资源预留,Confirm阶段执行业务并使用预留资源,Cancel阶段则用于在事务失败或需要回滚时释放预留资源。TCC是一种乐观并发控制协议,它试图在事务开始时乐观地认为事务能够成功完成,并在最后阶段进行确认或取消。
  • 2PC:2PC是一种在分布式系统中保证分布式事务原子性的协议。它通过将事务的提交过程分为准备阶段和提交阶段(或回滚阶段)来确保所有参与者要么都提交事务,要么都回滚事务。2PC是一种悲观并发控制协议,它在事务开始前就考虑到事务可能失败的情况,并为此做了相应的准备。

二、主要特点

特点TCC2PC
并发控制乐观并发控制悲观并发控制
阶段划分Try、Confirm、Cancel准备阶段、提交/回滚阶段
资源预留Try阶段进行资源预留无显式资源预留阶段,但在准备阶段记录undo/redo信息
提交条件Confirm阶段所有参与者均成功,则提交事务;否则,进入Cancel阶段所有参与者均准备成功,则提交事务;否则,回滚事务
性能影响由于Try阶段进行了资源预留,可能在Confirm阶段发现资源冲突,导致事务失败。但整体上,TCC的性能通常优于2PC,因为它减少了不必要的等待和锁竞争。准备阶段需要等待所有参与者答复,可能导致较长的等待时间。提交或回滚阶段也需要协调者发送指令给所有参与者,增加了网络开销。
复杂度对业务逻辑要求较高,需要拆分成Try、Confirm、Cancel三个阶段。同时,需要处理悬挂(Cancel先于Try执行)和空回滚(在没有Try的情况下执行Cancel)等异常情况。复杂度相对较低,主要关注于准备和提交/回滚两个阶段的协调。但也需要处理网络故障、参与者故障等异常情况。

三、适用场景

  • TCC:适用于对性能要求较高、可以容忍一定失败率的场景。例如,在电商平台的订单处理中,TCC可以确保在订单生成过程中快速响应,同时在后续阶段进行确认或取消操作。
  • 2PC:适用于对事务一致性要求极高、不允许出现数据不一致情况的场景。例如,在金融系统的转账操作中,2PC可以确保转账事务在所有参与者节点上要么都提交成功,要么都回滚失败,从而避免资金损失或数据不一致的问题。

四、总结

TCC和2PC各有优缺点,适用于不同的分布式事务处理场景。在选择时,需要根据实际业务需求、系统性能要求以及事务一致性要求等因素进行综合考虑。同时,也可以考虑将两者结合使用,以更好地满足复杂的分布式事务处理需求。

分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ 最早的分布式事务应用架构很简单,不涉及服务间的访问调用,仅仅是服务内操作涉及到对多个数据库资源的访问。当一个服务操作访问不同的数据库资源,又希望对它们的访问具有事务特性时,就需要采用分布式事务来协调所有的事务参与者。对于上面介绍的分布式事务应用架构,尽管一个服务操作会访问多个数据库资源,但是毕竟整个事务还是控制在单一服务的内部。如果一个服务操作需要调用另外一个服务,这时的事务就需要跨越多个服务了。四种模式,https1.4.01.2.0Seata是什么?一阶段,这些就不再赘述了。总之,... 阅读详情

相关推荐

一笔订单的一致性远征:两阶段提交的困局、CAP与BASE的取舍与六种柔性事务模式的工程选型

微服务拆分后,单体里一个本地事务就能保证的原子性被服务边界切断,跨服务丢失、幽灵、重复与悬挂随之出现。本文跟随一笔订单,先剖析XA与两阶段、三阶段提交,用离散事件仿真对比二者在协调者宕机与网络分区下的锁持有和数据分叉;再借CAP、PACELC、一致性模型光谱与BASE思想划定理论边界;随后逐一拆解可靠事件、补偿、Saga、TCC、最大努力通知与人工干预六种柔性事务模式的思路、关键点、实现策略与实测数据;最后给出横向对比、选型决策路径与下单链路组合方案,说明最终一致需要幂等、可观测与对账兜底。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 170万+

09|分布式事务:多服务的2PC、TCC都是怎么实现的?

通常来讲,实现分布式事务要耗费我们大量的精力和时间,硬件上的投入也不少,但当业务真的需要分布式事务时,XA协议可以给我们提供强大的数据层支撑。分布式事务的实现方式有多种,常见的有2PC、3PC、TCC等。其中,2PC可以实现多个子事务统一提交回滚,但因为要保证数据的一致性,所以它的并发性能不好。而且2PC没有超时的机制,经常会将很多XA子事务遗漏在数据库中。3PC虽然有超时的机制,但是因为交互过多,事务经常会出现超时的情况,导致事务的性能很差。

sucaiwa的博客 653

Java分布式编程(2)—— 分布式事务的八种方案解析

出现原因: 在 RPC 调用分支事务try时,先注册分支事务,再执行RPC调用,如果此时 RPC 调用的网络发生拥堵,通常 RPC 调用是有超时时间的,RPC 超时以后,TM就会通知RM回滚该分布式事务,可能回滚完成后,RPC 请求才到达参与者真正执行,而一个 Try 方法预留的业务资源,只有该分布式事务才能使用,该分布式事务第一阶段预留的业务资源就再也没有人能够处理了,对于这种情况,我们就称为悬挂,即业务资源预留后没法继续处理。思路很简单就是需要知道一阶段是否执行,如果执行了,那就是正常回滚;

shangjg3的博客 697

分布式事务2PC和TCC有啥不同

一、 什么是2PC 2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。 举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和...

9996

【Godot】实现对话系统

在 Godot 中实现对话系统(Dialogue System)是游戏开发中的常见需求。Godot本身自带的的灵活性和轻量级脚本语言 GDScript 使得实现对话系统变得相对简单。以下是实现一个基础对话系统的示例。(语言为GDScript但高亮选择Python因为类似)通过 Godot 和 GDScript,我们可以给我们的游戏实现一个对话系统。从简单的文本显示到复杂的分支对话,Godot 提供了足够的灵活性来满足我们的需求。如果需要更高级的功能,可以尝试使用现成的插件如 Dialogic。

Octopus2077的博客 2525

【2021工业图像异常检测文献】DRÆM: 基于判别性训练的重建嵌入表面异常检测方法

DRÆM – A discriminatively trained reconstruction embedding for surface anomaly detection

qq_1532145264的博客 1478

分布式协同 - 分布式事务_TCC解决方案

TCC(Try-Confirm-Cancel)的核心思想是对于每个资源的原子操作,应用程序都需要注册一个与此操作对应的确认操作和补偿(撤销)操作。随着大流量、高并发业务场景的出现,对系统可用性的要求变得越来越高,这时 CAP 理论和 BASE 理论逐渐进入人们的视野,柔性事务成为分布式事务的主要实现方式,TCC 作为补偿事务也位列其中.:协调者(通常是事务管理器)向所有参与者发送“准备提交”请求,要求参与者执行事务操作并保留结果,但不提交数据,参与者需要返回“准备好”或“无法提交”的响应。

小工匠 4619

工业数据采集实战:用open62541库读写PLC的OPC UA节点(避坑指南)

本文详细介绍了如何使用open62541库实现工业PLC的OPC UA节点数据采集,涵盖环境搭建、节点读写优化及生产环境故障排查。通过订阅模式和多节点读写技术,显著提升数据采集效率与稳定性,适用于智能制造和工业物联网场景。

weixin_30598225的博客 400

分布式事务:XA(2PC、3PC)和TCC

一、XA协议     XA是X/Open组织 提出的分布式事务处理规范。XA则规范了TM(事务管理器)与RM(资源管理器)之间的通信接口,在TM与多个RM之间形成一个双向通信桥梁,从而在多个数据库资源下保证ACID四个特性。目前知名的数据库,如Oracle, DB2,mysql等,都是实现了XA接口的,都可以作为RM。所以说XA是数据库的分布式事务,强一致性,在整个分布式事务过程中,TM一直把持折数据库的锁,存在长事务风险!XA协议有2PC、3PC。  1、2PC 阶

Java部落格 2031

从外包到转正:一个华为OD亲历者的真实工作体验与避坑指南

本文分享了一位华为OD员工从外包到转正的真实经历与实用建议。通过详细解析华为OD的日常工作、转正核心指标、机试备考技巧及职场突围策略,为读者提供了一份全面的避坑指南。特别针对机试E卷的高频考点和刷题方法,给出了具体的数据分析和实战经验。

weixin_33686714的博客 711

【计算机组成原理实验】状态机实验

理解“状态机”概念,掌握“状态机”思想描述时序系统。通过下列三种基于D触发器的计数器结构,构建状态机的状态转移电路:环形计数器、扭环计数器和条件判断的扭环计数器。基于“状态机”原理,设计一个“交通灯”系统:控制红黄绿信号灯按照以下顺序循环点亮:“绿 黄 红 绿 ……”,红灯、绿灯和黄灯的亮灯持续时间可以通过拨码开关独立设置。红灯和绿灯是持续亮灯模式,黄灯则是闪烁亮灯模式。

Rover_jb的博客 1332

分布式事务实战选型:从2PC、3PC到TCC与本地消息表的权衡

本文深入探讨了分布式事务的实战选型,对比分析了2PC、3PC、TCC和本地消息表等方案的优缺点。通过电商下单等典型场景,解析了不同方案在一致性、性能和实现复杂度上的权衡,并提供了选型决策树和性能测试数据,帮助开发者根据业务需求选择最适合的分布式事务解决方案。

weixin_34138056的博客 351

系规备考论文:论IT服务规划设计

系规备考论文:论IT服务规划设计

liuxu324的博客 1146

分布式事务完全演进链:从单体事务到 TCC 、Saga 与最终一致性

要么全部成功,要么全部失败,不允许“做了一半”的中间状态被外界看到。这是一个非常“反直觉”的能力,因为在现实世界中:程序会崩溃机器会断电网络会中断即使发生上述任意情况,也不会留下“半成品”。2PC 适合论文、实验室和小范围强一致场景但不适合高并发、分布式、易失败的真实世界分布式事务的主战场,早已从 2PC 转向“最终一致性方案”到这里,你应该自然产生这些疑问:❓ 能不能不锁资源?❓ 能不能不用协调者阻塞等待?❓ 能不能通过业务补偿代替强回滚?方案核心思想3PC降低阻塞TCC。

weixin_44876263的博客 775

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

电机驱动器MP6540H应用设计

/ ... 其他初始化函数(SystemClock_Config, MX_GPIO_Init, MX_TIM1_Init, MX_TIM2_Init)需要你根据STM32CubeMX生成或手动编写。// 假设霍尔传感器引脚是 GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_10。// 低侧U相GPIO引脚。

zhusl6688的博客 665

分布式事务模型详解与一致性算法拓展:从CAP到Raft的深度解析

本文系统介绍了分布式系统核心理论与技术,主要内容包括:1)CAP理论和BASE理论,分析分布式系统在一致性、可用性和分区容错性之间的权衡;2)分布式事务模型,详细对比了强一致性的2PC/3PC模型和最终一致性的TCC、本地消息表等方案;3)数据一致性算法,涵盖Paxos、Zab、Raft和Gossip等主流共识算法。文章通过理论分析与典型场景应用,为分布式系统设计提供了技术选型参考,指出应根据业务需求在强一致性和高可用性之间做出合理选择。

alonewolf_99的博客 1598

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

分布式事务详解:跨库操作的“终极挑战“

分布式事务是相对本地事务而言的,它将同一库事务的概念扩大到了对多个库的事务,目的是保证分布式系统中的数据一致性。分布式事务就是在多个独立的数据库或服务之间,保证数据一致性的技术方案。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4150

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

分布式事务解决方案模型

​不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作。此外,其实现难度也比较大,需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。为了满足一致性的要求,confirm和cancel接口还必须实现幂等。......

想着百万年薪努力的小赵 8万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RocketMQ - 分布式事务进阶:基于实现TCC/ Saga模式

摘要 本文深入探讨了在微服务架构下如何基于RocketMQ实现TCC和Saga分布式事务模式。针对传统本地事务和2PC方案的局限性,文章提出RocketMQ事务消息作为基础保障,并结合TCC/Saga实现业务一致性。 主要内容包括: TCC三阶段原理与幂等性设计 Saga的正向/补偿服务编排 基于Spring Boot和RocketMQ的完整代码示例 异常恢复机制(如定时对账) 与Seata等框架的对比选型建议 通过电商下单场景,文章剖析了仅依赖RocketMQ事务消息的不足,并给出结合TCC/Saga的解

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

分布式事务解决方案深度对比:2PC、TCC、Saga、本地消息表

维度2PCTCCSaga本地消息表一致性强一致最终一致最终一致最终一致性能差好好好复杂度中高中低侵入性低高中低隔离性有有无无适用场景单库多表资金交易长流程异步通知推荐度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐。

2601_96649751的博客 212

案例驱动学习:轻松理解TCC分布式事务

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。

Apple_Boy的博客 1486

分布式事务完全演进链:从单体事务到TCC、Saga与最终一致性

本文系统梳理了分布式事务的演进历程与实践方案。从单体事务的ACID特性出发,分析了2PC/3PC的局限性,详细阐述了TCC、Saga、MQ事务消息等主流解决方案的核心原理与实现机制。针对不同业务场景,提供了Seata框架源码解析、手写TCC框架、RocketMQ事务消息实现、Saga状态机设计以及数据对账系统构建等深度实践内容。重点比较了各类方案的优缺点,指出没有银弹解决方案,需根据业务特性选择合适模式:短事务推荐TCC,长流程适用Saga,异步场景采用MQ事务消息,最终通过数据对账确保一致性。文章为分布式

油墨香^-^的博客 503

分布式:一文吃透分布式事务和seata事务

分布式事务和seata实现分布式事务方案

qq_43745578的博客 2854
上一篇: HTTP 4种调用方式
下一篇: Basic Paxos Vs Multi Paxos
学博成
博客等级 码龄17年 915粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值