订单重复扣款故障分析:如何保障支付系统的幂等性
什么是幂等性?
是指对同一操作的多次执行,其结果与一次执行相同
为什么需要幂等性?
1.重复创建订单:如果因网络延迟重复提交订单请求,可能会导致创建多笔相同的订单
2.库存错误:在扣减库存时,重复请求可能导致库存被多次扣减,从而出现超卖现象
3.资金安全隐患:用户可能会遭遇重复转账,扣款等情况,影响资金安全.
如何实现幂等性?
1.为每个支付请求生成全局唯一ID,系统可以在执行操作前检查该ID是否存在,如果不存在,则执行操作行为存入系统,如果存在,则表示已执行过,避免重复处理
插入与更新
数据库使用唯一索引
一锁二判三更新
1.先加锁:使用redis分布锁,确保在处理请求时不会有其他请求干扰
2.进行幂等性判断:检查请求是否已被处理,可以基于状态机,唯一性索引等进行判断
3.数据更新:如果判断通过,执行数据更新操作,并在完成后释放锁