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流程
向master进程发送HUP信号(reload命令)
master进程校验配置语法是否正确。
master进程打开新的监听端口。
master进程用新配置启动新的worker子进程。
master进程向老worker子进程发送QUIT信号。
老worker进程关闭监听句柄,处理完当前连接后结束进程。
5.热升级的流程
热升级流程
将旧Nginx文件换成新的Nginx文件(注意备份)
向master进程发送USR2信号
master进程修改pid文件名,加后缀.oldbin
master进程用新Nginx文件启动新的master进程
向老master进程发送QUIT信号,关闭老master
回滚:向老master发送HUP,向新master发送QUIT
6.worker进程:优雅的关闭
优雅的关闭
- 设置定时器:worker_shutdown_timeout
- 关闭监听句柄
- 关闭空闲连接
- 在循环中等待全部连接关闭
- 退出进程
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剩下的内容。