

新闻资讯
技术学院分布式场景下MySQL需用最终一致性替代强一致性:①本地消息表模式在事务中写业务+消息,轮询投递并幂等处理;②Seata AT模式通过undo_log自动补偿,侵入小但需注意长事务锁风险;③最大努力通知+对账兜底适用于低一致性要求场景;④优先业务建模降级,收敛强一致到单库或采用TCC模式。
在分布式场景下,MySQL 单机事务(ACID)无法直接跨库、跨服务保证一致性,必须借助外部机制或架构设计来扩展事务语义。核心思路是:用“最终一致性”替代强一致性,通过补偿、记录、协同等手段降低数据不一致风险。

适用于服务间异步协作,比如订单创建后扣减库存。关键是在同一 MySQL 事务中,把业务操作和“待发送消息”写入本地消息表,再由独立线程轮询并投递到消息队列(如 RocketMQ/Kafka)。下游消费成功后,上游更新消息状态为已处理。
Seata 是主流开源方案,AT 模式对业务代码侵入小。它在每个 MySQL 分支事务执行前后,自动记录 undo_log(反向 SQL),全局事务协调器(TC)统一管理提交或回滚。若某分支失败,TC 驱动各参与者回滚本地 undo_log。
对一致性要求不高但需可追溯的场景(如积分发放、优惠券推送),采用“先执行、再通知、多次重试、定期对账”的策略。每次通知带版本号或时间戳,下游按幂等规则处理;后台每日跑批比对核心表与日志表,发现差异自动修复或人工介入。
很多场景可通过业务建模降级解决。例如“支付+发货”不强绑,改为“支付成功→生成待发货单→人工/自动调度发货”,用状态机驱动流程,异常时卡在中间态,人工干预成本远低于技术兜底。