Nginx的事件处理模型怎么理解

发布时间:2021-12-10 16:07:55 作者:iii
来源:亿速云 阅读:216

本篇内容介绍了“Nginx的事件处理模型怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

 Nginx 的进程模型

Nginx的事件处理模型怎么理解

Nginx 服务器,正常运行过程中:

  1. 多进程:一个 Master 进程、多个 Worker 进程

  2. Master 进程:管理 Worker 进程

  3. 对外接口:接收外部的操作(信号)

  4. 对内转发:根据外部的操作的不同,通过信号管理 Worker

  5. 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程

  6. Worker 进程:所有 Worker 进程都是平等的

  7. 实际处理:网络请求,由 Worker 进程处理;

  8. Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。

思考:

  1. 请求是连接到 Nginx,Master 进程负责处理和转发?

  2. 如何选定哪个 Worker 进程处理请求?请求的处理结果,是否还要经过 Master 进程?

Nginx的事件处理模型怎么理解

HTTP 连接建立和请求处理过程

  1. Nginx 启动时,Master 进程,加载配置文件

  2. Master 进程,初始化监听的 socket

  3. Master 进程,fork 出多个 Worker 进程

  4. Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求

Nginx 高性能、高并发

  1. Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)

  2. 请求的完整过程:

  3. 建立连接

  4. 读取请求:解析请求

  5. 处理请求

  6. 响应请求

  7. 请求的完整过程,对应到底层,就是:读写 socket 事件

Nginx 的事件处理模型

request:Nginx 中 http 请求。

基本的 HTTP Web Server 工作模式:

  1. 接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体

  2. 处理请求

  3. 返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)

Nginx 也是这个套路,整体流程一致。

Nginx的事件处理模型怎么理解

模块化体系结构

Nginx的事件处理模型怎么理解

nginx的模块根据其功能基本上可以分为以下几种类型:

常见问题剖析

Nginx vs. Apache

网络 IO 模型:

  1. nginx:IO 多路复用,epoll(freebsd 上是 kqueue )

  2. 高性能

  3. 高并发

  4. 占用系统资源少

  5. apache:阻塞 + 多进程/多线程

  6. 更稳定,bug 少

  7. 模块更丰富

场景:

处理多个请求时,可以采用:IO 多路复用 或者 阻塞 IO +多线程

思考:IO 多路复用 和 多线程 的适用场景?

Nginx 最大连接数

基础背景:

  1. Nginx 是多进程模型,Worker 进程用于处理请求;

  2. 单个进程的连接数(文件描述符 fd),有上限(nofile):ulimit -n

  3. Nginx 上配置单个 worker 进程的最大连接数:worker_connections 上限为 nofile

  4. Nginx 上配置 worker 进程的数量:worker_processes

因此,Nginx 的最大连接数:

  1. Nginx 的最大连接数:Worker 进程数量 x 单个 Worker 进程的最大连接数

  2. 上面是 Nginx 作为通用服务器时,最大的连接数

  3. Nginx 作为反向代理服务器时,能够服务的最大连接数:(Worker 进程数量 x 单个 Worker 进程的最大连接数)/ 2。

  4. Nginx 反向代理时,会建立 Client 的连接和后端 Web Server 的连接,占用 2 个连接

思考:

每打开一个 socket 占用一个 fd

为什么,一个进程能够打开的 fd 数量有限制?

IO 模型

场景:

处理多个请求时,可以采用:IO 多路复用 或者 阻塞 IO +多线程

思考:IO 多路复用 和 多线程 的适用场景?

select/poll 和 epoll 比较

详细内容,参考:

select/poll 系统调用:

// select 系统调用  int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);  // poll 系统调用  int poll(struct pollfd fds[], nfds_t nfds, int timeout);

select:

poll:

epoll:event 事件驱动

select,poll,epoll:

  1. I/O多路复用的机制;

  2. I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

  3. 监视多个文件描述符

  4. 但select,poll,epoll本质上都是同步I/O:

  5. 用户进程负责读写(从内核空间拷贝到用户空间),读写过程中,用户进程是阻塞的;

  6. 异步 IO,无需用户进程负责读写,异步IO,会负责从内核空间拷贝到用户空间;

Nginx 的并发处理能力

关于 Nginx 的并发处理能力:

“Nginx的事件处理模型怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. OSI模型的理解
  2. Nginx配置继承模型的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nginx

上一篇:Nginx面试中常见题目有哪些

下一篇:Nginx是怎么处理网络事件的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》