码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx反向代理与后端服务采用连接池参数分析,长连接减少TIME_WAIT

时间:2018-09-16 22:28:45      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:keepaliv   一个   简单   默认   参数   keepalive   有效期   频繁   直连   

前面已经讲过,在使用locust直连后端服务器时,可以通过设置HTTP头部为keep-alive,并在客户端断开连接,减少服务器的连接压力。因为由客户端断开连接,客户端的连接会变为TIME_WAIT状态,从而有效的节省了服务器的资源。

但通常,我们的服务器并不是简单的一个服务器端程序,一般还会有cache服务器,反向代理服务器,负载均衡服务器等等很多的中间部分,而这些模块之间都是通过新的连接相连,如果频繁的新建断开他们之间的连接,不仅会导致服务器端出现大量TIME_WAIT连接,还会导致性能的下降(如果中间每多过一层就多新建一条连接,那么性能肯定会急剧下降,新建一条连接的代价是相当高的)。

 

举一个常见的模型

客户端------>nginx反向代理服务器------>后端服务器

客户端使用短连接频繁的请求反向代理服务器,如果反向代理服务器也同样去请求后端服务器的话,当客户端断开连接,nginx也断开与后端服务器的连接,就会造成nginx所在的服务器产生大量的TIME_WAIT连接,压力增大时很可能导致nginx服务器无法提供新的连接。

 

面对上面的问题,就需要调整nginx的参数。保证不论客户端如何请求nginx服务器,nginx与后端服务器都保持一定数据量的长连接,这样就能有效的避免连接的频繁创建于释放。

在upstream XXX 配置中增加keepalive配置

技术分享图片

这意味着,nginx服务器会与后端服务器最多“保持”5000条连接的连接池,“保持”的意思是,当客户端的请求非常多时,nginx与后端服务器会存在多余5000的连接,但是当压力减小时,多于5000的连接会被释放,仍然恢复到5000条连接。也就是说,如果这个值设置的非常小,当客户端访问压力剧增时,仍然是会出现大量新建释放连接的问题的,当然,也可以通过增加连接池内连接的超时时间来控制连接的有效期,不过这就需要根据业务需求反复测试调整了。

技术分享图片

要想keepalive生效,还需要两个必要的条件:

1、需要强制nginx与后端服务器使用1.1版本的HTTP协议,因为1.1默认是keepalive的。

2、需要将客户端请求的Connection头部重置掉,因为如果客户端传来的是close,那么这条请求到了后端服务器那,后端服务器就会主动将连接关闭掉,nginx与服务器端的连接也就无法keepalive了。

 

经过这样的调整,就能实现我们nginx与后端服务器之间使用长连接的连接池,最大限度的复用连接。 

 

Nginx反向代理与后端服务采用连接池参数分析,长连接减少TIME_WAIT

标签:keepaliv   一个   简单   默认   参数   keepalive   有效期   频繁   直连   

原文地址:https://www.cnblogs.com/satuer/p/9657730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!