目录
Nginx的主要使用场景:
Nginx的具有很高的性能,有庞大的使用群体,这与它的基本架构有紧密关系。
在Nginx运行时后台包括一个master主进程和多个worker进程。Nginx也可以支持多线程方式工作,但模式使用多进程,也是主流的使用方式。
master进程
主进程主要进行Nginx配置文件解析,数据结构初始化,模块注册配置,信号处理,网络监听,工作进程生成和管理等工作。监控worker进程的状态,在worker进程异常退出后可以自动重新启动进程。
worker进程
多个worker进程之间是对等的关系,竞争去处理客户的请求,一个请求只有一个worker去处理。worker进程数量一般与机器cpu数量相当。每个worker都是单线程的,采用异步非阻塞方式处理请求。是Nginx服务器提供服务的主体。
当一个请求进来时,多个worker会竞争处理这个请求,但有且只有一个worker可以获取到该请求的处理权限。
每个worker进程是互相独立的,互相不影响,一个进程的退出不影响其他的进程服务。每个worker进程使用异步非阻塞方式来处理请求,具有很高的性能。
Nginx服务器为提供请求的处理效率,减轻网络压力,采用缓存机制。缓存机制将历史应答的数据缓存到本地,并且在Nginx启动后会启动一个专门的后台进程对本地缓存内容建立维护索引,以此来加快缓存文件的访问。
所以Nginx的后台进程出master进程,worker进程以外,还有后端服务进程。
Nginx中支持多种负载均衡策略,在不同的使用场景中我们可以选择合适的负载均衡策略
将请求轮流分配到注册的后端服务器中,平等的对待所用的后端服务器,不关心服务器的实际连接数就负载情况。比较适合后端服务器的配置都差不多的情况。例如如下配置:
- upstream server {
- server 192.160.0.123:8080;
- server 192.160.0.124:8080;
- server 192.160.0.125:8080;
- }
可以为每个武器配置一个权重值,权重值越大将会有机会分担更多的请求,该配置方式比价适合集群中各个服务器配置不均衡的情况,对高的服务器可以配置大一些的权重,对配置低的机器可以配置小一些的权重。
- 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;
- }
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器的大小进行取模计算,得到的结果作为客户端要访问的服务器的序号。
特点:这种方式可以保证来自同一ip的请求被打的固定机器上,可以解决session问题。
示例:
- upstream server {
- ip_hash;
- server 192.160.0.123:8080 weight=1;
- server 192.160.0.124:8080 weight=2;
- server 192.160.0.125:8080 weight=1;
- }
该算法根据后端服务器当前的连接情况,动态的选取其中当前堆积的连接数最少的一台服务器来处理请求,以便于提高服务的利用率。
这种算法比较适合后端各个服务器配置不同的情况。