Nginx服务器学习(一):架构

一、Nginx服务器模块化结构

  1. 核心模块
  2. 标准HTTP模块
  3. 可选HTTP模块
  4. 邮件服务模块
  5. 第三方模块

二、Nginx服务器的Web请求处理机制

负责接收和处理请求Web请求一般有三种方式:多进程、多线程和异步。

1.多进程

服务器每接收到一个客户端的请求时,就从服务器主进程产生一个子进程负责和客户端建立连接交互,直接处理请求返回结果给客户端。
存在问题:当大量客户端同时请求服务器资源时,会给系统资源造成压力,导致系统性能下降

2.多线程

当服务器每当接收到一个客户端请求时,会由服务器主进程派生出一个线程与客户端进行交互。
优点:小于多进程的开销,减轻了Web服务器对系统资源的要求。

3.异步

即异步非阻塞方式,可描述为“不等”、“继续工作”。发送方向接收方发送请求,不等接收方将处理结果返回,可继续工作其他事情,接受方处理请求时进行的IO操作,不等IO操作返回结果,可继续工作其他事情。当IO操作完成后,将完成状态告知接收方,接收方在响应告知发送方。
这里有个疑问:IO调用怎么把处理状态通知给工作进程呢?
答案:主动告知。而不需要工作进程时不时就去查看IO状态。

三、Nginx服务器如何处理请求

服务器主进程产生多个工作线程,每个工作线程采用异步非阻塞机制来同时处理多个客户端的请求,既能够达到快速处理多个客户端请求,又可以减轻了系统资源的压力。

四、Nginx服务器的事件驱动模型

事件驱动可使得业务能够及时在某个时间点进行事件处理,防止业务堆积造成系统压力过大。
Nginx中事件驱动模型共包括三个单元:事件收集器、事件发送器、事件处理器
其三者的关系如下所示:
在这里插入图片描述
事件收集器负责收集由用户行为、软件行为、硬件行为触发的事件,通过事件发送器发送到目标对象,由目标对象将事件待处理事件的列表,采用非阻塞IO方式调用事件处理器处理事件请求。

事件模型驱动处理库

1. select模型,又称select库,先创建三类集合分别用于收集读(Read)事件、写(Write)事件和异常(Exception)事件的描述符,然后调用底层的select()函数,等待事件发生,最后轮询每个集合的描述符,检查是否有事件发生,有就处理。

2. poll模型,又叫poll库,操作原理跟select库差不多,唯一差别在于只需创建一个集合用于收集一个描述符集合,在每个描述符结构上分别设置读事件、写事件和异常事件,轮询同时检查是否事件发生。

3. epoll模型,又叫epoll库,在epoll库做出修改,直接将含有描述符的事件列表直接交给内核处理,不用产生工作进程去轮询集合。

四、Nginx服务器架构

有了前面知识的铺垫,现在可以来讲Nginx服务器的架构了,先来看一下架构:
在这里插入图片描述
客户端向服务器发送资源请求,Nginx服务器主进程产生多个工作进程采用异步非阻塞方式处理多个客户端请求,工作进程转发到后端服务器,由后端服务器进行数据处理和页面组织,并将结果返回,同时Ngnix服务器还会产生一个用于本地文件缓存建立索引的进程。

进程交互

1.主进程-工作进程:Master-Worker模式
采用管道通信方式,工作进程由主进程fork()函数产生,并分配ID,工作进程就在单向管道搜索任务来工作。
在这里插入图片描述
2.工作进程-工作进程:Worker-Worker模式
工作进程间互相交互是通过ID号来进行交互的,需要由主进程来设置,例如:w1想要发送指令给w2,通过主进程找到w2的id,将指令写进管道,w2捕获管道指令后执行相关操作。

不过这里我有个疑问:管道是单向管道,按道理来说,只能主进程发送消息给工作进程,工作进程无法发送消息给主进程,那么主进程又怎么会知道一个工作进程想要访问其他工作进程呢?这是个问题,等待大家提出解释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值