分布式事物的解决方案Seata

xiaojiuaigc@163.com 发布于 2025-04-23 136 次阅读


Seata的基础概念

Seata中的几个基本概念:

  • TC(Transaction Coordinator) – 事务协调者 【Seata server】

维护全局和分支事务的状态,驱动全局事务提交或回滚(TM之间的协调者)。

  • TM(Transaction Manager) – 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

  • RM(Resource Manager) – 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

第一阶段-事务信息收集

此阶段是信息收集,加入的undo_log的阶段

在本地事务提交前,各分支事务需向 全局事务协调者 TC 注册分支 ( Branch Id) ,为要修改的记录申请 全局锁 ,要为这条数据加锁,利用 SELECT FOR UPDATE 语句。而如果一直拿不到锁那就需要回滚本地事务。TM 开启事务后会生成全局唯一的 XID,会在各个调用的服务间进行传递。

第二阶段-事务决议

第二阶段:此阶段是根据各分支的决议做提交或回滚:

决议是全局提交,此时各分支事务已提交并成功,这时 全局事务协调者(TC) 会向分支发送第二阶段的请求。收到 TC 的分支提交请求,该请求会被放入一个异步任务队列中,并马上返回提交成功结果给 TC。异步队列中会异步和批量地根据 Branch ID 查找并删除相应 UNDO LOG 回滚记录。

分支提交模型:

如果决议是全局回滚,过程比全局提交麻烦一点,RM 服务方收到 TC 全局协调者发来的回滚请求,通过 XIDBranch ID 找到相应的回滚日志记录,通过回滚记录生成反向的更新 SQL 并执行,以完成分支的回滚。

分支回滚模型: