秒杀系统设计思路

nd | | 访问(188)

  秒杀问题

  对现有网站业务的冲击

  高并发情况以及数据库的负载

  突然增加的网络和服务器带宽

  直接下单

  防止机器秒杀

  秒杀方案

  秒杀系统独立部署

  秒杀商品页面静态化

  租借秒杀活动网络带宽

  动态生成随机下单页面URL

  将请求尽量拦截在系统上游

  充分利用缓存

  秒杀优化细节

  浏览器层请求拦截

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

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

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

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

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

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

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

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

  总结

  在高并发情况下,影响系统性能的一个关键因素是:数据的一致性要求。

  尽量将请求拦截在系统上游

  读多写少的常用多使用缓存

  前端三板斧【扩容】+【限流】+【静态化】

  后端两条路【内存】+【排队】