分布式一致性
不要局限于数据库事务,也可能是业务事务,俗称长事务
实现要素
接口幂等性(分布式存在重试机制)
内部状态管控(状态机)
异常推进模式(重试,查询对端状态)
流水型数据(进出接口留存为单据,微服务调用链)
最终对账(分析微服务对应的db,业务数据是否一致,实时/离线对账)
空回滚
悬挂
实现方案
2PC,3PC
TCC(客户端 需要实现try, confirm, cancel 三个接口,侵入太大)
可靠消息最终一致性(利用rocketmq的prepare,confirm,死信消息机制实现)
本地消息表(利用本地数据库事务,一般业务均可以使用)
最大努力通知(一般适用于调用第三方支付成功后,回调本地业务模块),不断重试
框架
seata (AT、TCC、SAGA、XA)
性能消耗较大,存在全局锁,和undoSQL的生成
相关协议
XA 分布式事务协议,数据库原生支持(mysql5.7+,db2,oracle)
基于事件溯源的分布式事务
利用事件溯源DDD模式,消费端不停重试,当无法成功,发消息到TM进行事务回滚,TM分析消息链,反向调用上游服务,进去消息回溯
上游重新生成,回退消息序列的,实体物化视图。
参考
https://xiaomi-info.github.io/2020/01/02/distributed-transaction/
https://segmentfault.com/a/1190000039910621
https://www.infoq.cn/article/8bu33kusyj6p-waaoelt