禁用 celery workers 的 gossip、mingle 和 heartbeat 有什么后果?
What are the consequences of disabling gossip, mingle and heartbeat for celery workers?
禁用 gossip、mingle 和 heartbeat 对我的 celery worker 有什么影响?
为了减少发送到 CloudAMQP 的消息数量以保持在免费计划内,我决定遵循 these recommendations。因此,我使用了选项 --without-gossip --without-mingle --without-heartbeat
。从那时起,我一直在默认情况下为我的所有芹菜项目使用这些选项,但我不确定是否有任何我不知道的副作用。
请注意:
- 我们现在转移到 Redis 代理,并且对发送到代理的消息数量没有太多限制
- 我们有几个实例运行多个 celery worker 有多个队列
这是基础 documentation,没有提供太多信息
心跳
与工作人员和代理之间的通信有关(在您的情况下,代理是 CloudAMQP)。
参见 explanation
使用--without-heartbeat
worker 不会发送心跳事件
混合
它只在启动时向其他工作人员请求“逻辑时钟”和“撤销的任务”。
The worker will now attempt to synchronize with other workers in the same cluster.
Synchronized data currently includes revoked tasks and logical clock.
This only happens at startup and causes a one second startup delay to collect broadcast responses from other workers.
You can disable this bootstep using the --without-mingle argument.
另见 docs
八卦
工作人员向所有其他工作人员发送事件,这目前用于“时钟同步”,但也可以编写您自己的事件处理程序,例如 on_node_join
,请参阅 docs
Workers are now passively subscribing to worker related events like heartbeats.
This means that a worker knows what other workers are doing and can detect if they go offline. Currently this is only used for clock synchronization, but there are many possibilities for future additions and you can write extensions that take advantage of this already.
Some ideas include consensus protocols, reroute task to best worker (based on resource usage or data locality) or restarting workers when they crash.
We believe that although this is a small addition, it opens amazing possibilities.
You can disable this bootstep using the --without-gossip argument.
Celery worker 以 --without-mingle
选项启动,正如@ofirule 上面提到的,将不会从其他 worker 接收同步数据,尤其是已撤销的任务。因此,如果您撤销任务,当前 运行 的所有工作人员都会收到该广播并将其存储在内存中,这样当其中一个最终从队列中获取任务时,它不会执行它:
https://docs.celeryproject.org/en/stable/userguide/workers.html#persistent-revokes
但是,如果一个新的 worker 在该任务被接收广播的 worker 出列之前启动,它不知道要撤销该任务。如果它最终选择了任务,则执行该任务。如果您 运行 在一个不断动态地缩减 celery worker 的环境中,您将看到这种行为。
我想知道 --without-heartbeat
标志是否会影响工作人员检测代理断开连接并尝试重新连接的能力。上面引用的文档仅不透明地提到这些心跳作用于应用程序层而不是 TCP/IP 层。好的——我真正想知道的是消除这些消息是否会影响我的工作人员的工作能力——特别是检测代理断开连接然后尝试适当地重新连接?
我自己 运行 进行了一些快速测试,发现通过 --without-heartbeat
标志后,工作人员仍然非常快速地检测到代理断开连接(由我关闭 RabbitMQ 实例启动),并且他们尝试重新连接到代理并在我重新启动 RabbitMQ 实例时成功连接。所以我的基本测试表明心跳对于基本健康检查和功能来说不是必需的。无论如何,他们有什么意义?我不清楚,但它们似乎对 worker 功能没有影响。
禁用 gossip、mingle 和 heartbeat 对我的 celery worker 有什么影响?
为了减少发送到 CloudAMQP 的消息数量以保持在免费计划内,我决定遵循 these recommendations。因此,我使用了选项 --without-gossip --without-mingle --without-heartbeat
。从那时起,我一直在默认情况下为我的所有芹菜项目使用这些选项,但我不确定是否有任何我不知道的副作用。
请注意:
- 我们现在转移到 Redis 代理,并且对发送到代理的消息数量没有太多限制
- 我们有几个实例运行多个 celery worker 有多个队列
这是基础 documentation,没有提供太多信息
心跳
与工作人员和代理之间的通信有关(在您的情况下,代理是 CloudAMQP)。 参见 explanation
使用--without-heartbeat
worker 不会发送心跳事件
混合
它只在启动时向其他工作人员请求“逻辑时钟”和“撤销的任务”。
The worker will now attempt to synchronize with other workers in the same cluster.
Synchronized data currently includes revoked tasks and logical clock.
This only happens at startup and causes a one second startup delay to collect broadcast responses from other workers.
You can disable this bootstep using the --without-mingle argument.
另见 docs
八卦
工作人员向所有其他工作人员发送事件,这目前用于“时钟同步”,但也可以编写您自己的事件处理程序,例如 on_node_join
,请参阅 docs
Workers are now passively subscribing to worker related events like heartbeats.
This means that a worker knows what other workers are doing and can detect if they go offline. Currently this is only used for clock synchronization, but there are many possibilities for future additions and you can write extensions that take advantage of this already.
Some ideas include consensus protocols, reroute task to best worker (based on resource usage or data locality) or restarting workers when they crash.
We believe that although this is a small addition, it opens amazing possibilities.
You can disable this bootstep using the --without-gossip argument.
Celery worker 以 --without-mingle
选项启动,正如@ofirule 上面提到的,将不会从其他 worker 接收同步数据,尤其是已撤销的任务。因此,如果您撤销任务,当前 运行 的所有工作人员都会收到该广播并将其存储在内存中,这样当其中一个最终从队列中获取任务时,它不会执行它:
https://docs.celeryproject.org/en/stable/userguide/workers.html#persistent-revokes
但是,如果一个新的 worker 在该任务被接收广播的 worker 出列之前启动,它不知道要撤销该任务。如果它最终选择了任务,则执行该任务。如果您 运行 在一个不断动态地缩减 celery worker 的环境中,您将看到这种行为。
我想知道 --without-heartbeat
标志是否会影响工作人员检测代理断开连接并尝试重新连接的能力。上面引用的文档仅不透明地提到这些心跳作用于应用程序层而不是 TCP/IP 层。好的——我真正想知道的是消除这些消息是否会影响我的工作人员的工作能力——特别是检测代理断开连接然后尝试适当地重新连接?
我自己 运行 进行了一些快速测试,发现通过 --without-heartbeat
标志后,工作人员仍然非常快速地检测到代理断开连接(由我关闭 RabbitMQ 实例启动),并且他们尝试重新连接到代理并在我重新启动 RabbitMQ 实例时成功连接。所以我的基本测试表明心跳对于基本健康检查和功能来说不是必需的。无论如何,他们有什么意义?我不清楚,但它们似乎对 worker 功能没有影响。