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

时间:2016-05-10 00:46:16

标签: python celery

当Celery工作人员从多个(或许多个)队列中撤离时,是否应该记住实质性的影响?例如,如果我的系统被设计成使工作人员从10到15个队列而不是仅仅1或2,那么是否会有显着的性能损失?作为后续行动,如果其中一些队列有时是空的呢?

1 个答案:

答案 0 :(得分:3)

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

不要担心多个队列不会更糟或更好,经纪人的目的是处理大量队列。当然,在许多用例中你不需要这么多,除了非常先进的用例。空队列不会产生任何问题,它们只占用代理上的少量内存。

不要忘记你还有其他的东西,比如交换和绑定,你也没有真正的限制,但在使用它们之前更好地understand每个人的表现意义(TOPIC交换将使用比直接CPU更多的CPU)

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

在查看基于Celery等消息传递的分布式系统时,从性能的角度分析了2个主要主题:

  1. 工人编号和并发因素。

    正如您可能已经知道每个芹菜工作者都有一个并发参数来设置可以同时执行的任务数量,这应该与服务器容量(CPU,RAM,I / O)和关闭过程一起设置也基于特定消费者将执行的任务类型(取决于它将消耗的队列)。

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

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

    代理,特别是RabbitMQ,旨在管理数百万条消息而没有任何问题,但是需要存储更多内存的消息将被使用,而更多消息将用于路由它将使用的更多CPU。

    此机器也应该很好地调整,如果可能的话,应该在high availability

    当然,要避免的主要事情是消息的消耗率低于生成消息,否则您的队列将继续增长,您的RabbitMQ将会爆炸。在这里,您可以找到some hints

  3. 在某些情况下,您可能还需要增加在特定时间范围内执行的任务数量,但仅在响应请求峰值时执行。这个架构的好处在于你可以监控队列的大小,当你理解为快速增长时,你可以动态创建新的机器,并且已经配置了芹菜工作者,而不是在不需要时关闭它。这是一种非常节省成本和高效的方法。

    一个提示,记得不要将芹菜任务存储在RabbitMQ中。