Nginx的使用场景

nginx strem的应用场景 nginx常见使用场景_服务器

[1]反向代理服务

应用服务对开发效率要求很高,其使用效率(QPS,TPS等)是非常有限的,所以需要很多应用服务构成集群,这时候就要用到Nginx的反向代理功能,将动态请求传给各个应用服务。

这些应用服务构成集群后至少又会产生两个需求:

  • 动态扩容
  • 容灾处理(服务可能会出问题)

所以Nginx反向代理要有负载均衡的功能。

另外,Nginx往往处在企业内网的边缘,随网络链路增长用户体验到的时延会增加,所以可以将一些一段时间内不变的又常访问的内容缓存在Nginx中。

[2]静态资源服务

一些CSS,JS或者写死的图片,这些静态资源没必要通过应用服务来访问,可以直接通过Nginx访问。

[3]API服务

API服务是指由Nginx 直接去访问数据库或者应用服务,利用Nginx强大的并发性能实现Web防火墙等业务功能。这要求API服务有强大的业务处理功能,可以使用OpenResty、Nginx集成JS、Niginx集成Lua等方法实现。

Nginx的出现背景

[1]互联网数据量快速增长

接入互联网的设备越来越多,数据量越来越大,对服务器的性能要求越来越高。

[2]摩尔定律在单颗CPU上失效

单颗CPU的性能提升已经不再符合摩尔定律,CPU趋于向多核方向发展,但核心数增加一倍往往远不如频率提升一倍带来的性能提升,原因是操作系统和大量软件没有做好服务于多核架构的准备,性能就损耗在这上面。

比如Apache一个进程同一时间只能处理一个连接的请求,只有这个请求处理完了才能处理下一个。这样的模式使得Apache在面对几百万个连接时,没法同时开几百万个进程去处理,而进程间切换的代价是很高的。Nginx就可以处理数百万上千万的并发连接。

目前Apache服务器的份额还远多于Nginx,因为很多时候不会去改变已有的架构,Nginx的市场份额上涨很快,新增的Web服务器很多都采用了Nginx。

Nginx的优点

[1]在高并发时同时保持高性能

nginx strem的应用场景 nginx常见使用场景_服务器_02


从图中可以看出,大部分的Web服务器随着并发连接数的上升,RPS会急剧下降,因为其设计架构就是有问题的。Nginx(图中横直线)可以在高并发时同时保持高性能,高并发往往只需要让每个连接所使用的内存尽量少就可以达到,具有高并发的时候又要保持高性能就要有很好的设计了。

Nginx让现在主流的服务器(如32核64G的内存)可以轻松达到数千万的并发连接,如果处理简单的静态资源请求可以达到100万的RPS。

[2]可扩展性好

Nginx的可扩展性主要体现在其稳定的模块化设计,使得第三方模块的生态圈非常丰富,甚至于OpenResty这样的第三方插件在其之上又形成了新的生态圈。

[3]高可靠性

Nginx可以在服务器上持续不间断的运行数年,很多Web服务器往往运行几个月就需要重启。当对服务有四个9(99.99…%)、五个9(99.999…%)甚至更高(如交易系统)的高可用性时,服务器持续运行一年的宕机时间可能只允许以秒来计。

[4]热部署

可以在不停止服务的情况下升级Nginx。

热部署对Nginx而言很重要。如果只是普通的服务,可以kill掉进程再重启;但对于Nginx而言,kill掉Nginx进程会导致操作系统为所有已经建立连接的客户端发送一个TCP reset复位包,很多客户端没法很好处理这种复位请求

在大并发场景下一些偶然事件就会导致必然的恶性结果。

[5]BSD许可证

这表明Nginx不仅是开源的、免费的,而且可以在有定制需求时去修改Nginx源代码,并允许将其商用。

Nginx的组成部分

这里老师用汽车类比Nginx,用驾驶员类比Nginx的使用者。

[1]Nginx二进制可执行文件

由官方模块编译出的文件,相当于汽车本身,所有功能都由它提供。

[2]Nginx.conf配置文件

用于控制Nginx的行为,相当于车里的驾驶员。

[3]access.log访问日志

记录每一条HTTP请求信息与响应信息,相当于汽车经过每个地方记录的GPS轨迹。

[4]error.log错误日志

出现错误,或预期行为不一致时,可以通过该文件定位问题,相当于汽车中的黑匣子。