在我的芹菜工人身上禁用八卦,混合和心跳的含义是什么?
为了减少发送到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
将向您的工作者显示"离线"在花仪表板上,如果您正在使用。