image.png
下来我们看一下 nginx 的主要优点。在我看来 nginx 主要有五个优点。
看一下左边这张图啊,它的Y轴是request per second的,也就是每秒处理的请求数,我们简单把它叫为 rps,它的X轴叫concurrent connection,也就是并发连接数。我们可以看到大部分的程序或者web服务器,随着并发连接数的上升,它的 rps 会急剧的下降。这里的原理就像我们的上一页PPT所说过的,它的设计架构是有问题的。而 nginx 呢,它的第一个优点就是高并发和高性能同时具备的,往往高并发只需要我们对每个连接所使用的内存尽量的少,就可以达到。而具有高并发的同时达到高性能啊,往往需要非常好的一个设计。那么 nginx 可以达到什么样一个标准呢?比如说我们现在主流的一些服务器,三十二和六十四G的内存可以轻松地达到数千万的并发连接。如果是处理一些简单的静态资源请求,可以达到一百万的 rps 这样的级别。
第二个核心原因是它的可扩展性非常好。那么它的可扩展性呢主要体现在它的模块化设计,模块化设计非常的稳定,使得 nginx 的第三方模块生态圈非常的丰富,甚至于有像天津? OpenResty 这样的第三方插件,在他们之上又生成了一套新的生态圈。丰富的生态圈为我们 nginx 丰富的功能提供了保证。
第三个优点是它的高可靠性,所谓高可靠性是指 nginx 可以在服务器上持续不间断的运行数年,而很多外部服务器往往运行几周或者几个月就需要做一次重启。对于 nginx 这样的一个高并发、高性能的反向代理服务器而言,它往往运行在企业内网的边缘节点上。这个时候如果我们企业想提供四个九、五个九甚至更高的高可用性时,对于 nginx 持续运行能够宕机的时间,一年可能只能以秒来计。所以在这样的一个角色中,nginx 的高可靠性给我们提供了非常好的保证。
第四个优点热部署,是指可以在不停止服务的情况下升级 nginx。这个功能对于nginx 来说非常的重要,因为在 nginx 上可能跑了数百万的并发连接。如果是普通的服务,我们可能只用kill进程再重启的方式就可以处理好。但是对于 nginx 而言,因为K的 nginx 进程会导致操作系统为所有的已经建立连接的客户端发送一个tcp中的reset复位包,而很多客户端是没有办法很好的处理复位请求的。在大并发场景下,一些偶然事件就会导致必然的恶性结果,所以热部署是非常有必要的。
第五优点是BSD许可证。BSD license是指 nginx,不止是开源的、免费的,而且我们可以在有定制需求的场景下去修改 nginx 源代码,再运行在我们的商业场景下,这是合法的,nginx 的优点其实不止这五条,但以上优点我认为是 nginx 最核心的特性。

总结:

  1. nginx 高并发和高性能兼具。 32 g 和 64 g 的内存的服务器就可以轻松达到数千万的并发连接。
  2. nginx 可扩展性好。它采用模块化设计,第三方模块生态圈丰富,丰富的第三方模块带来了丰富的功能。
  3. nginx 可以在服务器上持续不间断运行数年,可靠性高。
  4. nginx 可以热部署。
  5. nginx 是 BSD 许可证,可以随意修改源代码用于商业场景。