服务端相关 / 02 为什么选择 Nginx

为什么选择 Nginx

从上一节中,我们可以看到,Nginx 已经是 Web 服务器市场的新一哥。市场的选择总归是没错的,那么市场选择它的理由又有哪些呢?

1. 高性能、高稳定、低资源消耗

Nginx 的进程模型采用了 Master/Workers 进程池的机制,即通常情况下,Nginx 会启动一个 Master 进程(当然,也可以无 master 进程)和多个 Worker 进程对外提供服务。Master 进程是监控进程,本身并不处理具体的 TCP 和 HTTP 请求,只负责接受 UNIX 信号,管理 Worker 进程,类似于工地的包工头。

Worker 进程是比较累的,负责处理客户端的连接请求,它充分利用了 Linux 系统中的 epoll、kqueue 等机制,高效处理 TCP 和 HTTP 请求,利用这些特点,Nginx 充分挖掘了服务器的潜能,让服务器更快响应用户请求。

一般情况下,10000 个非活跃的 HTTP Keep-Alive 连接在 Nginx 中仅仅消耗 2.5M 内存,这是 Nginx 支持高并发连接的基础,体现了 Nginx 高性能的特点。另外,由于官方提供的模块都非常稳定,每个 Worker 进程都相对独立,Woker 进程出错时,Master 进程会立马感知到并快速拉起新的 Worker 子进程不间断提供服务,保证服务的稳定性。

nginx的进程模型
图片描述

2. 高可扩展性

Nginx 的架构设计是非常优秀的,极具扩展性,它完全由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。

另外,我们还可以在官方提供的模块上进行二次开发,例如 HTTP 模块,其中设计了 HTTP 过滤器模块,这样我们开发一个新的 HTTP 模块时,除了使用诸如 HTTP 核心模块、events 模块、log 模块等不同层次的模块,还可以原封不动地复用大量已有的 HTTP 过滤器模块。

这种低耦合度的优秀设计,造就了 Nginx 庞大的第三方模块,而且 Nginx 的模块都是嵌入到二进制的文件中执行的,这样使得第三方模块同样具备极其优秀的性能,充分利用 Nginx 的高并发特性,因此许多高流量的网站都会在 Nginx 基础上开发符合自己业务特性的定制模块,而且开发成本低,效果好。

另外,对于中小型企业来说,Nginx 开箱即用,其本身的高并发能力能满足企业的大部分业务,因此 Nginx 在绝大部分互联网企业中应用非常广泛。

3. 热部署

支持热部署功能是 Nginx 的一个特色,许多大型门户网站要求 24 小时不间断提供服务,一旦出现服务停止,容易造成用户投诉和用户流失。Nginx 由于其管理进程和 Worker 进程的分离设计,使得其能提供热部署功能,满足大型站点在 7x24 小时不间断服务的前提下升级 Nginx。

但要注意的是,Nginx 并不支持在不停止服务的情况下就更新配置、更换日志文件等功能。Nginx 的热部署实现原理是,在不停止老进程的前提下,终止其连接请求,并启动新的 Worker 进程处理新进来的连接请求,再慢慢终止老的 Worker 进程,实现新老交替。

4. 开源和免费

Nginx 和老大哥 Apache 一样开源且免费。在如今的时代,开源才能有力地成长,免费才能让更多的企业和个人开发者使用。 当然 Nginx 也有它的商业版本 Nginx plus,它有着更为丰富的功能和应用场景。然而免费版本的功能已经足够强大,加上第三方层出不穷的插件模块,几乎能实现各种业务功能,再加上配合第三方的语言集成(perl、lua等),对于绝大多数企业和个人来说已经完全足够。

当然,Nginx 的优点绝对不止于此。它最核心地功能是:在支持高并发请求的同时保持高效的服务。而这一点正是广大开发者,也是各大企业迫切需要满足的需求,以应对日益庞大的国内互联网用户群体。