初识Nginx(一)

隐私侠
• 阅读 1081

由于Nginx对硬件和操作系统内核特性的深度挖掘,使得它在保持高并发的同时,实现了高吞吐量。优秀的模块设计,使得Nginx的生态圈,异常丰富。大量的第三方模块,使得Nginx可以轻松实现各种场景下的定制化需求

这些特性,使得Nginx成为互联网公司的标准配置

Nginx的三个主要应用场景

初识Nginx(一)

往往一个web请求从红色的箭头走下来以后,会先经过Nginx,再到应用服务,然后再去访问Redis或者MySQL这样的数据库,提供基本的数据功能

这里有一个问题,应用服务因为对开发效率要求特别的高,它的运行效率是很低的,它的QPS、TPS或者并发都是受限的,所以就需要把很多这样的应用服务组成一个集群,向用户提供高可用性,而一旦很多应用服务构成集群的时候,就需要Nginx具有反向代理功能,可以将动态请求传给应用服务

很多的应用服务组成的集群,它一定会带来两个需求:

  • 需要动态的扩容
  • 有些服务出问题的时候,需要做容灾

这样就使反向代理必须具备负载均衡功能。其次,在这样的一个链路中,Nginx是处在企业内部网络的边缘节点,随着网络链路的增长,用户体验到的时延会增加,所以如果我们能把一些用户看起来不变的,或者在一段时间内看起来不变的动态内容,缓存在Nginx部分,由Nginx直接向用户提供访问。那么这样用户访问时延就会减少很多

所以反向代理会衍生出另外一个功能叫缓存,它能加速访问。很多时候我们在访问css、js或者一些小的图标图片,这样的静态资源,是没有必要由应用服务来提供访问的,它只需要通过本地文件,系统上放置的静态资源,直接由Nginx提供访问就可以了,这就是Nginx提供静态资源服务功能

第三个应用场景,则是因为应用服务它本身的性能因为有很多的问题,但是数据库服务要比应用服务好的多,因为它的应用场景比较简单,它的并发性能和TPS都要远高于应用服务,所以就衍生出第三个应用场景。由Nginx直接去访问数据库(Redis或者类似这样的服务),利用Nginx强大的并发性实现如:web防火墙,这样复杂的业务功能来提供给用户。这要求API服务有非常强大的业务处理功能,所以像OpenResty,或者像Nginx集成的JavaScript,利用JavaScript、Lua这样的语言功能,和它们语言先天自带的一些工具库来提供完整的API服务

Nginx出现的历史背景

  • 互联网数据量的快速增长
  • 摩尔定律:性能提升
  • 低效的Apache

主要是全球化和物联网的快速发展,导致接入互联网的人与设备的数量都在快速上升,数据的快速爆炸,对硬件性能提出了很高的要求,提到硬件,大家都知道摩尔定律。之前我的服务跑在1GHz的CPU上,一年半以后,我更新到2GHz的CPU时,我可以预测到我的服务会有两倍的性能提升

但是到本世纪初,摩尔定律在单颗CPU的频率上已经失效了,CPU开始向多核方向发展。这个时候,当你的服务是跑在8核CPU上时,一年以后,你换到16核的CPU,通常你的服务不会有一倍的性能提升的

那么这些性能究竟损耗在哪里?

主要是操作系统和大量的软件没有做好服务于多核架构的准备,比如Apache,Apache是低效的,因为它的架构模型里,一个进程,同一时间,只会处理一个连接一个请求,只有在这个请求处理完以后,才会去处理下一个请求

这有什么潜台词呢?这实际上是在使用操作系统的进程间切换的特性,因为操作系统微观上只有有限的CPU,但是操作系统被设计为同时服务于数百甚至上千的进程,而Apache一个进程只能服务于一个连接,这样的模式,会导致,当Apache需要面对几十万、几百万连接的时候,它没有办法去开几百万的进程,而进程间切换的代价、成本又太高。当并发的连接数变多,这些进程间切换,引发的性能消耗也就越大。而Nginx是专门为了这样的应用场景而生的。Nginx可以处理数百万甚至数千万的并发连接

Nginx的优点

  • 高并发、高性能
  • 可扩展性好
  • 高可靠性
  • 热部署
  • BSD许可证
    初识Nginx(一)

它的Y轴是每秒处理的请求数(RPS),X轴是并发连接数。从图中可以看到,大部分的程序或web服务器,随着并发连接数的上升,它的RPS会急剧的下降,这就是上边说到的,它的架构设计是有问题的

Nginx的第一个优点就是高并发、高性能同时具备的,往往高并发只需要对每一个连接所使用的内存尽量的少就可以达到。而具备高并发的同时又具备高性能,往往需要非常好的设计。Nginx可以达到什么样的标准呢?比如说现在比较主流的服务器(32核、64G内存),可以轻松达到数千万的并发连接,如果是处理一些简单的静态资源请求,它可以达到100w的RPS

第二个核心优点是它的可扩展性非常的好。它的可扩展性主要体现在它的模块化设计,模块化设计的非常稳定,使得Nginx的第三方模块生态圈非常的丰富。丰富的生态圈,为Nginx丰富的功能提供了保证

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

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

第五个优点是BSD许可证。它指的是Nginx不仅是开源的、免费的,而且大家可以在有定制的场景下去修改Nginx的源代码,在商业场景下是合法的

Nginx的四个主要组成部分

初识Nginx(一)

Nginx二进制可执行文件

这个是由Nginx本身的框架,它的官方模块和编译进去的各种第三方模块,一起构建的文件。这个文件就相当于汽车本身,它有完整的系统,所有的功能都由它提供

Nginx.conf配置文件

它相当于驾驶员,虽然二进制可执行文件已经提供了许多功能,但这些功能有没有开启,或者开启了以后,定义怎样的行为处理请求,都是由Nginx.conf配置文件决定的。所以它相当于驾驶员,控制汽车的行为

access.log访问日志

它相当于这辆汽车经过的所有地方形成了GPS轨迹,access.log会记录下每一条http请求信息与响应信息

error.log错误日志

它相当于黑匣子一样,当出现了一些不可预期的问题时,可以通过error.log去把问题定位出来

Nginx的版本发布情况

初识Nginx(一)

  • feature:发布了哪些功能
  • bugfix:修复了哪些bug
  • change:做了哪些小的重构
点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
4年前
Nginx配置https
一、开启nginx的ssl模块1.未安装过nginx,编译安装配置参数如下:./configure\prefix/usr/local/nginx\withpcre\withhttp\_ssl\_modulessl模块\withhttp\_stub\_status\_module\wit
可莉 可莉
4年前
041. 通过 Lua 扩展 Nginx
1\.ngx\_lua模块Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。ngx\_lua模块通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑。该模块具有
Wesley13 Wesley13
4年前
4. Nginx模块
Nginx官方模块1.ngx\_http\_stub\_status\_modulehttp://nginx.org/en/docs/http/ngx\_http\_stub\_status\_module.html。(https://www.oschina.net/action/GoToLink?urlhttp%3A%2
Stella981 Stella981
4年前
API网关【gateway 】
最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析。由于采用了大量的nginx相关的东西,所以在此记录一下:在nginx使用openresty加入nginx模块编辑nginx下conf配置文件nginx.confvinginx.c
Stella981 Stella981
4年前
Nginx介绍
Nginx介绍•Nginx官网nginx.org,最新版1.13,最新稳定版1.12•Nginx应用场景:web服务、反向代理、负载均衡•Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制化模块,在安全限速方面表现突出
Stella981 Stella981
4年前
041. 通过 Lua 扩展 Nginx
1\.ngx\_lua模块Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。ngx\_lua模块通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑。该模块具有
Stella981 Stella981
4年前
Nginx、Apache工作原理及Nginx为何比Apache高效
Nginx才短短几年,就拿下了web服务器大笔江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于httpd,甚至能轻松解决C10K问题。在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果,Nginx0.7.14PHP5.2.6(FastCGI)可
Easter79 Easter79
4年前
Tengine 添加第三方监控模块nginx
一、概述  除nginx官网源码提供的各种模板,nginx还有第三方模块。官方文档中也列出了nginx的很多第三方模块,除官网之外,还有很多的有用的模块也能在Github上找到。官网第三方模块地址:https://www.nginx.com/resources/wiki/modules/公司前端使用的是nginx代理,反向代理了很多域名
Stella981 Stella981
4年前
Nginx
!(https://imagestatic.segmentfault.com/255/117/25511790966008dc5b00fd8)Nginx进程模型分析在介绍Nginx的进程模型之前我们先来给大家解释下一些常见的名词,这能辅助我们更好的了解Nginx的进程模型。作为Web服务器,设计的初衷就是为了能够处理更多的客户端的请
芝士年糕 芝士年糕
3年前
Nginx优化——VTS监控模块
最近租了一个3A的VPS,价格挺便宜的,用来搭建nginx,最近对nginx进行监控,顺便写一个教程,可以看一下,如果有什么地方不懂,或者需要服务器的,可以后台私信我一,监控nginx主要用到以下三个模块1,nginxmodulevts:Nginxvirtualhosttrafficstatusmodule,Nginx的监控模块,能够提供JS