强大的nginx反向代理异步传输模式(原理)[通俗易懂]

强大的nginx反向代理异步传输模式(原理)[通俗易懂]sudone.com在nginx的反向代理介绍中,提到了异步传输模式并提到它可以减少后端连接数和压力,这是为何?下面就来讲解下传统的代理(apache/squid)的同步传输和nginx的异步传输的差异。看图:         squid同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。nginx异步传输:浏…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

sudone.comnginx的反向代理介绍中,提到了异步传输模式并提到它可以减少后端连接数和压力,这是为何?下面就来讲解下传统的代理(apache/squid)的同步传输和nginx的异步传输的差异。
看图:

强大的nginx反向代理异步传输模式(原理)[通俗易懂]

 

 

 

 

 

 

 

 

 

squid同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。
nginx异步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端, 后端处理完之后把数据返回到nginx上,nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发 送到浏览器。
那么这到底有什么好处呢?

1) 假设用户执行一个上传文件操作,因为用户网速又比较慢,因此需要花半个小时才能把文件传到服务器。squid的同步代理在用户开始上传后就和后台建立了连 接,半小时后文件上传结束,由此可见,后台服务器连接保持了半个小时;而nginx异步代理就是先将此文件收到nginx上,因此仅仅是nginx和用户 保持了半小时连接,后台服务器在这半小时内没有为这个请求开启连接,半小时后用户上传结束,nginx才将上传内容发到后台,nginx和后台之间的带宽 是很充裕的,所以只花了一秒钟就将请求发送到了后台,由此可见,后台服务器连接保持了一秒。同步传输花了后台服务器半个小时,异步传输只花一秒,可见优化 程度很大。

2) 在上面这个例子中,假如后台服务器因为种种原因重启了,上传文件就自然中断了,这对用户来说是非常恼火的一件事情,想必各位也有上传文件传到一半被中断的 经历。用nginx代理之后,后台服务器的重启对用户上传的影响减少到了极点,而nginx是非常稳定的并不需要常去重启它,即使需要重启,利用kill -HUP就可以做到不间断重启nginx。

3) 异步传输可以令负载均衡器更有保障,为什么这么说呢?在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,假如用 户发起一个请求,结果该请求分到的后台服务器刚好挂掉了,那么这个请求就失败了;而nginx因为是异步的,所以这个请求可以重新发往下一个后台,下一个 后台返回了正常的数据,于是这个请求就能成功了。还是用用户上传文件这个例子,假如不但用了nginx代理,而且用了负载均衡,nginx把上传文件发往 其中一台后台,但这台服务器突然重启了,nginx收到错误后,会将这个上传文件发到另一台后台,于是用户就不用再花半小时上传一遍。

4) 假如用户上传一个10GB大小的文件,而后台服务器没有考虑到这个情况,那么后台服务器岂不要崩溃了。用nginx就可以把这些东西都拦在nginx上, 通过nginx的上传文件大小限制功能来限制,另外nginx性能非常有保障,就放心的让互联网上那些另类的用户和nginx对抗去吧。
用异步传输会造成问题:
后台服务器有提供上传进度的功能的话,用了nginx代理就无法取得进度,这个需要使用nginx的一个第三方模块来实现。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194048.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 深度学习CNN算法原理

    深度学习CNN算法原理深度学习CNN算法原理一卷积神经网络卷积神经网络(CNN)是一种前馈神经网络,通常包含数据输入层、卷积计算层、ReLU激活层、池化层、全连接层(INPUT-CONV-RELU-POOL-FC),是由卷积运算来代替传统矩阵乘法运算的神经网络。CNN常用于图像的数据处理,常用的LenNet-5神经网络模型如下图所示:       该模型由2个卷积层、2个抽样层(池化层)、3个全…

  • 谷歌(google)广告尺寸大小列表

    谷歌(google)广告尺寸大小列表

    2021年11月17日
  • android插件化-apkplugdemo源代码阅读指南-10

    android插件化-apkplugdemo源代码阅读指南-10

  • 在 pycharm中安装pytorch

    在 pycharm中安装pytorch参考文章:在pycharm中安装pytorch:https://blog.csdn.net/weixin_43183872/article/details/83473009torch包在pycharm里面的导入问题:https://blog.csdn.net/qq_31187803/article/details/79601643…

  • NFV基本概念_nf缩写是什么意思

    NFV基本概念_nf缩写是什么意思1.NFV相关基本概念NFV(网络功能虚拟化)SDN(软件定义网络)一个NFV的标准架构包括NFVinfrastructure(NFVI),MANO(ManagementandOrchestration)和VNFs,三者是标准架构中顶级的概念实体。NFVI(NFVInfrastructure)包含了虚拟化层(hypervisor或者容器管理系统,如Docker,以及vSwitch…

  • Zookeeper分布式锁实现(zk怎么实现分布式锁)

    如题,使用zookeeper实现分布式锁时隔多日又来水文章了,距离上一篇好像过去很久了,现在回头看看之前写的那些东西,只能称之为“垃圾”。今天分享一个基于zookeeper实现的分布式锁简单案例,此案例仅实现了分布式锁的功能,代码优化等一概不扯。下面先来聊聊其实现的核心思想:首先用到zookeeper中的两个重要知识点:1、zookeeper中的节点类型:临时节点、临时有序节点、持久节点、持久有序节点。临时节点跟session关联。2、zookeeper的watch。以上两点就是实现分布式锁的核

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号