简介

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式事务解决方案。

🚀 一、Seata 的四种主要模式

Seata 提供的分布式事务解决方案有:

  1. AT 模式(Automatic Transaction,默认模式)
  2. TCC 模式(Try-Confirm-Cancel)
  3. SAGA 模式(长事务补偿型)
  4. XA 模式(基于数据库 XA 协议)

下面我逐一拆解:


1️⃣ AT 模式(自动事务模式)

🔹 原理

  • 基于 本地事务 + Undo Log 实现,两阶段提交。
  • 阶段一:执行业务 SQL,生成 前后镜像,并写入 undo log
  • 阶段二:根据全局事务结果来 提交(删除 undo log)回滚(利用 undo log 恢复数据)

🔹 举例

下单 → 扣库存 → 扣余额。

  • 阶段一:库存 stock=100 → 99,undo log 记录 before=100, after=99
  • 阶段二:若失败,回滚时用 undo log 恢复 stock=100

🔹 特点

✅ 优点:透明、接入简单、开发成本低(像本地事务一样写 SQL)。
❌ 缺点:只支持 关系型数据库,性能依赖 undo log。

👉 应用场景
适合 大多数互联网电商/订单类系统,数据一致性要求较高,且数据库是关系型的。


2️⃣ TCC 模式(Try-Confirm-Cancel)

🔹 原理

  • 应用层显式定义两阶段逻辑
  • Try:资源预留。
  • Confirm:业务确认。
  • Cancel:业务回滚。

🔹 举例

转账:从 A → B 转 100。

  • Try 阶段:冻结 A 的 100 元。
  • Confirm 阶段:扣除冻结金额,B 账户加 100。
  • Cancel 阶段:解冻 A 的 100 元(回滚)。

🔹 特点

✅ 优点:性能高,灵活,能处理 非数据库资源(比如调用第三方服务)。
❌ 缺点:开发成本高,需要写三套逻辑(Try、Confirm、Cancel)。

👉 应用场景
适合 金融交易、积分兑换、优惠券发放 等对资源预留要求高的场景。


3️⃣ SAGA 模式(长事务补偿型)

🔹 原理

  • 长事务分解为一系列本地事务
  • 每个本地事务都必须提供 正向操作(Action)补偿操作(Compensation)
  • 如果中途失败,通过补偿操作逆向回滚。

🔹 举例

机票 + 酒店 + 租车 预订:

  • Action:订机票成功 → 订酒店成功 → 订租车成功。
  • 如果订租车失败 → 执行补偿:取消酒店 → 取消机票。

🔹 特点

✅ 优点:适合 长事务,执行时间长、跨多个系统
❌ 缺点:补偿操作可能很复杂,而且补偿不一定能保证完全幂等。

👉 应用场景
适合 旅游预订、电商大促销活动、大批量异步任务 等。


4️⃣ XA 模式(基于数据库 XA 协议)

🔹 原理

  • 基于数据库 XA 协议 实现两阶段提交。
  • 阶段一:RM 向数据库发送 prepare,数据库执行事务但不提交。
  • 阶段二:根据全局事务结果,发送 commitrollback

🔹 举例

A 数据库转账 → B 数据库:

  • 阶段一:A/B 数据库都 prepare
  • 阶段二:都 commit,或者都 rollback

🔹 特点

✅ 优点:强一致性,数据库级别保证。
❌ 缺点:性能低,依赖数据库的 XA 支持,锁的粒度较大。

👉 应用场景
适合 对强一致性要求极高的金融场景,但性能瓶颈较明显。


🚀 二、四种模式对比

模式一致性性能适用场景开发成本
AT强一致电商、订单、支付低(透明接入)
TCC强一致最高金融交易、库存冻结高(需写3套逻辑)
SAGA最终一致旅游预订、大促销、长事务中(需写补偿)
XA强一致银行、证券低(依赖数据库)

🚀 三、总结(通俗理解)

  • AT 模式:像“写日记”,每次改动前后都记下来,出错就翻回去。
  • TCC 模式:像“预定房间”,先 Try 预留,确认后付款,不要就取消。
  • SAGA 模式:像“旅游订票”,一步步订票,如果最后失败,就退票。
  • XA 模式:像“银行转账”,两个银行同时锁定账户,确认后一起提交。

1️⃣ AT 模式 (自动补偿)

提交
回滚
业务SQL执行
记录Undo Log: 前后镜像
全局事务结果
删除Undo Log
根据Undo Log恢复数据

2️⃣ TCC 模式 (Try-Confirm-Cancel)

成功
失败
发起请求
Try: 预留资源
事务结果
Confirm: 确认执行
Cancel: 取消预留

3️⃣ SAGA 模式 (长事务补偿)

成功
失败
Action1: 订机票
Action2: 订酒店
Action3: 订租车
是否成功?
事务完成
触发补偿
Compensate2: 取消酒店
Compensate1: 取消机票

4️⃣ XA 模式 (两阶段提交)

全部ok
有失败
TM协调者
RM1: prepare
RM2: prepare
收集结果
commit 所有分支
rollback 所有分支

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97347.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97347.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/97347.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓/ios按键精灵脚本开发工具:OpenCV.FindImgAll命令介绍

函数名称OpenCV.FindImgAll 找图返回全部结果函数功能使用OpenCV多尺度模板找图,返回全部结果与FindPic的区别:OpenCV找图:基于特征相似性的找图,允许一定几何形变或颜色差异,从而提高多分辨率容兼及抗干扰能力&#x…

Linux时间处理函数

gettimeofday 是 Linux 系统中一个用于获取当前时间的系统调用函数。它能够获取从 Unix 纪元&#xff08;1970年1月1日 00:00:00 UTC&#xff09;到当前时刻的秒数和微秒数。函数原型#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);参…

C++ 面试高频考点 力扣 34. 在排序数组中查找元素的第一个和最后一个位置 二分查找左右端点 题解 每日一题

文章目录二分查找进阶&#xff0c;精准定位左右边界题目描述先踩坑&#xff1a;朴素二分为什么搞不定重复元素&#xff1f;第一步&#xff1a;找左边界——如何定位“第一个target”&#xff1f;第二步&#xff1a;找右边界——如何定位“最后一个target”&#xff1f;完整代码…

在word以及latex中引用zotero中的参考文献

背景 如何在word以及latex中引用zotero中的参考文献 历史参考 恢复Zotero软件内的误删条目数据/文献-CSDN博客使用zotero保存 CNKI知网文章时发生错误。改为尝试用 Save as Webpage 保存。-CSDN博客 word 在word中引用zotero中的参考文献 打开word&#xff0c;点击引用 经典…

docker 部署Skywalking

创建网络 docker network create skywalking-network docker compose 安装SkyWalking docker-compose.yaml 文件 version: "3" services:# SkyWalking OAP server with Elasticsearch storageskywalking-oap:image: apache/skywalking-oap-server:8.9.0container…

动态UI的秘诀:React中的条件渲染

动态UI的秘诀&#xff1a;React中的条件渲染 作者&#xff1a;码力无边各位React探险家&#xff0c;欢迎回到我们的《React奇妙之旅》&#xff01;我是你们的老朋友码力无边。在之前的旅程中&#xff0c;我们已经学会了如何创建组件、传递数据&#xff08;Props&#xff09;、管…

ubuntu挂载外接硬盘

查看找到硬盘sudo fdisk -l例如&#xff1a;名字为&#xff1a;/dev/sda创建挂载点sudo mkdir -p /2TSSD手动挂载&#xff08;单次生效&#xff0c;关机会失效&#xff09;sudo mount /dev/sda1 /2TSSD开机自动挂载&#xff08;永远生效&#xff0c;关机会失效&#xff09;S1&a…

数学思想 | 数学思维过程对象封装

注&#xff1a;本文为 “数学思维过程对象封装” 相关译文。 英文引文&#xff0c;机翻未校。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 What is the object of the encapsulation of a process? 过程封装的对象是什么&#xff1f; David Tall#, Michael Th…

常见视频封装格式对比

一、核心概念&#xff1a;封装格式 vs 编码格式 编码格式 (Codec): 例如 H.264, H.265 (HEVC), AV1, VP9。它负责对原始视频和音频数据进行压缩&#xff0c;是决定视频体积和清晰度的关键。封装格式 (Container): 例如 MP4, MKV, AVI。它负责将已经压缩好的视频、音频、字幕等打…

Java实现PDF表格转换为CSV

在很多企业办公和数据分析的场景中&#xff0c;PDF 中常常存放着报表、清单或统计数据。相比 PDF&#xff0c;CSV 文件 更易于在 Excel 或数据库中进行进一步处理。因此&#xff0c;我们常常需要一种方式&#xff0c;将 PDF 中的表格数据批量抽取并导出为 CSV 文件。 本文将介…

具有类人先验知识的 Affordance-觉察机器人灵巧抓取

25年8月来自武汉大学、阿里达摩院、湖畔研究中心、浙大和清华的论文“Towards Affordance-Aware Robotic Dexterous Grasping with Human-like Priors”。 能够泛化抓取目标的灵巧手是开发通用具身人工智能的基础。然而&#xff0c;之前的方法仅仅关注低级抓取稳定性指标&#…

项目管理的关键成功因素

项目管理的关键成功因素包括&#xff1a;目标明确、科学规划、有效沟通、资源保障、风险管理、团队协作、持续监控与总结改进。目标明确保证方向不偏移、科学规划确保执行有章可循、有效沟通减少误解与冲突、资源保障提供坚实支撑、风险管理帮助预防问题、团队协作提升整体效率…

[光学原理与应用-338]:ZEMAX - Documents\Zemax\Samples

Documents\Zemax\Samples 是 Zemax OpticStudio 软件自带的样例文件目录&#xff0c;包含大量预设的光学设计案例&#xff0c;涵盖镜头设计、照明系统、公差分析、非序列光学等多个领域。这些样例是学习软件功能、验证设计方法和快速启动项目的宝贵资源。以下是该目录的详细解析…

el-table合并列实例

想要实现效果&#xff1a;目前接口返回数据data:[{companyCode: "NXKYS",companyName:1123,costContractId:1123,costContractName:1123,createBy:1123,details:[{brand:1123,contractItemName:1123,modelSpec:1123,projectItemId:1123,requestQty:1123,transactionZ…

虚假 TradingView Facebook 广告在全球传播 Android 间谍软件

一项快速发展的恶意广告活动最初通过 Meta 的广告网络针对 Windows 用户&#xff0c;现已将其范围扩展到 Android 设备&#xff0c;推广伪装成合法交易应用程序的 Brokewell 恶意软件的高级版本。 Bitdefender Labs 警告称&#xff0c;此次移动攻击活动目前已在全球范围内展开…

Android系统框架知识系列(十九):Android安全架构深度剖析 - 从内核到应用的全栈防护

​关键词​&#xff1a;安全启动链、应用沙箱、SELinux、硬件安全模块、权限控制、零信任架构一、Android安全架构的基本概念与背景1. 移动安全环境的特殊性Android作为全球最大的移动操作系统&#xff0c;面临着独特的安全挑战&#xff1a;​移动设备的安全威胁维度​&#xf…

智能消防栓闷盖终端:让城市消防管理更智慧高效

然而您是否知道&#xff0c;这些传统的消防栓常常面临非法开启、人为破坏、水压不足等管理难题&#xff1f;当火灾真正发生时&#xff0c;它们能否可靠地提供"救命水"&#xff1f;如今&#xff0c;随着智能消防栓闷盖终端的出现&#xff0c;这一切正在悄然改变。 智…

【系统架构设计(一)】系统工程与信息系统基础上:系统工程基础概念

文章目录一、系统工程的基本概念二、系统工程方法论1、霍尔三维结构&#xff1a;硬科学2、切克兰德方法&#xff1a;软科学思维3、其他三、系统工程生命周期管理1、生命周期阶段划分2、生命周期方法论系统工程与信息系统基础为复杂系统设计提供从思维方法到具体技术的全方位指导…

[p2p-Magnet] 队列与处理器 | DHT路由表

第6章&#xff1a;队列与处理器 在第5章&#xff1a;分类器中&#xff0c;我们了解了系统如何分析原始种子数据。但当系统突然发现数百万新种子时&#xff0c;如何高效处理这些海量任务&#xff1f;这就是队列与处理器系统的职责所在。 核心概念 任务队列 功能定位&#xf…

Spring JDBC 源码初探:异常处理体系

一、Spring JDBC 异常体系简介 当我们使用 Spring JDBC 进行数据访问时&#xff0c;大多数人关注的是 JdbcTemplate 如何简化数据库操作&#xff0c;却很少有人去深入理解异常体系。事实上&#xff0c;异常不仅仅是错误提示&#xff0c;它是系统健壮性、可维护性的重要一环。JD…