Mad*_*uja 9 python scalability rabbitmq celery
我们正在使用芹菜来进行第三方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吗?虽然我对它的含义知之甚少.
首先 - GIL - 不应该是这种情况,因为更多的机器应该更快.但是 - 请检查加载是否仅在服务器的一个核心上...
在你的情况下,我不确定整个芹菜是否是个好主意.这是很棒的软件,具有很多功能.但是,如果不需要,最好使用更简单的东西 - 以防某些功能受到干扰.我会写小PoC,检查其他客户端软件,如pika.如果这没有帮助 - 问题在于基础设施.如果有帮助 - 你有解决方案.:)
真的很难说出发生了什么.它可能是IO,或者网络电话太多......我会退后一步 - 找出有用的东西.编写集成测试,但一定要使用2-3台机器才能使用完整的tcp堆栈.一定要有CI,并且每天运行一次测试,或者检查一下是否正确.