SQL分布式事务无法靠单库ACID保证全局一致性,须采用最终一致性方案,包括本地消息表、Saga模式、对账修复及严格设计原则。

SQL分布式事务无法靠单库ACID直接保证全局一致性,必须借助最终一致性方案来平衡可用性与数据正确性。核心思路是放弃强一致,接受短暂不一致,通过异步补偿、状态追踪和重试机制,让系统在有限时间内自动收敛到一致状态。
基于本地消息表的可靠事件传递
这是最常用也最易落地的最终一致性方案。关键是在业务数据库中建一张“消息表”,所有需要跨服务通知的操作,先在本地事务中写业务数据+写消息记录,再由独立的消息投递服务异步读取并发送到MQ(如Kafka、RocketMQ)。
- 消息表需包含唯一业务ID、消息内容、状态(待发送/已发送/失败)、重试次数、创建时间等字段
- 投递服务采用“定时轮询 + 指数退避重试”,避免高频刷库;状态更新必须用UPDATE WHERE status='待发送' AND id=xxx,防止重复投递
- 下游服务消费消息后,需幂等处理(例如用业务ID做去重或乐观锁校验版本号)
使用Saga模式协调长事务
Saga把一个分布式事务拆成多个本地事务,每个步骤都有对应的补偿操作。正向流程依次执行,任一环节失败则按反向顺序调用补偿事务回滚已提交的动作。
标签: 金融
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~