我们有一个以redis作为代理和结果后端的celery集群,大约有100多个服务器和200+队列,目前,redis连接数(9000+)接近最大连接阈值(10000),并且将新服务器添加到群集后,它仍在逐渐增加。
我们在celery上中继任务状态以执行更多检查,因此我们无法设置ingore_result=True
(此方法可以快速减少redis连接,但是考虑到其他功能的限制,我们无法使用它),并且BROKER_POOL_LIMIT
已经设置为0,但效果不大,是否有其他方法可以减少redis连接?
答案 0 :(得分:0)
我也曾经以redis作为代理和结果后端来面对这个问题,由于单线程性质,如此巨大的负载redis表现不佳,并且对于每个任务,它都必须将结果保存为单独的键。 您可以尝试重新整理芹菜,以使用AMQP系统(例如RabbitMq)作为代理,并使用redis作为结果后端。 看看这篇文章,它解释得很好 http://techscouter.blogspot.com/2018/05/celery-with-heavy-workloads.html