Seata
一、Seata 是什么(先建立认知)
Seata =
👉分布式事务解决方案(保证微服务数据一致性)
🧠 一句话理解:
Seata 用来解决:多个微服务操作多个数据库时,如何保证“要么都成功,要么都失败”。
🚨 二、为什么需要 Seata(真实问题)
单体事务:
@Transactional✔ 一个数据库
✔ 一个服务
✔ 可以回滚
微服务事务:
订单服务 ↓ 库存服务 ↓ 支付服务问题来了👇
❌ 失败场景
1️⃣ 创建订单成功 2️⃣ 扣库存成功 3️⃣ 支付失败 ❌👉 数据不一致!!
❌ 后果:
- 订单存在
- 库存扣了
- 钱没扣
👉 系统“脏数据”
🧠 三、Seata 目标
最终一致性核心原则:
✔ 要么全部成功
✔ 要么全部回滚
🧱 四、Seata 架构(必须会画)
TC(事务协调器) ↑ ┌──────────┼──────────┐ ↓ ↓ ↓ TM RM RM 订单服务 库存服务 支付服务🧠 五、三大核心角色(面试重点)
1️⃣ TC(Transaction Coordinator)
👉 事务协调者(Seata服务器)
负责:
- 管理全局事务
- 控制提交/回滚
2️⃣ TM(Transaction Manager)
👉 事务发起方
通常是:
订单服务3️⃣ RM(Resource Manager)
👉 资源管理者
通常是:
库存 / 支付 / DB🔄 六、Seata 执行流程(重点)
场景:下单流程
订单 + 扣库存 + 扣余额🚀 Step 1:开启全局事务(TM)
订单服务 @GlobalTransactional🚀 Step 2:注册全局事务
TM → TC:我开始事务🚀 Step 3:执行本地事务
订单服务:插入订单 库存服务:扣库存 支付服务:扣余额🚀 Step 4:记录 Undo Log(关键)
Seata 会记录修改前数据👉 用于回滚
🚀 Step 5:成功提交
TC → 所有RM:commit❌ Step 6:失败回滚
TC → 所有RM:rollback ↓ 根据 undo log 回滚数据🧠 七、Seata 三种模式(重点)
1️⃣ AT模式(最重要 ⭐⭐⭐⭐⭐)
👉 自动事务模式
特点:
- 基于 SQL 级别
- 自动生成 undo log
- 无侵入(最常用)
执行过程:
1️⃣ 执行SQL 2️⃣ 记录before image 3️⃣ 提交 or 回滚示例:
@GlobalTransactional public void createOrder(){ orderService.save(); stockService.reduce(); }优点:
- 业务代码无侵入
- 使用简单
缺点:
- 性能开销
- 依赖数据库
2️⃣ TCC模式(高级 ⭐⭐⭐⭐)
👉 Try / Confirm / Cancel
流程:
Try(预留资源) Confirm(提交) Cancel(释放)例子:
扣库存: Try → 预扣库存 Confirm → 真扣 Cancel → 释放优点:
- 性能高
- 可控性强
缺点:
- 代码侵入强
- 开发复杂
3️⃣ Saga模式(长事务)
特点:
分布式长流程 每一步都有补偿动作例子:
下单 → 支付 → 发货 → 通知 失败 → 逐步补偿🔥 八、电商真实场景(重点)
下单流程:
订单服务(TM) ↓ 库存服务(RM) ↓ 支付服务(RM) ↓ 优惠券服务(RM)Seata保护:
任何一步失败 → 全部回滚⚙️ 九、Spring Boot 集成 Seata
1️⃣ 依赖
<dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> </dependency>2️⃣ 配置
seata: tx-service-group: my_tx_group registry: type: nacos3️⃣ 开启全局事务
@GlobalTransactional(name = "create-order-tx") public void createOrder(){ orderService.save(); stockService.reduce(); }🧨 十、Seata vs 本地事务
| 对比 | 本地事务 | Seata |
|---|---|---|
| 范围 | 单库 | 多服务 |
| 一致性 | 强一致 | 最终一致 |
| 性能 | 高 | 中等 |
| 复杂度 | 低 | 高 |
🚨 十一、常见问题(面试必问)
❓ Seata如何保证一致性?
通过全局事务 + undo log + TC协调实现最终一致性。
❓ AT模式原理?
通过拦截SQL,记录数据变更前后的镜像,实现自动回滚。
❓ Seata性能问题?
因为需要记录 undo log 并进行全局协调,会有一定性能开销。
🧠 十二、面试标准回答(直接背)
❓ Seata是什么?
👉 答:
Seata 是一个分布式事务解决方案,用于解决微服务架构中跨服务、跨数据库的数据一致性问题。
它通过全局事务协调器 TC 管理事务状态,TM 发起事务,RM 执行本地事务,并结合 undo log 实现 AT 模式的自动回滚。
🚀 十三、你现在的微服务体系已经到这一步了
你现在已经掌握:
✔ Nacos(注册) ✔ Feign(调用) ✔ Gateway(鉴权+风控) ✔ Sentinel(限流熔断) ✔ Seata(事务一致性)👉 这已经是企业级微服务基础架构全套
