我正在寻找处理以下场景的最佳方法:
我有多个边缘设备将传感器数据发布到RabbitMq代理。代理将经历每秒约500条消息的总体工作量。然后有一个python worker dyno,它一次消耗一个传感器读数,对它应用一个过滤器(可能需要5-15ms)并将结果发布到另一个主题。
当然,一个工作人员不足以满足所有请求,因此我需要适当的扩展。我使用队列来确保每个传感器读数只消耗一次!
我的问题是:
我是否可以水平扩展并根据需要启动尽可能多的dynos来处理RabbitMQ队列中的所有请求?看似简单但更昂贵。
或者在每个dyno上使用更少的dynos但运行更多的线程并使用例如芹菜?
或者是否有一个负载均衡器消耗了1个项目,并动态调度动态?
完全不同的东西?
答案 0 :(得分:2)
选项1或2是您最好的投注
我不认为选项3存在而不直接与heroku API绑定,并为自己编写大量代码......但这对你的需求来说太过分了,IMO
1& 2,选择取决于您是否希望增加处理更多消息的能力,而无需重新部署代码。
选项1通常是我的偏好,因为我可以添加一个新的dyno实例并完成。需要10秒钟。
如果您不介意调整代码并重新部署,选项2可能会有效。它会增加额外的时间和精力来弥补成本。
但是在某些时候,选项2无论如何都需要变成选项1,因为你只能在dyno上做很多工作。你会在dynos的线程上遇到限制。然后你将与dynos一起扩展。
答案 1 :(得分:0)
使用GuvScale似乎可以扩展使用RabbitMQ按摩的工人