1.Nginx服务架构
1.模块化
- Nginx分为五大模块
分类:核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块、第三方模块
命名:一般以 ngx_ 作为前缀, _module 作为后缀,中间使用描述词
位置:所有固定模块源码放在编译目录下的src目录中,一共分为core、event、http、mail、misc、os 6个目录
- 具体模块包含内容查询资料…
2. Web请求处理机制
多进程方式、多线程方式、异步方式
一个Web服务器 ——> 处理多个客户端
1. 多进程方式
- 说明:服务器主进程生成子进程来处理接收到的客户端,直到断开连接后结束子进程。
- 优点:各个进程独立运作,互不干扰,当进程结束时回收空间不留下任何垃圾。
- 缺点:在客户端数量多时,系统压力大,导致性能下降,并且每次进程结束都进行回收,效率低下。
2.多线程方式
- 说明:主进程派出线程对接客户端。
- 优点:相比多进程方式开销更小,对系统的资源要求度降低
- 缺点:多个线程位于同一个进程内,访问同样的内存空间,彼此相互影响,增加了出错的风险。
3.异步方式
-
说明: Nginx的异步方式是异步非阻塞方式(相当于开个线程去发消息,发完后该线程在等结果时可以做别的事)
-
事件处理机制
0. 隔时间查看是否有事件
0. 事件主动通知工作进程
> 采用 select/poll/epoll/kqueue 等系统调用实现 【事件驱动型模式】
3. Nginx服务器的进程
1.主进程(Master Process)
- 主要功能:与外界通信,对内部其他进程进行管理
> 读取Nginx配置文件并验证其有效性、正确性;
>
> 建立、绑定、关闭Socket
>
> 按配置生成、管理、结束工作进程
>
> 接收外界指令:重启、升级、退出服务器等
>
> 不中断服务,实现平滑重启,应用新配置
>
> 不中断服务,实现平滑升级,升级失败进行回滚处理
>
> 开启日志文件,获取文件描述符
>
> 编译和处理Perl脚本
2.工作进程(Worker Process)
- 主要功能:由主进程生成,正常情况下生存于主进程整个生命周期,保证Nginx服务器对外提供稳定的Web服务
> 接收客户请求
>
> 将请求依次送入各个功能模块进行过滤处理
>
> IO调用,获取响应数据
>
> 与后端通信,接收后端处理结果
>
> 数据缓存,访问缓存索引、查询和调用缓存数据
>
> 发送请求结果,响应客户请求
>
> 接收主程序指令:重启、升级、退出等
>
> …
3.缓存索引重建及管理进程
- 主要功能
0. 缓存索引重建进程:在Nginx启动一段时间后由主进程生成,在缓存元数据重建完后自动退出,其主要工作是根据磁盘上缓存文件在内存中建立索引元数据库。
0. 缓存索引管理进程:一般存在于主进程整个生命周期,负责对缓存索引进行管理,其主要功能是更新索引元数据库。