TM再发起Commit
Commit 过程出现宕机等异常,节点服务重启后,根据XA recover 再次进行commit补偿
缺点
同步阻塞模型
数据库资源锁定时间过长
全局锁(隔离级别-串行化),并发低...)
当Saga事物中任意一个本地事物出错时,可以通过调用相关的补偿方法恢复之前的事物,到达事物最终一致性
当每个Saga子事物T1,T2,....TN都有对应的补偿定义C1,C2,....CN-1,那么...Saga系统可以保证
子事物序列T1,T2,.....TN得以完成(最佳情况)
或者序列T1,T2,...TJ,CJ-1,..., C2,C1,0<J<N,得以完成
Saga隔离性
业务层控制并发
在应用层加锁...:暂不投递的消息,发送方已将消息成功发送到了MQ服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成"暂不能投递"状态,处于该种状态下的消息即半消息
消息回查:由于网络闪断,生产者应用重启等原因...通过业务逻辑层驱动
解决方案
基于异步补偿的分布式事物
架构设计的三大关键点
image.png
开始记录调用请求的参数,如果失败后基于参数做补偿接口,接口需要保证幂等性
总体架构设计
?