开发人员很多都知道nginx性能很好,基本都知道nginx有master进程和work进程组成。因为master进程可以根据请求的情况创建work进程,所以对cpu来说被分配的总时间片变多,所以相对来说nginx具有更好的性能。那么nginx的架构是怎样的,今天我们来探索一下nginx究竟是如何工作的。

start nginx产生两个进程 nginx有几个进程_nginx

首先我们看到最上边有master,也就是我们熟悉的master进程,其下方的work进程由master进程进行管理。从图中我们看到master进程主要负责调度,work进程才是真正的工作进程。nginx启动之后会就会创建work进程,所以一般至少会有两个进程,如果我们杀死work进程,master进程就会创建一个work进程。所以杀死master进程才是杀死nginx进程的根本。

start nginx产生两个进程 nginx有几个进程_start nginx产生两个进程_02

我们知道进程是程序的一次执行,但是一个进程是至少一个线程,这个线程是根据请求的并发量来创建的。所以work进程能够处理很多请求,当然如果处理不过来的时候master进程就又重新创建work进程了,除此之外nginx采用非阻塞队列,也就是nio模型。这块以后学习netty的时候再详细思考这个问题。

当然worker进程的数量并不是越多越好,这个跟计算机的性能由关系。过多的work进程在现场恢复和调度上有消耗。

在架构图中我们每个work进程中又有很多组件。其中包括核心模块和代码模块,核心模块负责轮询。而其他模块则是通过核心模块进行调用,模块化设计是的我们可以自己创建模块或者决定使用哪些模块。

start nginx产生两个进程 nginx有几个进程_java_03

在worker进程的下方,我们看到有proxy cache,这块就是反向代理功能和缓存管理,代理是nginx的主要功能。这块也是我们上节所说的反向代理和负载均衡机制的功能模块就这块,那么什么是正向代理什么是反向代理?

start nginx产生两个进程 nginx有几个进程_队列_04

start nginx产生两个进程 nginx有几个进程_队列_05

正向代理就是说访问者知道被访问者的ip地址,代理者只是做一个转发的功能。访问者是知道被访问者的地址信息的。但是反向代理是被访问者不知道被访问者的ip,但是代理服务器是知道被访问者的地址信息的。所以说正向代理对被访问服务器来说影藏了客户端的信息。但是反向代理影藏了服务端的信息。