负载均衡器和芹菜结果后端
Load balancer and celery result backends
我有一个任务需要大约 3 分钟才能完成 运行。它从远程服务器中提取数据并对其进行 cpu 密集分析。此任务将由 api 调用调用。在 api 电话上,我计划给客户一个唯一的任务 ID,并将任务分配给 celery worker。然后客户端将使用给定的任务 id 轮询服务器以查看任务是否由 celery worker 完成并将其结果保存到结果后端。我考虑使用 nginx、gunicorn、flask 并将它们 dockerize 以便轻松部署,以防我需要在多台机器上分发此架构。
问题是由于负载均衡,客户端可能会轮询不同的服务器,如果处理不好,轮询服务器的celery结果后端可能没有任务结果,但其他服务器的celery结果后端有。
是否可以在多个 celery 实例上使用单个结果后端,并使不同的 celery 实例使用相同的结果后端?除了使用像 S3 这样的云存储之外,还有什么其他可能的方法可以解决这个问题?
只有当我有多台机器时才会出现这个问题,或者即使我在一台机器上有多个 gunicorn 实例并且 nginx 充当它们的负载平衡器时也会出现这个问题吗?
并非所有 Celery worker 都可以使用单个结果后端,但这是唯一有意义的设置!在大多数情况下,经纪人也是如此,除非你有一个复杂的 Celery 基础设施,包括交易所和复杂的路由......
我有一个任务需要大约 3 分钟才能完成 运行。它从远程服务器中提取数据并对其进行 cpu 密集分析。此任务将由 api 调用调用。在 api 电话上,我计划给客户一个唯一的任务 ID,并将任务分配给 celery worker。然后客户端将使用给定的任务 id 轮询服务器以查看任务是否由 celery worker 完成并将其结果保存到结果后端。我考虑使用 nginx、gunicorn、flask 并将它们 dockerize 以便轻松部署,以防我需要在多台机器上分发此架构。
问题是由于负载均衡,客户端可能会轮询不同的服务器,如果处理不好,轮询服务器的celery结果后端可能没有任务结果,但其他服务器的celery结果后端有。
是否可以在多个 celery 实例上使用单个结果后端,并使不同的 celery 实例使用相同的结果后端?除了使用像 S3 这样的云存储之外,还有什么其他可能的方法可以解决这个问题?
只有当我有多台机器时才会出现这个问题,或者即使我在一台机器上有多个 gunicorn 实例并且 nginx 充当它们的负载平衡器时也会出现这个问题吗?
并非所有 Celery worker 都可以使用单个结果后端,但这是唯一有意义的设置!在大多数情况下,经纪人也是如此,除非你有一个复杂的 Celery 基础设施,包括交易所和复杂的路由......