13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

从底层原理分析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 资源,增加上下文切换的损耗。

思考:

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

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

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 工作模式:

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

模块化体系结构

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

常见问题剖析

Nginx vs. Apache

网络 IO 模型:

场景:

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

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

Nginx 最大连接数

基础背景:

因此,Nginx 的最大连接数:

  1. Nginx 的最大连接数:Worker 进程数量 x 单个 Worker 进程的最大连接数
  2. 上面是 Nginx 作为通用服务器时,最大的连接数
  3. Nginx 作为反向代理服务器时,能够服务的最大连接数:(Worker 进程数量 x 单个 Worker 进程的最大连接数)/ 2。
  4. Nginx 反向代理时,会建立 Client 的连接和后端 Web Server 的连接,占用 2 个连接

思考:

IO 模型

场景:

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

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

select/poll 和 epoll 比较

详细内容,参考:

select/poll 系统调用:

 
 
 
 
  1. // select 系统调用 
  2. int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);  
  3. // poll 系统调用 
  4. 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 的并发处理能力:

并发连接数,一般优化后,峰值能保持在 1~3w 左右。(内存和 CPU 核心数不同,会有进一步优化空间)


网站标题:从底层原理分析Nginx为什么这么快
分享网址:http://cdbrznjsb.com/article/ccdsgid.html

其他资讯

让你的专属顾问为你服务