Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku、RabbitMQ和许多工人。什么是最好的架构?_Heroku_Rabbitmq - Fatal编程技术网

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

Heroku、RabbitMQ和许多工人。什么是最好的架构?,heroku,rabbitmq,Heroku,Rabbitmq,我正在寻找处理以下情况的最佳方法: 我有多个边缘设备将传感器数据发布到RabbitMq代理。代理将经历每秒约500条消息的总体工作负载。还有一个python工作者dyno,他一次读取一个传感器读数,对其应用过滤器(可能需要5-15毫秒),并将结果发布到另一个主题 当然,一个工作者不足以满足所有的请求,所以我需要适当的扩展。我使用队列来确保每个传感器读数只消耗一次 我的问题是: 我是否水平扩展并启动尽可能多的dyno来处理RabbitMQ队列中的所有请求?看起来很简单,但是更贵 或者,在每个dyn

我正在寻找处理以下情况的最佳方法:

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

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

我的问题是:

  • 我是否水平扩展并启动尽可能多的dyno来处理RabbitMQ队列中的所有请求?看起来很简单,但是更贵

  • 或者,在每个dyno上运行更少的dyno,但运行更多的线程,并使用例如芹菜,会更好吗

  • 或者是否有一个负载平衡器消耗队列中的1个项目并动态地调度dyno

  • 完全不同的东西


  • 选项1或2是您的最佳选择

    我认为如果不直接与heroku API绑定,并且为自己编写大量代码,选项3是不存在的。。。但这对你的需要来说太过分了,依我看

    在1和2之间,选择取决于您是否希望在不重新部署代码的情况下提高处理更多消息的能力

    选项1通常是我的首选,因为我只需添加一个新的dyno实例即可完成。需要10秒

    如果您不介意调整代码和重新部署,选项2可能会起作用。这将增加额外的时间和精力来权衡成本


    但在某一点上,无论如何,选项2都需要变成选项1,因为一开始你只能在dyno上做这么多的工作。使用dynos,您将在线程上遇到限制。然后您将使用dynos进行扩展。

    选项1或2是您的最佳选择

    我认为如果不直接与heroku API绑定,并且为自己编写大量代码,选项3是不存在的。。。但这对你的需要来说太过分了,依我看

    在1和2之间,选择取决于您是否希望在不重新部署代码的情况下提高处理更多消息的能力

    选项1通常是我的首选,因为我只需添加一个新的dyno实例即可完成。需要10秒

    如果您不介意调整代码和重新部署,选项2可能会起作用。这将增加额外的时间和精力来权衡成本


    但在某一点上,无论如何,选项2都需要变成选项1,因为一开始你只能在dyno上做这么多的工作。使用dynos,您将在线程上遇到限制。然后,您将使用dynos进行扩展。

    使用GuvScale,您似乎可以扩展RabbitMQ中使用按摩器的工作人员使用GuvScale,您似乎可以扩展RabbitMQ中使用按摩器的工作人员,因此,使用单个Dyno只执行一个短期python进程并不浪费时间?同时,RabbitMQ作为代理负责管理队列,并将每条消息均匀地分发给使用者,以便没有使用者会收到相同的消息。所以不需要负载平衡器来处理这个问题,对吗?RabbitMQ为您处理负载平衡。通过在同一队列/直接交换上有多个使用者,默认情况下可以实现负载平衡。对于一个只执行短期python进程的Dyno来说,这是一个工作者不断地消耗新消息进行处理,因此它将始终工作,除非我误解了您的用例。是的,您是对的。我想不需要芹菜了。我只是担心这样一个简单的python进程可能会浪费Dynos。最终,这种方法可能更易于维护,但由于需要更多的Dyno并行运行,因此成本更高?同时,RabbitMQ作为代理负责管理队列,并将每条消息均匀地分发给使用者,以便没有使用者会收到相同的消息。所以不需要负载平衡器来处理这个问题,对吗?RabbitMQ为您处理负载平衡。通过在同一队列/直接交换上有多个使用者,默认情况下可以实现负载平衡。对于一个只执行短期python进程的Dyno来说,这是一个工作者不断地消耗新消息进行处理,因此它将始终工作,除非我误解了您的用例。是的,您是对的。我想不需要芹菜了。我只是担心这样一个简单的python进程可能会浪费Dynos。最终,这种方法可能更易于维护,但由于需要更多的dyno并行运行,因此成本更高。