Message Queue(消息队列)

概述

参考:

场景一:日志采集系统,拿 Loki 举例,采集器(promtail)采集数据后,存储到后端日志存储器(Loki)上,当需要采集多个节点,并且当日志大量产生时, Loki 的处理很有可能会出现瓶颈而无法处理写入请求,这时候,我们就想要在 采集器 和 存储中间添加一个缓冲,来减慢后端存储的压力

而这就是 消息队列 的作用之一,采集器作为 MQ 的生产者,将日志数据传入队列,日志存储器作为 MQ 的消费者,从队列中逐步拿取日志数据并存储。有了这么一个缓冲,Loki 的压力将会得到很大缓和。

这时候可能还会有这种想法:我直接限制 采集器 的处理逻辑不好么,为什么还要中间再加一层东西,增加故障点。这是为了解耦,采集器的处理逻辑就是采集日志并上传,不要过多关注此行为之外的东西,这样一个产品才能快速迭代,更好的处理逻辑。

这种行为简称:消减波峰,保护后端(消费端)

场景二:现代的互联网应用大量地使用了消息队列(Messaging)。消息队列不仅被用于系统内部组件之间的通信,同时也被用于系统跟其它服务之间的交互。消息队列的使用可以增加系统的可扩展性、灵活性和用户体验。非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。而基于消息队列可以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

总结:消息队列能够将业务逻辑解耦,调用方只需要下达命令而不用等待整个逻辑执行完毕。除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑。

常见消息队列

RocketMQ

RabbitMQ

Kafka

ZeroMQ


最后修改 March 25, 2025: clearup (feb59d93)