分布式事务

分布式事务Seata-原理及四种事务模式 对于分布式事务,通俗地说就是,一次操作由若干分支操作组成,这些分支操作分属不同应用,分布在不同服务器上。分布式事务需要保证这些分支操作要么全部成功,要么全部失败。分布式事务与普通事务一样,都是为了保证操作结果的一致性。Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前, Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的角色,帮助经济体平稳的度过历年的双 11,对各 BU 业务进行了有力的支撑。 阅读详情

Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的分布式事务解决方案,主要支持AT、TCC、SAGA和XA四种模式。以下是各模式的工作原理:


1. ‌AT模式(自动补偿型)‌

‌核心思想‌:基于本地事务的扩展,通过代理数据源实现分支事务的自动提交和回滚。
‌工作流程‌:

  • ‌阶段一(执行)‌:
    • 主事务发起全局事务,生成XID(全局事务ID)。
    • 分支事务执行SQL时,Seata拦截SQL生成前置镜像(before image)和后置镜像(after image),保存到undo_log表。
    • 本地事务提交,但全局事务未提交时,数据处于“中间状态”(其他事务不可见)。
  • ‌阶段二(提交/回滚)‌:
    • ‌提交‌:删除undo_log记录,释放锁。
    • ‌回滚‌:根据undo_log的前置镜像恢复数据。

‌特点‌:

  • 对业务代码零侵入,依赖数据库本地事务。
  • 适合大多数CRUD场景,但需要支持本地ACID事务的数据库(如MySQL)。

2. ‌TCC模式(手动补偿型)‌

‌核心思想‌:将事务拆分为Try-Confirm-Cancel三个阶段,由开发者手动实现补偿逻辑。
‌工作流程‌:

  • ‌Try‌:预留资源(如冻结账户余额)。
  • ‌Confirm‌:确认执行业务(如扣减冻结金额)。
  • ‌Cancel‌:取消操作并释放资源(如解冻金额)。

‌特点‌:

  • 需要业务代码显式实现补偿接口,灵活性高。
  • 适合需要强一致性的场景(如金融系统),但开发复杂度较高。

3. ‌SAGA模式(长事务补偿)‌

‌核心思想‌:将长事务拆分为多个本地事务,每个事务提交后触发下一个事务,失败时逆向补偿。
‌工作流程‌:

  • 事务执行顺序由状态机定义。
  • 成功时顺序执行,失败时逆向调用已提交事务的补偿接口。

‌特点‌:

  • 无锁设计,适合长流程业务(如订单+库存+物流)。
  • 补偿逻辑需幂等,可能存在“脏写”问题(最终一致性)。

4. ‌XA模式(强一致性)‌

‌核心思想‌:基于数据库的XA协议,由事务管理器协调多个资源管理器(RM)实现两阶段提交。
‌工作流程‌:

  • ‌阶段一(Prepare)‌:所有RM执行事务但不提交,返回就绪状态。
  • ‌阶段二(Commit/Rollback)‌:根据协调者指令提交或回滚。

‌特点‌:

  • 强一致性,但性能较低(依赖数据库XA支持)。
  • 适合传统数据库集成场景(如Oracle、MySQL InnoDB)。

对比总结

模式一致性侵入性适用场景
AT最终无常规CRUD
TCC强高金融、高一致性需求
SAGA最终中长流程、异步业务
XA强无传统数据库XA支持的环境

‌选择建议‌:根据业务对一致性、性能和开发成本的需求权衡选择模式。

一、如何选择事务模式?‌(决策矩阵)

‌模式‌‌适用场景‌‌慎用场景‌
‌AT‌- 常规CRUD(如更新订单+扣库存)
- 对一致性要求‌最终即可‌
- 希望‌零侵入‌业务代码
- 数据库支持本地事务(MySQL、PostgreSQL等)
- 高频热点数据(锁竞争激烈)
- 不支持本地事务的数据库(如MongoDB)
‌TCC‌- 金融核心系统(转账、支付)
- 需要‌强一致性‌
- 涉及‌非数据库操作‌(如Redis、MQ)
- 业务能接受‌手动实现补偿逻辑‌
- 补偿逻辑复杂的业务
- 快速迭代项目(开发成本高)
‌SAGA‌- 长流程业务(订单创建→物流→结算)
- 子事务‌执行时间长‌
- 需要‌异步化/并行执行‌
- 能接受‌最终一致性‌(补偿需幂等)
- 无法设计幂等补偿的场景
‌XA‌- 传统数据库(Oracle、MySQL InnoDB)
- 已有系统支持‌XA协议‌
- 强一致性且能接受‌性能损耗‌
- 高频事务(性能要求高)
- 云原生数据库(部分不支持XA)

‌二、默认模式:AT模式‌

  • ‌原因‌:
    Seata设计以‌AT模式为默认核心‌,因其:
    1. ‌零业务侵入‌(无需改代码,通过代理数据源自动生效)。
    2. 适用大部分场景(80%的CRUD操作)。
    3. 自动生成回滚日志(undo_log),简化开发。
  • ‌生效条件‌:
    引入Seata依赖后‌不显式配置事务模式‌时,默认启用AT模式。

‌三、指定模式的方法‌

在微服务中指定模式分为 ‌全局配置‌ 和 ‌单方法配置‌:

1. ‌全局配置‌(所有服务默认模式)

在 application.yml 中指定:


yamlCopy Code

seata: enabled: true data-source-proxy-mode: AT # 可选 AT / XA (代理数据源模式) client: support: # 声明全局默认模式 (AT/TCC/SAGA/XA) seataHandlerClass: io.seata.tm.api.defaultimpl.DefaultGlobalTransaction

2. ‌单方法配置‌(精细控制)

在业务方法上通过注解指定:


javaCopy Code

// AT模式(默认无需注解,显式声明可选) @GlobalTransactional // 默认使用AT模式 // TCC模式 @GlobalTransactional(type = GlobalTransactionType.TCC) // SAGA模式 @GlobalTransactional(type = GlobalTransactionType.SAGA) // XA模式 @GlobalTransactional(type = GlobalTransactionType.XA)


‌四、混合使用建议‌

复杂系统可‌组合不同模式‌:

  • ‌核心支付链路‌:用 TCC 保证强一致。
  • ‌订单创建流程‌:用 SAGA 编排库存、优惠券等异步服务。
  • ‌普通查询更新‌:用默认 AT 降低开发成本。
  • ‌传统数据库操作‌:用 XA 兼容存量系统。

⚠️ ‌关键原则‌:

  • ‌强一致性‌:优先选 TCC/XA。
  • ‌开发效率‌:无特殊要求默认用AT。
  • ‌长事务‌:SAGA是唯一选择。
  • ‌性能瓶颈‌:避免XA高频场景,TCC需优化预留资源逻辑。

通过全局配置+注解的灵活组合,可在同一系统中适配不同业务场景的事务需求。

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

相关推荐

分布式事务处理-Seate

本地事务就是这一组sql语句在一个数据库连接中执行,即我们常说 的事务就是一个本地事务,遵循ACID的。随着互联网的快速发展,软件系统由原来的单体应用转变为分布式 应用,下图描述了单体应用向微服务的演变。指一次大的操作由不同的小操作组成的,这些小的操作分布在不同 的服务器上,分布式事务需要保证这些小操作要么全部成功,要么 全部失败。从本质上来说,分布式事务就是为了保证不同数据库的 数据一致性。

qq_55577704的博客 2283

分布式事务科普(终结篇)

原文地址:https://hiddenpps.blog.youkuaiyun.com/article/details/105463120 分布式事务科普 随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护性差、架构扩展性差、部署不灵活、健壮性差等等。而微服务架构是将单个服务拆分成一系列小服务,且这些小服务都拥有独立的进程,彼此独立,很好地解决了传统单体应用的上述问题,但是在微服务架构下如何保证事务的一致性呢?本文首先从事务的概念出来,带大家先回顾一下ACID、事务隔离级

RichardGeek的博客 519

【分布式事务】一、分布式事务概念、解决方案,一文彻底搞懂分布式事务

【分布式事务】分布式事务概念、解决方案,一文彻底搞懂分布式事务

技术分享博客,工作经验,技能学习分享(多做一些不会的,会有意向不到的收获,IT高手不可能永远只做会的) 2264

分布式事物 seata框架的学习 第一章 (GlobalTransactional注解源码解析(tm端))

GlobalTransactional 注解 这个全局注解 会被spring aop切入 下面看spring 对他做了什么 看到有一个interceptor 应该是 这个注解的代理 这个类实现了两个接口 ConfigurationChangeListener, MethodInterceptor 第一个 是 配置的监听 先不看 另一个 是springaop的接口 看到invoke方法 这个方...

haha12312wqe的博客 9784

分布式事务(再深入)——分布式事务理论基础 & Java分布式事务解决方案

刚性事务:分布式理论的CP,遵循ACID,对数据要求强一致性。XA协议是一个基于数据库层面的分布式事务协议,其分为两部分:事务管理器(Transaction Manager)和本地资源管理器(Resource Manager)。事务管理器作为一个全局的调度者,负责对各个本地资源管理器统一号令提交或者回滚。主流的诸如Oracle、MySQL等数据库均已实现了XA接口。二阶提交协议(2PC): 根据XA协议衍生出来而来;

2401_84254196的博客 1264

Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建前言1.安装前的准备工作2.安装交叉编译器 前言 这篇文章,主要是基于 Ubuntu19.10版本而写,写此文的初衷,是为了自己使用,因为最近正在以Tiny6410板子做实训,所以也是初学者一枚,只能保证我遇上的问题统统能够解决掉,至于一些没遇上的,欢迎各位看客给我留言,大家一起讨论,一起解决。 注:本文会持续更新 1.安装前的准备工作 环境要求 Linux系统:U

繁臻的小窝 4894

【分布式事务】分布式事务

一、什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据存储的数据一致性。 二、分布式事务产生的原因 2.1 数据库分别库分表 当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表。这时候,如果一个操作既访问01库,又访

wuychn 1万+

PCB过孔全介绍

过孔(via)是多层PCB的重要组成部分之一,钻孔的费用通常占PCB制板费用的30%到40%。简单的说来,PCB上的每一个孔都可以称之为过孔。从作用上看,过孔可以分成两类:一是用作各层间的电气连接;二是用作器件的固定或定位。如果从工艺制程上来说,这些过孔一般又分为三类,即盲孔(blind via)、埋孔(buried via)和通孔(through via)。盲孔位于印刷线路板的顶层和底层表面,具

小王的自我修行路 2355

分布式事务Seata

分布式事务seata

DarzenWong的博客 9922

Sentaurus TCAD 修改字体

如题

努力学习的IC小白 5759

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 315

分布式事务TCC

之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。 所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是 TCC 分布式事务。 ###一、业务场景介绍 咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。 那对一个订单支付之后,我们需要做下面的步骤: 更改订单的状态为“已支付” 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 这是一

少年闰土的博客 3859

YOLOv12改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

CARAFE内容感知的特征重新组合。

Limiiiing的博客 664

Seata实现分布式事务

目录1 分布式事务解决方案-面试1.1 本地事务与分布式事务1.1.1 事务1.1.2 本地事务1.1.3 分布式事务1.2 分布式事务相关理论1.2.1 CAP定理1.2.2 BASE理论1.2.2.1 Basically Available(基本可用)1.3 分布式事务解决方案-面试1.3.1 基于XA协议的两阶段提交1.3.2 TCC补偿机制1.3.3 消息最终一致性-重点2 基于Seata实现分布式事务2.1 Seata简介2.2 Seata事务模式-AT模式2.3 Seata Server端环境准

赵广陆 6428

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 662

PyTorch 面试题及参考答案(精选100道)

模块是 PyTorch 中用于自动求导的核心模块。它为张量上的所有操作提供了自动求导的功能。在深度学习中,反向传播是一种用于计算损失函数相对于模型参数的梯度的算法。通过梯度,我们可以使用优化算法(如随机梯度下降)来更新模型的参数,从而最小化损失函数。模块的主要作用就是自动计算这些梯度。当我们创建一个张量时,如果将其属性设置为True,那么 PyTorch 会跟踪该张量上的所有操作。在完成前向传播计算出损失函数后,调用方法,模块会自动根据链式法则反向传播计算出所有需要求导的张量的梯度。

大模型大数据攻城狮的专栏 1681

Seata分布式事务

在分布式系统下,一个业务跨越多个服务或数据源,每个服务都是一个分支事务,要保证所有分支事务最终状态一致,这样的事务就是分布式事务。

qq_38289583的博客 2368

【一看就会】Autoware.universe中静态绕障路线的生成逻辑

在路径行为规划中,前期根据地图和起点终点,生成了一组连续可行的路径段序列(lanelets),然后后续路径行为规划,又会进行起始点,终止点,避障绕障路径的路径规划,并且会调用route_handler中的函数,进行中心线生成,最后生成路径,后续再给速度行为规划进行速度规划。在autoware.universe的规划中,是基于规则的规划,而其中的规则又是为了解决不同场景的。而这些场景,大部分是为了解决路上障碍物(静态、动态、行人、车辆等等)。

weixin_48386130的博客 321

分布式事务(基于Seata解决分布式事务的四种模式)

本篇文章讲述了分布式事务的基本概念,以及基于Seata框架解决分布式事务的四种模式:XA,TA,TCC,SAGA模式。

qq_45304119的博客 4747

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【分布式事务】分布式事务解决方案理论

分布式事务解决方案

低调做人,低调编码,神码都是浮云 2210

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

分布式事务和分布式事务框架Seata

一篇文章带你快速入门分布式事务框架Seata

jc15274630894的博客 2148

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

面试总结之 《分布式事务》

文章目录一、分布式事务1. 本地事务和分布式事务二、分布式事务的基础1. CAP2. BASE3. 柔性事务4. 可见性(对外可查询)5. 幂等操作三、分布式解决方案1. 2PC2. 3PC3. 补偿事务(TCC)4. 本地消息表(异步确保)5. 事务消息6. 尽最大努力通知参考文章 一、分布式事务 1. 本地事务和分布式事务 本地事务是解决单个数据源上的数据操作的一致性问题的话,那么分布式事务则是为了解决跨越多个数据源上数据操作的一致性问题。 强一致性、弱一致性、最终一致性 从客户端角度,多进程并发访问时

ding_wl 2712
上一篇: 单独一篇云原生介绍
下一篇: 微服务的草稿草稿草稿
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值