这是我参与「第五届青训营 」笔记创作活动的第6天
消息队列的前世今生
案例1:某系统需要记录用户的搜索和点击行为信息直接存储到服务器中,但是如果存储服务器发生故障,就会导致程序出现问题。
案例2:某抢购系统需要在用户下单后进行扣除商品库存、通知商家等操作。如果其中某一任务耗时较长,可能会导致用户体验不佳。
案例3:某分布式系统需要将每个主机的日志上传到日志服务器,以防止本地日志丢失。如果主机数量和日志条数过多,会导致日志服务器过载,导致系统出现问题。
分析:这些系统在耗时的操作上都采用了同步操作,并且关键操作的可用性和容量不足。因此,我们需要将某些操作更改为异步,并提高关键操作的可用性。因此,我们需要引入消息队列。
消息队列的特点:异步、解耦、削峰
消息队列的应用场景:
- 异步处理
- 应用解耦
- 流量削峰
- 日志处理
- 消息通讯
消息队列的推拉模型
消息队列的推拉模型分为两种:推模型和拉模型。在推模型中,消息的推送由服务端负责,客户端只需要对推送来的消息进行被动的处理。在拉模型中,由客户端来主动获取消息,服务端主要负责存储和处理推送请求。
这两种模型和 HTTP 中两种查询信息的模式比较相像。推模式对应 HTTP 中的 websockets 通讯,主要由服务端推送信息,消息的实时性较强。拉模式对应 HTTP 中的轮询,由浏览器方拉取信息,消耗资源较多,适用于对实时性要求不强的业务。
常见的消息队列软件
- Kafka
- RocketMQ
- RabbitMQ
- ActiveMQ
课后作业
-
消息队列的应用场景有哪些?
-
异步处理
-
应用解耦
-
流量削峰
-
日志处理
-
消息通讯
-
Kafka的哪些Feature让其可以支撑大吞吐写入的场景?
- 顺序读写
- 文件分段
- 批量发送
- 数据压缩