nginx架构学习

前言

这篇文章主要记录下对nginx架构的学习记录。

架构设计

优秀的模块化设计

高度模块化的设计是Nginx的架构基础。在Nginx中,除了少量的核心代码,其他一切皆
为模块。

在这5种模块中,配置模块与核心模块都是与Nginx框架密切相关的,是其他模块的基
础。而事件模块则是HTTP模块和mail模块的基础,原因参见8.2.2节。HTTP模块和mail模块
的“地位”相似,它们都更关注于应用层面。在事件模块中,ngx_event_core_module事件模块
是其他所有事件模块的基础;在HTTP模块中,ngx_http_core_module模块是其他所有HTTP模
块的基础;在mail模块中,ngx_mail_core_module模块是其他所有mail模块的基础。

事件驱动架构

所谓事件驱动架构,简单来说,就是由一些事件发生源来产生事件,由一个或者多个事
件收集器来收集、分发事件,然后许多事件处理器会注册自己感兴趣的事件,同时会“消
费”这些事件。下图为Nginx处理事件的简单模型:

管理进程、多工作进程设计

Nginx采用一个master管理进程、多个worker工作进程的设计方式,如图所示:

包括完全相同的worker进程、1个可选的cache manager进程以及1个可选的
cache loader进程。

这种设计带来以下优点:
(1)利用多核系统的并发处理能力
现代操作系统已经支持多核CPU架构,这使得多个进程可以占用不同的CPU核心来工
作。如果只有一个进程在处理请求,则必然会造成CPU资源的浪费!如果多个进程间的地位
不平等,则必然会有某一级同一地位的进程成为瓶颈,因此,Nginx中所有的worker工作进
程都是完全平等的。这提高了网络性能、降低了请求的时延。
(2)负载均衡
多个worker工作进程间通过进程间通信来实现负载均衡,也就是说,一个请求到来时更
容易被分配到负载较轻的worker工作进程中处理。这将降低请求的时延,并在一定程度上提
高网络性能。
(3)管理进程会负责监控工作进程的状态,并负责管理其行为
管理进程不会占用多少系统资源,它只是用来启动、停止、监控或使用其他行为来控制
工作进程。首先,这提高了系统的可靠性,当工作进程出现问题时,管理进程可以启动新的
工作进程来避免系统性能的下降。其次,管理进程支持Nginx服务运行中的程序升级、配置
项的修改等操作,这种设计使得动态可扩展性、动态定制性、动态可进化性较容易实现。

内存池的设计

      为了避免出现内存碎片、减少向操作系统申请内存的次数、降低各个模块的开发复杂
度,Nginx设计了简单的内存池。这个内存池没有很复杂的功能:通常它不负责回收内存池
中已经分配出的内存。这种内存池最大的优点在于:把多次向系统申请内存的操作整合成一
次,这大大减少了CPU资源的消耗,同时减少了内存碎片。
       因此,通常每一个请求都有一个这种简易的独立内存池(在第9章中会看到,Nginx为每
一个TCP连接都分配了1个内存池,而在第10章和第11章,HTTP框架为每一个HTTP请求又分
配了1个内存池),而在请求结束时则会销毁整个内存池,把曾经分配的内存一次性归还给
操作系统。这种设计大大提高了模块开发的简单性(如在前几章中开发HTTP模块时,申请
内存后都不用关心它释放的问题),而且因为分配内存次数的减少使得请求执行的时延得到
了降低,同时,通过减少内存碎片,提高了内存的有效利用率和系统可处理的并发连接数,
从而增强了网络性能。

使用统一管道过滤器模式的HTTP过滤模块

     有一类HTTP模块被命名为HTTP过滤模块,其中每一个过滤模块都有输入端和输出端,
这些输入端和输出端都具有统一的接口。这些过滤模块将按照configure执行时决定的顺序组
成一个流水线式的加工HTTP响应的中心,每一个过滤模块都是完全独立的,它处理着输入
端接收到的数据,并由输出端传递给下一个过滤模块。每一个过滤模块都必须可以增量地处
理数据,也就是说能够正确处理完整数据流的一部分。
     这种统一管理过滤器的设计方式的好处非常明显:首先它允许把整个HTTP过滤系统的
输入/输出简化为一个个过滤模块的简单组合,这大大提高了简单性;其次,它提供了很好
的可重用性,任意两个HTTP过滤模块都可以连接在一起(在可允许的范围内);再次,整
个过滤系统非常容易维护、增强。例如,开发了一个新的过滤模块后,可以非常方便地添加
到过滤系统中,这是一种高可扩展性。又如,旧的过滤模块可以很容易地被升级版的过滤模
块所替代,这是一种高可进化性;接着,它在可验证性和可测试性上非常友好,我们可以灵
活地变动这个过滤模块流水线来验证功能;最后,这样的系统完全支持并发执行。

其他一些用户模块

      Nginx还有许多特定的用户模块。例如,ngx_http_stub_status_module模块提供对所有HTTP连接状态的监控,这就提高了系统可见性。而ngx_http_gzip_filter_module过滤模块和ngx_http_gzip_static_module模块使得相同的吞吐量传送了更多的信息,自然也就提高了网络效率。我们也可以开发这样的模块,让Nginx变得更好。

      后续再对nginx架构各块原理进行更细化的学习。

参考书籍:《深入理解Nginx模块开发与架构解析第2版》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760145.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCIe物理层_CTLE(continuous time linear equalizer)

1.CTLE(continuous time linear equalizer) 的作用 信号在介质的传输过程中存在趋肤效应(skin effiect)和能量损耗,在接收端数据会存在失真,并且呈现出低通特性。什么意思呢?就是低频率的信号衰减幅度小&#xff0c…

StringUTF_16错误认识字节长度

众所周知,在 UTF-8 编码中,中文字符通常占用 3 个字节: import java.nio.charset.StandardCharsets;/*** author shenyang* version 1.0* info untitled* since 2024/6/30 上午9:42*/ public class Test {public static void main(String[] args) {Stri…

[Go 微服务] Kratos 验证码业务

文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备 protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件:https://github.com/protocolbuffers/protobu…

【大数据】StarRocks的系统架构

StarRocks 架构简洁,整个系统的核心只有 FE(Frontend)、BE (Backend) 或 CN (Compute Node) 两类进程,方便部署与维护,节点可以在线水平扩展,元数据和业务数据都有副本机制,确保整个系统无单点。…

SCCB协议介绍,以及与IIC协议对比

在之前的文章里已经介绍了IIC协议:iic通信协议 这篇内容主要介绍一下SCCB协议。 文章目录 SCCB协议:SCCB时序图iic时序图SCCB时序 VS IIC时序 总:SCCB协议常用在摄像头配置上面,例如OV5640摄像头,和IIC协议很相似&…

5.4符号三角形问题

#include<iostream> #include<stdio.h> using namespace std; int half; int ssum; int cnt0;//减号的个数 int n; int p[100][100]; int countt0; void BackTrack(int s) {if(cnt>half||s*(s-1)/2-cnt>half)return ;if(s>n){countt;return ;}for(int i0;…

可信和可解释的大语言模型推理-RoG

大型语言模型&#xff08;LLM&#xff09;在复杂任务中表现出令人印象深刻的推理能力。然而&#xff0c;LLM在推理过程中缺乏最新的知识和经验&#xff0c;这可能导致不正确的推理过程&#xff0c;降低他们的表现和可信度。知识图谱(Knowledge graphs, KGs)以结构化的形式存储了…

成都市水资源公报(2000-2022年)

数据年限&#xff1a;2000-2022年&#xff0c;无2009年 数据格式&#xff1a;pdf、word、jpg 数据内容&#xff1a;降水量、地表水资源量、地下水资源量、水资源总量、蓄水状况、平原区浅层地下水动态、水资源情况分析、供水量、用水量、污水处理、洪涝干旱等

Keysight是德 N9912A 手持式射频分析仪

Keysight是德 N9912A 手持式频谱分析仪 N9912A FieldFox 手持射频分析仪&#xff0c;4 GHz 和 6 GHz 轻盈耐用的电缆与天线分析仪、频谱分析仪、网络分析仪等等。 Keysight FieldFox 便携式分析仪可以在非常恶劣的工作环境中&#xff0c;轻松完成从日常维护到深入故障诊断的…

zabbix server client 安装配置

Zabbix Server 采用源码包部署&#xff0c;数据库采用 MySQL8.0 版本&#xff0c;zabbix-web 使用 nginxphp 来实现。具体信息如下&#xff1a; 软件名 版本 安装方式 Zabbix Server 6.0.3 源码安装 Zabbix Agent 6.0.3 源码安装 MySQL 8.0.28 yum安装 Nginx 1.20…

模型微调方法

文章目录 LoRADoRAMoRA 以下部分参考自: https://mp.weixin.qq.com/s/OxYNpXcyHF57OShQC26n4g LoRA LoRA是微软于2021年推出的一种经济型微调模型参数的方法。 它在冻结大部分的模型参数的情况下&#xff0c;仅仅更新额外的部分参数。其性能与全参数微调相似。 LoRA假设微调期间…

Apache Ranger 2.4.0 集成hadoop 3.X(Kerbos)

1、安装Ranger 参照上一个文章 2、修改配置 把各种plugin转到统一目录&#xff08;源码编译的target目录下拷贝过来&#xff09;&#xff0c;比如 tar zxvf ranger-2.4.0-hdfs-plugin.tar.gz tar zxvf ranger-2.4.0-hdfs-plugin.tar.gz vim install.properties POLICY_MG…

PD芯片OTG功能的应用 LDR6500

随着科技的飞速发展&#xff0c;智能手机、平板电脑等电子设备已经成为我们日常生活和工作中不可或缺的工具。这些设备的功能日益强大&#xff0c;应用场景也愈发广泛&#xff0c;但随之而来的是对充电和数据传输效率的高要求。在这一背景下&#xff0c;PD&#xff08;Power De…

Apache Ranger 2.4.0 集成Hive 3.x(Kerbos)

一、解压tar包 tar zxvf ranger-2.4.0-hive-plugin.tar.gz 二、修改install.propertis POLICY_MGR_URLhttp://localhost:6080REPOSITORY_NAMEhive_repoCOMPONENT_INSTALL_DIR_NAME/BigData/run/hiveCUSTOM_USERhadoop 三、进行enable [roottv3-hadoop-01 ranger-2.4.0-hive…

k8s笔记——helm chat与k8s Operator区别

k8s Operator Kubernetes 为自动化而生。无需任何修改&#xff0c;你即可以从 Kubernetes 核心中获得许多内置的自动化功能。 你可以使用 Kubernetes 自动化部署和运行工作负载&#xff0c;甚至 可以自动化 Kubernetes 自身。 Kubernetes 的 Operator 模式概念允许你在不修改…

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋&#xff0c;这位电视剧《玫瑰的故事》中的男主角&#xff0c; 最近在一次采访中坦言&#xff1a;“如果给我一次重来的机会&#xff0c; 我绝对会毫不犹豫地选择爱情&#xff01;” 听到这话&#xff0c; 我不禁想&#xff0c;庄先生&#xff0c;您是不是被剧里的玫瑰…

PotPlayer安装及高分辨率设置

第1步&#xff1a; 下载安装PotPlayer软件 PotPlayer链接&#xff1a;https://pan.baidu.com/s/1hW168dJrLBonUnpLI6F3qQ 提取码&#xff1a;z8xd 第2步&#xff1a; 下载插件&#xff0c;选择系统对应的位数进行运行&#xff0c;该文件不能删除&#xff0c;删除后将失效。 …

(单机架设教程)凯旋|当年的QQ游戏

前言 今天给大家带来一款单机游戏的架设&#xff1a;凯旋 &#xff0c; 当年的QQ游戏 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 凯旋单机 搭建教程 此游戏架设需要安装虚拟机&#xff0c; 没有…

pytest测试框架pytest-cov插件生成代码覆盖率

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下pytest-cov插件&#xff0c;用于生成测试覆盖率报告&#xff0c;帮助开发者了解哪些部分的代码被测试覆盖&#xff0c;哪些部分还需要进一步的测试。 pytest-cov 支持多种报告格式&#xff0c;包括纯文本、HTML、XML …

什么是 Elasticsearch 数据预热?

引言&#xff1a;在现代的信息检索和数据分析领域&#xff0c;Elasticsearch 已经成为一个广泛应用的分布式搜索和分析引擎。作为开源项目的一部分&#xff0c;Elasticsearch 提供了强大的实时搜索和分析能力&#xff0c;使得处理大规模数据变得更加高效和可靠。然而&#xff0…