初识Nginx

Nginx简介

Nginx从2004年发展至今,由于它对硬件及操作系统内核特性的深度挖掘,使得它在保持高并发的同时,实现了高吞吐量。而优秀的模块设计使得Nginx的生态圈异常丰富,大量的第三方模块使得Nginx可以轻松实现各种场景下的定制化需求。BSD许可证又赋予Nginx最大的灵活性。这些特点使得Nginx已经成为互联网公司的标准属性。

Nginx的主要应用场景

    一个web请求会先经过nginx再到应用服务,然后再去访问持久层(redis、mysql),提供基本的数据功能。

静态资源服务

​ 应用服务要求开发效率非常的高,所以运行效率很低,它的QPSTPS或者并发都是受限的。所以我们需要把很多这样的应用服务组成一个集群,向用户提供高可用性。而一旦很多服务构成集群的时候,我们需要nginx具有反向代理功能,可以把动态请求传导给应用服务。而很多应用服务构成集群,它一定会带来两个需求,第一个需求我们需要动态的扩容;第二个是有些服务出问题的时候,需要做容灾,这样反向代理就必须具备负载均衡功能。其次在这样一个链路中nginx处在企业内网的一个边缘节点,随着我们网路链路的增长,用户体验到的时延会增加。如果我们能把一些所有用户看起来不变的或者在一段时间内看起来不变的动态内容缓存在nginx部分,由nginx直接向用户提供访问,用户的访问时间就会减少很多,所以方向代理会衍生出另外一个功能叫缓存,它能够加速我们的访问。很多时候我们在访问像css、javascript、js文件、小图片这样的静态资源,是没有必要由应用服务来访问的,它只需要通过本地文件、系统上放置的静态资源直接由nginx提供访问就可以了。

(​ QPS: Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。)

TPS: 是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。)

反向代理服务

反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

​ 通常的代理服务器,只用于代理内部网络对Internet外部网络的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的 http请求发送到代理服务器中。不支持外部网络对内部网络的连接请求,因为内部网络对外部网络是不可见的。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器 而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

​ 反向代理就是通常所说的web服务器加速,它是一种通过在繁忙的web服务器和外部网络之间增加一个高速的web缓冲服务器来降低实际的web服务 器的负载的一种技术。反向代理是针对web服务器提高加速功能,作为代理缓存,它并不是针对浏览器用户,而针对一台或多台特定的web服务器,它可以代理 外部网络对内部网络的访问请求。

​ 反向代理服务器会强制将外部网络对要代理的服务器的访问经过它,这样反向代理服务器负责接收客户端的请求,然后到源服务器上获取内容,把内容返回给 用户,并把内容保存到本地,以便日后再收到同样的信息请求时,它会把本地缓存里的内容直接发给用户,以减少后端web服务器的压力,提高响应速度。

​ 反向代理服务器通常有两种模型,它可以作为内容服务器的替身,也可以作为内容服务器集群的负载均衡器。

API服务

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

Nginx出现的原因

​ 主要有以下三个原因。

(1)互联网的数据量快速增长

这主要是互联网全球化的快速发展导致进入互联网中的人与设备的数量都在快速上升,数据的快速爆炸,对我们的硬件性能提出了很高的要求。

(2)摩尔定律

​ 之前服务器跑在1GHz的CPU上,当一年半以后更新到2Ghz的CPU时,可以预测到服务器会有2倍的性能提升。到了本世纪初,摩尔定律在单核CPU的频率上已经失效了,CPU开始向多核方向发展,这个时候当服务器跑在8核CPU上时,一年半以后换到了16核的CPU,服务器的性能通常是不会有一倍的提升的。那么这些性能究竟损耗在哪里呢?主要是操作系统和大量的软件没有做好服务于多核架构的准备,比如像Apache。

(3)低效的Apache

​ 在我看来Apache是低效的,因为它的架构模型里一个进程同一时间只会处理一个连接、一个请求,只有在这个请求处理完以后才会去处理下一个请求,它实际上在使用操作系统进程间切换的一个特性。因为操作系统微观上只有有限的CPU,但是操作系统被设计为同时服务于数百甚至上千的进程。而Apache一个进程只能服务于一个连接,这样的模式会导致Apache需要面对几十万、几百万连接的时候,它没有办法去开几百万的进程,而进程间切换的代价成本又太高了。当我们并发的连接数越多,这种无谓的进程间切换引发的性能消耗也就越大,而Nginx是专门为了这样的应用场景而生的。Nginx可以处理数百万甚至上千万的并发连接。

Nginx的优点

高并发高性能

​ 高并发只需要我们对每个连接所使用的内存尽量的少就可以达到,而具有高并发的同时达到高性能就需要非常好的一个设计。那么Nginx可以达到什么样的一个标准呢?比如说现在主流的一些服务器32核64G的内存,可以轻松达到数千万的并发连接,如果是处理一些简单的静态资源请求可以达到一百万的每秒请求数这样的级别。

可扩展性好

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

高可靠性

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

热部署

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

BSD许可证

​ BSD license是指Nginx不只是开源的免费的,而且我们可以在有定制需求的场景下去修改Nginx的源代码,再运行在我们的商业场景下,这是合法的。

Nginx的四个主要组成部分

(1)Nginx二进制可执行文件

​ 由各模块源码编译出的一个文件。

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

(2)Nginx.conf配置文件

​ 控制Nginx的行为。

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

(3)access.log访问日志

​ 记录每一条http请求信息。

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

(4)error.log错误日志

​ 定位问题。

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

​ 这四个部分时相辅相成的,Nginx的二进制可执行文件和Nginx.conf定义了Nginx处理请求的方式。而如果我们想对我们的web服务做一些运营或者运维的分析,需要对access.log做进一步的分析。出现了任何未知的错误或者预期的行为不一致时通过error.log定位根本性的问题。

Nginx的版本发布

​ 每个版本会有mainline主干版本和stable稳定版本。(单数版本为主干版本,双数版本为稳定版本。)

开源免费的Nginx与商业版Nginx Plus

开源版:http://nginx.org

​ 开源版的Nginx在2002年开始开发,2004年发布第一个版本,到了2011年开源版的Nginx发布了1.0这个稳定版,同年Nginx的作者成立了一家商业公司,开始推出Nginx Plus这个商业版的Nginx。

商业版:http://nginx.com

商业版的Nginx在整合第三方模块,还有运营监控以及技术支持上有很多优点。但它有个最大的缺点就是它不是开源的。所以在国内通常会使用nginx.org这个开源版的。

阿里巴巴的Tengine

Tengine的优点就是在阿里巴巴这个生态下,它经历了非常严苛的考验。那么Tengine之所以会存在也是因为它的很多特性领先于Nginx的官方版本,所以Tengine实际上时修改了Nginx的主干代码,它的框架被修改以后Tengine又遇到了一个问题,它没有办法跟着Nginx的官方版本同步的升级。所以Tengine的生态也很丰富,也可以使用Nginx官方版本的各种第三方模块,但是因为它的这一个特性,所以不太推荐大家使用Tengine。

免费OpenResty与商业版OpenResty

开源版OpenResty:http://openresty.org

​ OpenResty兼具了高性能以及开发效率提升的一个特点。

商业版OpenResty:http://openresty.com

​ 商业版的OpenResty主要特点是技术支持相对比较好一些。

(如果没有太多业务需求,那么使用开源版的Nginx就足够了。如果你需要开发API服务器或者开发web防火墙OpenResty是一个很好的选择。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值