Nginx是一款免费的、开源的、高性能、、轻量级的HTTP服务器、反向代理服务器以及邮件(IMAP/POP3)代理服务器。
很多大型的网站都使用Nginx,如:百度、京东、新浪、网易、腾讯、淘宝等。
1.Nginx的整体架构简介
1)Nginx启动后,会产生一个主进程,主进程执行一系列的工作后会产生一个或者多个工作进程;
2)在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;
3)Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将应答数据缓存到本地。保障对缓存文件的快速访问;
2. Nginx的模块化
高度模块化的设计是 Nginx 的架构基础。Nginx严格遵循“高内聚,低”的原则,将服务器设计为多个模块,每个模块就是一个独立的功能模块,只负责自身的功能。
这5个模块从上到下重要性依次递减。
(1)核心模块
核心模块是Nginx服务器正常运行必不可少的模块,如同操作系统的内核。它提供了Nginx最基本的核心服务。像进程管理、权限控制、错误日志记录等;
(2)标准HTTP模块
标准HTTP模块支持标准的HTTP的功能;
(3)可选HTTP模块
可选HTTP模块主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务;
(4)邮件服务模块
邮件服务模块主要用于支持Nginx的邮件服务;
(5)第三方模块
第三方模块是为了扩展Nginx服务器应用,完成开发者想要的功能;
3.Nginx的Web请求处理机制
从架构设计上说,Nginx服务器是与众不同的。其一在于它的模块化设计;其二也是更重要的一点在于它对与客户端请求的处理机制上。 Nginx请求处理机制结合多进程机制和异步非阻塞机制。
1)多进程
多进程方式指服务器每当收到一个客户端请求时就由服务器主进程生成一个子进程出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。多进程方式的优点是设计简单,各个子进程相对独立,处理客户端请求时彼此不受干扰;缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销;当有大量请求时,会导致系统性能下降;
2)异步非阻塞
发送方向接收方发送请求后,不用等待响应,可以继续其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,也不必等待,而是马上返回去去做其他事情。当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。
4. Nginx服务器的事件驱动模型
从上面我们可以知道,Nginx服务器的工作进程调用IO后,就取进行其他工作了;当IO调用返回后,会主动通知工作进程。像select/poll/epoll等这样的系统调用就是用来支持这种解决方案的。这些系统调用也常被称为事件驱动模型,他们提供了一种机制就只让进程同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理。
如上图所示,Nginx的事件驱动模型由事件收集器、事件发送器和事件处理器三部分基本单元组成。
5. Nginx服务器Master-Worker进程处理模型
Nginx服务器在使用Master-Worker模型时,会涉及到主进程和工作进程的交互和工作进程之间的交互。这两类交互都依赖于管道机制。
Master-Worker交互
这条管道与普通的管道不同,它是由主进程指向工作进程的单向管道,包含主进程向工作进程发出的指令,工作进程ID等;同时主进程与外界通过信号通信;
Worker-Worker交互
这种交互是和Master-Worker交互是基本一致的,但是会通过主进程。工作进程之间是相互隔离的,所以当工作进程W1需要向工作进程W2发指令时,首先找到W2的进程ID,然后将正确的指令写入指向W2的通道。W2收到信号采取相应的措施。
通过这篇文章,我们对Nginx服务器的整体架构有了一个整体的认识。另外推荐大家多看看Nginx的源码,以便能更好地领悟 Nginx的设计思想。
- STEVAL-MKI169V1,用于标准 DIL24 插座的 I3G4250D 适配器板
- 【兰州大学】DDS_AD9850+邓凯豪
- 51最小系统
- EVAL-AD7418EBZ,评估板使用片内温度传感器评估 AD7418 10 位 ADC
- LT6656ACS6-4.096、4.096V 精密电流和升压基准电压源的典型应用
- 带 HART 的完全隔离、单通道电压和 4 mA 至 20 mA 输出
- 使用较低值设置电阻器的 LT3088HM 线性稳压器的典型应用
- LTM4636EY 5V 至 2.5V at 35A 设计的典型应用电路
- esp32-WROOM-32E转接板(省电,对面包板友好)
- AM2G-1218DH30Z ±18V 2 瓦 DC-DC 转换器的典型应用,适用于开/关控制应用