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