一、Nginx的主要应用场景

初始Nginx:Nginx介绍(一)

 

我们看上面那张图,一个web请求从红色的箭头访问过来后,会先经过Nginx,再到我们的应用服务比如tomcat、Django,然后再去访问redis或者Mysql这样的数据库提供基本的数据功能。

应用服务因为开发效率要求的非常高,所以它的运行效率是非常低的,它的QPS、TPS或者并发是受限的,所以我们需要把很多应用服务组成一个集群向用户提供高可用性,但很多服务构成集群的时候,需要nginx具有反向代理功能,可以把动态请求传给应用服务。而很多应用服务组成集群会带来两个需求,一个需求是动态扩容,二是有些服务出问题时我们需要做容灾;这样我们的反向代理必须具备”负载均衡''功能,其次,在这样一个链路中nginx是处在企业内网的边缘节点,随着我们网络链路的增长,用户体验到的时延会增加,所以如果我们把一些在一段时间内看起来不变的动态内容缓存在nginx中,由nginx直接向用户访问,那么这样用户时延就会减少很多,z这样反向代理又会衍生出另外一个功能”缓存“,加速我们的访问

很多时候我们在访问像CSS、JAVASCRIPT、js文件,或者像一些小图片,那么这样的静态资源是没有必要由应用服务来访问的,它只需要通过本地文件系统放置的静态资源直接由nginx提供访问就行了,这就是nginx的静态资源功能

第三个应用场景则是因为应用服务本身的性能有很多的问题,但是数据库服务比应用服务的性能好得多,因为它的业务场景比较简单,它的并发性能和TPS都要远高于应用服务,所以这里我们衍生出Nginx的第三个应用场景,直接由Nginx去访问数据库或者redis,利用nginx强大的并发性能实现如WEB防火墙这样复杂的业务功能来提供给用户,这要求我们的API服务有强大的业务处理功能,像openresty、或者nginx集成了javascript、lua语言来提供完整的api服务。

综上,nginx的主要应用场景可以分为三种:

1、静态资源服务

通过本地文件系统提供服务

2、反向代理服务

Nginx的强大性能

缓存

负载均衡

3、API服务

Openresty

二、Nginx出现的历史背景

web服务的市场份额占用图,可以看到nginx目前占领市场第二大份额

初始Nginx:Nginx介绍(一)

Nginx出现的原因主要有三个:

1、互联网的数据量快速增加

  • 互联网的快速普及

  • 全球化

  • 物联网

数据量的快速爆炸对我们的硬件要求提高

2、摩尔定律:性能提高

本世纪初,摩尔定律在单颗CPU上定律失效了。随着CPU往多核方向发展,当你的服务跑在8核CPU上,半年后换到16核CPU上,你的服务性能并不会成倍增长,那么服务器的性能损耗在哪里了呢?主要是操作系统核软件没有做好服务于多核架构的准备,就像apache。

3、低效的Apache

apache同一时间一个进程只会处理一个连接,在这个请求处理完成以后才会去处理下一个请求,当apache需要几十万、几百万的连接的时候,它无法同时开启几百万的进程去处理,因为进程间切换的代价成本太高了,当我们并发的连接数越多,这种无味的进程间的切换导致的性能消耗就越大,而Nginx就是专门为这样子的场景而生的,Nginx可以处理数百万,甚至上千万的并发连接

三、Nginx的特点

初始Nginx:Nginx介绍(一)

上图的Y轴是每秒处理的请求数,简称RPS;X轴是并发连接数

这里的5条线没有明确的指代,只是为了说明高并发往往导致吞吐量(RPS)下降。如果你看过类似unix网络编程这样的书,例子里提到的多进程或者多线程处理并发连接,那么依据这种方法开发出的服务就类似图中线条的趋势,而各自的代码如果效率更高,或者功能更简单,比如绿色的线,就会晚一点开始陡峭的下降。

注:连接指的是TCP连接,可以在连接上进行双向的消息发送和接收。请求这里指的是http请求,每个http请求必须对应一个http响应,这是一次完整请求。一个连接上可以持续多个http请求的传输,这叫做http协议中的keepalive长连接。

并发数,指同时存在的TCP连接数量。连接数,即TCP连接的数量。

1、Nginx的优点

  • 高并发,高性能

    在高并发的同时还要达到高性能,往往需要非常好的设计。那么Nginx可以达到一个什么样的标准呢?在当前32核64G主流配置下可以轻松达到数千万的连接,如果是处理简单的静态资源请求可以达到一百万的吞吐量(RPS)级别。

  • 扩展性好

    Nginx的可扩展性非常好,主要体现在Nginx的模块化设计,模块化设计非常的稳定,使得Nginx 的第三方模块的生态圈非常的丰富,甚至于有Openresty这样的第三方插件在它之上生成了一套新的生态圈,丰富的生态圈为Nginx丰富的功能提供了保证。

  • 高可靠性

    Nginx的高可靠性是指可以在服务器上持续不间断的运行数年,而很多Web服务器往往运行几周或者几个月就需要做一次重启,对于Nginx这样一个高并发、高性能的反向代理服务器而言,它往往运行在企业内网的边缘节点上,这个时候如果企业想要提供4个9,5个9,甚至更高的可用性时,对于Nginx持续运行能够宕机的时间一年可能只能以秒来计,所在在这样的角色中,Nginx的高可靠性给我们提供了很好的保证。

  • 热部署

    热部署是指在可以不停止Nginx的请况下升级Nginx。这个功能对于Nginx来说非常的重要,因为在Nginx上可能跑了上百万的并发连接,如果是普通的服务,我们只需要kill掉进程再重启进程方式就可以升级,但对于Nginx而言,Kill掉Nginx进程会导致系统为已经建立连接的客户端发送TCP终端reset复位包,而很多客户端是没有办法很好的处理复位包请求的,在大并发场景下,一些偶然事件就会导致必然的恶性结果,所以热部署是很多必要的。

  • BSD许可证

    BSD授权许可证(FreeBSD Copyright Information)具有多种授权许可证。总的来说你可以对软件任意处理,只要你在软件中注明其是来自于那个项目的就可以了。也就是说你具有更大的自由度来处置软件。如果你对软件进行了修改,你可以限制其他使用者得到你修改的软件的自由。

    BSD授权许可证没有实现"通透性"自由,也就是其不保证软件源代码开放的连续性。这样如果你希望采用别人开发的BSD软件,进行一些修改,然后作为产品卖,或者仅仅保密自己的做的一些除了软件开发以外的工作,那么你就可以从中得利。

    从赚钱为目的的商务角度看来,如果你使用了BSD授权许可证的软件,那么你就可以任意进行。

2、Nginx的缺点

Nginx 缺点就是开发nginx模块需要的技术要求比较高。即使使用openresty后lua语言简化了许多,但仍然需要我们理解同步化与非阻塞接口,开发成本还是相对高一些的。

相关文章:

  • 2021-11-21
  • 2021-11-27
  • 2021-08-16
  • 2021-11-05
  • 2021-07-30
  • 2021-12-08
  • 2021-06-26
  • 2021-09-25
猜你喜欢
  • 2021-08-12
  • 2021-09-09
  • 2021-12-14
  • 2021-04-08
  • 2022-01-02
  • 2021-11-17
  • 2022-12-23
相关资源
相似解决方案