秒杀系统设计思路
作者: 康凯森
日期: 2016-04-03
分类:
笔记
秒杀难点
库存只有一份,所有人会在集中的时间读和写这些数据。
秒杀问题
- 对现有网站业务的冲击
- 高并发情况以及数据库的负载
- 突然增加的网络和服务器带宽
- 直接下单
- 防止机器秒杀
秒杀方案
- 秒杀系统独立部署
- 秒杀商品页面静态化
- 租借秒杀活动网络带宽
- 动态生成随机下单页面URL
- 将请求尽量拦截在系统上游
- 充分利用缓存
秒杀优化细节
浏览器层请求拦截
产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求
JS层面,限制用户在x秒之内只能提交一次请求
站点层请求拦截与页面缓存
同一个uid,限制访问频度,做页面缓存
同一个item的查询,例如手机车次,做页面缓存
服务层请求拦截与数据缓存
对于写请求,做请求队列,每次只允许有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”
对于读请求,cache来抗,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的
总结
- 在高并发情况下,影响系统性能的一个关键因素是:数据的一致性要求。
- 尽量将请求拦截在系统上游
- 读多写少的常用多使用缓存
- 前端三板斧【扩容】+【限流】+【静态化】
- 后端两条路【内存】+【排队】
参考资料
如何实现“秒杀”系统
秒杀系统架构优化思路
如何设计一个秒杀系统
网购秒杀系统架构设计
秒杀系统的设计和优化
“米粉节”背后的故事——小米网抢购系统开发实践
秒杀系统设计的知识点
12306订票系统设计关键点
秒杀系统架构分析与实战
《OLAP 性能优化指南》欢迎 Star&共建
《OLAP 性能优化指南》
欢迎关注微信公众号