`

Nginx反向代理提高网站性能的原理(整理)

 
阅读更多

现在大部分出名的网站都采用的是nginx服务器。nginx服务器性能得到了全球的认可。那么为什么nginx的性能会如此只好呢?本文将通过普通的现实例子来给大家讲明白nginx性能好的原因。

反向代理的主要作用是分发请求。

首先我们要了解系统的性能瓶颈在哪里,一般来说网络io速度和内存io接近,都远高于磁盘io。假定一个接口请求返回数据100k(一般没有这么大,只是假定一个方便计算的值),10个并发请求就是1M,那么全双工千兆网卡(现在还有万兆网卡,但成本太高,应用还不广),可以支撑并发10000个请求,开双网卡,理论的上限就是20000个并发请求。

假设我们收到请求马上就返回,那么最高并发数就是我们上面计算的结果,但是,问题在于,应用服务器做不到马上返回,因为它有很多业务逻辑需要执行处理,比如给用户发推送发短信发邮件,本地磁盘写日志,请求数据库增删改查,调用微信的登录接口等等等等,都附加了各个层面的io。

所以第一层的优化,我们会尽量优化应用服务自身,把发推送发短信发邮件的活推到队列,让别的服务器去干。这个一般用内存队列,io很高。

开多线程或者协程的方式异步写日志,但再怎么优化,磁盘io的上限突破不了,这个io很低。还有更激进的方案,干脆日志也写内存,或者通过内网网络同步到别的服务器上,可以更优化。

数据库复用连接池,减少连接和断开的时间开销。查询语句尽量优化,减少等待数据库操作的时间。当然,再怎么优化,一样有个上限。

调用微信的登录接口等外部接口,这个就更难办了,受制于人,除了tcp连接池复用能稍微优化一点点,完全是取决于外部条件。

木桶理论取最短板,所有这些条件里,总有最慢最落后的那个。假如拖后腿的这个,最佳状态也只能优化到支持2000个并发,那就尴尬了,本来能支持20000个请求的系统,只能用到1/10性能。

( 当然也可以在dns对应不同ip方式分布请求,但是dns层面的分布更复杂更麻烦,因为dns缓存的原因,请求也不能均匀分布,而且ip地址也是越来越稀缺的资源,没有背景没有后台的,搞这么多ip也不容易啊 )

单个公网ip算一个节点的话,这个节点本来的潜力是响应20000个并发请求,实际在应用层面只能到2000并发,潜力还未发掘啊。这个时候,就是反向代理起到用武之地的时候了。

首先一个反向代理的服务器抛开所有业务层的东西,只单纯的接下请求再返回,那么可以支持到20000并发了。接下来应用层面谁来处理?找来10个小弟,转发给他们,每人2000正好。这样这个节点系统虽然性价比只有10/11,但是性能潜力好歹挖尽了。

这就是反向代理的作用了。

打个比方来说:

把服务器想象成饭店,没有Nginx的情况,就如同每一个厨师服务一桌顾客,从点菜开始到炒菜到上菜到收银,有n个厨师就只能服务n桌顾客。有了Nginx的话,Nginx就成了强大的服务员,把招呼,点菜、上菜和收银的活都做了,厨师只需要专心炒菜就行。这样饭店的效率就大大提高了。

技术一点的话:

请求如果直接发到同步处理的后端,那么从收到请求到把响应发出去这段时间,一个进程的资源就被占用了(比如Apache的prefork模式)。在慢连接的情况下,这个进程除了处理之外的大多数时间基本上都耗费在了无意义的等待上。Nginx在这方面的优势就在于它的异步非阻塞模型。这意味着Nginx可以通过基于事件的方式同时处理和维护多个请求,而后端就只需要去做逻辑计算,节约了等待时间去处理更多的请求。 
反向代理提高网站性能主要通过三个方面:

  1. 反向代理可以理解为7层应用层的负载均衡,使用负载均衡之后可以非常便捷的横向扩展服务器集群,实现集群整体并发能力、抗压能力的提高。
  2. 通常反向代理服务器会带有本地Cache功能,通过静态资源的Cache,有效的减少后端服务器所承载的压力,从而提高性能
  3. http压缩,开启压缩后,网络流量传输减小,相同带宽下可以服务更多用户

最后还有一个TCP链接复用,不过说实话,如果不是商用的负载均衡器,一般没这个功能。
其实,反向代理还可以有效的隐藏隔离内部服务器,提高了安全性,这也算是提高性能的一个方面吧

分享到:
评论

相关推荐

    nginx核心讲解--非常不多讲解nginx书籍

    Nginx是一款高性能的HTTP和反向代理服务器,也被广泛用作电子邮件(IMAP/POP3)代理服务器。Nginx由俄罗斯程序员Igor Sysoev创建,最初用于Rambler公司(一家俄罗斯门户网站)。Nginx以其高性能、稳定性、丰富的功能...

    nginx面试题.pdf

    10. 如何在Nginx上配置反向代理? 11. Nginx有哪些模块? 12. 如何在Nginx配置文件中实现重定向? 13. Nginx可以用作缓存服务器吗?如果可以,如何配置缓存? 14. Nginx可以处理哪些类型的文件? 15. Nginx可以监控...

    agentzh 的 Nginx 教程(版本 2016.07.21)整理成pdf 添加书签

    - **基于Nginx的反向代理**:讲解Nginx作为反向代理服务器的功能。 - **Nginx与Memcached**、**Nginx与Redis**、**Nginx与MySQL**、**Nginx与PostgreSQL**:介绍Nginx与其他系统的集成方式。 #### 结论 通过...

    深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书.pdf

    Nginx是一款高性能、反向代理、负载均衡的Web服务器,因其事件驱动的异步非阻塞模型而备受赞誉。其主要特点包括高并发处理能力、低内存占用和出色的稳定性。Nginx在互联网行业中广泛应用,常用于网站前端作为静态...

    nginx网页配置工具 v3.7.5.zip

    Nginx是一款高性能的HTTP和反向代理服务器,常被用于互联网上的网站和应用程序的负载均衡、静态内容服务以及反向代理。Nginx以其轻量级、高并发、低内存消耗的特性而闻名,它在处理静态文件和反向代理方面表现出色,...

    自己整理的Ngnix相关学习资料.7z

    Nginx是一款高性能的HTTP和反向代理服务器,同时也是一款邮件代理服务器。由俄罗斯的Igor Sysoev开发,因其高效、稳定、丰富的模块化设计而备受推崇。Nginx以其事件驱动的异步非阻塞模型,在处理高并发请求时表现...

    前端面试题整理:Nginx、webpack、Html&Css、Vue、JavaScript.zip

    - **反向代理**:通过Nginx将请求转发到不同的后端服务器,实现负载均衡,提高服务可用性。 - **静态资源处理**:Nginx能高效地处理静态文件(如HTML、CSS、JS),减轻后端服务器压力。 - **URL重写**:通过配置...

    中间件工具文件整理包程序

    由于其高效能和丰富的功能,Redis常被用于缓存服务,提高网站的响应速度和整体性能。 接下来是Nginx,这是一款高性能的HTTP和反向代理服务器,同时也是一款邮件代理服务器。Nginx以其事件驱动的、异步非阻塞的架构...

    张孝祥正在整理Java就业面试题大全

    9. **其他技术**:如Nginx反向代理与负载均衡,Docker容器化技术,Git版本控制,Maven或Gradle构建工具,单元测试和持续集成工具Jenkins等。 张孝祥老师整理的这份Java就业面试题大全,旨在帮助求职者全面了解和...

    常用文档java5.rar

    Nginx是一款高性能的HTTP和反向代理服务器,常用于负载均衡、静态资源处理等场景。《深入理解Nginx.PDF》可能涵盖了Nginx的工作原理、配置、模块开发及性能优化等内容。了解Nginx的配置指令和反向代理、负载均衡...

    tomcat8+memcached共享session(套装)

    "Nginx+Tomcat+Memcached部署.docx"则可能详细说明了如何在Nginx反向代理下,结合Tomcat和Memcached进行部署,以实现Session的共享。 【标签】"tomcat8"指的是Apache Tomcat 8版本的Java应用服务器,"memcached"是...

    开发资料整理.rar

    9. **Nginx课程笔记.pdf**:Nginx是一个高性能的HTTP和反向代理服务器,以其高效的并发处理能力而闻名。笔记可能涵盖Nginx的配置、负载均衡、缓存机制、反向代理以及与后端服务(如PHP、Tomcat等)的整合等内容。 ...

    轻松学会Linux入门教程.txt

    - **URL重写与反向代理**:熟悉Nginx中的location匹配规则、rewrite规则等高级功能,以及如何设置反向代理。 以上是根据提供的课程目录整理出的主要知识点,这些内容不仅覆盖了Linux系统的基础操作,还包括了数据库...

    Java面试问答,免费下载

    9. **Nginx**:Nginx是一款高性能的Web服务器和反向代理服务器,常用于负载均衡和静态资源服务。了解Nginx的基本配置、反向代理、负载均衡策略是必要的。 10. **Kafka和RabbitMQ**:两者都是消息队列系统,用于解耦...

    精选128.docx

    20. **Nginx的作用**:Nginx作为反向代理服务器,负责负载均衡、静态资源处理、SSL加密等功能,提高系统性能和可用性。 21. **微服务用户信息获取**:通常通过服务发现机制,从统一的用户服务获取用户信息。 22. *...

    java常用技术面试问题整理

    - **负载均衡**:Nginx的反向代理和负载均衡配置,负载均衡策略(轮询、权重等)。 - **缓存**:Redis的数据类型,过期策略,主从复制,哨兵系统,Cluster集群。 4. **框架问题**: - **Spring框架**:依赖注入...

    个人整理的3年以上JAVA开发面试资料

    1. **硬件层面**:可以通过增加服务器的网络带宽、采用负载均衡技术(例如使用Nginx或Apache作为反向代理服务器)等方式来提升整体的吞吐量和响应速度。 2. **软件架构层面**:采用缓存技术(如Redis或Memcached)...

    秒杀系统设计与实现.互联网工程师进阶与分析

    1. 高并发处理:利用负载均衡技术(如Nginx)、反向代理和缓存(如Redis)分摊流量,减轻后端压力。 2. 防止超卖:使用预扣库存策略,先扣减库存再发起支付请求,避免数据一致性问题。 3. 限流与熔断:通过Hystrix等...

    精选_嵌入式LINUX平台网络聊天室设计_源码打包

    例如,他们可能使用Nginx或Apache作为反向代理和负载均衡器,以处理多个并发的客户端请求。此外,为了确保服务的稳定性,可能会集成日志系统(如syslog)进行错误追踪,以及使用工具如Prometheus和Grafana进行性能...

    最近面试java后端开发的感受.docx

    7. **负载均衡与反向代理**:如Nginx的配置和使用,包括lua脚本设置规则、session粘滞、集群设置等。面试官会评估候选人对网络请求处理的理解和实践经验。 8. **分布式技术**:面试官通常期望候选人不仅了解单机版...

Global site tag (gtag.js) - Google Analytics