Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata特色功能:
微服务框架支持
AT模式
TCC模式
SAGA模式
XA模式
高可用
Seata中的角色:
TC:事务协调者,维护全局事务和分支事务的状态,推进事务两阶段处理。
TM:事务管理器,与TC交互,用于开启、提交、回滚全局事务。
RM:资源管理器,与TC交互,负责资源相关的处理,包括分支事务的注册与状态上报。
Seata处理分布式事务的主要流程:
1、TM开启全局事务
2、事务参与者通过RM与资源交互,并注册分支事务
3、事务参与者在完成资源操作后,上报分支事务状态
4、TM结束全局事务,事务一阶段结束
5、TC推进事务二阶段操作
AT模式两阶段提交:
一阶段处理:首先Seata会先拦截业务SQL,解析SQL语句的定义,提取表元数据,找到SQL语句要更新的业务数据。其次,在业务数据被更新前将其保存成前镜像。然后,在执行SQL语句更新业务数据,在业务数据更新后,将其保存成后镜像,并生成seata事务锁数据,构建事务日志并且插入事务日志表。
二阶段提交:如果全局事务是提交状态,则TC会先进行放锁操作,然后释放各个分支事务在一阶段加的全局锁,并推进二阶段提交。RM在接收到分支事务二阶段提交指令后,只需要删除保存的事务日志数据,完成数据清理即可。为了提升性能,RM会立即返回TC处理成功,并通过异步线程批量删除在二阶段中提交的分支事务的日志数据。