测试环境上线新功能,在测试的时候有规律的发现页面加载数据巨慢,查看网络请求,发现后端请求时间超长,吃精的达到了5秒+++以上。这种问题还频繁出现,遥想开发的时候并没有出现过这种问题。
一开始以为后端数据库查询的问题,毕竟关联了好几张表,把SQL
拷贝出来执行了一下,然而也就几十毫秒而已,不死心又在后台打印了一下执行时间,一切正常。
又一想是不是拦截器中相关校验的问题,再一次证明我的想法是错误的。
既然后端没问题,那么问题可能会出现在代理服务器上,测试环境架设了Nginx
代理服务。检查了一下配置文件,卧槽!!!果然是自己给自己挖下的坑,之前测试负载均衡的时候启动了两个服务,如下:
upstream backserver {
server 192.168.1.180:8091;
server 192.168.1.190:8091;
}
然鹅,测试完之后把其中一个服务给掐断了。
那么为什么是偶尔出现呢?步调还这么一致。这就要撩一下Nginx
负载均衡检查模块中的max_fails
和fail_timeout
这两个参数了,默认情况下:
max_fails=1 fail_timeout=10s
翻译过来就是:在单位周期为fail_timeout
设置的时间中达到max_fails
次数,在这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期再试一次。
把掐断的服务地址注释掉,重启下Nginx
就可以了。
切记,生产中一定要搭配服务运行监控通知套件,以便第一时间发现并处理问题。