在Celery中,使用多个队列会对性能产生重大影响



当Celery工作人员从多个(或多个)队列中提取时,我应该记住是否存在实质性的性能影响?例如,如果我的系统设计成让员工从10个队列排到15个队列,而不仅仅是1个或2个队列,会不会对性能造成重大影响?作为后续行动,如果其中一些队列有时是空的呢?

关于队列限制的问题的简短答案是:

不用担心,拥有多个队列不会更糟或更好,broker是为处理大量队列而设计的。当然,在很多用例中,你不需要那么多,除了真正高级的用例。空队列不会产生任何问题,它们只会占用代理上的少量内存。

别忘了,你还有其他东西,比如交换和绑定,在那里你没有真正的限制,但最好在使用之前了解它们的性能含义(例如,TOPIC交换将比直接交换使用更多的CPU)

为了给您一个更完整的答案,让我们从更通用的角度来看性能主题。

当观察像Celery这样基于消息传递的分布式系统时,从性能的角度来看有两个主要主题需要分析:

  1. 工作人员数量和并发系数。

    正如您可能已经知道的那样,每个芹菜工作程序都有一个并发参数,用于设置可以同时执行的任务数量,这应该根据服务器容量(CPU、RAM、I/O)进行设置,当然也应该根据特定使用者将执行的任务类型(取决于它将使用的队列)进行设置。

    当然,根据您在特定时间窗口内需要执行的任务总数,您需要决定需要启动和运行多少工作人员/服务器。

  2. 经纪人,这种架构风格中的单点故障。

    代理程序,尤其是RabbitMQ,设计用于管理数百万条消息而不会出现任何问题,但它需要存储更多的消息,使用更多的内存,路由更多CPU的消息也会更多。

    这台机器也应该调整得很好,如果可能的话,它的可用性也很高。

    当然,要避免的主要问题是消息的消耗率低于它们的生成率,否则您的队列将继续增长,您的RabbitMQ将爆炸式增长。在这里你可以找到一些提示。

在某些情况下,您可能还需要增加在特定时间段内执行的任务数量,但仅在响应请求峰值时才执行。这种体系结构的好处在于,您可以监控队列的大小,当您了解到队列的增长速度很快时,您可以在已经配置了芹菜工人的情况下动态创建新机器,然后在不需要时将其关闭。这是一种非常节省成本和有效的方法。

有一个提示,请记住不要将芹菜任务结果存储在RabbitMQ中。

相关内容

  • 没有找到相关文章

最新更新