秒杀系统设计思路


作者: 康凯森

日期: 2016-04-03

分类: 笔记


秒杀难点

库存只有一份,所有人会在集中的时间读和写这些数据。

秒杀问题

  • 对现有网站业务的冲击
  • 高并发情况以及数据库的负载
  • 突然增加的网络和服务器带宽
  • 直接下单
  • 防止机器秒杀

秒杀方案

  • 秒杀系统独立部署
  • 秒杀商品页面静态化
  • 租借秒杀活动网络带宽
  • 动态生成随机下单页面URL
  • 将请求尽量拦截在系统上游
  • 充分利用缓存

秒杀优化细节

浏览器层请求拦截

产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求

JS层面,限制用户在x秒之内只能提交一次请求

站点层请求拦截与页面缓存

同一个uid,限制访问频度,做页面缓存

同一个item的查询,例如手机车次,做页面缓存

服务层请求拦截与数据缓存

对于写请求,做请求队列,每次只允许有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”

对于读请求,cache来抗,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的

总结

  • 在高并发情况下,影响系统性能的一个关键因素是:数据的一致性要求。
  • 尽量将请求拦截在系统上游
  • 读多写少的常用多使用缓存
  • 前端三板斧【扩容】+【限流】+【静态化】
  • 后端两条路【内存】+【排队】

参考资料

如何实现“秒杀”系统

秒杀系统架构优化思路

如何设计一个秒杀系统

网购秒杀系统架构设计

秒杀系统的设计和优化

“米粉节”背后的故事——小米网抢购系统开发实践

秒杀系统设计的知识点

12306订票系统设计关键点

秒杀系统架构分析与实战


评论