突然想到一个问题,消息队列的意义是什么?

2020-12-01 14:25:40 +08:00
 Joker123456789

消息队列 发明的初衷 是 降低下游的压力,让下游的服务按照自己的能力去消费。

但是这引发了另一个问题,如果下游服务的消费能力小于上游服务的生产能力,那么必然会造成消息积压,而且随着时间的累计会越积越多。

为了解决这个问题,不得不增加消费能力,但是又出现了一个问题,如果消费能力上去了,可以让队列里不积压消息了,那就说明消费能力不比生产能力差了,既然如此,为什么不直接让生产者调用消费者?

12026 次点击
所在节点    Java
95 条回复
myd
2020-12-01 14:28:14 +08:00
如果没有队列,系统同时处理多个任务可能会崩溃。

另一方面,云服务器可以动态扩容,按需付费。
ruoxie
2020-12-01 14:29:02 +08:00
解耦算一个吧
Joker123456789
2020-12-01 14:29:41 +08:00
@myd 为什么会同时处理多个任务? 直接调用下游服务,让下游服务去处理啊? 下游服务也可以负载均衡,动态扩容啊。
Jooooooooo
2020-12-01 14:31:54 +08:00
消息队列不只有这一个功能
h82258652
2020-12-01 14:32:04 +08:00
假如上游的生产能力是动态的呢?例如某个时段高,其余时段低。
bnm965321
2020-12-01 14:33:30 +08:00
异步处理,然后对任务安全地消费泵机重启以后也能接着干
DoctorCat
2020-12-01 14:35:39 +08:00
解偶设计、异步任务、削峰
katsusan
2020-12-01 14:36:02 +08:00
最明显的一个原因就是上游的生产能力并不固定,当下游的消费能力不够需要扩容到扩容完成期间需要一个缓冲,消息队列正好提供了这个缓冲区。
KaynW
2020-12-01 14:36:23 +08:00
上游和下游的处理效率在每个时间段都可能不一样
Joker123456789
2020-12-01 14:36:26 +08:00
@h82258652 这个倒是个问题。 不过这个高,除了暴增,基本也不会有太大问题吧。 这个时间段保护了下游服务,但是上游服务一样遭受了大量的流量。
kuro1
2020-12-01 14:36:38 +08:00
削峰平谷
misaka19000
2020-12-01 14:37:36 +08:00
解耦
xx6412223
2020-12-01 14:38:04 +08:00
解耦,从开发过程到业务理念
企业的各种系统可能是几年间陆续上的,要考虑业务扩展性
对于 A 系统,完成一个业务流程后,为什么还要调用和我不相关的 B,C,D 系统,为什么要了解你的业务,你的系统宕机了我管不管?
overthemoon
2020-12-01 14:38:43 +08:00
生产者消费过快,消费者消费过慢,会导致阻塞
shhch
2020-12-01 14:41:02 +08:00
服务解耦,异步处理都是;
防止瞬时峰值压垮服务;正常情况下处理能力是能够处理过来消息量的(你的服务至少要支撑起常态的访问量吧),但是一旦发生某些情况,比如什么活动啊,可能会有瞬发峰值产生,没有消息队列,可能会压垮某个服务;有了消息队列只是暂时消费服务没有处理完而已,不会被压垮;等消息量正常后,下游就可以处理完了;
kiracyan
2020-12-01 14:42:10 +08:00
解耦 异步 削峰
securityCoding
2020-12-01 14:43:39 +08:00
1.流量削峰
2.同步转异步
3.系统解耦
a719031256
2020-12-01 14:44:03 +08:00
面试用
哪有那么多业务需要解耦,消息队列现在也就面试考考,实际真没太大用处,反而会让系统复杂
Joker123456789
2020-12-01 14:44:27 +08:00
@xx6412223
@shhch

懂了,谢谢大佬们
killerv
2020-12-01 14:47:28 +08:00
一般消息队列处理的都是涉及三方、可延迟、服务质量不可控的行为,你无法保证调用第三方是否会出现超时、错误。
-----------
比如注册流程有个发短信的逻辑,但是短信服务出现了问题,如果走队列的话,一次调用失败,还可以继续尝试第二次第三次。但是如果没有队列,你难道要在当前请求中一直重试吗?这是个灾难。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/730959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX