4 Star 3 Fork 1

Heiky / Java Offer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
秒杀设计.md 1.96 KB
一键复制 编辑 原始数据 按行查看 历史
guohongtao2 提交于 2021-12-27 19:25 . 消息队列-秒杀设计

秒杀设计

场景

假设商城策划了一期秒杀活动,活动在每天的00:00开始,仅限前200名,那么秒杀即将开始时,后台会显示用户正在疯狂地刷新APP或者浏览器来保证自己能够尽量早的看到商品。

分析

  1. 用户查询的是少量的商品数据,属于查询的热点数据。可采用缓存策略,将请求尽量挡在上层的缓存。 80/20原则
  2. 能静态化的数据尽量静态化,提高CDN的命中率。 减少web服务器的访问压力和带宽负担
  3. Nginx直接访问分布式缓存(redis)。 减少tomcat的压力

类消息队列在系统设计中的使用

  • 在Java线程池中我们就会使用一个队列来暂时存储提交的任务,等待有空闲的线程处理这些任务
  • 操作系统中,中断的下半部分也会使用工作队列来实现延后执行
  • 实现一个RPC框架时,也会将从网络上接收到的请求写到队列里,再启动若干个工作线程来处理

消息队列在秒杀中的使用

  1. 将秒杀请求暂存在消息队列中,然后业务服务器会响应用户“秒杀结果正在计算中”,释放了系统资源之后再处理其它用户的请求
  2. 后台启动若干个消费者处理消息队列中的消息,执行库存检验、下单等逻辑
  3. 因为若干个消费者在执行,所以数据库的并发请求也是有限的
  4. 消息队列中的请求是可以被堆积的,当库存被消耗完之后,消息队列中堆积的请求就可以被丢弃了
  5. 通过异步处理,简化秒杀过程中的异步处理

以上作用就是消息队列最主要的作用:流量削峰。可以削平短暂的流量高峰。虽说堆积会造成请求被短暂延迟处理,但是只要我们时刻监控消息队列中的堆积长度,在堆积量超过一定量时, 增加一定数量的消费者即可。

1
https://gitee.com/heiky0214/java-offer.git
git@gitee.com:heiky0214/java-offer.git
heiky0214
java-offer
Java Offer
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891