消息队列 | 青训营笔记

78 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第6天

消息队列的前世今生

案例1:某系统需要记录用户的搜索和点击行为信息直接存储到服务器中,但是如果存储服务器发生故障,就会导致程序出现问题。

案例2:某抢购系统需要在用户下单后进行扣除商品库存、通知商家等操作。如果其中某一任务耗时较长,可能会导致用户体验不佳。

案例3:某分布式系统需要将每个主机的日志上传到日志服务器,以防止本地日志丢失。如果主机数量和日志条数过多,会导致日志服务器过载,导致系统出现问题。

分析:这些系统在耗时的操作上都采用了同步操作,并且关键操作的可用性和容量不足。因此,我们需要将某些操作更改为异步,并提高关键操作的可用性。因此,我们需要引入消息队列。

消息队列的特点:异步、解耦、削峰

消息队列的应用场景:

  1. 异步处理
  2. 应用解耦
  3. 流量削峰
  4. 日志处理
  5. 消息通讯

消息队列的推拉模型

消息队列的推拉模型分为两种:推模型和拉模型。在推模型中,消息的推送由服务端负责,客户端只需要对推送来的消息进行被动的处理。在拉模型中,由客户端来主动获取消息,服务端主要负责存储和处理推送请求。

这两种模型和 HTTP 中两种查询信息的模式比较相像。推模式对应 HTTP 中的 websockets 通讯,主要由服务端推送信息,消息的实时性较强。拉模式对应 HTTP 中的轮询,由浏览器方拉取信息,消耗资源较多,适用于对实时性要求不强的业务。

常见的消息队列软件

  • Kafka
  • RocketMQ
  • RabbitMQ
  • ActiveMQ

课后作业

  1. 消息队列的应用场景有哪些?

  2. 异步处理

  3. 应用解耦

  4. 流量削峰

  5. 日志处理

  6. 消息通讯

  7. Kafka的哪些Feature让其可以支撑大吞吐写入的场景?

  • 顺序读写
  • 文件分段
  • 批量发送
  • 数据压缩