分布式幂等体系(Idempotency System)—— 如何从单接口防重复进化到全链路幂等保障?

35 阅读1分钟
  1. 前言:为什么“幂等”是分布式系统最关键的工程概念之一?

    • 并发写入
    • 重试机制
    • MQ 至少一次投递
    • 网络超时 + 客户端重发
    • 不做幂等 = 订单重复扣钱、优惠券发多张、库存扣穿
  2. 幂等的四类场景

    • 接口幂等(API)
    • 消息幂等(MQ)
    • 任务幂等(定时任务、补偿任务)
    • 数据变化幂等(状态机 + 双写)
  3. 幂等的三大核心策略

    1. 请求标识(Idempotent Key)
    2. 幂等记录表(Idempotent Table)
    3. 状态驱动(State Machine Idempotency)
  4. 接口幂等设计

    • 幂等 Key:用户ID+业务ID+业务时间戳
    • 幂等表:uniq key 保证唯一执行
    • 请求 + 结果缓存(防止重复提交)
  5. 消息幂等(MQ)

    • 消费幂等表
    • 消费偏移量(Offset)保障
    • State-based 消费(状态机避免重复消费)
  6. 任务幂等设计

    • 定时任务重复执行怎么办?
    • 任务执行记录表
    • 任务锁(分布式锁 + 去重机制)
  7. 状态机幂等(订单、审批、工作流的核心)

    • 幂等不依赖请求,而依赖状态转换规则
    • 例如:已支付 → 再次支付 = 忽略
    • 适用于金融、B 端审批、业务流程类系统
  8. 全链路幂等(高级版)

    • API → MQ → DB → 缓存 → 下游系统
    • 整条链必须具有“重复不会产生第二次效果”的能力
    • 可以通过 Event ID / TraceId + 状态机实现
  9. 案例:订单支付幂等体系完整落地

    • 下单 → 回调 → 状态机迁移
    • 任何重复请求/重复回调都不会再处理
    • 幂等日志 + 事件校验
  10. 总结

  • 幂等不是“为了解决重复请求”
  • 幂等是分布式系统一致性的重要基石