You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

销售网站RDS数据库升级期间如何解决并发下单写入冲突问题

可行的低成本并发处理方案
  • 改用SQS FIFO队列按商品维度做消息保序
    将现有普通SQS替换为FIFO队列,发送下单请求时把商品ID作为MessageGroupId参数传入。AWS SQS会保证同一个分组ID下的消息严格按发送顺序消费,不会出现用户B的同商品下单请求比队列中更早的用户A请求先处理的情况,FIFO队列相比普通队列仅增加极少量成本,不需要引入额外组件。
  • 数据库层增加乐观锁校验逻辑
    修改库存扣减的SQL语句为带条件判断的原子操作:
UPDATE goods SET stock = stock - 1 WHERE goods_id = #{商品ID} AND stock > 0

执行后根据影响行数判断是否扣减成功,即使出现消费顺序异常的场景,也能从底层避免超卖,完全无额外成本。

  • 调整流量拦截逻辑,避免双路径请求
    你当前的逻辑是数据库无法连接时才把请求写入SQS,这就导致升级过程中存在部分请求走正常数据库路径、部分请求走队列的情况。可以调整CloudWatch触发Lambda的逻辑:触发RDS升级操作的同时,临时把API网关的所有下单请求全部切入SQS排队,直到Lambda检测到RDS恢复正常再切回正常处理路径,所有下单请求统一按顺序消费,从根源消除并发冲突。
  • 异常兜底补偿逻辑
    在消费SQS消息扣减库存失败时,保留请求的原始下单时间戳,对比当前商品最后一次库存扣减的时间,如果当前排队的请求下单时间更早,可以给用户发送补偿通知(如优先补货资格、无门槛优惠券等),优化用户体验。

内容的提问来源于stack exchange,提问作者Leonardo Campanha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:18:05