分布式系统保证数据强一致性的示例

分布式系统如何保证事务一致性(常见模式)
在分布式系统(多个服务、消息队列、外部系统)里,强一致性事务(跨服务跨 DB 的分布式事务)通常代价高且难以扩展,常用实践是采用最终一致性与补偿机制:
常见方案(可组合):
-
事务性 Outbox + Message Relay(推荐)
-
写 DB 和 outbox 在同一事务,异步投递消息(见上)。保证“数据先写入 DB,消息可靠发送”。
-
-
Saga 模式
-
编排式 Saga(有协调者)或编舞式 Saga(事件驱动)。每个步骤都可做局部事务,失败时调用补偿动作回滚先前步骤。
-
-
两阶段提交(2PC)
-
可提供强一致性,但实现复杂、性能差、可用性低。生产环境中一般不推荐跨服务频繁使用。
-
-
幂等与去重
-
所有消费者实现幂等(通过 idempotency key / unique constraint)和去重,允许消息重试而不产生副作用。
-
-
消息确认与重试策略
-
在 RabbitMQ 使用 manual ack、Dead Letter Exchanges、限速、backoff。
-
-
分布式事务协调器或 TCC(Try/Confirm/Cancel)
-
适用于某些场景,但实现复杂,需要各服务实现 try/confirm/cancel。
-
-
CDC(Change Data Capture)+ Event Streaming
-
用 Debezium 等把 DB 变更转为事件流,保证 eventual consistency。
-
整体架构优点
-
异步削峰
-
前置逻辑(余额扣减 + 送礼记录 + MQ 投递)同步完成;
-
其余分账、钻石消耗、消息广播等用 RabbitMQ 异步处理,减轻主流程压力。
-
-
幂等与容错考虑
-
你设计了“定时任务补偿”来应对 MQ 异常、网络中断等问题;
-
异步消息中消费逻辑分步清晰(记录钻石消费、收益、分值等)。
-
-
数据一致性
-
扣余额 + 插入赠送记录在同一个事务;
-
异步消费通过幂等补偿实现最终一致性。
-
