分布式事务DTS
https://www.21ic.com/article/882518.html
跨行转账
TCC模式:
三个不同的接口,
全局事务id
-
一阶段,准备阶段
- A冻结金额,写入中间表
- B增加金额,写入中间表
-
二阶段,确认
- 准备阶段成功
- 处理中间表,写入金额表
-
二阶段,回滚
- 准备阶段失败
- A解除冻结,处理中间表
- B处理中间表
发起方:
事务发起方本地事务:start local transaction
a.调用方法:
事务传播特性:PROPAGATION_REQUIRES_NEW
insert事务activity表,记录分布式事务状态
b.原子操作A(RPC服务A预提交)
c.调用方法:
事务传播特性:PROPAGATION_REQUIRES_NEW
insert事务Action表
d.原子操作B(RPC服务B预提交)
e.调用方法:
事务传播特性:PROPAGATION_REQUIRES_NEW
insert事务Action表
....
f.调用方法:
事务传播特性:PROPAGATION_REQUIRED
update事务acitvity,更新分布式事务状态为成功
end local transaction
进入提交阶段:
本地事务正常结束 -> 远程事务提交(rpc)
本地事务发生回滚 -> 远程事务回滚(rpc)
二阶段异常:
server 定时捞取activity中的异常数据,进行回滚会提交
参与者实现
1. 预提交
2. 提交
3. 回滚
AT模式
区别在于seata的回滚是记录了数据之前的状态,对比当前数据,一致,进行sql逆向,脏数据人工处理
单独部署的TC,各个分支事务向TC注册分支事务
分支事务-> 写回滚日志,处理数据库业务
TC 单独部署的全局事务协调人
TM 事务发起方,负责事务的发起,提交,回滚
RM 资源管理器,注册分支事务,报告分支状态,保留分支日志,驱动分支事务回滚,提交