秒杀问题:
- 高并发
- 恶意请求和无效请求
- 超卖
- 数据库压力
- 链接暴露
一、高并发解决方法
- 用Nginx负载均衡,还可以用Nginx拦截高频率的恶意请求
二、恶意请求和无效请求
- Nginx拦截高频率的恶意请求
- 前端优化:图片放到对象存储 页面静态化,用户在点击下单以后按钮变成灰色,js中限制请求之间需要间隔几秒
- 后端优化: 秒杀涉及到的订单生成支付等操作,都是要秒杀完成后,秒杀成功的用户才能做的操作,在产品库存没有了以后,直接反回false
三、超卖解决方法,数据库压力
- 事先把所有的产品都放到Redis队列里面,由于队列具有原子性,在队列消费完了以后,后面的请求都直接返回false,直接挡住后面的请求
- 加入数据持久化,由于所有的秒杀操作都是在Redis中实现的,后面的操作只是秒杀成功了的用户,最后落到数据库上的压力就非常小了
四、链接暴露
就算前端做了相关的措施,但是在程序员或者高手面前都是无用的,直接拿到接口写个循环可以得到很多优势,秒杀开始后客户端请求服务器获取到加密串,再秒杀下单的时候带上这个加密串,一个串只能请求一次,这样就能避免拿到链接后写死循环请求
网友评论