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台,其中一台是本机。

posted @ 2020-07-14 15:25  devilyouwei  阅读(371)  评论(0编辑  收藏  举报