秒杀系统的设计

2019-03-20  本文已影响0人  ZMRWEGo

一、秒杀系统与普通系统的区别

之所以叫做秒杀系统,就是因为与普通的系统相比,它要在很短的时间内处理比平时大的多的流量请求,怎么保证服务器在处理这些请求时不至于出现宕机等现象,使我们设计秒杀系统的原则。
秒杀活动一般可以分为3个阶段:

  1. 秒杀前:用户不断刷新商品详情页,页面请求达到瞬时高峰
  2. 秒杀开始: 用户点击秒杀按钮,下单请求达到瞬时高峰
  3. 秒杀后: 一部分成功下单的用户不断刷新订单详情页。
    一般做法是利用数据库的行级锁,只有抢到锁的请求可以进行库存查询和下单操作。但是在高并发的情况下,数据库无法承担如此大的请求,往往会使整个服务 blocked

二、如何设计秒杀系统

如何防止作弊?
1.检测指定IP请求速率,若发现ip请求速率过高,可以弹出验证码验证或者直接封禁ip
2.用户限流,在某一时间段只允许用户提交一次请求。

  1. 利用CDN和浏览器缓存进行一级流量拦截
    秒杀前因为用户不断刷新商品详情页,我们可以将该页面上的元素尽量静态化处理,除了秒杀按钮需要服务端进行动态判断,其他的静态数据可以缓存在浏览器和 CDN 上。
  2. 利用读写分离Redis缓存拦截流量
    将数据库中的库存信息缓存到redis中,所有减库存的操作都放在redis中,当秒杀结束后,再把用户秒杀请求同步到数据库中。
  3. 利用消息队列缓存请求
    先把这些请求都缓存到消息队列中,数据库订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。
上一篇 下一篇

猜你喜欢

热点阅读