支付系统最严重的问题之一:重复扣款

支付系统如何保证恰好执行一次?拆成两个问题 👇
📌 至少一次 = 重试
网络错误或超时时重试,保证支付最终成功
📌 至多一次 = 幂等性检查
- 客户端生成唯一的幂等键(推荐UUID)
- 放在HTTP Header中:idempotency-key: key_value
- 服务端收到相同幂等键的请求时,返回之前的结果而不重复执行
📌 恰好一次 = 重试 + 幂等性
数学上:exactly-once = at-least-once + at-most-once
💡 Stripe和PayPal都推荐使用UUID作为幂等键。这是支付系统设计的基本功。
#支付系统 #幂等性 #系统设计 #后端开发 #程序员 #技术干货