最近开始用消息队列 有个问题 怎么样才能动态的保证消费速率和生产速率不差的太多

2017-11-24 17:04:21 +08:00
 soulmine

因为消费进程的时间不是很固定 一会几秒一会几十秒的 还有就是有可能会挂 有什么办法能够动态的调整生产速率或者消费速率这种么 不要求完全不积压 但也别积压的太多啊 弄得生产都跑完多久了 消费还在跑.....

5017 次点击
所在节点    程序员
22 条回复
binux
2017-11-24 17:07:12 +08:00
生产者查询一下队列大小,积压了就等一下
owenliang
2017-11-24 17:09:36 +08:00
增加消费者数量。
p2pCoder
2017-11-24 17:12:35 +08:00
我觉得 还是 要 保证消费速率够快
我在上一家 公司,开始的时候,把对接 一家 银行的 所有同步连接写在一个 队列里作为消费者,
每天进行 还款的时候,队列很容易蹦
后来 就把 连接 分到 不同 模块了

如果你 只有 一个消费者,消费者 速率一定,那么怎么调整,效果也不会很好
soulmine
2017-11-24 17:26:06 +08:00
@p2pCoder 与其消息积压 不如让消费者空转?
nullcoder
2017-11-24 17:31:13 +08:00
时间不确定是跟业务有关吗?
如果是的话,可以吧一个分成几个。
用过 rabbitmq 里面积压量可以配置
p2pCoder
2017-11-24 17:33:08 +08:00
@soulmine 你为了 可用和性能,启动更多消费者,或者在 消费者中间合理分配 负载,很正常
你启动 一个 消费者,不消费消息,就不会 操作 db,又不会消耗多少资源,最后,你要完成 的 db 的操作是相等的
系统 吞吐量增大,现有服务不能满足需求,肯定要选择做 分布式 多节点 和 负债均衡
julyclyde
2017-11-24 20:06:51 +08:00
如果差不多还要队列干什么?
cevincheung
2017-11-24 20:15:40 +08:00
不是有额外的监控么?持续多久消费能力不够自动开新的 worker 啊
BBCCBB
2017-11-24 20:44:02 +08:00
监测你应用的消息处理速度,和 mq 的速度,然后计算一下呗
chairuosen
2017-11-24 21:10:00 +08:00
看到积压了,
你能让生产者别生产么?不能。
你能让消费者开无双么?不能。
加机器啊
Moker
2017-11-24 21:34:18 +08:00
应该提高消费的能力和减少消费的时间 会挂的原因是什么?
neoblackcap
2017-11-24 21:57:48 +08:00
@soulmine 空转?不,你拿不到任务,直接 sleep 了,系统会对你这个进程进行调度的。
lihongjie0209
2017-11-24 22:04:46 +08:00
固定大小的缓存区?
RadishWind
2017-11-24 22:12:37 +08:00
不知道具体需求是什么?如果数据过多而且不重要的话,固定一个队列的最大长度就行了
whatisnew
2017-11-24 22:15:07 +08:00
按常量队列起 10 个 worker 正好,如果突然来了大量请求,那么 10 个 worker 肯定不够的,也不能天天盯着监控吧
swulling
2017-11-24 22:20:17 +08:00
worker 根据队列中的数据量弹性调度,有积压就增多 worker 到没有积压,没有积压就开始一个个 worker 下线。
jpmorn
2017-11-24 22:26:24 +08:00
little 定律估算啊。编程珠玑里面有写的。
alcarl
2017-11-24 22:32:35 +08:00
这种需求最简单的就是不用消息队列,用线程池
soulmine
2017-11-24 22:39:15 +08:00
@swulling 怎么弹性调度呢
wsbnd9
2017-11-24 23:06:39 +08:00
开多进程 增加消耗的速度

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

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

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

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

© 2021 V2EX