概述

Nginx是一个开源的高性能、可靠的HTTP中间件,代理服务。(关于代理服务的作用,详见三种常用的代理方式详解

优势

Nginx具备的是企业最常用也最需要的功能,具备轻量级性能优势。

底层原理

  1. 采用多路IO复用epoll模型

epoll模型的作用

  1. CPU亲和(affinity)

为什么需要CPU亲和

  1. senfile策略

Nginx在静态资源处理性能方面性能强大的原因正在于此。

常用file处理流程

对于操作系统而言,文件需要经过内核空间与用户空间才进入socket流。而Nginx简化了这个流程:

sendfile的处理流程

多路IO复用

IO复用

对于多个用户请求,会产生多个Socket流,海量IO流可能使得线程处于等待状态造成阻塞

阻塞

所以采用IO复用的方式来处理,通常有以下两种处理方式:

  1. 多进程多线程处理

一个线程只能处理一个流的I/O事件。如果想要同时处理多个流,要么多进程(fork)要么多线程(pthread_create),但是效率都不高。

多进程多线程处理模式

  1. 多路IO复用

单线程实现IO流非阻塞模式,伪代码如下:

1
2
3
4
5
6
while true{
  for i in stream[];{
     if i has data
     read until unavailiable
  }
}

IO复用内核模式种类

Select模型、Poll模型

select,poll模型相当于一个代理

1
2
3
4
5
6
7
#select模型伪代码
while true{
    select(streams[]){
    for i has data
    read until unavailable
    }
}
Epoll模型
  1. 解决了select模型对于文件句柄FD打开限制
  2. 采用callback函数回调机制优化模型效率
  3. ……

劣势

Nginx具备的功能,其他服务也在采用(如Apache),功能全面性上,Nginx并不占优。