nginx实现高性能低消耗的原理
Linux开发架构之路 2023-03-27

Nginx 是一个轻量级的HTTP 服务程序,相比其他服务器程序如Apache,Nginx占用内存少,稳定性高,并发处理能力强。同时Nginx 还是一个反向代理服务程序,和邮件代理服务程序。Nginx具有丰富的模块库、灵活的配置、较低资源消耗等优点。下面,我们一起深入看一下Nginx的工作机制

1. Nginx 如何实现高性能低消耗的呢?

我们从以下几个方面说明以下:

网络事件处理机制

  • Nginx 采用异步非阻塞的方式处理请求,可以同时处理上万的请求

  • Nginx 支持 select/epoll 等流行事件处理机制,根据系统环境自动选择

  • Nginx 采用独立于系统的事件处理机制,能够高效处理请求

资源分配技术

  • Nginx 采用分阶段资源分配技术,使得它的CPU和内存消耗非常低

多核处理优化

  • Nginx 默认采用多进程启动模式

  • Nginx 包含Master 进程 和 Worker 进程

  • 能够充分利用 SMP 对称多处理的优势,减少Worker进程磁盘I/O的阻塞

  • Nginx 支持Worker进程和CPU内核 一一对应绑定,避免进程上下文的切换致使cache失效

基于上面提到技术,以及Nginx很多地方的优化,让Nginx成为最快的HTTP服务器。

2.Nginx的进程模型

在Nginx的技术架构中,进程模型是至关重要的一部分。接下来,我们一起看看Nginx进程模型,以及它们的工作机制。

Linux 系统中,Nginx默认以守护进程daemon方式启动,默认采用多进程方式。Nginx包括两种类型的进程:

  • Master 进程,数量只有一个,管理Nginx本身和Worker进程

  • Worker 进程,数量一般和CPU核数相等,Nginx的所有请求处理,均是在Worker进程中完成

下面,我们分别深入看一下Master和Worker进程。

2.1 Master 进程工作机制

在Nginx启动时,Master进程创建,主要负责初始化Nginx和相关模块、fork Worker进程、接收处理外界信号等工作。

Nginx的初始化过程:

  • 解析配置文件,这是Nginx初始化最重要的一个环节

  • 调用各个配置指令回调函数,完成各个模块的配置、相互关联等

  • 建立listen 的 socket(listenfd)

  • 准备工作都完成后,fork worker子进程和cache子进程

Master 进程信号处理机制

我们通过kill命令发送信号给Nignx Master 进程,看看Master进程如何处理:


分析流程:

  • Master 进程接收到 HUP 信号

  • Master 进程重新加载配置文件

  • Master 进程启动新的Worker进程

  • Master 进程发送信号给Worker 进程

  • 老的Worker进程不再接收新的请求

  • 老的Worker进程处理完当前请求,退出

  • 至此,Nginx完成平滑重启

注意:Nginx 0.8 版本以后,提供了 -s参数,用于管理Nginx服务的停止和重启,注意line 11:


2.2 Worker 进程工作机制

Worker进程负责所有请求的处理工作,我们通过一个HTTP请求,来梳理一下Worker的工作流程:

  • 新的请求到来:所有的Work进程的listenfd都会变得可读

  • 竟抢互斥锁:所有 Worker 进程在注册listenfd读事件前,要先抢accept_mutex

  • 抢到互斥锁的Worker,注册listenfd读事件,在事件中调用accept接受该连接

  • 拿到请求后,Worker进程开始读取请求,解析请求,处理请求,产生数据,再返回给客户端

  • Worker进程断开连接

需要注意:一个HTTP请求,完全由Worker进程处理,而且只在一个Worker中处理

2.3 Master-Worker 进程架构机制的优势有哪些??

对于每个Worker 进程来说,独立的进程,不需要加锁,节约锁导致的资源开销;worker进程之间,互不干扰,平滑重启就是很好的例子,服务不中断。

2.4 网络事件处理机制

Nginx 采用的是异步非阻塞事件处理机制,支持select/poll/epoll/kqueue 等等。Nginx 同时会监控多个事件,调用他们是阻塞的。但是调用有超时时间,在超时时间内,如果有事件准备好了,就返回,否则重新放入epoll中。当读写返回EAGAIN时,事件将会被再次放入epoll中。

处理线程只有一个,同时处理的请求也只有一个,所谓多请求并发,只是在不断的切换请求而已。虽然是切换,但这种切换不涉及上下文切换,相比十分轻量。更多的并发,只是会占用更多的内存。

进程相关的还有,信号和定时器,这部分另外单独讲解。

3. Nginx 包含哪些模块

Nginx是模块化架构的服务,丰富的模块,松散耦合,也让Nginx更加强大!我看看Nginx 都有哪些模块

内核模块

实现了底层的通讯协议,为其他模块/进程构建运行环境、协作基础,打开listen 的端口,启动worker进程

HTTP/Mail模块

两个特殊模块,位于内核模块和各功能模块间;在内核模块之上实现了另一层的抽象;处理HTTP/MAIL协议事件;确保调用功能模块顺序正确。

Event模块

负责监听accept后建立的连接,对读写事件进行添加删除;与非阻塞 I/O 模型结合使用;支持select/poll/epoll/kqueue等;注意惊群效应,后面有解释。

Handler模块

负责接受客户端请求并产生输出;通过配置文件中location指令配置 content handler 模块。

Filter模块

负责输出内容处理,修改输出内容;Fiter模块在获取回复内容之后,向用户发送响应之前,执行处理动作;调用顺序在编译时就确定了。

Upstream模块

实现反向代理的功能,负责将请求转发到后端服务器上,并读取响应,发回客户端;跨越单机的限制,完成网络数据的接收、处理和转发;

LoadBalancer模块

根据配置指定算法,在众多的后端服务器中选择一个,完成请求的转发服务器;都有哪些算法呢?

惊群效应:

  • 当内核 accept 一个连接时,会唤醒所有等待中的进程

  • 但实际上只有一个进程能获取连接,其他的进程都是被无效唤醒的

  • 所以 Nginx 采用了自有的一套 accept 加锁机制,避免多个进程同时调用 accept

  • Nginx 多进程的锁在底层默认是通过 CPU 自旋锁来实现。如果操作系统不支持自旋锁,就采用文件锁。



声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 【7.24 深圳】2025国际AI+IoT生态发展大会/2025全球 MCU及嵌入式技术论坛


  • 相关技术文库
  • 电源
  • DC
  • AC
  • 稳压
  • 51单片机LCD液晶屏按键电子时钟的设计

    液晶屏为JM12864或FYD12864(带字库),我用这两种型号的屏没问题, 4行*8列汉字=32 串行通信 接/口P1.5--P1.7,可根据你的电路修改相应的接口。 #include #define uchar unsigned char voidLCD_ini(); void ascii_c...

    昨天
  • 什么是pwm调光?pwm调光有何优点和注意事项?

    pwm,脉宽调制技术,在很多方面都有应用。为增进大家对pwm的认识和了解,本文将对pwm在led调光方面的应用予以介绍。本文的主要内容在于介绍如何实现pwm调光、pwm调光优点、pwm调光需要注意的事项。如果你对pwm具有...

    前天
  • 什么是整流器?整流器的工作原理是什么?

    整流器是常用设备之一,通过整流器,我们能够对电流类型加以转换。为增进大家对整流器的认识,本文将对整流器、整流器的工作原理予以介绍。如果你对整流器或者整流器的相关知识具有兴趣,不妨和小编继续往下阅读哦...

    07-09
  • 干式变压器有何优缺点?干式变压器的应用+保护方式介绍

    干式变压器具备很强的应用意义,为增进大家对干式变压器的认识,本文将基于三点介绍干式变压器:1.干式变压器的优缺点,2.干式变压器的应用领域,3.干式变压器的保护方式。如果你对干式变压器具有兴趣,不妨继续往...

    07-09
  • 你了解干式变压器的冷却结构吗?干式变压器如何冷却?

    干式变压器在工业中具有很多的应用场景,对于干式变压器,我们有必要对它有所认识。为增进大家对干式变压器的了解程度,本文将基于两点介绍干式变压器:1.干式变压器的冷却结构,2.干式变压器的冷却方式介绍。如果...

    07-09
  • 干式变压器正常温度是多少?干式变压器有何安装规范?

    干式变压器是变压器类型之一,任何一款器件都有它的适用范围,干式变压器也不例外。为保证干式变压器的正常适用,本文将对干式变压器的正常温度予以介绍。此外,本文还将介绍干式变压器的安装规范。如果你对干式变...

    07-09
  • 为何要发展电源管理芯片?如何选择电源管理芯片?

    芯片的重要性不言而喻,我国目前在芯片方面的成就还未达到世界巅峰。但是,小编相信中国的芯片水平将会领先世界。为增进大家对芯片的了解,本文将对电源管理芯片予以解读。本文中,你将对电源管理芯片的发展必要性...

    07-08
  • 全方位了解存储,你知道的存储介质有哪些?

    存储是非常重要的技术,基于存储技术,我们可以将数据存储在存储设备上。那么对于存储设备而言,有哪些因素对它而言是十分重要的呢?其中一个,便是存储介质。为增进大家对存储的认识,本文将对存储介质予以介绍。如...

    07-07
  • 了解过分布式光伏逆变器吗?不同光伏逆变器有何优缺点?

    逆变器,已是一个老生常谈的话题。因此,就机械等相关专业的朋友,对于逆变器通常都较为了解。为增进大家对逆变器的认识,本文将对光伏逆变器、组串式逆变器、分布式逆变器等内容予以介绍。如果你对逆变器相关内容...

    07-07
  • 一步步了解检测技术,什么是声发射检测?

    检测的重要性不言而喻,我们通过检测,可以对很多电子器件进行检测,以判断电子器件是否存在一些缺陷。为增进大家对检测的认识,本文将对声发射检测技术予以介绍。如果你对检测技术具有兴趣,不妨同小编一起来阅读...

    07-07
  • 变压器规格型号容量

    一般常用变压器的型号可归纳如下 : 1、按相数分: (1)单相变压器:用于单相负荷和三相变压器组。 (2)三相变压器:用于三相系统的升、降电压。 2、按冷却方式分: (1)干式变压器:依靠空气对流进行自然冷却或增加风机冷却...

    07-04
  • 干式变压器有哪些分类?干式变压器性能特点介绍

    干式变压器是变压器类型之一,但是,很多朋友对干式变压器却并非十分了解。为增进大家对干式变压器的认识,本文将对干式变压器的分类、干式变压器的性能特点、干式变压器的应用领域予以介绍。如果你对干式变压器具...

    07-03
下载排行榜
更多
评测报告
更多
广告