Seata
2026/6/15 2:03:20 网站建设 项目流程

一、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: nacos

3️⃣ 开启全局事务

@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(事务一致性)

👉 这已经是企业级微服务基础架构全套

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询