Nginx 应用和选择

Nginx 的应用场景

Nginx 常见的应用场景如下图所示,下面这张图可以说是很详细了:

mark

静态资源服务

曾经的 Web 开发并不是完全的前后端分离,最明显的例子就是 JSP,基本是前后端不分离,直到后来 Spring 生态体系和前端框架的发展,Web 应用程序成了单纯的提供应用接口服务的程序,因此静态资源就没必要交给应用服务器去处理,而是交给 Nginx

反响代理服务

Nginx 的缓存加速和负载均衡,极大提高了整体系统的并发能力,Nginx 的并发相对于应用服务器要强大太多

API 服务

Nginx 里面提供了数据库服务、缓存、应用服务相关 API,模块化设计。比如数据库服务器的并发性能本来就远高于应用服务器,如果直接让应用服务器去操作数据库的话无疑是降低了系统的性能,于是 Nginx 提供了数据库访问的 API,提升系统整体性能

现在越来越多的网络设备接入,尤其是在我们国家这样的人口大国,每年双十一这样的并发量不是单纯的应用服务器能够撑得住的。虽然计算机硬件在不断升级,但是这种问题就目前来看从硬件的角度发生的改变是微乎其微的,早期的 Apache 服务器维护一个连接就需要一个进程来维护,这样做的代价就是从硬件的角度就已经限制了服务器的并发。
即使从 8 核处理器换到 16 核心处理器并发性能也不会得到成倍的提升,因为操作系统和软件没做好服务和多核架构的准备!

下面这张图是最近几年服务器市场份额变化图:

mark

虽然现在排名第二,但是在一些追求长期稳定的服务中通常不会更换服务器,就比如学校的教务网站,ASP.NET 实现的,虽然每次网上选课系统都会崩盘,但是学校为了稳定性不会轻易更换服务架构的。所以表面看起来 Apache 的使用高于 Nginx 的,但是往往新增的服务器都会使用 Nginx

Nginx 的优点

mark

高并发需要条件就是每个链接需要更小的内存,吃更少的 CPU 资源。Nginx 做到了,从上图中可以看到,在并发量很低的时候 Nginx 的性能其实还不如其他的服务器,但是 Nginx 在高并发量的时候,性能仍然很稳定,而其他的服务器的性能会严重下降,所以 Nginx 的高并发性能成为了人们选择 Nginx 的理由

Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。Nginx 官方表示保持 10000 个没有活动的连接,它只占 2.5M 内存

Nginx 与其他服务器的对比

mark

Nginx 的组成

mark

Nginx 版本发布

mark

从这个图上呢也可以看出来 Nginx 的版本迭代情况,绿色的线表示 Nginx 的 Bug 修复情况,Bug 越来越少也同样是说明了 Nginx 越来越稳定了,2009 年 Nginx 开始支持 Windows 操作系统,2011 年才成立 Nginx 的商业公司……

Nginx 版本选择

  • 免费开源版本 nginx.org
  • 商业版 nginx.com
  • 阿里巴巴的 Tengine
  • 免费版 OpenResty
  • 商业版 OpenResty