-
前言:为什么“幂等”是分布式系统最关键的工程概念之一?
- 并发写入
- 重试机制
- MQ 至少一次投递
- 网络超时 + 客户端重发
- 不做幂等 = 订单重复扣钱、优惠券发多张、库存扣穿
-
幂等的四类场景
- 接口幂等(API)
- 消息幂等(MQ)
- 任务幂等(定时任务、补偿任务)
- 数据变化幂等(状态机 + 双写)
-
幂等的三大核心策略
- 请求标识(Idempotent Key)
- 幂等记录表(Idempotent Table)
- 状态驱动(State Machine Idempotency)
-
接口幂等设计
- 幂等 Key:用户ID+业务ID+业务时间戳
- 幂等表:uniq key 保证唯一执行
- 请求 + 结果缓存(防止重复提交)
-
消息幂等(MQ)
- 消费幂等表
- 消费偏移量(Offset)保障
- State-based 消费(状态机避免重复消费)
-
任务幂等设计
- 定时任务重复执行怎么办?
- 任务执行记录表
- 任务锁(分布式锁 + 去重机制)
-
状态机幂等(订单、审批、工作流的核心)
- 幂等不依赖请求,而依赖状态转换规则
- 例如:已支付 → 再次支付 = 忽略
- 适用于金融、B 端审批、业务流程类系统
-
全链路幂等(高级版)
- API → MQ → DB → 缓存 → 下游系统
- 整条链必须具有“重复不会产生第二次效果”的能力
- 可以通过 Event ID / TraceId + 状态机实现
-
案例:订单支付幂等体系完整落地
- 下单 → 回调 → 状态机迁移
- 任何重复请求/重复回调都不会再处理
- 幂等日志 + 事件校验
-
总结
- 幂等不是“为了解决重复请求”
- 幂等是分布式系统一致性的重要基石