Nginx反向代理作负载均衡的高压测试,一些错误
背景
计算所里给大家配发了多台工作机,我给他们都按上了ubuntu linux,拿来做了一个web集群。
我自己的电脑作为主反向代理服务器,将请求转发到同事的web服务器上,从而实现分布式的web请求,提高请求命中率,减少但个服务器压力。
在进行高压测试的时候,以每秒大约10000次请求的JS脚本进行for循环请求,持续10000次,也就是1秒内发送10000次请求左右。
测试的业务逻辑
每一次请求的业务逻辑要实现两次数据库insert操作,一次O(n^2),n小于i等于8的循环,一次数据库update运算,一次redis删除操作,一次redis新增操作。两个控制器,请求有先后依赖关系,先请求接口1,从接口1得到数据后请求2,请求循环为非同步请求,每隔0.1ms发送一次。脚本是JS基于Node.js平台。
一些错误
- socket hang out 错误,原因是worker_connections过小
- Internal Server Error 错误,原因是把for循环中sleep等待时间去除了,也就是不限制时间间隔,internal error是控制器(业务逻辑处理)高压,无法response
- Gateway Timeout 错误,原因是把for循环扩大十倍,10万次循环,间隔还是0.1ms,1秒万次。 gateway timeout是反向代理服务器处理不了这么多代理请求
配置
以下是Nginx的具体配置:
user www www;
worker_processes 8;
error_log logs/error.log;
events
{
worker_connections 100000;
}
http
{
server {
listen 80;
server_name localhost 192.168.1.79;
location / {
proxy_pass http://web;
}
}
upstream web {
server localhost:3000 weight=3;
server 192.168.1.103:3000 weight=3;
server 192.168.1.114:3000 weight=1;
server 192.168.1.127:3000 weight=3;
}
}
这套配置只能解决问题1,“socket hang out” 问题。上游服务器(实际处理http请求的服务器)有4台,其中一台是本机。