Seata原理分析

简介

Apache Seata™ (incubating) 是什么?

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技术支撑。经过多年沉淀与积累,其商业化产品先后在阿里云、金融云上售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助用户快速落地分布式事务解决方案。

Seata 原理深度解析:分布式事务的一致性实现

一、核心架构设计

Seata 采用 三组件模型,通过解耦事务协调与资源管理,实现分布式事务的高效处理:

1.1 核心组件

组件角色关键功能
TC (协调器)独立部署的服务器,作为全局事务的控制中心- 维护全局事务状态(开始/提交/回滚)
- 协调分支事务的提交/回滚
- 存储事务元数据(XID、分支ID等)
TM (管理器)嵌入微服务中的客户端组件,定义全局事务边界- 发起全局事务(生成XID)
- 通知TC提交或回滚事务
- 管理事务上下文(XID传播)
RM (资源管理器)嵌入微服务中的客户端组件,管理分支事务与本地资源交互- 注册分支事务到TC
- 执行本地SQL并生成回滚日志(UNDO_LOG)
- 响应TC的提交/回滚命令

1.2 协作流程

  1. 全局事务启动:TM 向 TC 发起 begin 请求,TC 生成全局唯一 XID。
  2. 分支事务注册:RM 向 TC 注册分支事务,绑定 XID。
  3. 执行本地事务:RM 执行 SQL,生成 前镜像(Before Image) 和 后镜像(After Image),记录到 UNDO_LOG 表。
  4. 提交/回滚决策
    • 成功:TM 通知 TC 提交,TC 依次通知 RM 提交分支事务(删除 UNDO_LOG)。
    • 失败:TM 通知 TC 回滚,TC 通知 RM 通过前镜像恢复数据。

二、事务模式详解

Seata 支持四种事务模式,覆盖不同场景的需求:

2.1 AT 模式(默认模式)

  • 原理:基于 SQL 解析的自动补偿,无需手动编码。
    • 一阶段:解析 SQL,生成前后镜像并插入 UNDO_LOG,提交本地事务。
    • 二阶段
      • 提交:异步删除 UNDO_LOG,释放资源。
      • 回滚:通过前镜像恢复数据,校验后镜像防止脏写。
  • 适用场景:常规业务(如电商订单、库存管理),零代码入侵。

2.2 TCC 模式(Try-Confirm-Cancel)

  • 原理:手动实现三阶段接口,精细控制事务。
    • Try:预留资源(如冻结账户余额)。
    • Confirm:确认预留资源(如扣除冻结金额)。
    • Cancel:释放预留资源(如解冻余额)。
  • 适用场景:金融支付、高并发资金操作,需精确控制事务流程。

2.3 SAGA 模式(长事务补偿)

  • 原理:通过状态机编排子事务,支持反向补偿。
    • 正向流程:按顺序执行子事务并提交。
    • 补偿流程:任一子事务失败时,反向执行补偿操作(如撤销订单、退款)。
  • 适用场景:跨系统业务流程(如订单→物流→支付)、长周期事务(如保险理赔)。

2.4 XA 模式(依赖数据库协议)

  • 原理:基于数据库原生 XA 协议,实现强一致性。
    • 两阶段提交:准备阶段锁定资源,提交阶段持久化变更。
  • 适用场景:传统系统迁移、强一致性要求的核心系统(如银行核心交易)。

三、数据一致性保障机制

3.1 两阶段提交(2PC)优化

  • 准备阶段
    • RM 执行 SQL 并生成 UNDO_LOG,锁定资源(行级锁)。
    • 向 TC 注册分支事务,等待全局决策。
  • 提交阶段
    • 异步提交:分支事务提交后,异步删除 UNDO_LOG,减少阻塞。
    • 批量操作:合并分支事务操作,降低 TC 负载。

3.2 全局锁与隔离级别

  • 全局锁:防止脏写,确保分支事务提交前获取锁。
  • 隔离级别
    • 默认:全局读未提交(Read Uncommitted),但通过全局锁避免脏读。
    • 实际效果:接近读已提交(Read Committed),平衡性能与一致性。

3.3 异常处理

  • 自动回滚:任一分支失败时,TC 触发全局回滚,RM 通过 UNDO_LOG 恢复数据。
  • 悬挂处理:TCC 模式中,若 Try 未执行但 Cancel 先到,则拒绝执行,避免资源错误释放。
  • 幂等控制:通过 XID 和 Branch ID 确保操作重复执行时的状态一致性。

四、性能优化策略

4.1 存储模式

模式性能可靠性适用场景
文件单机调试、非生产环境
DBTC 集群模式、生产环境
Redis高并发、低延迟场景

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

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

相关文章

力扣 30 天 JavaScript 挑战 第38天 (第九题)学习了 语句表达式的区别 高级函数 promise async await 节流

开始答题 版本一: /*** param {Function} fn* return {Function}*/ var once function(fn) {let runCount0return function(...args){runCountrunCount 1 ? return fn(...args) :return undefined} };/*** let fn (a,b,c) > (a b c)* let onceFn once(fn)…

25年八月份宁德时代社招部分岗位入职Verify测评演绎数字推理SHL题型变更、题库使用说明

开始测评前,请注意:1、挑选一个安静的环境,选择一台网速正常且无任何网络端口限制的电脑进行测评;2、移动设备无法兼容远程监考功能,请使用配备有可正常运作的摄像头的台式机或笔记本电脑,建议使用最新版本的Chrome,Fi…

【KO】前端面试四

以下是剩余题目的详细解答,结合前端知识体系和实际应用场景展开: 91. JS 放在 head 里和放在 body 里有什么区别? 对比维度 放在 <head> 放在 <body> 加载阻塞性 会阻塞页面渲染,需等待 JS 下载/执行完成后,才继续渲染页面 一般放在 </body> 前,页面渲…

[Vid-LLM] 数据集 | 基准测试

第5章&#xff1a;数据集与基准测试 在前一章中&#xff0c;我们探讨了**视频大语言模型(Vid-LLMs)**能够执行的各种"工作"或"功能"&#xff0c;从视频总结到充当智能代理。 我们了解了它们的构建方式和扮演的角色。 但这里有个关键问题&#xff1a;这些惊…

34、扩展仓储管理系统 (跨境汽车零部件模拟) - /物流与仓储组件/extended-warehouse-management

76个工业组件库示例汇总 扩展仓储管理系统 (跨境汽车零部件模拟) 概述 这是一个高级的仓储管理系统 (WMS) 模拟组件&#xff0c;专为展示跨境汽车零部件的复杂物流场景而设计。它模拟了从海外供应商发货&#xff0c;经过海运/空运、清关、质检&#xff0c;到最终入库上架&am…

nodejs koa留言板案例开发

包含功能 登录注册(不开放注册只是用固定的账号信息) 查看列表 查看详情 发布信息 编辑信息 删除信息 项目接口 npm init -y npm install koa --save npm istall koa-router --save (旧版本) 或者 npm install koa/router --save &#xff08;新版本&#xff09; npm instal…

4+ 图论高级算法

强连通分量 基础概念 强连通&#xff1a;在有向图 GGG 中&#xff0c;如果两个点 uuu 和 vvv 是互相可达的&#xff0c;即从 uuu 出发可以到达 vvv , 从 vvv 也可以到达 uuu , 则称 uuu 和 vvv 是强连通的。如果 GGG 中任意两个点都是互相可达的&#xff0c;则称 GGG 是强连通图…

从罗永浩访谈李想中学习现代家庭教育智慧

引言 在这个信息爆炸的时代&#xff0c;每个父母都在寻找培养孩子的最佳方式。在罗永浩与理想汽车创始人李想的深度访谈中&#xff0c;我们看到了一个成功企业家童年成长的真实样本。李想的成长经历为现代家庭教育提供了许多值得深思的启示。 一、正义感与乐观精神的种子 李想回…

AI实现超级客户端打印 支持APP 网页 小程序 调用本地客户端打印

核心思路都是&#xff1a;需要一个安装在用户电脑上的“中间人”程序&#xff08;本地客户端&#xff09;来接管打印任务&#xff0c;然后通过某种通信方式命令这个客户端进行打印。下面我将分平台详细阐述各种实现思路、优缺点和适用场景。一、核心思路与公共组件&#xff1a;…

Java集合(Collection、Map、转换)

✅ 推荐使用 ❌ 已过时 1. Collection Collection 是集合框架的根接口之一&#xff0c;它是所有单列集合&#xff08;如 List、Set、Queue 等&#xff09;的公共父接口。Collection 接口定义了集合的基本操作&#xff0c;比如添加、删除、遍历等。 Collection ├── List │ …

全国网络安全知识竞赛有哪些

全国范围内有多种类型的网络安全知识竞赛&#xff0c;涵盖国家级、行业级、高校、青少年和企业等多个维度。以下是主要的网络安全知识竞赛分类及详细介绍&#xff1a;一、国家级网络安全竞赛"强网杯"全国网络安全挑战赛主办单位&#xff1a;中央网信办、河南省人民政…

系统架构设计师备考第1天——系统架构概述

一、架构本质与角色定位架构 系统的骨架 ✅ 核心作用&#xff1a; 决定系统的健壮性、生命周期、扩展性衔接需求与实现&#xff0c;保障早期质量 &#x1f468;&#x1f4bb; 架构师核心能力&#xff1a;能力维度具体要求技术掌控力精通基础技术&#xff0c;洞悉局部瓶颈决策设…

c#实现鼠标mousemove事件抽稀,避免大数据阻塞网络

这个封装类可以独立于具体的网络传输逻辑&#xff0c;为任何需要减少鼠标移动数据量的应用提供灵敏度和数据量优化。 核心优化功能 1. 灵敏度调整 // 减少微小移动的数据发送 (2, 1) 0.5 → (1, 0) // 忽略微小移动2. 移动累积 // 累积多次小移动&#xff0c;批量发送 (1, 0) …

机器学习 [白板推导](十三)[条件随机场]

​ 17. 条件随机场&#xff08;Conditional Random Field&#xff0c;CRF&#xff09; 17.1. 背景 机器学习分类模型中&#xff0c;有硬分类和软分类两种主流思想&#xff0c;其中硬分类模型有支持向量机SVM&#xff08;最大化几何间隔&#xff09;、感知机PLA&#xff08;误…

调味品生产过程优化中Ethernet/IP转ProfiNet协议下施耐德 PLC 与欧姆龙 PLC 的关键通信协同案例

案例背景在食品饮料行业&#xff0c;生产过程的精准控制对于保证产品质量和安全至关重要。某知名食品饮料企业的生产线上&#xff0c;前处理、灌装和包装环节采用了基于 ProfiNet 主站的施耐德 M340 系列 PLC 进行控制&#xff0c;以确保生产过程的稳定性和精确性。而原料仓储和…

Elasticsearch vs 单表LIKE查询性能对比

关键因素影响 1、索引结构&#xff1a; .Elasticsearch使用倒排索引&#xff0c;特别适合文本搜索 .传统数据库即使有索引&#xff0c;对LIKE %keyword%这种模式也无法有效利用 2、查询复杂度&#xff1a; .简单查询&#xff1a;ES快5-10倍 .复杂组合查询&#xff1a;ES可能快1…

如何通过WordPress联盟营销获取潜在客户

您是否经营着一个销售周期较长的业务&#xff1f; 那么你就会知道&#xff0c;从首次访问者那里获得立即销售的机会是很少见的。 当然&#xff0c;您的潜在客户在进行重大投资之前需要时间进行研究、比较各种方案并建立信任。这时&#xff0c;联盟营销线索挖掘就成为您的秘密…

git实战(8)git高阶命令分析【结合使用场景】

以下是 Git 高阶命令分享&#xff0c;涵盖高效协作、历史重构、问题排查等场景&#xff0c;助你成为 Git 高手&#xff1a; 一、历史重构与清理 1. 交互式变基&#xff08;改写历史&#xff09; git rebase -i HEAD~3 # 修改最近3次提交操作选项&#xff1a; reword&#xff1…

生成一个竖直放置的div,宽度是350px,上面是标题固定高度50px,下面是自适应高度的div,且有滚动条

<!-- 我要生成一个竖直放置的div&#xff0c;宽度是350px&#xff0c;上面是标题固定高度50px&#xff0c;下面是自适应高度的div&#xff0c;且有滚动条。 --><style>html,body{/* height:100vh; */margin:10px; padding:10px;} </style><div style"…

题解:P13754 【MX-X17-T3】Distraction_逆序对_前缀和_Ad-hoc_算法竞赛C++

Beginning 这道题思维难度很大&#xff0c;有两个难点其实都不好解决&#xff0c;但因为其代码太过弱智所以只是绿题。 本题解详细地分析了做题时的历程与思路&#xff0c;所以希望大家可以仔细地完整阅读。 Analysis 首先先大体观察一下题目的性质&#xff1a;nnn 是排列&…