禁用芹菜工人的八卦,混合和心跳的后果是什么?



在我的芹菜工人身上禁用八卦,混合和心跳的含义是什么?

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

请注意:

  • 我们现在搬到了Redis经纪人,对发送给经纪人的消息的数量没有太大的限制
  • 我们有几个实例运行多个带有多个队列的芹菜工人

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

Heartbeat

与工人与经纪人之间的通信有关(在您的情况下,经纪人是CloudAmqp)。请参阅说明

使用--without-heartbeat,工人不会发送心跳事件

mingle

它仅要求"逻辑时钟"并"撤销任务"来自启动的其他工人。

取自Whatsnew-3.1

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

同步数据当前包括被吊销的任务和逻辑时钟。

这仅在启动时发生,并导致一秒钟的启动延迟从其他工人那里收集广播响应。

您可以使用-without-mingle参数禁用此启动。

也请参见Docs

八卦

工人将事件发送给所有其他工人,目前用于"时钟同步&quot",但也可以在诸如on_node_join之类的事件上编写您自己的处理程序,请参阅DOCS

取自Whatsnew-3.1

工人现在正在被动地订阅相关事件,例如心跳。

这意味着工人知道其他工人在做什么,并且可以检测他们是否脱机。目前,这仅用于时钟同步,但是将来添加的可能性很多,您可以编写已利用此优势的扩展。

某些想法包括共识协议,重新布局任务以最佳工人(基于资源使用或数据局部性)或在崩溃时重新启动工人。

我们相信,尽管这是一个很小的补充,但它打开了惊人的可能性。

您可以使用-without-gossip参数禁用此启动。

芹菜工人从--without-mingle选项开始,如上所述,将不会从其他工人(尤其是被撤销的任务)那里收到同步数据。因此,如果您撤销任务,当前正在运行的所有工人都会收到该广播并将其存储在内存中,以便当其中一个最终从队列中拾取任务时,它不会执行它:

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

但是,如果一个新的工人在该任务被收到广播的工人脱水之前开始,则不知道撤销任务。如果最终掌握了任务,则执行任务。如果您在不断动态扩展芹菜工人的环境中运行,您将看到这种行为。

我想知道--without-heartbeat标志是否会影响工人检测经纪人断开连接和重新连接的能力。上面引用的文档仅透明地指在应用层而不是TCP/IP层的这些心跳。好的 - 我真正想知道的是消除这些消息是否会影响我的工人的功能 - 特定于检测经纪人断开连接,然后尝试正确地重新连接?

我自己进行了一些快速测试,发现随着--without-heartbeat标志的传递,工人仍然很快发现经纪人(由我启动我关闭兔子实例),他们试图重新连接到经纪人,并在当时成功地做到这一点。我重新启动RabbitMQ实例。因此,我的基本测试表明,心跳对于基本的健康检查和功能不是必需的。无论如何,他们有什么意义?这对我来说还不清楚,但它们似乎没有影响工人功能。

添加到上述答案中,设置--without-heartbeat将向您的工作者显示"离线"在花仪表板上,如果您正在使用。

相关内容

  • 没有找到相关文章

最新更新