1.写在前面

前面的内容我们介绍Nginx的一些的基础内容,今天我们继续深入Nginx的介绍,主要介绍下Nginx的架构的基础。

2.Nginx的请求处理流程

Web、Email以及TCP流量通过Nginx的传输层状态机,经过HTTP状态机,然后再经过Mail状态机,然后将对应的流量发到对应的代理中,在这个过程中静态资源会缓存到磁盘中去,同时Access访问日志Error错误日志。中间经过的主要是非阻塞的事件驱动处理引擎,同时使用线程池处理磁盘阻塞调用。

3.Nginx进程结构

主要是通过Master进程管理worker进程,所有的worker进程以及Cache Manager进程,Cache loader进程都是通过master进程创建出来的。

4.Nginx进程管理:信号

reload流程

  1. 向master进程发送HUP信号(reload命令)

  2. master进程校验配置语法是否正确。

  3. master进程打开新的监听端口。

  4. master进程用新配置启动新的worker子进程。

  5. master进程向老worker子进程发送QUIT信号。

  6. 老worker进程关闭监听句柄,处理完当前连接后结束进程。

5.热升级的流程

热升级流程

  1. 将旧Nginx文件换成新的Nginx文件(注意备份)

  2. 向master进程发送USR2信号

  3. master进程修改pid文件名,加后缀.oldbin

  4. master进程用新Nginx文件启动新的master进程

  5. 向老master进程发送QUIT信号,关闭老master

  6. 回滚:向老master发送HUP,向新master发送QUIT

6.worker进程:优雅的关闭

优雅的关闭

  1. 设置定时器:worker_shutdown_timeout
  2. 关闭监听句柄
  3. 关闭空闲连接
  4. 在循环中等待全部连接关闭
  5. 退出进程

7.网络收发与Nginx事件间的对应关系

一个数据报文从主机A经过多个路由器最终到达目的地主机B

数据流经过应用层、传输层、网络层、链路层,包装好的报文,然后经过以太网,广域网,最后到达目标主机,在目标主机中也是先经过链路层、网络层、传输层、应用层,经过层层的解开报文,最后到达对应的应用处理程序。

TCP流与报文

物理层到数据链路层,包装了一层目的和源的MAC地址

数据链路层到网络层,包装了一层目的和源的IP地址

网络层到传输层,包装了一层目的和源的端口

最后的应用层,就是包含了目的和源的端口,IP地址,还有就是MAC地址。

TCP协议与非阻塞接口

虽然事件类型很多,但是最终都可以分成两种,一种是读事件,一种是写事件,其中读事件包括Accept建立连接,Read读消息。写事件包括Write写消息。

8.Nginx事件循环

9.epoll的优劣及原理

epoll

  • 前提:

    • 高并发连接中,每次处理的活跃连接数量占比很小
  • 实现

    • 红黑树
    • 链表
  • 使用

    • 创建
    • 操作:添加/删除/修改
    • 获取句柄
    • 关闭

10.Nginx的请求切换

11.同步&异步、阻塞&非阻塞之间的区别

阻塞调用

以Accept为例

非阻塞调用

非阻塞调用下的同步和异步

12.Nginx模块

特征

  • 内聚
  • 抽象
    • 配置
    • 启停回调方法
    • 子模块抽象

模块的分类

13.Nginx如何通过连接池处理网络请求

构成

  • 对下游客户端的连接
  • 对上游服务器的连接

核心数据结构

14.内存池对性能的影响

15.Nginx进程之间的通讯方式

共享内存:跨worker进程通讯

16.Slab内存管理

ngx_slab_stat:统计Slab使用状态

17.Nginx中最常用的容器

Nginx哈希表

时间复杂度

红黑树的使用模块

18.使用动态模块来提升运维效率

19.写在最后

本篇博客主要的介绍了下Nginx的架构基础,后面会继续介绍Nginx剩下的内容。