一 概述
本文系原创,同时发布于 F5 Network社区。
Nginx是一款高性能webserver软件。除此以外它还具有很强的负载均衡,反向代理,邮件代理以及静态缓存的功能。在提供这些功能的同时,Nginx通过优秀的架构设计,实现了高速的高并发处理。
这篇文章我们通过分析Nginx的框架结构,来解释它的高速并发处理的背后原因。
二 框架结构
如下图所示,Nginx结合采用多进程和IO多路复用的结构处理并发客户请求。
Master进程主要负责信号处理,监控和管理Worker进程。 Master进程本身不处理具体业务。Worker进程处理具体业务,包括处理连接请求和网络读写事件的处理。多个worker进程可以独立地处理各自的客户连接。Worker进程之间通过信号量和共享内存进行通信。
图1 Nginx整体架构
通过配置与系统CPU等量的worker进程,可以实现某一个进程绑定某一个特定CPU从而减少系统开销。
在每一个worker进程处理多个client并发连接请求时,Nginx 采用IO多路复用技术在一个进程内同时处理多个client的网络读写事件。与多进程/线程处理多连接请求模型相比,IO多路复用可以减少大量的进程调度带来的系统开销,从而提高系统整体的处理性能。
下面我们来进一步研究Nginx采用的多进程和IO多路复用机制。
三 并发连接请求处理方法
1 并发处理方式