一、秒杀系统与普通系统的区别
之所以叫做秒杀系统,就是因为与普通的系统相比,它要在很短的时间内处理比平时大的多的流量请求,怎么保证服务器在处理这些请求时不至于出现宕机等现象,使我们设计秒杀系统的原则。
秒杀活动一般可以分为3个阶段:
- 秒杀前:用户不断刷新商品详情页,页面请求达到瞬时高峰
- 秒杀开始: 用户点击秒杀按钮,下单请求达到瞬时高峰
- 秒杀后: 一部分成功下单的用户不断刷新订单详情页。
一般做法是利用数据库的行级锁,只有抢到锁的请求可以进行库存查询和下单操作。但是在高并发的情况下,数据库无法承担如此大的请求,往往会使整个服务 blocked
二、如何设计秒杀系统
如何防止作弊?
1.检测指定IP请求速率,若发现ip请求速率过高,可以弹出验证码验证或者直接封禁ip
2.用户限流,在某一时间段只允许用户提交一次请求。
- 利用CDN和浏览器缓存进行一级流量拦截
秒杀前因为用户不断刷新商品详情页,我们可以将该页面上的元素尽量静态化处理,除了秒杀按钮需要服务端进行动态判断,其他的静态数据可以缓存在浏览器和 CDN 上。 - 利用读写分离Redis缓存拦截流量
将数据库中的库存信息缓存到redis中,所有减库存的操作都放在redis中,当秒杀结束后,再把用户秒杀请求同步到数据库中。 - 利用消息队列缓存请求
先把这些请求都缓存到消息队列中,数据库订阅消息减库存,减库存成功的请求返回秒杀成功,失败的返回秒杀结束。
网友评论