Nginx实现高速并发处理的原理详解

  众所周知,Nginx是当下最流行的Web服务器,它具有很强的负载均衡,反向代理,邮件代理以及静态缓存的功能。在提供这些功能的同时,Nginx的性能也极其优秀,可以轻松支持百万、千万级的并发连接,能够为Tomcat、Django等性能不佳的Web应用抗住绝大部分外部流量。那么,Nginx是如何实现高速并发处理呢?这就要从它优秀的架构设计来说起。

  框架结构

  如下图所示,Nginx结合采用多进程和IO多路复用的结构处理并发客户请求。

  Master进程主要负责信号处理,监控和管理Worker进程。 Master进程本身不处理具体业务。Worker进程处理具体业务,包括处理连接请求和网络读写事件的处理。多个worker进程可以独立地处理各自的客户连接。Worker进程之间通过信号量和共享内存进行通信。

  网络服务器在处理并发处理方式,如上图socket处理流程所示,根据accept得到新连接以后是启用新的进程/线程还是直接在原来本进程内处理,分为如下两种方式。

  一种是多进程/线程方式,这种方式为每一个新来的连接生成一个新的进程/线程来单独处理。另外一种是IO多路复用,这种方式在一个进程/线程中维护所有的连接的socket,通过事件处理的方式依次处理所有连接上的网络事件。
  多线程模型如下:
  
  IO多路复用又称为event driven IO。就是在同一个进程内同时处理多路IO,进而提高系统吞吐量。一般是通过维护一个连接池,当某个连接有数据到达,通知进程来进行数据处理。Nginx支持多种并发连接请求,比如select,poll,epoll,kqueue(针对bsd)等等,这些请求可以通过配置文件进行选择。一般在linux上epoll的效率要比select,poll高很多。

  综上所述,Nginx通过本身优秀的框架设计,加上内核对并行网络处理的支持,得到了非常好的并发处理性能。
  

你可能感兴趣的:(f5)