2. Nginx 服务器架构初探

  • 模块化结构
    • 什么是模块化结构
      • 模块化设计支持分布式开发;
      • 模块化设计支持团队协同合作;
      • 模块化设计支持应用扩展和升级;
    • Nginx 模块化结构
      • Nginx 模块分为:核心模块、标准模块、HTTP 模块,可选 HTTP 模块、邮件服务模块及第三方模块五大类。
      • 核心模块
        • 核心模块为 Nginx 运行时必不可少的模块,为 Nginx 提供了最基本最核心的服务。
        • 在编译后的 objs 目录中包含了核心模块和标准 HTTP 模块,在此目录的 ngx_modules.c文件中包含了此版本快速编译后包括所有固有模块的声明
        • 核心模块主要包含两类功能,一类是主体功能,包括进程管理,权限控制,错误日志记录,配置解析等。另外一类是用于响应请求事件必须的功能,包括事件驱动机制,正则表达式等。
      • 标准 http 模块

           

      • 可选 HTTP 模块
        •    

      • 邮件服务模块

      • 第三方模块
  • Nginx 服务器的 web 请求处理机制。
    • 多进程处理方式
      • 多进程方式指:服务器每当接收到一个客户端时,就有服务器主进程生成一个子进程出来和该客户建立连接进行交互,知道连接断开。
      • 优点:设计和实现相对简单,各个子进程之间相互独立。请求过程彼此不受干扰,互不影响。
      • 缺点:生成一个子进程时需要进行内存复制等操作,资源和时间上产生额外的开销,对系统资源造成压力。性能下降。
    • 多线程方式
      • 服务器每当接受到一个客户端时,会由服务器主进程派生一个线程出来和该客户端进行交互。
      • 优点:由于系统产生一个线程的开销远远小于产生一个进程的开销,减轻了 web服务器对系统资源的要求。
      • 缺点:多个线程位于同一个进程内,可以访问彼此的内存空间,彼此之间相互影响,开发过程中需要开发者自己对内存管理,增加出错的风险。
    • 异步方式
      • 同步机制:发送方发送请求后,需要等待接受方发回的响应后,才接着发送下个请求。
      • 异步机制:发送一个请求后,不等接收方回应,就继续发送下一个请求。
      • 阻塞:Socket 的阻塞调用方式为,调用结果返回之前,当前线程从运行状态被挂起,一致等到调用结果返回之后才进入就绪状态
      • 非阻塞,如果调用结果不能马上返回,当前线程不会被挂起,而是执行下一个调用。
      • 异步非阻塞方式:发送方向接受方发送请求后,不用等待响应,可以继续其他工作,接收方处理请求时进行的 IO 操作如果不能马上得到结果,也不等待,而是马上去做其他事情。
    • Nginx 如何处理请求.
      • Nginx 结合多进程机制与异步非阻塞方式对外提供服务。
      • 优势:不增长对系统资源的压力,不降低对请求的处理能力。
    • Nginx 服务器的事件处理机制
      • IO调用在完成后主动通知工作进程
      • select/poll/epoll/kqueue 等这样的调用,称为事件驱动模型
    • Nginx 的事件驱动模型.
      • 事件驱动模型的基本单元
        • 事件收集器:负责收集所有的事件
        • 事件发送器:负责将收集到的事件发送到目标对象中
        • 事件处理器:负责具体事件的响应工作
    • Nginx 设计架构概览
      • Nginx服务器的进程.
        • 三大类进程:主进程,工作进程,缓存索引进程.
      • 主进程
        • 读取 Nginx 配置文件并校验其正确性
        • 建立,绑定,和关闭 Socket。
        • 按照配置生成、管理和结束工作进程。
        • 接受外界指令,比如重启,升级及退出服务器指令。
        • 不中断服务,实现平滑重启、应用新配置。
        • 不中断服务,实现平滑升级,升级失败进行回滚处理。
        • 开启日志文件,获取文件描述符。
        • 编译和处理 Perl 脚本。
      • 工作进程
        • 接收客户端请求
        • 将请求依次送入各个功能模块进行过滤处理
        • IO调用
        • 与后端服务进行通讯,接收后端服务器处理结果
        • 数据缓存,访问缓存索引,查询和调用缓存数据。
        • 发送请求结果,相应客户端请求。
        • 接收主程序指令,比如重启、升级、和退出。
      • 缓存索引重建及管理进程。
        • 缓存索引重建:根据本地磁盘上的缓存文件在内存中建立索引元数据。
        • 缓存索引管理进程:主要负责在索引元数据更新完成后,对元数据是否过期做出判断
      • 进程交互
        • Nginx 在使用 master-Worker 模型时,会涉及到主进程与工作进程之间的交互,工作进程间的交互。依赖于管道机制

           

           

posted @ 2019-12-25 11:55  天上的白云真白呀  阅读(123)  评论(0编辑  收藏  举报