背景
产品需要11月到当前时间的搬运工数据统计。
实现
有接口可以查到每一天的数据,写python脚本循环请求接口。因为一次接口响应要近20秒,总共要请求1200次接口,实在太慢。所以写了多线程请求接口,但是不熟悉python多线程,一次性发了1200个请求到服务器。
问题
这时运维发现mongodb的cpu暴增,日志里不断有请求该接口的日志,耗时一直累增。
解决思路
1、查看本地脚本是否结束,ps aux |grep python
发现已经没有python脚本运行的了。
2、kill mongo sql?运维杀掉后,又有新的请求进来执行sql。
3、重启服务?因为该接口是异步处理请求,重启服务不能杀掉这些已经在请求队列的请求。
4、leader最后临时修改了这个接口,直接返回空,等处理完这批请求后,再恢复接口,解决。
5、运维发现表的索引建的有问题{dt, mid}
,日期是范围查询导致后面的mid in操作索引失效,索引命中了一半。修改索引为{mid,dt}
,执行时间由20s降到2s左右。
思考
1、内部服务没有做限流
2、有数据请求的操作为什么设为异步请求