对芹菜工作者禁用八卦,混杂和心跳有什么后果?

nbe*_*hat 10 python worker redis celery cloudamqp

禁用八卦,混杂和心跳对我的芹菜工人有什么影响?

为了减少发送到CloudAMQP的消息数量,使其不超出免费计划的范围,我决定遵循以下建议。因此,我使用了选项--without-gossip --without-mingle --without-heartbeat。从那时起,我一直在所有芹菜项目中默认使用这些选项,但是我不确定是否有我不知道的副作用。

请注意:

  • 我们现在移到Redis代理,并且对发送到代理的邮件数量没有太多限制
  • 我们有多个运行多个芹菜工人队列的实例

ofi*_*ule 11

这是基本文档,它没有给我们太多信息

心跳

与工作人员和代理之间的通信有关(在您的情况下,代理是 CloudAMQP)。看说明

随着--without-heartbeat工人将不会发送心跳事件

交融

它只在启动时要求其他工人提供“逻辑时钟”和“撤销的任务”。

取自whatsnew-3.1

工作人员现在将尝试与同一集群中的其他工作人员同步。

同步数据目前包括撤销的任务和逻辑时钟。

这仅在启动时发生,并导致一秒钟的启动延迟以收集来自其他工作人员的广播响应。

您可以使用 --without-mingle 参数禁用此引导步骤。

另请参阅文档

闲话

工作人员将事件发送给所有其他工作人员,这目前用于“时钟同步”,但也可以编写自己的事件处理程序,例如on_node_join,请参阅文档

取自whatsnew-3.1

工作人员现在被动订阅与工作人员相关的事件,如心跳。

这意味着工作人员知道其他工作人员在做什么,并且可以检测他们是否离线。目前这仅用于时钟同步,但未来添加有很多可能性,您可以编写已经利用这一点的扩展。

一些想法包括共识协议、将任务重新路由到最佳工作人员(基于资源使用情况或数据位置)或在工作人员崩溃时重新启动工作人员。

我们相信,虽然这是一个小小的补充,但它开启了惊人的可能性。

您可以使用 --without-gossip 参数禁用此引导步骤。

  • 您能详细说明一下禁用心跳的应用后果吗?例如,如果禁用,工作人员是否会检测到代理是否不可用?如果是这样,他们将如何检测到它?CloudAMQP (https://www.cloudamqp.com/docs/celery.html) 建议不需要心跳,因为“我们在所有 RabbitMQ 服务器上启用了较低的 TCP 保持活动间隔,以便在 TCP 上检测到过时的连接级别而不是应用程序层。” 这是 CloudAMQP 所特有的东西,还是这是与 RabbitMQ 代理的任何 AMQP 连接的基本现实?谢谢! (4认同)

小智 5

Celery 工作线程使用该选项启动--without-mingle,正如上面提到的@ofirule,将不会接收来自其他工作线程的同步数据,特别是已撤销的任务。因此,如果您撤销一项任务,当前正在运行的所有工作人员都将收到该广播并将其存储在内存中,这样当其中一个最终从队列中获取该任务时,它就不会执行该任务:

https://docs.celeryproject.org/en/stable/userguide/workers.html#persistent-revokes

但是,如果一个新的工作程序在该任务被接收广播的工作程序出列之前启动,它不知道要撤销该任务。如果它最终接收到任务,则执行该任务。如果您在不断动态扩展和缩小 celery 工作线程的环境中运行,您将看到此行为。