[转帖]Nginx(2):架构设计与工作流程

nginx,架构设计,工作,流程 · 浏览次数 : 0

小编点评

**内容摘要** 这篇文章介绍了 Nginx 的框架设计,包括核心模块、事件模块、Stream模块等。文章还介绍了如何初始化 worker 进程模型、流程设计以及如何处理并发请求。 **核心概念** * **守护进程:** Nginx 在启动后,会在 Unix 系统中以 daemon的方式在后台运行,包含一个 master 进程和多个 worker 进程。 * **异步非阻塞处理:** Nginx 使用异步非阻塞的方式来处理请求,这意味着每个请求在单独的线程中处理,并进行异步切换。 * **模块化:** Nginx 模块化设计,核心模块、事件模块、Stream 模块以及其他模块可以独立开发和维护。 * **并发数:** 每个模块的并发数取决于请求处理的复杂性和需求。

正文

https://cloud.tencent.com/developer/article/1886166?areaSource=&traceId=

 

这些天呐,实在是给我看晕了。起因自然还是对 nginx 不是很了解哈。那我是来看什么的?一开始就从细节出发,有点管中窥豹,不得全貌了。

图来自网络


架构设计

进程模型

预定:后边专门出一篇关于 nginx进程模型源码分析。这些概念都好记,也好理解,但是里面有的地方我想不到该怎么写,好吧,就是异步,异步不会写,所以要去看一下大神是怎么写的。

1、nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。 2、nginx采用了异步非阻塞的方式来处理请求。

3、线程只有一个,所以同时能处理的请求只有一个,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价。 与多线程相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级。并发数再多也不会导致无谓的资源浪费(上下文切换)。更多的并发数,只是会占用更多的内存而已。


模块化结构体系

预定:这个要出好几篇了,核心模块、事件模块、Stream模块,以及它们下属的技术点可能也要铺开,估计五六篇吧。

其他模块视情况而定吧。

(被遮住的是 ngx_conf_module)

① 核心模块(core)

该模块提供了 Nginx 服务运行的基本功能,如 Nginx 的进程管理、CPU 亲缘性、内存管理、配置文件解析、日志等功能。

② 事件模块(event)

该模块负责进行连接处理,提供对不同操作系统的 I/O 网络模型支持和自动根据系统平台选择最有效 I/O 网络模型的方法。

③ HTTP模块(http)

该模块提供 HTTP 处理的核心功能和部分功能模块,HTTP 核心功能维护了 HTTP 多个阶段的工作流,并实现了对各种 HTTP 功能模块的管理和调用。

④ Mail模块(mail)

该模块实现邮件代理功能,代理 IMAP、POP3、SMTP 协议。

⑤ Stream模块(stream)

该模块提供 TCP/UDP 会话的代理和负载相关功能。

⑥ 第三方模块


nginx的框架设计就这么简单,一目了然。 nginx的框架设计就这么难,这一点点东西居然要撑起数万乃至数十万的并发。


工作流程

晓得个框架设计明显是不够的,框架设计可以说是骨架,皮肉就是里面那些模块了,那这些骨架和皮肉又是怎么盘活的呢?

Master 初始化

worker初始化

upstream工作流程

大概也就门清儿了,先学习进程模型、再进入几个核心模块看框架,最后再收了设计比较好的数据结构、内存池、缓冲区以及一些问题解决方案。

话说我该去处理一下我的source insight了,又过期了。

与[转帖]Nginx(2):架构设计与工作流程相似的内容:

[转帖]Nginx(2):架构设计与工作流程

https://cloud.tencent.com/developer/article/1886166?areaSource=&traceId= 这些天呐,实在是给我看晕了。起因自然还是对 nginx 不是很了解哈。那我是来看什么的?一开始就从细节出发,有点管中窥豹,不得全貌了。 图来自网络 架构设

[转帖]Nginx HTTP模块

https://www.cnblogs.com/lizexiong/p/15039009.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx核心配置详解

https://www.cnblogs.com/lizexiong/p/15036707.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx代理服务器

https://www.cnblogs.com/lizexiong/p/15045187.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]docker run nginx 指定配置文件

step 1 docker pull nginx step 2 make -p /etc/nginx/conf.d step 3 vim enic.conf copy如下配置,根据自己业务场景稍加改动即可。 upstream enic { server 127.0.0.1:8090; } serve

[转帖]Deploying NGINX and NGINX Plus with Docker

https://www.nginx.com/blog/deploying-nginx-nginx-plus-docker-2/ Editor – The NGINX Plus Dockerfiles for Debian and Alpine Linux were updated in Decemb

【转帖】nginx变量使用方法详解-2

https://www.diewufeiyang.com/post/576.html 关于 Nginx 变量的另一个常见误区是认为变量容器的生命期,是与 location 配置块绑定的。其实不然。我们来看一个涉及“内部跳转”的例子: Bash server { listen 8080; locati

[转帖]nginx(三十二)rewrite模块

一 官方rewrite模块 ① 模块涉及的指令 ② 基本简介 rewrite模块会根据'PCRE正则'匹配'重写URI' pcre下载地址 pcretest测试正则表达式 ③ break 疑惑点: 结束'该作用域'下剩余的指令,还是'只是该rewrite模块的'指令? 1)配置demo 2)不带参数

[转帖]Nginx Rewrite重写功能

目录 一、rewrite的概述1.1、概述1.2 跳转场景1.3 跳转实现1.4 Rewrite实际场景 二、常用的nginx正则表达式三、rewrite命令3.1 rewrite的语法格式3.2 fiag标记说明 四、location4.1 location大致分为三类4.2 location 常

[转帖]Nginx报错404,由于请求处理时间过长

问题复现 近期部门内部有一个应用由于数据量过于庞大,或者说sql优化性能问题,导致查询全量数据时老报错nginx404,后来查看浏览器timing信息,发现其竟然时常达到可怕的2分钟十秒,抛去解决sql优化问题,这里从Nginx端的配置来说如何解决这类问题! 存在的问题 服务器处理请求时间过长,导致