Tenken blog

如何设计秒杀系统

秒杀系统说明

  1. 抢购页面到点才能进入,并且需要输入验证码
  2. 点击抢购按钮,AJAX异步请求后台,通过计数器判断商品是否已经超拍,如果没有超拍,则入队列,并且以KV形式保存用户抢购信息,延迟几秒跳转到支付页面,如果超拍,则直接返回显示商品已经秒杀完
  3. 为了防止并发超拍,支付页面需要判断消息队列长度是否超拍,并且读取KV保存的信息,如果没有超拍则直接让用户支付,如果超拍,则需要进一步读取数据库,如果数据库有记录,则直接让用户支付,如果数据库没记录,则应该是超拍,弹窗提示商品已经秒杀完。
  4. 秒杀时间一到,就执行定时入库脚步,如果商品还没秒杀完,程序休眠1秒再继续执行入库
  5. 设定支付时间是15分钟或者是30分钟,定时执行取消订单脚步,然后放出库存继续抢购。

可能出现问题

  1. 消息队列系统可能成为性能瓶颈
  2. 商品超拍问题,可能在支付页面会出现直接读DB的现象(这个数量应该会比较少)
请我吃辣条吧~~