负载均衡器和celery结果后端

时间:2019-07-11 21:43:13

标签: celery

我有一个任务大约需要3分钟才能运行。它从远程服务器提取数据并对其进行CPU密集型分析。该任务将通过api调用来调用。通过api调用,我计划为客户提供一个唯一的任务ID,并将任务分配给芹菜工人。然后,客户端将使用给定的任务ID轮询服务器,以查看该任务是否由celery worker完成,并将其结果保存到结果后端。我想使用nginx,gunicorn,flask并对其进行dockerize以便于轻松部署,以防万一我需要在多台计算机上分发此架构。

问题在于,由于负载平衡器的原因,客户端可能会轮询不同的服务器,如果处理不当,则轮询服务器的celery结果后端可能没有任务结果,而其他服务器的celery结果后端却有任务结果。

是否可以在多个celery实例上使用单个结果后端,并使不同的celery实例与相同的结果后端互斥?除了使用像S3这样的云存储以外,还有什么其他可能的方法来解决此问题?

仅当我拥有多台计算机时,我才会出现此问题吗?或者即使我在一台计算机中有多个gunicorn实例(nginx充当它们上的负载平衡器),也会出现此问题吗?

1 个答案:

答案 0 :(得分:0)

并非所有Celery工作者都可以使用单个结果后端,但这是唯一有意义的设置!在大多数情况下,对于经纪人来说也是一样,除非您拥有一个复杂的Celery基础架构,其中包含交易,复杂的路线...