Nginx 原理和架构

Nginx 原理和架构Nginx 是一个免费的 开源的 高性能的 HTTP 服务器和反向代理 以及 IMAP POP3 代理服务器 Nginx 以其高性能 稳定性 丰富的功能 简单的配置和低资源消耗而闻名 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程 master 进程并不处理网络请求 主要负责调度工作进程 加载配置 启动工作进程及非停升级 worker 进程负责处

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。

Nginx 的整体架构

Nginx 整体架构

Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。

master进程主要用来管理worker进程,具体包括如下4个主要功能:

  1. 接收来自外界的信号。
  2. 向各worker进程发送信号。
  3. 监控woker进程的运行状态。
  4. 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。

woker进程主要用来处理基本的网络事件:

  1. 多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。
  2. 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
  3. worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。同时,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

Ngnix 是如何实现高性能的?

事件驱动模型

基于异步及非阻塞的事件驱动模型,可以说是 Nginx 得以获得高并发、高性能的关键因素。这一点上和 Netty 类似,底层都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

多进程机制

使用多进程的好处有两点:

  1. 进程之间不共享资源,不需要加锁,减少了使用锁对性能造成的影响,同时降低编程的复杂度,降低开发成本。
  2. 采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。

内存池

为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx 设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了 CPU 资源的消耗,同时减少了内存碎片。

模块化设计

高度模块化的设计是 Nginx 的架构基础。Openresty 就是在 Nginx 上引入了 lua 等第三方模块,使得扩展更加方便了。

Nginx 模块化设计

资料

  1. 浅谈Nginx服务器的内部核心架构设计
  2. nginx架构模型分析
  3. 深入 Nginx 之架构篇

推荐

  1. 系统设计:关于高可用系统的一些技术方案
  2. 基于系统负载的动态限流组件 dynamic-limiter
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199531.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:47
下一篇 2026年3月20日 下午12:47


相关推荐

  • UVa409_Excuses, Excuses!(小白书字符串专题)[通俗易懂]

    UVa409_Excuses, Excuses!(小白书字符串专题)

    2022年2月6日
    47
  • C利用Picturebox控件显示图片

    C利用Picturebox控件显示图片C 利用 Picturebox 控件显示图片 1 Picturebox 控件 SizeMode 属性 1 Normal 模式 如果图片大于 Picturebox 控件大小 图片不能完全显示 2 AutoSize 自动调整 Picturebox 控件大小去适应图片的大小 图片可以完全显示 3 StretchImage Picturebox 控件大小不变 自动调整图像适应控件 2 使

    2026年3月17日
    2
  • 图像处理算法其实都很简单「建议收藏」

    图像处理算法其实都很简单「建议收藏」要学习高斯模糊我们首先要知道一些基本概念:线性滤波与卷积的基本概念    线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。

    2022年5月17日
    49
  • xshell退出Vi编辑模式

    xshell退出Vi编辑模式最近在学习 Linux 时 初次使用 Vi 编辑模式编辑文本 但是编辑完成之后 不知道怎么退出编辑模式 然后在网上查找了一番 特此分享给各位老铁 下面总结一些 vi 退出命令 学习 进入编辑模式 按 o 进行编辑编辑结束 按 ESC 键跳到命令模式 然后输入退出命令 w nbsp 保存文件但不退出 vi 编辑 w nbsp 强制保存 不退出 vi 编辑 wfile nbsp 将修改另存到 file 中 不退出 vi

    2026年3月19日
    2
  • 小米发布国内首款手机版龙虾AI,雷军点评手机龙虾

    小米发布国内首款手机版龙虾AI,雷军点评手机龙虾

    2026年3月13日
    3
  • 操作码OpCode

    操作码OpCode运行一段 PHP 代码主要有两个阶段 编译和执行 当然编译过程中还包括词法分析语法分析不同阶段和细节 这里我们将其作为一个整体 在这两个阶段之间 PHP 代码会被编译成 opcode 可以将其认为是引擎的一个中间语言 编辑阶段把 PHP 源码生成 opcode 然后在执行阶段执行这些 opcode PHP 代码编译之后会生成许多的 op 每一个 op 都是一个 zend op 类型的 c 变量 相关的定义可以在

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号