前言
之前公司有做过秒杀项目,由于时间和技术原因,做的一团屎,很惭愧,别人问起来都不知道怎么回答,怎么吹都不知道。现在稍微总结一下应该要注意什么,理论知识。
主要技术
- 静态资源
- CDN
- 缓存
- 分流
- 负载均衡
- 乐观锁
- 验证码
主要方案
前端
- 秒杀页面数据的静态化,可以缓存到CDN上面,加快用户访问,同时可以在Nginx层做分流,减轻服务器的压力。
- 限制用户点击频率
后端
- 把秒杀活动分离当前系统,避免其他业务受到秒杀活动的波及,要挂也只挂秒杀。
- 把秒杀商品数据数量当成一个阀值,统计进来的订单数量,如果订单数量大于阀值,后面再进来的订单就直接返回失败,可以通过缓存来做。控流。以免对数据形成压力。
- 库存使用乐观锁。为什么不使用悲观锁,使用悲观锁的话,对高并发的业务场景下,不太适合。
- 对IP进行监控,如果某个IP请求量频繁,可以使用验证码对其进行限制,也可以防止机器人或刷单。
- 如果对用户下单数量有限制,也可以利用redis或其他KV存储做判断。
总结
- 多使用静态资源
- 尽量少去"骚扰"数据库
- 减少写操作
- 多使用缓存
- 在用户体验好的情况下,最大程度减少服务器压力