简述一下什么是
Nginx
,它有什么优势和功能?
Nginx
是一个
web
服务器和方向代理服务器,用于
HTTP
、
HTTPS
、
SMTP
、
POP3
和
IMAP
协议。因
它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx---Ngine X
,是一款免费的、自由的、开源的、高性能
HTTP
服务器和反向代理服务器;
也是一个
IMAP
、
POP3
、
SMTP
代理服务器;
Nginx
以其高性能、稳定性、丰富的功能、简单的
配置和低资源消耗而闻名。
也就是说
Nginx
本身就可以托管网站(类似于
Tomcat
一样),进行
Http
服务处理,也可以作为
反向代理服务器 、负载均衡器和
HTTP
缓存。
Nginx
解决了服务器的
C10K
(就是在一秒之内连接客户端的数目为
10k
即
1
万)问题。它的设
计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制
—
事件驱动机制,是一
种异步事件驱动结构。
优点:
(
1
)更快
这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,
在高峰期(如有数以万计的并发请求),
Nginx
可以比其他
Web
服务器更快地响应请求。
(
2
)高扩展性,跨平台
Nginx
的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型
且耦合度极低的模块组成。因此,当对某一个模块修复
Bug
或进行升级时,可以专注于模块自身,
无须在意其他。而且在
HTTP
模块中,还设计了
HTTP
过滤器模块:一个正常的
HTTP
模块在处理完请
求后,会有一串
HTTP
过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的
HTTP
模块
时,不但可以使用诸如
HTTP
核心模块、
events
模块、
log
模块等不同层次或者不同类型的模块,还
可以原封不动地复用大量已有的
HTTP
过滤器模块。这种低耦合度的优秀设计,造就了
Nginx
庞大的
第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。
Nginx
的模块都是嵌入
到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具
备极其优秀的性能,充分利用
Nginx
的高并发特性,因此,许多高流量的网站都倾向于开发符合自
己业务特性的定制模块。
(
3
)高可靠性:用于反向代理,宕机的概率微乎其微
高可靠性是我们选择
Nginx
的最基本条件,因
为
Nginx
的可靠性是大家有目共睹的,很多家高流量网站都在核心服务器上大规模使用
Nginx
。
Nginx
的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用
模块都非常稳定,每个
worker
进程相对独立,
master
进程在
1
个
worker
进程出错时可以快速
“
拉
起
”
新的
worker
子进程提供服务。
(
4
)低内存消耗
一般情况下,
10 000
个非活跃的
HTTP Keep-Alive
连接在
Nginx
中仅消耗
2.5MB
的
内存,这是
Nginx
支持高并发连接的基础。
(
5
)单机支持
10
万以上的并发连接
这是一个非常重要的特性!随着互联网的迅猛发展和互联网用
户数量的成倍增长,各大公司、网站都需要应付海量并发请求,一个能够在峰值期顶住
10
万以上并
发请求的
Server
,无疑会得到大家的青睐。理论上,
Nginx
支持的并发连接上限取决于内存,
10
万
远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。
(
6
)热部署
master
管理进程与
worker
工作进程的分离设计,使得
Nginx
能够提供热部署功能,即
可以在
7×24
小时不间断服务的前提下,升级
Nginx
的可执行文件。当然,它也支持不停止服务就更
新配置项、更换日志文件等功能。
(
7
)最自由的
BSD
许可协议
这是
Nginx
可以快速发展的强大动力。
BSD
许可协议不只是允许用户免
费使用
Nginx
,它还允许用户在自己的项目中直接使用或修改
Nginx
源码,然后发布。这吸引了无数
开发者继续为
Nginx
贡献自己的智慧。 以上
7
个特点当然不是
Nginx
的全部,拥有无数个官方功能模
块、第三方功能模块使得
Nginx
能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加
强大、复杂的功能,有些模块还支持
Nginx
与
Perl
、
Lua
等脚本语言集成工作,大大提高了开发效
率。这些特点促使用户在寻找一个
Web
服务器时更多考虑
Nginx
。 选择
Nginx
的核心理由还是它能
在支持高并发请求的同时保持高效的服务。
Nginx
是如何处理一个
HTTP
请求的呢?
Nginx
是一个高性能的
Web
服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制 ,异步机制使用的是异步非阻塞方式 ,接下来就给大家介绍一下 Nginx
的多线程机制和异步非阻塞
机制 。
1
、多进程机制
服务器每当收到一个客户端时,就有 服务器主进程 (
master process
)生成一个 子进程(worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。
使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低
编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响 ,如果一个
进程发生异常退出时,其它进程正常工作,
master
进程则很快启动新的
worker
进程,确保服务
不会中断,从而将风险降到最低。
缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当
有大量请求时,会导致系统性能下降 。
2
、异步非阻塞机制
每个工作进程 使用 异步非阻塞方式 ,可以处理 多个客户端请求 。
当某个 工作进程 接收到客户端的请求以后,调用
IO
进行处理,如果不能立即得到结果,就去 处理 其他请求 (即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(为异 步 )。当 IO
返回时,就会通知此 工作进程 ;该进程得到通知,暂时 挂起 当前处理的事务去 响应客户端请求 。