Seata架构官网地址:http://seata.io/zh-cn/
Seata架构实现模型
TC (Transaction Coordinator):事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
监控和通知各个事务,包括分支事务和全局事务。
TM (Transaction Manager):事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
执行事务
RM (Resource Manager):资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata支持的模式有四种:
1.XA模式
执行流程:
第一阶段:事务协调者通知每个事务参与者执行本地事务,本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁。
第二阶段:事务协调者基于一阶段的报告来判断下一步操作,如果一阶段都成功,则通知所有事务参与者,提交事务,如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务。
就是在XA的模型之上,使用TM进行事务管理;
优点:事务的强一致性,满足ACID原则。
常用数据库都支持,实现简单,并且没有代码侵入
缺点:因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差;依赖关系型数据库实现事务。
配置文件添加
seata:
data-source-proxy-mode: AT # 默认就是AT
registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
type: nacos # 注册中心类型 nacos
nacos:
server-addr: 192.168.200.130:8848 # nacos地址
namespace: "" # namespace,默认为空
group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
application: seata-server # seata服务名称
username: ""
password: ""
tx-service-group: seata-demo # 事务组名称
service:
vgroup-mapping: # 事务组与cluster的映射关系
seata-demo: HZ
**注意:每个微服务都需要配置
全局事务开始方法标记注解 @GlobalTransactional
AT模式(常用)
AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。
AT模式的两个阶段:
阶段一:事务调节者通知每一个事务参与者调用本地事务,(就是执行SQL)在资源管理器中(RM)解析SQL语义,提取数据,在undolog中先保存原快照(before image)然后执行业务SQL,然后再保存(after image)快照。此时和XA模式不同,sql已经执行,不持有数据库锁。
阶段二,事务调节者根据第一阶段的报告来判断下一步.
第一阶段都成功,则提交,并且同时RM删除快照。
第一阶段没有成功,则回滚,恢复undo-log日志,删除undo-log。
优点:AT模式不会产生死锁,最终一致性。
SAGA模式--适合长连接
TCC模式
Try....Confirm...Cancel
二阶段提交:一阶段:预留资源;二阶段:提交或者回滚,手动补偿逻辑