Heroku,RabbitMQ和许多工人。什么是最好的架构?

时间:2017-02-18 21:50:48

标签: heroku rabbitmq

我正在寻找处理以下场景的最佳方法:

我有多个边缘设备将传感器数据发布到RabbitMq代理。代理将经历每秒约500条消息的总体工作量。然后有一个python worker dyno,它一次消耗一个传感器读数,对它应用一个过滤器(可能需要5-15ms)并将结果发布到另一个主题。

当然,一个工作人员不足以满足所有请求,因此我需要适当的扩展。我使用队列来确保每个传感器读数只消耗一次!

我的问题是:

  1. 我是否可以水平扩展并根据需要启动尽可能多的dynos来处理RabbitMQ队列中的所有请求?看似简单但更昂贵。

  2. 或者在每个dyno上使用更少的dynos但运行更多的线程并使用例如芹菜?

  3. 或者是否有一个负载均衡器消耗了1个项目,并动态调度动态?

  4. 完全不同的东西?

2 个答案:

答案 0 :(得分:2)

选项1或2是您最好的投注

我不认为选项3存在而不直接与heroku API绑定,并为自己编写大量代码......但这对你的需求来说太过分了,IMO

1& 2,选择取决于您是否希望增加处理更多消息的能力,而无需重新部署代码。

选项1通常是我的偏好,因为我可以添加一个新的dyno实例并完成。需要10秒钟。

如果您不介意调整代码并重新部署,

选项2可能会有效。它会增加额外的时间和精力来弥补成本。

但是在某些时候,选项2无论如何都需要变成选项1,因为你只能在dyno上做很多工作。你会在dynos的线程上遇到限制。然后你将与dynos一起扩展。

答案 1 :(得分:0)

使用GuvScale似乎可以扩展使用RabbitMQ按摩的工人