1、什么是nginx?
Nginx
是一款自由的、开源的、高性能的
HTTP
服务器和反向代理服务器;同时也是一个
IMAP
、
POP3
、
SMTP
代理服务器;
Nginx
可以作为一个
HTTP
服务器进 行网站的发布处理,另外
Nginx
可以作为反向代理进行负载均衡的实现。
1.1、Nginx三个主要应用场景
静态资源服务(通过本地文件系统提供服务)
缓存、负载均衡服务器
API
服务(
OpenResty
)
2、为什么选择nginx?
(1)更快
(2)高扩展性
(3)高可靠性
(4)低内存消耗
(5)单机支持10万以上的并发连接
(6)热部署
(7)最自由的BSD许可协议
1、IO复用是什么?
IO
多路复用是指内核一旦发现进程指定的一个或者多个
IO
条件准备读取,它就通知该进程,目前支持
I/O
多路复用的系统调用有
select
,
poll
,
epoll
,I/O
多路复用就是通过一种机制,一个进程可以监视多个描述符(
socket
),一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读 写操作。
2、select跟poll
Select介绍:
监视并等待多个文件描述符的属性变化(可读、可写或错误异常)。
select
函数监视的文件描述符分
3
类,分别是
writefds
、
readfds
、和
exceptfds
。调用
后
select
会阻塞,直到有描述符就绪(有数据可读、可写、或者有错误异常),或者超时(
timeout
指定等待时间),函数才返回。当
select
()
函数返回
后,可以通过遍历
fdset
,来找到就绪的描述符,并且描述符最大不能超过
1024
Poll 介绍:
poll
的机制与
select
类似,与
select
在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是
poll
没有最大文件描
述符数量的限制。
poll
和
select
同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是
否就绪,它的开销随着文件描述符数量的增加而线性增大。
问题:
select/poll
问题很明显,它们需要循环检测连接是否有事件。如果服务器有上百万个连接,在某一时间只有一个连接向服务器发送了数据,
select/poll
需要做循环
100
万次,其中只有
1
次是命中的,剩下的
99
万
9999
次都是无效的,白白浪费了
CPU
资源。
epoll:
epoll
是在
2.6
内核中提出的,是之前的
poll
和
poll
的增强版本。相对于
select
和
poll
来说,
epoll
更加灵活,没有描述符限制
,
无需轮询。
epoll
使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中。
简单点来说就是当连接有
I/O
流事件产生的时候,
epoll
就会去告诉进程哪个连接有
I/O
流事件产生,然后进程就去处理这个进程。
这里可以多加一个选择
worker
的原因,因为
worker
是基于
epoll
的异步非阻塞的服务器程序。自然,
worker
能够轻松处理
10w+
的并发连接,也就无可厚非 了。