电力技术

当前位置:变压器 > 电力技术 >

Nginx反向代理为什么可以提高网站性能?

发布时间:2023-12-06 01:05 作者:admin 来源:未知 点击: 标签: 可以 为什么 网站 性能 提高 代理 反向 Nginx

  回答·阅读

  从能够提高网站性能这点来说,当然是由于Nginx反向代理与负载均衡的超强优势啦。

  与Apache Tomcat比起来,Nginx可以承受的qps要大得多,这里除了底层原理的差异,与Nginx不负责处理业务逻辑,只负责接受转发请求的特点有分不开的关系。

  反向代理可以用于实现分布式,即对外虽然是一个完整的服务,但是其实这个服务对内是由部署在多台Tomcat的子服务共同组成的。

  举个例子,一个购物网站,分为查询商品,下单,结算三个模块(极简举例),如果这三个子服务都写在同一个Tomcat上,那么所有的请求就都会发给这一台Tomcat。

  这样的部署有一个隐患:假设双十一之前,这个网站的压测没有做好,导致双十一当天0点的时候,结算的人太多,qps超过Tomcat可承受的上限,服务崩溃了,那么这时候,不仅是结算的人无法打开网页,连那些想查询商品,把商品放入购物车的用户也会发现打不开网页了。即此时这个网站的服务由于单个子服务的原因,全线崩溃了。

  如果使用反向代理功能,就能从两个方面来缓解这个隐患:

  1 Nginx会将查询,下单与结算的请求分别发送给三个服务器,那么对于单独的服务器来说,瞬时间的请求量就会少很多,减少了挂掉的风险

  2 就算挂掉了,由于Tomcat是分开的,挂掉其中一个,另外两个依然可以运行,不影响用户其他操作。

  因此,我们说,反向代理也是一种提升网站性能的方式。

  只不过,这里的网站指的其实是用户侧感知到的整体的服务,而不是具体的Tomcat server。

  以上是我的浅见,欢迎各位在下方与我沟通交流。

  我是苏苏思量,来自BAT的Ja开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。

  ·

  其实这个问题是不严谨的,首先我们需要明确两点:

  1)很多Web服务器或容器都可以实现反向代理;

  2)反向代理和网站性能的提升没有必然关系!

  为什么现在很多人认为用Nginx这类Web服务器做个反向代理就能提高网站性能了呢?其实,反向代理和网站性能并没有必然关系,有时候用反向代理的确可以提高网站性能;但如果反向代理使用不当,反而会降低网站性能。

  之所以很多人误认为反向代理能提升网站性能,究其原因是因为现在很多大型互联网平台架构都会采用反向代理这种模式,而且很多技术类书籍文章也会提到反向代理,所以造成了大家的这种误解。

  反向代理是相对于正相代理而言的,它是作用于服务器商的。

  在没有使用代理之前,客户端向服务端请求时,简单而言就是:客户端 => 服务端。

  如果上面的理论描述不太理解也没关系,举个简单的例子。比如现在很多公司都有客服电话,用户打这个电话一般是先经过前台的,再由前台进行转发至某个分机,这个前台发挥的作用就和反向代理一样。

  反向代理最终解决的问题是:隐藏了真实的服务端!而正向代理则是为了隐藏真实的客户端。

  如上所述,单一的反向代理并不能实际提升网站性能,反而会影响网站性能(因为多了一个中间转发层)。

  对于中大型网站架构,反向代理都是配合负载均衡来使用的,这样才能提升网站性能。多个后端服务集群统一由反向代理服务器进行请求分发,这样就避免了单台服务器的性能瓶颈影响整个平台的稳定。

  ·

  题主这个问题的想法应该是觉得加上反向代理后请求路径会加上,因此请求的处理时间会增加,性能会有下降。

  如果从单个请求来说,的确如此,但仅仅有几毫秒的影响,对于普通的人来说几乎无法感知到。从另外一方面说,一个网站不能仅仅考虑单个请求的处理情况,而应该从整体上进行考虑。

  Nginx做反向代理最为重要的一点是负载均衡。也就是将客户端的请求负载均衡到后端的若干台服务器上。如下图所示,一个Web网站实际业务服务器的数量可能是3台,或者更多,让后通过一个反向代理作为出口。

  为什么要做负载均衡,我们从如下几方面分析一下:

  1. 负载类型,我们知道对于一个网站,负载包括CPU负载、磁盘负载和网络负载等内容,以CPU负载为例,网站的动态脚本需要进行运行解析,生成最后的页面。一台服务器计算能力有限,因此,必然需要多台服务器形成集群,提高整体的计算能力。

  2. 系统高可用,服务器故障在所难免,即使在一台服务器能够胜任工作,但有可能存在任何故障,比如极端的宕机,或者网卡故障和硬盘故障等。如果服务器由于某些故障导致反应极慢,这样网站就会变得很慢。但如果有反向代理,并且有故障诊断,这样就可以让正常的服务器处理请求,对用户来说,就是性能提升。

  因此,即使在不做缓存和静态文件的情况下,虽然请求路径加长了,单个请求的耗时可能会增加,但从整体上来说,还是会很大的提升网站的性能。

  ·

  反向代理的方式主要是为了缓解繁忙服务器的负担,将Cache部署在服务器前面,将自己的内容与服务器保持同步,当收到用户的请求时,直接用Cache中的内容进行回复,从而减轻网络服务器的负担。

  反向代理设备提高了前端Web服务器处理客户连接的能力,为电子商务、后台生成的HTML新闻公布、软件下载等提供了快速的服务。这种部署方式经常用于静态Web内容占很大比例的环境中。大型ISP 为了加速网络的响应都会架设大量的前置高速缓冲服务器(forward proxy cache server),但是,对于无法识别内容的缓存集群来说,所有的缓存服务器节点都必须保存整个被访网络的全部内容(理论上,所有的网络中的站点都被缓存过)。

  显然,缓存服务器的存储能力无法满足这一点要求,势必导致大量的页面无法被及时缓存而进行缓存更新,用户访问网络的速度反而变慢。为了解决这一问题,必须利用到面向URL内容的集群调度技术,可以设定每一台集群节点负责部分URL的缓冲请求的任务,由于每个节点所缓存的内容完全不同,集群整体构成一个大的内容超集,提高了总体存储能力。在Cache集群缓冲命中率的提高的前提下,也大大降低了用户请求的页面出现缺失的情况,改善了集群的吞吐能力和性能。

  反向代理负载均衡能以软件方式来实现,如Apache mod_proxy、ISA proxy等,也可以在高速缓存器、负载均衡器等硬件设备上实现,例如硬件解决方案:基于软件技术的反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能。

  由于网络外部用户不能直接访问真实的服务器,同时也就具备额外的安全性。其缺点主要表现为反向代理是工作在OSI参考模型第七层(应用层),所以就必须为每一种应用服务专门开发一个反向代理服务器。以硬件技术为主的解决方案多数将各种应用平台集成到一台或多台设备中,在功能强大的同时价格也相对较高。以思科提供的Cisco缓存方案为例,WCCP(Web缓存通讯协议)是构成缓存方案的核心,WCCP 2被承载与Cisco Cache Engine 500系列之上。

  NGINX当反向代理,只是能把请求先收下来,再排队到后端业务,但如果后端业务的处理能力低于用户请求量,那其实没啥用。

  就像后端处理的的水管太小,你不管换多好的阀门,都不能加快的,只能算是有个保护,不至于把后端水管压爆了。

  

Nginx反向代理为什么可以提高网站性能?

  

Nginx反向代理为什么可以提高网站性能?

  

Nginx反向代理为什么可以提高网站性能?

相关文章Related Articles

  • 丰田denso是汽油车吗?dens

    2023-12-06

    是。 DENSO株式会社,中文名电装公司,是世界第二大汽车零部件公司,日本第一,是丰田配套生产厂家。电装提供汽车前沿技术、系统(System)以及部件的...

  • 电机堵转试验原理?电机堵

    2023-12-06

    电机堵转是电机在转速为0转时仍然输出扭矩的一种情况,一般都是机械的或者人为的。由于电机负载过大、拖动的机械故障、轴承损坏扫膛等原因引起的电...

  • 怎样用51单片机控制伺服电

    2023-12-06

    ,老实说,不用伺服驱动器基本不可能,因为单片机要直接驱动一部交流伺服电机需要大量数字信号处理(乘除,三角变换).如果系统里包含伺服驱动器,你有两个...

  • 为什么可以忽略同步电机转

    2023-12-06

    单相同步发电机转子损耗主要是铜耗(转子励磁绕组的电阻损耗),转子铁耗较小可以忽略不计。如果电机是中频电机的话转子铁耗(转子铁芯中的磁滞、涡...