Nginx

什么是Nginx

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

反向代理

客户端(用户A)向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。而客户端始终认为它访问的是原始服务器B而不是服务器Z。由于防火墙作用,只允许服务器Z进出,防火墙和反向代理共同作用保护了院子资源服务器B

在这里插入图片描述

用途:将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡或为后端较慢的服务器提供缓冲服务。

为什么用Nginx

Nginx是经过实践证明的、安全稳定的反向代理服务器,淘宝、新浪等大型互联网公司都有Nginx的身影。Nginx经过线上各种网络环境验证,能够帮你隔离各种复杂的网络环境,轻松支持10000+的同时在线连接数,同时拥有多种成熟的负载均衡策略,能够方便横向拓展后端服务。今天我们说一说Nginx负载均衡策略。

Nginx有以下几种负载均衡策略

1、基于轮询方式

轮询是最基本的配置方法,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。

2、依据IP(ip_hash)分配

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

3、基于权重(weight)分配

每个upstream下服务会有一个权重(weight)配置,这个权重就是请求派发的概率,权重越大请求派发给服务的机会越大,可以根据服务资源情况分配权重。

4、最少连接(least_conn)方式

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是有些请求占用的时间很长,会导致其所在的后端负载较高,这种情况下最少连接方式分配方式就可以达到更好的负载均衡效果。

当我们修改Nginx配置时可以在不停机的情况下执行命令(nginx -s reload)更新应用配置,这让在不修改Nginx源码情况下通行修改配置文件实现动态调整负载均衡提供了可能。今天重点介绍一下基于Nginx权重分配的动态负载均衡架构实现,系统结构如下面所示。
在这里插入图片描述

在这个架构中每个服务需提供以下通用接口

1、服务接口配置查询接口

每个服务可配置自身接口访问控制信息,比如启用哪些接口、禁用哪些接口以及接口分组等配置。

2、资源使用情况查询接口

每个服务提供接口查询所在服务器以及自身资源使用情况,比如CPU、内存、磁盘等使用情况。

监控服务会定期查询每个服务的资源使用情况以及接口配置。如资源使用率过高、内存不足、网络延迟越久则权重越小,同时监控服务还可以实现异常服务告警功能,配置每个服务默认权重,最终监控服务会根据这些信息计算出每个服务接口的权重信息,同时监控服务会提供接口来查询服务权重信息。Nginx运行用户下会部署一个配置文件更新程序,这个程序会定时到监控服务查询具体服务接口权重信息,当发现权重信息有变化时会更新Nginx配置,然后执行命令(nginx -s reload)更新应用负载均衡配置信息。

上述负载均衡系统应注意以下问题

正常情况下整个系统的负载均衡应该是相对稳定,如果负载均衡配置变动太频繁会导致Nginx不稳定,但服务器CPU使用情况是波动,这就要求监控服务负载均衡算法不能对CPU使用率太过敏感,生产上CPU使用率可以定50%、80%、90%几个权重梯度,只有突破新梯度时权重才会发生变化。 为保证系统高可用性,负载均衡权重有变化时应先备份现有Nginx配置文件,然后再更新Nginx配备文件,更新失败可以回退配置文件。