1. 系统拓扑图
说明:
- 用户请求达到Nginx(相当于协调者),可以将任务分配更多的人(机器)去做事,增加效率,服务更多人
- 若请求资源为静态资源,则将请求转发至静态资源服务器
- 若请求资源为动态数据,则将请求转发给web服务器(在这里为tomcat处理),在转发的同时,会根据配置的负载均衡策略进行负载均衡处理。
2. Nginx使用场景
Nginx的主要使用场景:
- HTTP服务器
Nginx可以作为静态服资源服务器来使用,例如在前后端分离的架构中可以将前端应用部署在Nginx服务器中。也可作为上传服务器、图片服务器等使用 - 作为反向代理(第一点中的图)
Nginx可以作为反向代理,将来自互联网的外部请求转发到内网中应用服务器。通过反向代理可以实现负载均衡。
Nginx内置了丰富的负载均衡算法:轮询,基于权重,ip_hash等,通过第三方支持,还有fair(响应时间短的优先分配),url_hash等。
2. Nginx中的进程
2.1 Nginx中的多进程模型
Nginx的具有很高的性能,有庞大的使用群体,这与它的基本架构有紧密关系。
在Nginx运行时后台包括一个master主进程和多个worker进程。Nginx也可以支持多线程方式工作,但模式使用多进程,也是主流的使用方式。
-
master进程
主进程主要进行Nginx配置文件解析,数据结构初始化,模块注册配置,信号处理,网络监听,工作进程生成和管理等工作。监控worker进程的状态,在worker进程异常退出后可以自动重新启动进程。 -
worker进程
多个worker进程之间是对等的关系,竞争去处理客户的请求,一个请求只有一个worker去处理。worker进程数量一般与机器cpu数量相当。每个worker都是单线程的,采用异步非阻塞方式处理请求。是Nginx服务器提供服务的主体。
当一个请求进来时,多个worker会竞争处理这个请求,但有且只有一个worker可以获取到该请求的处理权限。
2.2 多进程模式的优点:
每个worker进程是互相独立的,互相不影响,一个进程的退出不影响其他的进程服务。每个worker进程使用异步非阻塞方式来处理请求,具有很高的性能。
2.3 缓存
Nginx服务器为提供请求的处理效率,减轻网络压力,采用缓存机制。缓存机制将历史应答的数据缓存到本地,并且在Nginx启动后会启动一个专门的后台进程对本地缓存内容建立维护索引,以此来加快缓存文件的访问。
所以Nginx的后台进程出master进程,worker进程以外,还有后端服务进程。
3. Ngnix的负载均衡策略
Nginx中支持多种负载均衡策略,在不同的使用场景中我们可以选择合适的负载均衡策略
3.1 轮询法
将请求轮流分配到注册的后端服务器中,平等的对待所用的后端服务器,不关心服务器的实际连接数就负载情况。比较适合后端服务器的配置都差不多的情况。例如如下配置:
upstream server {
server 192.160.0.123:8080;
server 192.160.0.124:8080;
server 192.160.0.125:8080;
}
3.2 加权轮询
可以为每个武器配置一个权重值,权重值越大将会有机会分担更多的请求,该配置方式比价适合集群中各个服务器配置不均衡的情况,对高的服务器可以配置大一些的权重,对配置低的机器可以配置小一些的权重。
upstream server {
server 192.160.0.123:8080 weight=4;
server 192.160.0.124:8080 weight=2;
server 192.160.0.125:8080 weight=1;
}
3.3 原地址哈希
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器的大小进行取模计算,得到的结果作为客户端要访问的服务器的序号。
特点:这种方式可以保证来自同一ip的请求被打的固定机器上,可以解决session问题。
示例: