前言
防止客户端无限等待,所以要设置响应超时时间,防止客户端被长时间卡在等待响应中
-
客户端–>服务端的网络问题,网络导致的请求 或 响应无法及时完成
解决方案:
设置好超时时间,防止长时间阻塞客户端。 -
服务端代码逻辑中有http请求去调用第三方导致响应慢
解决方案:
这种调用第三方超时问题建议放到MQ中进行异步操作,比如发送短信,邮箱等操作 -
代码性能很低
解决方案:
优化代码,注意死循环,冗余累赘代码等耗费性能。考虑下是否开启线程过多,没使用线程池操作线程。或者同步调用链太长,可以考虑无关紧要的部分放到MQ来异步操作 -
Mysql存在慢查询 或 数据量过大导致查询慢
解决方案:
优化SQL, 检查是否使用了索引。并且是否正确的走了索引,是否存在令索引失效的语句等。如果是因为数据量问题,或者表结构设计导致多表关联太多而查询慢,可以考虑结合redis,把数据存放到缓存中。 -
是否单台机器没控制好线程数导致线程数过多
解决方案:
采用线程池来管理线程,并推荐使用MQ来取代多线程
- MQ具备削峰,而多线程不具备。因为多线程本质上还是在当前服务器创建线程,而如果线程创建过多,也会出现高延迟的状况,并且线程数多了,CPU来回进行上下文切换,也是非常耗时的
- 如果宕机了,MQ可以保存消息,待恢复后继续消费,而多线程一旦当即那就彻底没了,会出现数据不同步问题
- 多线程实际消耗的还是当前服务器资源,但MQ不会,MQ可以配置消费完一个后,再进行第二个消息的消费
- 如果是多节点,MQ可以均衡的分配给不通的服务器去消费,并且也可以根据不同服务器消费能力来分发。好的服务器能力强,处理快,拿的消息就多。而多线程在哪台机器创建,就在哪台执行,可能会出现任务倾斜的问题



