对中间件Seata的认识
Seata
Seata 是一个分布式事务解决方案,用于在微服务架构中保证跨服务的事务一致性
- TC (Transaction Coordinator) - 事务协调器:维护全局和分支事务的状态,协调全局事务提交或回滚,相当于监控中心。
- TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。 @GlobalTransactional,TM根据这个注解,标注事务的起点,确定全局事务的范围
- RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
其中,TM和RM可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来TM和RM就会协助微服务,实现本地分支事务与TC之间交互,实现事务的提交或回滚。
而TC服务则是事务协调中心,是一个独立的微服务,需要单独部署。(seata也是一个微服务)
Seata支持四种不同的分布式事务解决方案:
- XA (支持CP)
- TCC
- AT (支持AP)
- SAGA
seata是怎么进行分布式事务控制的?
Seata支持四种不同的分布式事务解决方案:
XA,TCC,AT,SAGA
这四种方案可以满足CP和AP的需求,比如:XA可以实现CP即强一致性,AT可以实现AP最终一致性。
我们项目用的AT模式,它的工作原理是:
Seata有一个TC事务协调器,负责控制所有分支事务。
- (@GlobalTransactional TM)创建一个全局事务,seata在TC中注册这个全局事务
- TM通知RM,每个RM开始执行分支事务
- 每个RM向TC注册分支事务
- RM执行分支事务并且提交事务,同时在提交前向undolog记录原始数据
- RM执行完事务后,会向TC汇报自己的事务是否执行成功
- 如果TM检查所有RM没有问题,TM会向TC提交全局事务,提交完成后,每个RM删除undolog记录
- 如果TM检查所有RM任意一个RM有问题,TM会向TC发出回滚请求,在回滚过程中,每个RM会根据undolog来恢复数据库的原始状态

XA模式和AT模式的区别
XA执行分支事务但是不提交,所以不需要undoLog但是一直持有数据库连接性能较差,但能保持强一致性。
seata的使用流程
- 注入依赖
- 修改yaml配置文件
- 再需要管理的方法上加@GlobalTransactional注解

浙公网安备 33010602011771号