消息队列核心概念与安全保障
1. 生产者与消费者的隔离
在设计系统时,一个重要目标是将不同层级解耦,消息队列层级能帮助我们实现收集层和分析层的解耦。这一设计有其必要性和显著优势。
在实际业务中,根据业务需求和流式系统设计,可能会出现生产者(收集层)生成消息的速度超过消费者(分析层)消费速度的情况。这通常是因为分析层的处理强度高于收集层,无法快速处理数据,进而带来两个挑战:一是消费者无法及时从收集层消费数据该怎么办;二是如何防止分析层被收集层产生的事件激增所淹没。
为了更形象地理解,我们可以想象这样一个场景:一根水管末端被堵住,而水龙头却开着,水管会膨胀,最终因背压而爆裂。对应到数据领域,数据从收集层流向分析层也存在类似情况,可分为三个阶段:
- 阶段A :数据流动正常,这是我们期望看到的状态。
- 阶段B :出现异常,背压开始累积。
- 阶段C :数据管道在压力下破裂,数据丢失,且永远无法恢复。
这种数据丢失的情况对某些业务来说可能是灾难性的。乍一看,这似乎是消费者的问题,我们可能会认为增加消费者数量或提高其处理速度就能解决。但实际上,在很多用例中,消费者偶尔缓慢读取或离线是完全可以接受的。例如,消费者可能仅需每小时读取一次所有消息以支持批处理用例,它们会间歇性离线,然后连接并读取上一小时的数据。
需要注意的是,并非所有消息队列系统都提供生产者流量控制功能,这就需要应用开发者自行控制收集层生成消息的速率。否则,可能会使消费者和代理不堪重负。支持持久消息的消息队列产品能够让消费者缓慢读取消息或偶尔离线
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



