DDD-分布式一致性

分布式一致性

不要局限于数据库事务,也可能是业务事务,俗称长事务

实现要素

接口幂等性(分布式存在重试机制)

内部状态管控(状态机)

异常推进模式(重试,查询对端状态)

流水型数据(进出接口留存为单据,微服务调用链)

最终对账(分析微服务对应的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

https://segmentfault.com/a/1190000040321750

https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650454838&idx=1&sn=b4626ad3db1e5b13b27387a0b6cf9c8f&chksm=8396732eb4e1fa389b8d623311571a959c31d93a1d7ce2e2ab0d6b3582e42bc167cea8b93cb2&mpshare=1&scene=1&srcid=0321KVLkIjhgMKWius8yNRlq&sharer_sharetime=1647856913742&sharer_shareid=0f5daba1c53304b790c473ce7b5b4b10&key=0b1431e25a2ba464217d69b0c3a69369fb2e749ed5794a4e3efbd31cfd6c6c91b2858955730f7d8a3940086f169f519edd613d3a701f8ee3d7a636b52ff3ae8e08fdd5b67a04cf73c89f560c7b9143fc5b79f3b65dc53234dbf96ecba0d382eee6703b5946fdb43b76b0550a5f0d3fceacc7c67d69f1fc5f319f26c82f9f8165&ascene=1&uin=OTM4NTY4MzU%3D&devicetype=Windows+10&version=62060844&lang=zh_CN&exportkey=AT7dyAUBsQpgjdVY3kive0s%3D&acctmode=0&pass_ticket=gPnUzsTHhOsokjn3q9eNRh2cwjCEQG3GnX5vxMnzgNqmQFLo6ziAqYul3cPyoUEa&wx_header=0