【第四章】26-Nginx如何高性能

Nginx 是一 高性能 的 Web 服务器,能够同时处理 大量的并发请求。它结合多进程机制 和 异步机制,异步机制使用的是 异步非阻塞方式,接下来就给大家介绍一下 Nginx 的 多线程机制 和 异步非阻塞机制。

目录

一、 多进程模型:管理进程与工作进程分离的设计

1.1 工作原理

1.2 master与worker进程的作用与功能

1.2.1 管控中枢 - Master进程

1.2.3 worker进程的作用与功能

1.3 多进程模型带来的优点

二、几种常用的模型

2.1 select 模型-经典IO多路复用

2.2 poll模型

2.3 epoll模型


一、 多进程模型:管理进程与工作进程分离的设计

1.1 工作原理

        Nginx 在启动后,会有一个 master 进程和多个 worker 进程。master 进程主要用来管理worker 进程,包括接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态以及启动 worker 进程。 worker 进程是用来处理来自客户端的请求事件。多个 worker 进程之间是对等的,它们同等竞争来自客户端的请求,各进程互相独立,一个请求只能在一个 worker 进程中处理。worker 进程的个数是可以设置的,一般会设置与机器 CPU 核数一致,这里面的原因与事件处理模型有关。

1.2 master与worker进程的作用与功能

1.2.1 管控中枢 - Master进程

作用:管理worker进程

功能:

  • 接收来自外界的信号,通过接收的信号,做出进一步的操作。
  • 向各worker进程发送信号,发送的信号就是一个指令,销毁,新建。
  • 监控woker进程的运行状态。
  • 当woker进程退出后(异常情况下),会自动重新启动新的woker进程。
进程类型权限等级内存占用主要职责存活周期
Master 主人root 根<5MB <5兆字节配置解析/信号处理/热升级服务全生命周期
Worker 工人nobody 没有人50-200MB 50-200 兆字节请求处理/TLS握手/流量转发动态重建

1.2.3 worker进程的作用与功能

功能:处理网络事件,即处理请求

功能:

  • 多个worker进程之间是对等且相互独立的,它们同等竞争来自客户端的请求。
  • 一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
  • worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。更多的worker数,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。而且,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

1.3 多进程模型带来的优点

  1. 利用多核系统的并发处理能力
    1. Nginx 中所有的 worker 工作进程都是完全平等的。这提高了网络性能、降低了请求的时延。
  2. 均衡每个worker进程
    1. 多个 worker 工作进程通过进程间通信来实现负载均衡,即一个请求到来时更容易被分配到负载较轻的 worker 工作进程中处理。这也在一定程度上提高了网络性能、降低了请求的时延。
  3. 管理进程会负责监控工作进程的状态,并负责管理其行为
    1. 管理进程不会占用多少系统资源,它只是用来启动、停止、监控或使用其他行为来控制工作进程。首先,这提高了系统的可靠性,当 worker 进程出现问题时,管理进程可以启动新的工作进程来避免系统性能的下降。其次,管理进程支持 Nginx 服务运行中的程序升级、配置项修改等操作,这种设计使得动态可扩展性、动态定制性较容易实现。

二、几种常用的模型

2.1 select 模型-经典IO多路复用

模型应用:apache

工作原理:

该模型通过同步事件检测机制实现网络连接管理,其运作过程可分为三个阶段:

  1. 描述符注册:将需要监听的网络套接字(以文件描述符形式抽象)存入预设的位图结构(fd_set)

  2. 内核态轮询:通过系统调用将fd_set全量拷贝至内核空间,由内核发起线性遍历检测:

    • 检查每个描述符的就绪状态(可读/可写/异常)

    • 对未就绪描述符挂起等待,直到超时或事件触发

  3. 用户态处理:将修改后的fd_set回传至用户空间,应用程序需遍历整个集合解析就绪事件

优缺点:

    • 文件描述符最大只有1024个
    • 数据准备好,通知socket,但不告诉具体是那个请求的数据准备好了,需要select函数自己遍历

2.2 poll模型

模型应用:apache

工作原理:

优缺点:

  • 文件描述符最大解决的限定,可以设置成千上万。
  • 数据准备好,通知socket,但不告诉具体是那个请求的数据准备好了,需要poll函数自己遍历

2.3 epoll模型

模型应用:Nginx,Redis

工作原理

  • epoll几乎是高性能服务器的必备事件模型,包含网络事件及异步IO。epoll也是在linux平台上特有的事件模型。相比select轮询的方式处理事件,epoll只会处理发生了”改变”的文件描述符,这样能很好地避免不必要的事件处理,提升了处理的性能及效率。
  • 同时,与select相比,epoll支持的文件描述符的数量是可以打开的文件数目,而不是select的进程可打开的文件描述符的数量,可打开的文件数量远远大于一个进程可以打开的文件描述符的数量(虽然进程可打开的文件描述符数量可以修改)。

文件描述符FD的作用

  • 记录客户端要请求的数据是什么,数据在那里
  • 数据是否已经准备好,是否已经copy完成

优缺点

  • 文件描述符最大解决的限定,可以设置成千上万。
  • 数据准备好,通知socket,告诉其具体是那个请求的数据准备好了,epoll函数直接读取就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末班车的萧条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值