自学内容网 自学内容网

Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试

场景

HTTP1 .1之后协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,

减少了建立和关闭连接的消耗和延迟。

如果我们使用了nginx去作为反向代理或者负载均衡,从客户端过来的长连接请求就会被转换成短连接发送给服务器端。

为了支持长连接,我们需要在nginx服务器上做一些配置。

在 upstream 上下文中使用 keepalive 指令,保持上游服务器连接开放以供复用:

此处可参考官方文档:

Module ngx_http_upstream_module

注:

博客:
霸道流氓气质-CSDN博客

实现

1、构件测试环境,首先启动一个tomcat服务,然后用nginx代理为上游服务器,测试不加与加keepalive情况下的吞吐量

使用Docker部署最新版Tomcat

拉取镜像

docker pull tomcat

启动容器

docker run -itd  --name my-tomcat2 -p 800:8080 tomcat

注意最新版的tomcat使用docker启动后访问端口会提示404,这是有因为容器内webapps目录为空,改成了webapps.dist目录

进入容器并修改目录

docker exec -it my-tomcat-container /bin/bash

删除webapps目录,并将webapps.dist目录重命名为webapps:

rm -rf webapps && mv webapps.dist webapps

重启容器此时访问tomcat正常。

2、使用nginx配置代理到上游服务器tomcat

修改nginx的配置文件

​
 upstream test {
  server 192.168.8.129:800;
 }

 server {
        listen       800;
        server_name  127.0.0.1;

  
  location / {
   proxy_pass http://test;
  }
  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

​

这里的800为上面docker启动的tomcat的路径的端口

启动nginx,验证代理前后的地址均访问正常

3、使用JMeter进行压测

使用教程参考如下:

Jmeter进行http接口压力测试:

Jmeter进行http接口压力测试_接口压测两万量-CSDN博客

测试时线程组分配50线程数,循环次数100

查看聚合报告可知结果为

然后在nginx的配置文件中添加keepalive的配置

​
 upstream test {
  server 192.168.8.129:800;
  keepalive 32;
 }

 server {
        listen       800;
        server_name  127.0.0.1;

  
  location / {
   proxy_pass http://test;
   proxy_http_version 1.1;
   proxy_set_header Connection "";

  }
  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

​

按照官方文档说明,需要增加三个地方

upstream中有一个参数比较重要,就是keepalive,代表连接池里面最大的空闲连接数量。

keepalive这个参数设置一定要小心,尤其是对于QPS要求比较高或者网络环境不稳定的场景,

一般根据QPS值和平均响应时间能大致推算出需要的长连接数量。

然后将keepalive设置为长连接数量的10%到30%。

HTTP协议中对长连接的支持是从1.1版本之后才有的,因此最好通过proxy_http_version指令设置为1.1。

HTTP1.0不支持keepalive特性,当没有使用HTTP1.1的时候,后端服务会返回101错误,然后断开连接。

而"Connection" header可以选择被清理,这样即便是Client和Nginx之间是短连接,Nginx和upstream之间也是可以开启长连接的。

此时再使用jmeter进行测试


原文地址:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/143776273

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!