以 redis 作为代理和结果后端的 celery 使用了太多的 redis 连接
celery with redis as broker and result backend uses too many redis connections
我们有一个以redis为代理和结果后端的celery集群,大约有100+台服务器和200+个队列,目前redis连接数(9000+)接近最大连接阈值(10000),并且在集群加入新服务器的时候还在逐渐增加
我们依赖celery中的任务状态来实现更多的检查,所以我们不能设置ingore_result=True
(这种方法可以快速减少redis连接,但是考虑到限制,我们不能使用它其他功能),BROKER_POOL_LIMIT
已经设置为0了,但作用不大,请问有没有其他办法减少redis连接?
我也遇到过使用 redis 作为代理和结果后端的问题,由于单线程性质,redis 的负载如此之大,性能不佳,而且对于每个任务,它都必须将结果保存为单独的键。
您可以尝试重新设计 celery 以使用 AMQP 系统,例如 RabbitMq 作为代理,使用 redis 作为结果后端。
看看这篇文章,它很好地解释了事情
http://techscouter.blogspot.com/2018/05/celery-with-heavy-workloads.html
我们有一个以redis为代理和结果后端的celery集群,大约有100+台服务器和200+个队列,目前redis连接数(9000+)接近最大连接阈值(10000),并且在集群加入新服务器的时候还在逐渐增加
我们依赖celery中的任务状态来实现更多的检查,所以我们不能设置ingore_result=True
(这种方法可以快速减少redis连接,但是考虑到限制,我们不能使用它其他功能),BROKER_POOL_LIMIT
已经设置为0了,但作用不大,请问有没有其他办法减少redis连接?
我也遇到过使用 redis 作为代理和结果后端的问题,由于单线程性质,redis 的负载如此之大,性能不佳,而且对于每个任务,它都必须将结果保存为单独的键。 您可以尝试重新设计 celery 以使用 AMQP 系统,例如 RabbitMq 作为代理,使用 redis 作为结果后端。 看看这篇文章,它很好地解释了事情 http://techscouter.blogspot.com/2018/05/celery-with-heavy-workloads.html