问题背景
线上生产环境客户反馈,客户在我们的sass系统中点击"同步tiktokshop"时,同步的数据与tiktopshop数据不一致
问题描述
上午收到阿里云报警,线上MQ某台机器消息堆积严重,其余机器均为正常
问题排查
初步怀疑sql慢查询问题
由于问题主要出现在Proxy同步系统(一个专用于同步的服务),在RDS MySQL的SQL洞察和会话管理模块进行针对性排查,确实有发现慢sql(处理时间0.9秒,高于标准0.5秒),但分析认为不至于产生消息堆积问题
尝试在sql查询条件上增加更多索引条件,使sql查询速度降到(0.2s)
修复业务逻辑查询过慢问题
慢查询主要是因为同步是根据类别分批同步,每次同步都会进行一个总表的关联查询,当同步任务过多时,导致mysql的cpu过载,虽然在阿里云监控上未发现mysql的cpu有峰值,但为避免后续出现问题,这里也同步做修复
对查询的总表业务新增一个缓存,键值为同步任务Id,且在开始分发同步任务之前,先查询总表,构建缓存,避免所有的同步任务同时间查询缓存没查到导致走mysql问题
问题自测
通过以上方法,在测试环境进行压力测试,发现mq依然出现消息堆积问题,
进一步排查
在同时提醒下,使用jstack分析java线程,发现某一线程一张处于wait状态,导致mq消息堆积
进一步跟踪发现,该进程尝试http请求外网接口,连接一直处于超时
配置添加超时时间,解决该问题