[Nginx]Nginx凭啥子并发数可以达到3w!
作者:NingG1
http://ningg.top/nginx-series-principle/
Nginx 以其高性能 , 稳定性 , 丰富的功能 , 简单的配置和低资源消耗而闻名 。 本文从底层原理分析 Nginx 为什么这么快!
Nginx 的进程模型
本文插图
Nginx 服务器 , 正常运行过程中:
- 多进程:一个 Master 进程、多个 Worker 进程 。
- Master 进程:管理 Worker 进程 。 对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同 , 通过信号管理 Worker;监控:监控 Worker 进程的运行状态 , Worker 进程异常终止后 , 自动重启 Worker 进程 。
- Worker 进程:所有 Worker 进程都是平等的 。 实际处理:网络请求 , 由 Worker 进程处理 。 Worker 进程数量:在 nginx.conf 中配置 , 一般设置为核心数 , 充分利用 CPU 资源 , 同时 , 避免进程数量过多 , 避免进程竞争 CPU 资源 , 增加上下文切换的损耗 。
- 请求是连接到 Nginx , Master 进程负责处理和转发?
- 如何选定哪个 Worker 进程处理请求?请求的处理结果 , 是否还要经过 Master 进程?
本文插图
HTTP 连接建立和请求处理过程HTTP 连接建立和请求处理过程如下:
- Nginx 启动时 , Master 进程 , 加载配置文件 。
- Master 进程 , 初始化监听的 Socket 。
- Master 进程 , Fork 出多个 Worker 进程 。
- Worker 进程 , 竞争新的连接 , 获胜方通过三次握手 , 建立 Socket 连接 , 并处理请求 。
- Nginx 采用多进程+异步非阻塞方式(IO 多路复用 Epoll) 。
- 请求的完整过程:建立连接→读取请求→解析请求→处理请求→响应请求 。
- 请求的完整过程对应到底层就是:读写 Socket 事件 。
基本的 HTTP Web Server 工作模式:
- 接收请求:逐行读取请求行和请求头 , 判断段有请求体后 , 读取请求体 。
- 处理请求 。
- 返回响应:根据处理结果 , 生成相应的 HTTP 请求(响应行、响应头、响应体) 。
本文插图
模块化体系结构
本文插图
Nginx 的模块根据其功能基本上可以分为以下几种类型:
①event module:搭建了独立于操作系统的事件处理机制的框架 , 及提供了各具体事件的处理 。 包括 ngx_events_module , ngx_event_core_module 和 ngx_epoll_module 等 。
Nginx 具体使用何种事件处理模块 , 这依赖于具体的操作系统和编译选项 。
②phase handler:此类型的模块也被直接称为 handler 模块 。 主要负责处理客户端请求并产生待响应内容 , 比如 ngx_http_static_module 模块 , 负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出 。
③output filter:也称为 filter 模块 , 主要是负责对输出的内容进行处理 , 可以对输出进行修改 。
例如 , 可以实现对输出的所有 html 页面增加预定义的 footbar 一类的工作 , 或者对输出的图片的 URL 进行替换之类的工作 。
推荐阅读
- [科旅号]并发现气辉现象,火星内部很危险,NASA洞察号证实火星地震活跃
- [前瞻网]新冠最年轻死亡病例!美国一名6周大婴儿死于新冠肺炎并发症
- 『港台来信』澳门通报一例军团病个案:84岁男性双肺肺炎并发感染性休克
- Java架构师技术栈分享:request body读取流程详解,nginx
- Java架构师技术栈分享■request body读取流程详解,nginx
- 『翰决汽车说』行驶万公里记得要清理这地方,耗油低马力强,不管你开啥子车
- Java@Java并发编程之支持并发的list集合你知道吗
- 『阿里巴巴』Java并发编程之CAS第三篇-CAS的缺点
- 『盖饭娱乐』麦当娜发文哀悼,首例美国男星患肺炎去世!69岁老戏骨并发症不治
- 编程■Java最全面试手册(性能优化+微服务架构+并发编程+开源框架)
