优化Celery以进行第三方HTTP调用

时间:2016-03-19 19:33:34

标签: python rabbitmq celery scalability

我们正在使用芹菜来进行第三方http呼叫。我们有大约100多个任务,只需调用第三方HTTP API调用。有些任务会批量调用API,例如早上4点请求50万个请求,而有些则是连续的API调用流,几乎每秒接收一次或两次请求。

大多数API调用响应时间在500-800毫秒之间。

我们看到芹菜的运送速度非常慢。对于上述大多数任务,最大传送速率约为100 / s(最大)至接近1 / s(min)。我相信这是非常糟糕的,而且肯定是错的,但我无法弄清楚它是什么。

我们从3台服务器的集群开始,逐步使它成为7台服务器的集群,但没有任何改进。我们尝试了从自动缩放到固定的10,20,50,100个工作者的不同并发设置。没有结果后端,我们的经纪人是RabbitMQ。

由于我们的任务执行时间非常短,大​​多数时间不到一秒,我们还尝试将预取计数限制为不同的值。

--time-limit=1800 --maxtasksperchild=1000 -Ofair -c 64 --config=celeryconfig_production

服务器是64 G RAM,Centos 6.6。

您能否告诉我可能出现的问题或如何解决问题?

我们应该选择gevents吗?虽然我对它的含义知之甚少。

1 个答案:

答案 0 :(得分:5)

首先 - GIL - 不应该是这种情况,因为更多的机器应该更快。但是 - 请检查加载是否仅在服务器的一个核心上...

我不确定整个芹菜在你的情况下是不是一个好主意。这是很棒的软件,具有很多功能。但是,如果不需要,最好使用更简单的东西 - 以防某些功能受到干扰。我会写小PoC,检查其他客户端软件,如pika。如果这没有帮助 - 问题在于基础设施。如果有帮助 - 你有解决方案。 :)

很难说出发生了什么。它可能是IO,或者网络电话太多......我会退后一步 - 找出有用的东西。编写集成测试,但一定要使用2-3台机器才能使用完整的tcp堆栈。一定要有CI,并且每天运行一次测试,或者检查一下 - 看看事情是否朝着正确的方向发展。

相关问题