网站首页 > java教程 正文
Seata分布式事务是SpringCloudAlibaba的核心组件,也是构建分布式的基石,下面我就全面来详解Seata@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
Seata
Seata是Simple Extensible Autonomous Transaction Architecture 的简写,是一款阿里开源的分布式事务解决方案。
Seata致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata核心组件
Seata事务管理中有三个重要的组件角色,如下图所示:
三个组件相互协作,TC 以 Server 形式独立部署,TM和RM集成在应用中启动。
1.TC (Transaction Coordinator) 事务协调者
TC:维护全局和分支事务的状态,协调全局事务提交或回滚。
2.TM (Transaction Manager) 事务管理器
TM:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
3.RM (Resource Manager) -资源管理器
RM:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata工作流程
一个典型的seata分布式事务的流程如下:
1.TM向TC请求发起一个全局事务,TC返回一个代表这个全局事务的XID;
2.XID在RPC中传播给每一个调用链中的服务;
3.每个RM拿到XID后向TC发起一个分支事务,TC返回一个代表这个分支事务的XID;
4.RM完成本地分支的业务,提交本地分支,并且报告给TC;
5.全局事务调用链处理完毕,TM根据有无异常向TC发起全局事务的提交或者回滚。
Seata事务模式
Seata将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
TCC模式:最终一致的分阶段事务模式,有业务侵入
SAGA模式:长事务模式,有业务侵入
1.AT 模式
AT 模式基于 支持本地 ACID 事务 的 关系型数据库:
AT模式是Seata默认的工作模式,AT模式是最终一致的分阶段事务模式,无业务侵入。
AT模式机制
- 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
- 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
- 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。
2.TCC模式
所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。
一个分布式的全局事务,整体是 两阶段提交 的模型,全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:
- 一阶段 prepare 行为
- 二阶段 commit 或 rollback 行为
如下图所示:
根据两阶段行为模式的不同,将分支事务划分为 Automatic (Branch) Transaction Mode 和 Manual (Branch) Transaction Mode.
TCC 模式,不依赖于底层数据资源的事务支持:
- 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
- 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
- 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。
3.SAGA 模式
在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
SAGA模式:长事务模式,有业务侵入。
4.XA模式
XA模式是强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入。
XA是基于二阶段提交设计的接口标准,对于支持XA的资源管理器,借助Seata框架的XA模式,会使XA方案更简单易用。
RM一阶段的工作:
- 注册分支事务到TC;
- 执行分支业务sql但不提交;
- 报告执行状态到TC;
TC二阶段的工作:
TC检测各分支事务执行状态;
如果都成功,通知所有RM提交事务;
如果有失败,通知所有RM回滚事务;
XA使用前提:需要分支数据库支持XA 事务,应用为 Java应用,且使用JDBC访问数据库。
5.四种模式比较
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2025-06-04 分布式事务解决方案探析:从理论到实践
- 2025-06-04 巧用 RocketMQ,轻松规避分布式事务操作
- 2025-06-04 SpringCloud分布式框架&分布式事务&分布式锁
- 2025-06-04 分布式协议与算法,你了解多少?(分布式协议 paxos)
- 2025-06-04 Spring Boot中的分布式事务解决方案
- 2025-06-04 分布式事务怎么做?Spring Cloud Alibaba Seata告诉你
- 2025-06-04 Zookeeper:分布式架构详解、分布式技术详解、分布式事务
- 2025-06-04 JAVA分布式事务解决方案:掌控微服务间的事务一致性
- 2025-06-04 一文揭秘!Spring Boot3 分布式事务的高效实现与性能优化方案
- 2025-06-04 探秘分布式事务处理中的Java解决方案
你 发表评论:
欢迎- 06-04C++优先级调度队列(Priority Queue)
- 06-04数据结构与算法-优先队列(优先队列 数组实现)
- 06-04什么是优先队列?(优先队列原理)
- 06-04终于有架构大牛把分布式系统概念讲明白了,竟然用了足足800页
- 06-04分布式事物如何保证接口请求顺序性?
- 06-04微服务下分布式事务模式的详细对比
- 06-04彻底掌握分布式事务2PC、3PC模型(分布式事务 三阶段)
- 06-04分布式事务最全详解(看这篇就够了)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)