目录

  • 一、Nginx简述
  • 二、Nginx特性
  • 1、I/O多路复用epoll
  • 2、轻量级
  • 3、CPU亲和(affinity)
  • 4、sendfile机制


一、Nginx简述

  • Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务。

二、Nginx特性

1、I/O多路复用epoll

  • 什么是I/O复用
    多个客户端请求会产生多个I/O流对系统的读写,对于I/O流请求操作系统内核有串行处理(即前面的请求产生阻塞,后面的就无法完成请求)和并行处理(即使用一个Socket复用整个I/O流的请求,Socket复用是通过多线程或者I/O多路复用的方式),如下图:
  • nginx敏感词监控 nginx nio_nginx敏感词监控

  • 什么是I/O多路复用
    多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这就叫I/O多路复用,这里的“复用”指的是复用通一个线程。

例如:一个老师检查多个学生答题是否完成的情况如果完成答题并帮助学生解答;

  • (1)、如果老师每次轮询的去问每个学生是否答完题,如果没答完题在问下一个学生,这样处理的效率会非常慢。
    (2)、如果学生B答完题主动上报给老师说自己已答完题,老师先帮助学生B解答,其他学生等待;如果学生A答完题主动上报给老师说自己已答完题,老师再帮助学生A解答,其他学生等待。这样处理的效率会非常快;I/O多路复用有一个特点就是学生主动上报机制。如下图:
  • nginx敏感词监控 nginx nio_nginx敏感词监控_02

  • 什么是epoll
    epoll是linux下常见的内核的I/O多路复用的模型。
  • epoll模型
    每当FD就绪,采用系统的回调函数之间将fd放入,效率更高;
    最大连接无限制;

2、轻量级

  • 功能模块少
    Nginx源代码中只保留了与HTTP相关及与Nginx相关功能的核心模块代码;
  • 代码模块化

3、CPU亲和(affinity)

  • 是一种把CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在一个cpu上执行,减少切换CPU的cache miss,获得更好的性能。
    假设y一台服务器有双CPU,每个CPU有4个核心,然后把CPU的8个工作进程分别绑定到不同的CPU上,这样均匀的分配方式减少了CPU切换消耗。如下图:
  • nginx敏感词监控 nginx nio_复用_03

4、sendfile机制

  • HTTP Server服务采用如下方式处理文件,当请求一个文件的时候,要经过内核空间和用户空间(会发生多次切换,效率较低),最终到达Socket,通过Socket在传递给用户;

nginx敏感词监控 nginx nio_Nginx_04

- Nginx在处理静态文件的效率是非常有优势的,是因为Nginx采用sendfile机制。如下图所示:静态文件不需要经过用户空间的逻辑处理,直接会经过内核空间的传输,所以sendfile利用了此模式(即linux2.2以后出来的零拷贝传输模式)。

nginx敏感词监控 nginx nio_Nginx_05