我有两台服务器,每台服务器上都有一个芹菜工人。我使用 Redis 作为与工人合作的经纪人。
我的问题是,我怎样才能让一个工作线程在大部分时间里只运行,一旦这个工作线程被破坏,另一个工作线程将作为备用工作线程打开?
基本上,只需将一名工人作为后备。
在阅读文档 [http://docs.celeryproject.org/en/latest/userguide/routing.html#redis-message-priorities] 后,我知道如何分别通过工人上的队列向某个工人指定任务 []
以我的拙见,这完全违背了让分布式系统卸载 CPU 繁重或长时间运行的任务,或者有数千个您无法在其他地方运行的小任务......
- 无论如何,您正在运行两台服务器,那么为什么要让另一台服务器处于空闲状态呢?更多的工作人员意味着您将能够同时处理更多的任务。
如果你不相信,并且仍然想这样做,你需要在具有空闲 Celery worker 的机器上编写一个小服务。此服务将定期检查活动辅助角色的运行状况,如果检查失败,您将在备份服务器上运行 Celery 辅助角色。
这里有一个问题要问你 - 为什么此服务根本不重新启动活动服务器上的 Celery 工作线程? - 这样做几乎是可能的,所以再一次,我认为没有理由让一台完全空闲的机器什么都不做。如果您在云平台上,则可以轻松地从 Celery 工作人员的现有映像启动新实例。这是我在生产中使用的方案。