网站首页 > 文章精选 正文
下面为你详细讲解Seata的原理、架构、核心流程及常见面试要点。
一、Seata简介
Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能、易用的分布式事务服务,支持多种事务模型。
二、Seata的核心架构
Seata主要由三大核心组件组成:
Transaction Coordinator(TC,事务协调者)
负责维护全局事务的状态,协调各分支事务的提交或回滚。
Transaction Manager(TM,事务管理器)
负责定义全局事务的范围,发起全局事务的开始、提交和回滚。
Resource Manager(RM,资源管理器)
负责分支事务的资源管理(如数据库操作),向TC注册分支事务,接收TC的指令进行提交或回滚。
架构图:
text
Apply to DatabaseLoad...
TM <----> TC <----> RM
三、Seata支持的事务模式
AT模式(自动补偿事务,适合关系型数据库)无侵入,自动代理本地事务。一阶段业务数据和回滚日志一起提交;二阶段根据全局事务状态决定提交或回滚。
TCC模式(Try-Confirm-Cancel,适合高一致性场景)业务自定义三段操作:Try(预留资源)、Confirm(确认提交)、Cancel(取消回滚)。
SAGA模式(长事务,适合大业务流程)业务定义正向和补偿操作,适合长流程、弱一致性场景。
XA模式(两阶段提交,强一致性)基于数据库XA协议,性能较低,适合对一致性要求极高的场景。
四、AT模式原理详解(最常用)
1. 一阶段(业务执行)
TM发起全局事务,通知TC。各RM拦截业务SQL,生成undo_log(回滚日志),与业务数据一起提交到数据库。一阶段提交后,数据已对外可见。
2. 二阶段(提交或回滚)
提交:TC通知各RM清理undo_log,完成全局提交。回滚:TC通知各RM根据undo_log反向补偿,回滚业务数据。
3. 优势
无需业务代码侵入,开发体验好。性能高,适合大部分互联网场景。
五、Seata的部署与高可用
支持多TC节点集群部署,注册到Nacos等注册中心,客户端自动发现。事务日志持久化到数据库,节点故障可恢复。
六、Seata的使用流程
引入Seata依赖,配置数据源代理。启动Seata Server(TC)。在业务代码中使用@GlobalTransactional注解开启全局事务。各微服务自动接入分布式事务。
七、常见面试延伸
Seata的AT模式与TCC模式的区别?undo_log表的作用和结构?Seata如何保证高可用和数据一致性?Seata与本地事务、XA事务的对比?Seata事务回滚失败如何排查?
----------------------------------------------------------------------------------------------------------------
如需源码分析、实战案例或详细讲解教程,欢迎留言说明!
猜你喜欢
- 2025-07-28 【MySQL】详解 MySQL 三种日志 ( binlog、redo log 和 undo log ) 及其作用
- 2025-07-28 Rust的数据库框架:SQLx连接MySQL实践
- 2025-07-28 分库分表后,数据库数据一致性问题如何解决?这操作真的可以
- 2025-07-28 数据库(DBMS)面试题(数据库面试题2020)
- 2025-07-28 支付宝一面:多线程事务怎么回滚?用 @Transactional可以回去了!
- 2025-07-28 什么是实时数据同步?纯干货解读!(什么是实时数据传输)
- 2025-07-28 什么是 SQL 事务,如何创建 SQL 事务
- 2025-07-28 数据库事务类型说明(数据库事务的分类)
- 2025-07-28 Spring Boot 常用注解全解析:20 个高频注解
- 2025-07-28 系统整容纪:用知识来"武装"自己~认识MySQL的锁与事务
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)