第3章 Nginx服务器架构初探

来源:互联网 发布:计算机编程是什么 编辑:程序博客网 时间:2024/06/06 02:26

第3章 Nginx服务器架构初探

3.1 模块化结构

3.1.1 什么是“模块化设计”

3.1.2 Nginx模块化结构
Nginx模块分为:

1、核心模块
这里写图片描述
Nginx服务器正常运行必不可少的模块,它们提供了Nginx最基本最核心的服务,如进程管理、权限管理、错误日志记录等;

2、 标准HTTP模块
这里写图片描述
这里写图片描述
这里写图片描述
快速编译Nginx后包含的模块,其支持Nginx服务器的标准HTTP功能;

3、可选HTTP模块
这里写图片描述
这里写图片描述
这里写图片描述
主要用于扩展标准的HTTP功能,使其能够处理一些特殊的HTTP请求

4、邮件服务模块
这里写图片描述
主要用于支持Nginx的邮件服务;

5、第三方模块

是为了扩展Nginx服务器应用,完成特殊功能而有第三方机构或者个人编写的可编译到Nginx中的模块。

Nginx服务器在功能定制和扩展上具有其他web服务器无法媲美的巨大优势,从核心功能到一般功能,再到扩展功能,几乎都可以使用“模块化”技术实现。

3.2 Nginx服务器的Web请求处理机制
完成并行处理请求工作有三种方式可供选择:多进程方式、多线程方式和异步方式。

3.2.1 多进程方式
优点:设计和实现相对简单
缺点:操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的额外开销,因此,如果Web服务器接收大量并发请求,就会对系统资源造成压力,导致性能下降。
Apache服务器。

3.2.2 多线程方式
服务器每当接收到一个客户端时,会有服务器主进程派生一个线程出来和该客户端进行交互。产生线程的开销远小于进程的开销。
多线程之间彼此影响,风险大。
ISS服务器

3.2.3 异步方式
同步异步、阻塞非阻塞
这里写图片描述
这里写图片描述
这里写图片描述

*
同步异步:同步是主动询问数据是否准备好,异步是被动告知数据准备好。
阻塞非阻塞;阻塞没有数据则等待,非阻塞没有数据也会返回标识。
bio: 同步阻塞
nio: 同步非阻塞
aio: 异步非阻塞
这部门要写写代码才可以。
*
3.2.4 Nginx服务器如何处理请求
Nginx使用的就是异步非阻塞方式。
Nginx服务器启动后可以产生一个主进程(master process)和多个工作进程(worker process),所有工作进程都用于接收和处理客户端的请求。
每个工作进程使用了异步非阻塞方式,可以处理多个客户端请求。
客户端请求数据增长,网络负载繁重时,Nginx服务器使用多进程机制能够保证不增长对系统资源的压力;同时使用异步非阻塞方式减少了工作进程在I/O调用上的阻塞延迟,保证了不降低对请求的处理能力。

3.2.5 Nginx服务器的事件处理机制
IO调用如何把自己的工作状态通知给工作进程?
一:工作进程隔一段时间去检查一下IO的运行状态;
二:IO调用完成后能主动通知工作进程。
事件驱动模型(select/poll/epoll/kqueue)管理IO调用,时间准备好之后就通知工作进程事件已经就绪。

3.3 Nginx服务器的事件驱动模型

3.3.1事件驱动模型概述

3.3.2 Nginx中的事件驱动模型
事件驱动处理库又被称为多路IO复用方法,最常见的包括一下三种:select模型、poll模型和epoll模型。
3.3.3 select库

3.3.4 poll库
poll库是select库的优化实现

3.3.5 epoll库
epoll库在Linux平台上是高效的。

3.3.6 rtsig模型

3.3.7 其他事件驱动模型

3.4 设计架构概览
这里写图片描述

3.4.2 Nginx服务器的进程
1 主进程(Master Process)

2 工作进程(Worker Process)

3 缓存索引重建及管理进程 (Cache Loader & Cache Manager)

3.4.4 进程交互
Master-Worker交互 及 Worker-Worker交互都依赖于管道(channel)机制。

3.4.5 Run Loops事件处理循环模型
Run Loops,指的是进程内部用来不停地调配工作,对事件进行循环处理的一种模型。

3.5 本章小结

原创粉丝点击