1、Nginx服务器架构初探

主要内容:
1. 模块化结构的相关知识
2. Nginx如何处理web请求
3. Nginx的事件驱动模型
4 .Nginx设计架构的概览

一、Nginx的模块化结构

  1.1 核心模块:对两类功能的支持
              主体功能:包括进程管理,权限控制,错误日志记录,配置解析等;
              响应请求功能:包括事件驱动机制,正则表达式解析等。

   1.2 标准HTTP模块
               ngx_http_core: 配置端口、URI解析、服务器响应错误处理,别名控制以及其他HTTP核心事物;
               ngx_http_access_module: 基于IP地址的访问控制(允许/拒绝);
               ngx_http_auth_basic_module: 基于HTTP的身份认证。
               ...
   1.3 可选http模块:能够处理一些特殊的http请求。
   1.4 邮件服务模块:支持Nginx的邮件。
   1.5 第三方模块:扩展应用。

二、Nginx的web请求处理机制

    首先,Nginx的一个显著优势就是能够同时处理大量并发请求;Nginx采用的是多进程+异步非阻塞机制。

    2.1 多进程
            Nginx服务器的三大类进程(主进程与工作进程通过管道机制通信,工作进程之间通过主进程进行交互)。
           (1)主进程(Master Process):对外通信 及 对内管理;
           (2)工作进程(Worker Process):由主进程生成,数量由配置文件指定;
                   主要工作:1. 接收客户端请求;
                           2.将请求送入各个功能模块过滤;
                           3.IO调用,获取响应数据;
                           4.与后端服务器通信,接收后端服务器处理结果;
                           5.数据缓存,发送请求结果,响应客户端;
                           6.接收主程序指令,如果重启、升级、退出等。
            (3)缓存索引重建及管理进程(Cache Loader & Cache Manager)。

 2.2 异步非阻塞
        发送方:发送请求后,不用等待响应,而去继续其他工作;(是为异步);
        接收方:处理请求时进行的IO操作如果不能马上获取结果,则不等待,而去继续其他工作。当IO操作完成后,将完成状态和结果通知接收方,接收方在响应发送方。(是为非阻塞)。

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

IO调用时如何把自己的状态通知给工作进程的呢?

3.1 事件驱动模型概述
 (1)组成:事件收集器、事件发送器和事件处理器三部分组成。

 (2)Nginx 的常用事件驱动模型 
     1.select库:首先,创建所关注事件的三种事件描述符集合:
     (1)读事件(Read)的描述符;(2)写事件(Write)描述符;(3)异常发生(Exception)事件。
                其次,调用底层提供的select()函数,等待事件发生;
                然后,轮询所有事件描述符集合中的每一个时间描述符,检查是否有相应的时间发生,有则处理 。
                (Nginx编译过程中若没有指定其他高性能的事件驱动模型库,则自动编译该库)。

      2.poll库:poll库和select库基本工作方式相同;poll是select库的优化。
                区别: select库分别为读、写和异常分别创建描述集合,轮询也是分别轮询三个集合;而poll库只创建一个集合,最后轮询可以同时检查者三种事件是否发生。

      3.epoll库:首先,通过相关调用通知内核创建一个有N个描述符的事件列表;
                其次,给这些描述符设置所关注的事件,并把它添加到内核的事件列表中去;
                然后,epoll库开始等待内核通知事件发生,发生后,内核将发生的事件的描述符列表上报给epoll库,得到时间列表的epoll库就可以进行事件处理了。
                区别:由进程轮询事件集合描述符,变为把描述符列表交给内核管理,一旦有事件发生就将发生事件的描述符列表通知给进程,这样就避免了轮询整个描述符列表,特别适用于高性能事件的实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值