标准答案

  1. 入口按活动、用户、设备和 IP 做资格校验、验证码或令牌、限流和排队,尽早拒绝无效流量。
  2. 库存使用原子条件扣减、预扣或队列串行化等方式控制超卖,并把库存热点与普通商品流量隔离。
  3. 下单请求必须幂等,用户重复点击或网络重试只能得到同一订单或明确的排队结果。
  4. 订单、支付、库存和消息链路都要有对账与补偿,处理超时释放、重复消费和异步失败。

题目解析

秒杀不是单纯的数据库 UPDATE 问题。若大量请求先进入应用、数据库和消息系统,库存逻辑再正确也可能被排队和连接耗尽拖垮。

可用性取舍要透明:用户可以接受“排队中”或“售罄”,但不能接受下单成功后无订单、重复扣款或长期未知状态。

常见误区

  • 让所有请求直接查询并更新数据库库存。
  • 只用缓存预扣库存,没有最终订单确认和对账。
  • 限流只按全局 QPS,合法用户被脚本流量挤掉。

作者信息