概述
Nginx是一个开源的高性能、可靠的HTTP中间件,代理服务。(关于代理服务的作用,详见三种常用的代理方式详解)
优势
Nginx具备的是企业最常用也最需要的功能,具备轻量级性能优势。
底层原理
- 采用多路IO复用epoll模型
- CPU亲和(affinity)
- senfile策略
Nginx在静态资源处理性能方面性能强大的原因正在于此。
对于操作系统而言,文件需要经过内核空间与用户空间才进入socket流。而Nginx简化了这个流程:
多路IO复用
对于多个用户请求,会产生多个Socket流,海量IO流可能使得线程处于等待
状态造成阻塞
所以采用IO复用的方式来处理,通常有以下两种处理方式:
- 多进程多线程处理
一个线程只能处理一个流的I/O事件。如果想要同时处理多个流,要么多进程(fork)要么多线程(pthread_create),但是效率都不高。
- 多路IO复用
单线程实现IO流非阻塞模式,伪代码如下:
|
|
IO复用内核模式种类
Select模型、Poll模型
select,poll模型相当于一个代理
|
|
Epoll模型
- 解决了select模型对于文件句柄FD打开限制
- 采用
callback
函数回调机制优化模型效率 - ……
劣势
Nginx具备的功能,其他服务也在采用(如Apache
),功能全面性上,Nginx并不占优。