禁用八卦、交际和心跳对芹菜工人有啥后果?

Posted

技术标签:

【中文标题】禁用八卦、交际和心跳对芹菜工人有啥后果?【英文标题】:What are the consequences of disabling gossip, mingle and heartbeat for celery workers?禁用八卦、交际和心跳对芹菜工人有什么后果? 【发布时间】:2019-08-10 11:08:33 【问题描述】:

禁用八卦、交际和心跳对我的 celery 工人有什么影响?

为了减少发送到 CloudAMQP 的消息数量以保持在免费计划内,我决定关注these recommendations。因此,我使用了选项--without-gossip --without-mingle --without-heartbeat。从那时起,我在所有 celery 项目中默认使用这些选项,但我不确定是否有任何我不知道的副作用。

请注意:

我们现在转移到了 Redis 代理,并且对发送到代理的消息数量没有太多限制 我们有多个实例运行多个具有多个队列的 celery worker

【问题讨论】:

【参考方案1】:

这是基本的documentation,并没有给我们太多信息

心跳

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

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

混合

它只在启动时向其他工作人员询问“逻辑时钟”和“撤销的任务”。

取自whatsnew-3.1

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

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

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

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

另见docs

八卦

工人向所有其他工人发送事件,这目前用于“时钟同步”,但也可以编写自己的事件处理程序,例如on_node_join,参见docs

取自whatsnew-3.1

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

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

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

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

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

【讨论】:

能否详细说明禁用心跳的应用后果?例如,如果禁用,工作人员是否会检测到代理是否不可用?如果是这样,他们将如何检测它? CloudAMQP (cloudamqp.com/docs/celery.html) 建议不需要心跳,因为“我们在所有 RabbitMQ 服务器上启用了低 TCP 保持活动间隔,以便在 TCP 级别而不是在应用程序层检测陈旧连接。”这是 CloudAMQP 独有的东西,还是这是任何 AMQP 连接到 RabbitMQ 代理的基本现实?谢谢!【参考方案2】:

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

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

但是,如果一个新的工作人员在该任务被接收到广播的工作人员出队之前启动,它不知道撤销该任务。如果它最终接受了任务,则执行该任务。如果您在不断动态扩展和缩减 celery 工作者的环境中运行,您将看到这种行为。

【讨论】:

【参考方案3】:

我想知道--without-heartbeat 标志是否会影响工作人员检测代理断开连接和尝试重新连接的能力。上面引用的文档只是不透明地引用了这些心跳在应用程序层而不是 TCP/IP 层。好的——我真正想知道的是,消除这些消息是否会影响我的工作人员的工作能力——特别是检测代理断开连接然后尝试适当地重新连接?

我自己进行了一些快速测试,发现通过 --without-heartbeat 标志后,工作人员仍然很快检测到代理断开连接(由我关闭 RabbitMQ 实例启动),他们尝试重新连接到代理并这样做当我重新启动 RabbitMQ 实例时成功。所以我的基本测试表明,基本的健康检查和功能不需要心跳。无论如何,它们有什么意义?我不清楚,但它们似乎对工作人员的功能没有影响。

【讨论】:

我认为你应该发布一个新问题来解决这个问题。 broker 将在没有心跳事件的情况下重新连接,但心跳事件不仅仅是检查连接。它检查是否发送和接收了事件,这是应用程序按预期运行的一个更大的指标。你可能有一些你想使用它的用例。就像您有多个代理,并且您希望工作人员在事件开始下降时转移到新代理。 完成,@ofirule! ***.com/questions/66978028/…

以上是关于禁用八卦、交际和心跳对芹菜工人有啥后果?的主要内容,如果未能解决你的问题,请参考以下文章

将 DHT 用于八卦协议?

旋转太极八卦

如果我在实体框架中全局禁用 ProxyCreation 会有啥后果?

[转帖]一本正经的八卦一下CPU的自主可控

八卦一下梦

canvas-八卦图和时钟实现