2021-01-06 并发请求引起的事故

本文讲述了在统计11月至今的搬运工数据时,使用多线程并发请求接口导致MongoDB CPU飙升的问题。通过排查和解决过程,作者揭示了内部服务未限流、异步请求的效率问题以及索引设计对性能的影响,最终通过优化索引来大幅降低查询时间。
摘要由CSDN通过智能技术生成

背景

产品需要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、有数据请求的操作为什么设为异步请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dlian丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值