0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么Nginx可以支持高并发

阿铭linux 来源:阿铭linux 2023-02-13 10:48 次阅读

结论

先说答案,Nginx之所以支持高并发,是因为它是基于epoll的异步及非阻塞的事件驱动模型。 在这个模型下,Nginx服务端可以同一时间接收成千上万个客户端请求而不阻塞。这是因为Nginx会把一个一个的客户端请求注册成事件给到系统内核,而这个事件管理器完全由系统内核管理,Nginx只负责注册和接收通知。下面再来详细聊聊具体原因。

Nginx架构

Nginx启动时,先启动一个master进程,然后再根据配置文件里定义的参数来启动对应数量的worker进程。

79cd42ac-ab48-11ed-bfe3-dac502259ad0.png

所以,Nginx是多进程模式,多个进程之间不会相互影响,多个worker进程还可以配置成使用不同的CPU来工作,从而提高了Nginx处理请求速度。

Nginx的异步非阻塞机制

首先理解同步和异步的概念,这两个概念是从客户端与服务端通信交互方式来说。

同步,指服务端接收到客户端请求后,必须处理完该请求后(发送处理结果给客户端),才会接收客户端发送来的下一个请求。

异步,指服务端还没有处理完客户端请求(没有发送处理结果给客户端),就已经接收下一个客户端发来的请求了。

再来理解阻塞和非阻塞的概念。这两个概念是从服务器内部处理请求的方式来说的。

阻塞,指服务器接收到请求后,如果遇到IO阻塞,当前线程会被挂起,直到IO完成后唤醒当前线程,当前线程期间不会去处理其他事情。

非阻塞,指服务器接收到请求后,如果遇到IO阻塞,当前线程不会挂起,而是会立即返回去执行下一个调用。

同步与异步,重点在于消息通知的方式。阻塞与非阻塞,重点在于等消息时候的行为。

事件驱动模型

上面提到的异步非阻塞机制,Nginx是通过基于事件的驱动模型来实现的。这个模型下,客户端发起的所有请求在服务端都会被标记为一个事件,Nginx会把这些事件收集到“事件收集器”里,然后再把这些事件交给内核去处理。

79eac494-ab48-11ed-bfe3-dac502259ad0.png

对于Nginx服务器来说,客户端A的请求连接到服务端时,服务端进程(Nginx worker process)会处理该请求,此进程在没有返回给客户端A结果时,它又去处理了客户端B的请求。 服务端把客户端A以及客户端B发来的请求作为事件交给了“事件收集器”,而“事件收集器”再把收集到的事件交由“事件发送器”发送给“事件处理器”进行处理。 最后“事件处理器”处理完该事件后,通知服务端进程,服务端进程再把结果返回给客户端A、客户端B。 在这个过程中,服务端进程做的事情属于用户级别的,而事件处理这部分工作属于内核级别的。 也就是说这个事件驱动模型是需要操作系统内核来作为支撑的。

Nginx支持的事件驱动模型

Nginx支持的事件驱动模型有:select, poll, epoll, rtsig, kqueue, /dev/poll, eventport等,最常用的是前三种。

Select模型:首先会创建所关注事件的描述符集合。会分别创建读(Read)事件、写(Write)事件、异常发生(Exception)事件三类描述符集合来收集三类描述符。然后调用底层提供的select()函数,等待事件发生。最后轮询所有事件描述符集合中的每一个描述符,检查是否有相应的事件发生,然后处理事件。

Poll模型:与select的基本实现方式相同,只不过创建关注的描述符集合时,不分成三个集合,而是一个集合包括所有描述符。

Epoll模型:当描述符比较多时,遍历描述符集合、然后查找每个描述符是否有相应事件发生这一过程会效率较低。Epoll选择将描述符列表的管理交给内核复制,一旦有事件发生,内核会将有事件发生的描述符列表通知给进程,这样避免了应用程序轮询整个描述符列表。Epoll会通过相关调用,通知内核创建一个N个描述符的事件列表,然后给这些描述符设置所关注的事件,并把他添加到内核的事件列表中,在编码过程中也可以通过相关调用对事件列表中的描述符进行动态地删除和修改。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9123

    浏览量

    85324
  • 架构
    +关注

    关注

    1

    文章

    513

    浏览量

    25468
  • MASTER
    +关注

    关注

    0

    文章

    103

    浏览量

    11282
  • 服务端
    +关注

    关注

    0

    文章

    66

    浏览量

    7004
  • nginx
    +关注

    关注

    0

    文章

    149

    浏览量

    12170

原文标题:为什么Nginx可以支持高并发

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解析keepalived+nginx实现可用方案技术

    之前讲了Nginx 如何实现负载均衡以及如何实现动静分离,实现系统的分布式部署,提高系统的并发性能。但是,有个问题:如果Nginx 系统挂了,整个系统就都不可用了。Nginx 处于整个
    的头像 发表于 09-30 15:52 3752次阅读
    解析keepalived+<b class='flag-5'>nginx</b>实现<b class='flag-5'>高</b>可用方案技术

    android 稳定性并发全平台社交聊天IM对外合作支持源码

    稳定性并发全平台社交聊天IM对外合作支持源码成熟的消息收发确认机制,支持万人大群支持开发自定
    发表于 03-28 15:20

    从服务端视角看并发难题

    `所谓服务器大流量并发指的是:在同时或极短时间内,有大量的请求到达服务端,每个请求都需要服务端耗费资源进行处理,并做出相应的反馈。 从服务端视角看并发服务端处理请求需要耗费服务端的
    发表于 11-02 15:11

    PHP开发中,如何处理负载、并发

    对网络依赖比较大。可以承担负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。Nginx可以通过端口检测到
    发表于 07-03 10:33

    16nginx+keepalived +zuul如何实现可用及负载均衡

    学习笔记微服务-16 nginx+keepalived +zuul 实现可用及负载均衡
    发表于 05-22 10:16

    Nginx支持更多的模块

    商业版Nginx的扩展性得到了很大的提高,之前旨在开源服务器上支持的扩展模块,现在的商业版也得到了支持Nginx的产品经理说,昨天发布的Ngin
    发表于 10-11 11:25 0次下载

    一文读懂Nginx、Apache工作原理

    并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,
    发表于 04-26 11:33 2489次阅读

    Nginx的详细知识点讲解

    Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx并发能力确实在同类型的网页服务器中表现较好 ngi
    的头像 发表于 12-26 10:25 2594次阅读
    <b class='flag-5'>Nginx</b>的详细知识点讲解

    如何彻底搞懂Nginx知识网结构

    ,性能是其最重要的要求,十分注重效率,有报告nginx支持高达50000个并发连接数 1.1反向代理 正向代理 正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
    的头像 发表于 05-03 14:15 1646次阅读
    如何彻底搞懂<b class='flag-5'>Nginx</b>知识网结构

    聊聊Nginx作为负载均衡器它支持的算法都有哪些?

    Nginx作为一款最流行WEB服务器软件,同时也是一款反向代理和负载均衡软件。毫不夸张地说,Nginx在负载均衡领域绝对是老大地位,这得益于它的并发和稳定性
    的头像 发表于 02-14 17:50 747次阅读

    搭建Keepalived+Lvs+Nginx可用集群负载均衡

    Server)实现可用负载均衡 附:LVS的负载均衡算法 八、搭建Keepalived+Lvs+Nginx可用集群负载均衡 一、Nginx安装 1、去官网http://
    的头像 发表于 06-25 15:39 2974次阅读
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b><b class='flag-5'>高</b>可用集群负载均衡

    Nginx的特点和作用 Nginx常用命令和核心配置

    Nginx 是开源、高性能、可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软
    的头像 发表于 09-01 09:53 672次阅读
    <b class='flag-5'>Nginx</b>的特点和作用 <b class='flag-5'>Nginx</b>常用命令和核心配置

    Nginx目录结构有哪些

    什么是NginxNginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能
    的头像 发表于 11-11 11:27 625次阅读
    <b class='flag-5'>Nginx</b>目录结构有哪些

    Nginx 如何实现高性能低消耗

    Nginx 是一个轻量级的HTTP 服务程序,相比其他服务器程序如Apache,Nginx占用内存少,稳定性并发处理能力强。同时Nginx
    的头像 发表于 11-11 11:31 578次阅读
    <b class='flag-5'>Nginx</b> 如何实现高性能低消耗

    确保网站无缝运行:Keepalived可用与Nginx集成实战

    的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx
    的头像 发表于 11-27 09:08 245次阅读
    确保网站无缝运行:Keepalived<b class='flag-5'>高</b>可用与<b class='flag-5'>Nginx</b>集成实战