如何设计秒杀系统?

1 个回答

  • 卢璐说
    能治愈生活的良方,是保持对生活的热爱。
    1.前端页面 提前把静态资源部署到CDN,减少静态资源访问的压力,其次是可以为静态资源的header设置成强缓存cache-control,2分钟后才过期,这样当第一次请求完静态资源后,再次刷新时,就会使用浏览器里面的缓存的静态资源,而不是再发请求。 2.nginx层面 使用limit_req_zone模块针对用户id为key,进行限流,放在同一个用户恶意发起多个请求,限制每个用户每5分钟只能请求100次接口。 3.业务系统设置限流熔断 当业务系统收到的请求达到一定限制后,停止接受请求,可以使用hystrix进行限流。如果是秒杀商品,当Redis里面存的商品库存减完时,就对所有用户返回统一的状态码,告诉前端商品被抢光了,不再进行后面的业务逻辑。 4.使用消息队列削峰 就是如果秒杀请求对应的业务逻辑处理时间如果过长,例如减库存,生成订单等,业务系统可以先将用户的秒杀请求封装成Kafka消息,发送到消息队列,由其他业务系统消费Kafka消息,完成生成订单等耗时操作。
    编辑于 2022-02-28 16:48 •IP属地 宁夏
    举报
    评论
    收藏1