关于大型网站技术演进的思考(十八)--网站静态化处理—反向代理(10) 【架构师的想法:正向代理和反向代理的区别】

news/2024/5/11 12:27:03/文章来源:https://blog.csdn.net/buster2014/article/details/47406249

文章来源:http://www.cnblogs.com/sharpxiajun

架构师:夏天的森林


反向代理也是一种可以帮助实现网站静态化的重要技术,今天我就来讲讲反向代理这个主题。那么首先我们要了解下什么是反向代理。和反向代理相对应的是正向代理,正向代理也就是我们常说的代理服务,正向代理是非常常见的,例如在某些公司里我们想使用互联网,那么我们就得在浏览器里设置一个代理服务器,通过代理服务器我们才能正常使用互联网,而这个代理服务器就是一个正向代理服务器。正向代理更加让人熟悉的使用场景估计还是在FQ技术里的使用,我们使用一个放置在国外的代理服务器来访问那些在国内无法正常访问的网站,这其实也是在使用一个正向代理服务。

  其实不管是正向代理还是反向代理,这两个概念的定义都是以浏览器侧为基准进行的,正向代理是代理浏览器来访问互联网,反向代理是指代理不再是代理浏览器侧了,而是反过来代理浏览器需要访问的应用服务器。那为什么我们要使用正向代理服务器了?答案当然不是为了FQ了,下面我来列举些实例来说明这个问题了。

  例如公司里使用代理服务器主要是为了安全的考虑,很多公司内部都有自己的局域网,一般我们称之为内网,内网里有公司的各种资源,如果公司员工的电脑随意连接到互联网,假如碰到那些别有用心的黑客,通过攻击员工的工作电脑截取了公司重要的文件资料,那样就会造成公司的重大损失,正向代理除了能防范外部的黑客攻击外还能监控和控制公司内部员工将公司重要文件通过互联网传递给不恰当的人,因此公司让员工使用代理上网基本都是出于安全的角度来考虑的。

  正向代理的合理使用还能帮助一些企业提升自己产品的核心竞争力,例如在移动端有一款非常流行的浏览器,它之所以非常受用户的欢迎,是因为使用该浏览器上网速度比其他浏览器明显的快多了,那么这款浏览器是如何做到这点的呢?奥秘就是这家公司为自己的浏览器对应建立一个十分强大的代理服务器集群,用户使用该浏览器访问网站时候用户首先访问的是该公司的代理服务器,而这些代理服务器使用缓存技术缓存了海量的网站信息,再加上使用一些web加速的技术例如CDN技术,这就让该浏览器访问网站的效率明显快于其他浏览器。

  反向代理和正向代理从技术角度上基本上是一致的,区别主要是代理的内容不一样了,反向代理代理的是应用服务器。反向代理技术也基本上是互联网公司的一个标配技术,但是反向代理能否正确使用,能否更进一步的发挥它的实用价值,我觉得并不是所有公司都能做好的,下面我来总结一下反向代理的使用目的吧,具体如下:

  使用目的一:反向代理可以隐藏真实的应用服务器。该目的属于安全的范畴,反向代理隐藏真实的应用服务器,那么就可以让别有用心的黑客很难掌握正确的应用服务器,从而增加黑客的攻击难度。

  使用目的二:反向代理可以实现负载均衡的功能,例如在java的web开发里有一种很简单的实现集群的手段,这个手段就是使用apache加上tomcat的组合,用户请求先到达前置的apache服务器,apache再使用负载均衡策略将请求分配给后台不同的tomcat服务器上。

  使用目的三:反向代理可以起到动态调节应用服务器并发数的目的,一般用作反向代理的服务器都是静态资源服务器,这样的服务器在并发处理能力上要远强于后台的web应用服务器,那么可以通过控制web应用服务器前置的反向代理服务器,这样就可以动态调节后台服务的负载的大小,这个做法的好处可能很多朋友都不太了解,这里我列举个例子,一个网站最需要稳定性的部分是哪个部分呢?很多朋友会说是数据库,的确数据库是最重要的,因为数据库做分布式很难,很容易形成单点故障,要是数据库挂了基本一切都没法玩了,那么除了数据库之外还有别的吗?当然有,那就是用于处理业务的应用服务器了,应用服务器如果做了集群,集群中其中一台服务器挂了其影响面会比数据库挂掉低多了,但是一个网站的做业务处理的应用服务器挂掉,对公司的损失还是很大的,而web应用服务器前面的用作反向代理的静态资源服务器挂掉问题就会小多了,至少不会产生公司业务无法正常完成的事情了,因此当网站负载过高,让过载的请求被反向代理拦截或者阻止,这对应用服务器的稳定性提升有莫大的好处。当然反向代理调节应用服务器的负载水平的用途不仅仅这些,有兴趣的朋友可以在网络上找找相关的介绍。

  使用目的四:反向代理可以缓存静态数据,一般用作反向代理的服务器都是使用像apache或者是ngnix这样的静态资源服务器,因此我们可以把web应用里的静态资源缓存在反向代理服务器上,从而达到提升请求处理的速度问题。反向代理的这个功能就和本系列的主题网站静态化处理切合了。

  分析完反向代理的使用目的后,我们现在将反向代理应用到项目里,这里应用的一个前置限定就是将反向代理应用到网站静态化的处理之上,首先是第一个应用方式,如下图所示:

第一种反向代理应用方式就是让反向代理和应用服务器一一对应,也就是每台应用服务的部署服务器上都对应部署一台反向代理服务器,这么做有怎样的好处呢?首先我们来讲第一个好处,如果我们将网页做了动静分离,那么反向代理服务器就可以负责对请求中的静态资源访问进行处理,同时反向代理还可以承担动静资源整合的目的。这里要特别说明下,前文里我说道动静资源会因为我们使用的动静策略而发生转化,那么有些动态内容在一定条件被转化为静态资源后,我们可以将这些做了转化的静态资源在服务器上缓存起来,这个时候上图展示的架构模型就会发生变化,如下图所示:

我们看到反向代理服务器和应用服务器之间会形成一个cache层,反向代理访问cache层的效率会比直接访问应用服务器要高的多,这等于是给应用服务器做了一个加速操作,同时通过缓存我们可以减少应用服务器的运算压力,从而达到提升应用服务器性能的目的。以前有朋友问我这么做会不会增加应用服务器的压力,因为一台服务器上部署了两台可以处理web请求的服务器,那么它们之间一定会有发生冲突的时候,不过我想产生冲突肯定是我们没有很好的处理二者关系所致,所以我们要理清在同一台服务器上部署反向代理和应用服务器后,它们之间的关系到底是怎样的?

其实反向代理和应用服务器从物理形态角度上它们是两个不同的东西,但是二者在逻辑上其实是一个整体,它们共同完成一个逻辑性的应用服务器的功能,只不过二者因为应用场景不同而形成了一种分工合作的关系,反向代理服务器主要完成对静态资源请求的处理,而应用服务器则是负责业务逻辑的处理,它们最终形成一个强大的合力使得整体的逻辑性应用服务器的性能得到显著的提升。

除此之外,这个反向代理还可以发挥动态调节应用服务器的并发数的目的,但是上面的技术方案却没有发挥反向代理的负载均衡以及安全性这两个方面的作用。为了让反向代理四个使用目的得到充分的发挥,那么我们该如何来做了?

方法很简单就是把反向代理的部署地点从应用服务器所在的物理服务器上迁移出来,放到一台独立的物理服务器上,但是这个做法会有性能上的损失,同时还会增加整个技术架构的复杂性。为什么性能会损失呢?因为原来的反向代理服务器和应用服务器部署在同一个物理服务器上,那么它们之间的通讯都是以内存共享的方式进行的,这样的通讯效率是非常高,现在换成了通过网络通讯进行沟通,而网络通讯是IO设备里效率最差,可靠性最差的,因此单独部署反向代理服务器或多或少都会造成一定性能的损失。

为什么说单独部署反向代理会增加整个网站技术架构的复杂性了?我们把反向代理服务器单独部署,那么单独部署时候我们还会是使用一一对应的策略吗?先不谈这么做,从技术和业务角度的好处和坏处,但从成本这个考虑就是会让很多公司望而却步,因为这个做法就会导致用于部署应用服务器的成本翻倍的增加,而增加的服务器用于反向代理,这样的做法怎么体会都不是觉得物有所值,再说用于反向代理的静态资源服务器本身处理请求的并发能力是普通应用服务器的数百倍,一一对应本身也没有完全发挥反向代理服务器的潜力,因此最好的解决方法就是把反向代理服务器做成一个反向代理服务器集群,做成集群问题又来,集群里每台反向代理缓存的数据是不是要保持一个同步了?这就好比处理应用服务器的session同步问题,如果真的这么做会不会导致反向代理服务器上缓存大量使用率不高的数据从而导致缓存的利用率很差,同时同步操作本身也会影响到反向代理集群的性能,所以要设计一个好的反向代理集群是一件十分复杂的事情,其实合理的反向代理集群的做法就是在集群里在进行分组,每个分组应该是和后端的SOA服务相匹配,这个时候反向代理集群的效率才能得到最大的发挥,同时资源利用率也会更加的合理。其实使用反向代理集群方式,也会给生产部署造成麻烦,如果网站进行了静态化处理,那么反向代理需要承担对静态资源的处理操作,这个时候反向代理和对应的应用服务器结合起来才能形成一个完整的应用服务器,但是现在我们将一个完整的逻辑应用服务器分开部署了,那么当我们发布新应用的时候就得面临更加复杂的情况,这就增加了部署和运维的风险和难度。

我如此批评单独部署反向代理的问题,但是我并不是说这种做法完全不可取,而是想告诉大家这种做法其实是一种高级的做法,但是也是一个复杂的做法,要做好这个集群是很麻烦的一件事情的,我觉得只有当我们的网站业务量和请求量很大的时候,同时原有方案出现了瓶颈时候可以认真考虑反向代理集群方案的实现,不过将反向代理形成集群会给网站的安全性带来莫大的好处,反向代理可以隐藏后台的应用服务器,这种隐藏就是客户端只需要访问代理服务器即可,应用服务器对外都是以反向代理来展示的,但是如果反向代理和应用服务器一一对应,那么恶意黑客找准了某台反向代理服务器后,对这个反向代理服务器进行反复的攻击,那么这个攻击也就等于攻击与之对应的应用服务器,这就导致反向代理隐藏真实应用服务器的作用就没有得到有效的发挥,而集群这块就可以很好的处理这个问题,不过我们如果觉得使用集群代价太高,我们也有变通的方法,那就是在所有逻辑应用服务器前面再放置一个反向代理服务器,这个反向代理服务器不再承担缓存的功能,而只是用来做负载均衡和安全处理,这样一一对应的策略安全性也可以得到保证,不过如果公司技术能力好可以考虑使用LVS这种软件化的负载均衡技术方案,假如公司还很有钱还可以考虑使用更加高级的硬件负载均衡设备例如F5设备。

如果我们网站除了使用网站静态化技术还使用了前后端分离技术,当然这个前后端分离技术应该是使用nodejs的前后端分离技术,那么nodejs应该放置在生产部署的什么位置上了?上篇文章里我曾列举了一个nodejs的应用实践场景,在这个实践场景里我曾经提到如果在原有的网站生产架构下引入nodejs会增加一个请求处理环节,而nodejs使用主要是为了满足前后端分离而非增加网站性能,因此增加的环节可能会让请求处理的性能下降,因此我最后提出一种变通手法,就是nodejs项目发布时候编译源代码,然后将编译出的javascript和html文件干脆推移到浏览器端处理,这样就变相形成了前端MVC框架,这个做法总是有点不伦不类的意味,假如我们真的想把nodejs引入到应用生产的网络架构里,我们不希望无端的增加请求处理环节,那么最好是让nodejs服务器替换某个部分。按照这个思路思考,那么我觉得nodejs在生产的引入最好是和反向代理相关,最简单的方式就是让nodejs和反向代理一一对应,这样就可以很好的降低引入nodejs带来的问题,当然复杂点的就是反向代理集群对应的应用服务器应该是nodejs的应用服务器,而不是用来做业务处理的业务级别的应用服务器。

不管怎么说,我认为在网站静态化方案里我们一定要考虑反向代理的运用,如果静态化技术方案里没有反向代理的身影,那么这个网站静态化处理可能很难达到我们预期的效果。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_798142.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js对cookie的操作,包括清除网站所有cookie

2019独角兽企业重金招聘Python工程师标准>>> function foreach() {var strCookiedocument.cookie;var arrCookiestrCookie.split("; ");for(var i0;i<arrCookie.length;i){var arrarrCookie[i].split("");if(arr.length>0)DelCookie(arr[…

如何拒绝搜索引擎收录自己的网站?

参考1&#xff1a;https://zhidao.baidu.com/question/543972314.html 参考2&#xff1a;https://jingyan.baidu.com/article/e8cdb32b45b3e837042bad7f.html 请复制以下两行代码&#xff1a; User-agent: * Disallow: / 把上面的两行代码保存为Robots.txt文件&#xff0c;放…

网站安全狗V3.2版 增加URL地址全检测功能 保护网站安全

文章来源&#xff1a;http://my.oschina.net/safedog/blog/260885 原 网站安全狗V3.2版 增加URL地址全检测功能 保护网站安全 发表于2年前(2014-05-05 18:15) 阅读&#xff08;134&#xff09; | 评论&#xff08;0&#xff09; 0人收藏此文章, 我要收藏赞012月12日北京OSC源…

python之web开发二:用Python+Django在Eclipse环境下开发web网站【第一个开发的小案例,按照文章可以成功开发web】

http://www.cnblogs.com/linjiqin/p/3595891.html 用PythonDjango在Eclipse环境下开发web网站 一、创建一个项目 如果这是你第一次使用Django&#xff0c;那么你必须进行一些初始设置。也就是通过自动生成代码来建立一个Django项目--一个Django项目的设置集&#xff0c;包含了…

服务器做jsp网站教程视频,linux jsp服务器 视频教程

linux jsp服务器 视频教程 内容精选换一换本节介绍如何构造REST API的请求&#xff0c;并以调用IAM服务的获取用户Token说明如何调用API&#xff0c;该API获取用户的Token&#xff0c;Token可以用于调用其他API时鉴权。您还可以通过这个视频教程了解如何构造请求调用API&#x…

用户评论与问答:对熊掌号SEO的影响!

在传统SEO中&#xff0c;我们经常强调用户体验度&#xff0c;包括&#xff1a;页面的活性与内容质量&#xff0c;它往往是高排名的一个典型代表&#xff0c;简单举例&#xff1a;①博客评论&#xff1a;提高页面更新频率&#xff0c;增强搜索引擎信任度。②问答页面&#xff1a…

Lambda架构与推荐在电商网站实践

Lambda架构与推荐在电商网站实践 2015-11-24 16:36| 发布者: 炼数成金_小数| 查看: 14636| 评论: 0|原作者: 王富平|来自: 高可用架构 摘要: 高可用架构分享及传播在架构领域具有典型意义的文章&#xff0c;本文根据王富平分享记录。转载请注明高可用架构公众号ArchNotes。王富…

网站常见问题1分钟定位 - 如何使用阿里云ARMS轻松重现用户浏览器问题...

客户投诉不断&#xff0c;本地却无法重现&#xff1f; 页面加载较慢是用户经常会反馈的问题&#xff0c;也是前端非常关注的问题之一。但定位、排查解决这类问题就通常会花费非常多的时间&#xff0c;主要原因如下&#xff1a; 页面是在用户端的浏览器上加载执行&#xff0c;复…

部署社交网站

部署社交网站 案例概述 公司的社交网站采用PHP语言开发&#xff0c;为了管理PHP程序员开发的代码&#xff0c;上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台上&#xff0c;前端为Nginx&#xff0c;通过fastcgi协议访问后端的PHP服务器。为了保证…

网站被黑跳转到其他网站的解决办法

前几天&#xff0c;有一客户向我们SINE安全公司反映&#xff0c;网站在google上的推广已拒登&#xff0c;说什么网站存在恶意软件或垃圾软件&#xff0c;导致google广告无法上线&#xff0c;还发现网站从google搜索点击进去会直接跳转到其他网站上&#xff0c;直接输入网址不会…

接入高防后为什么有一些网站,APP等会出现延迟,打开速度慢等问题?...

我们常见的一些网站&#xff0c;APP等用户在接入高防后&#xff0c;会出现延迟&#xff0c;打开速度慢等问题&#xff0c;假如出现这样的情况请大家不要惊慌失措&#xff0c;短暂的时间内出现延迟&#xff0c;打开速度慢是正常的。 以下墨者安全给大家分享下原因&#xff1a;1、…

Ajax_实现动态网站的技术、php语法、php接口、前端渲染和后端渲染

1、实现动态网站的技术&#xff08;后端语言&#xff09; php、java&#xff08;jsp和php语言差不多&#xff09;、.net、Nodejs、python。。。 最简单的是学php 2、php基本语法  js中 js代码用script包起来&#xff0c;php中用<?php ?>包起来后&#xff0c;可以放…

后端服务开启gzip_网站怎么开启Gzip压缩?网站开启Gzip压缩的方法,让网站提速数倍!...

什么是Gzip压缩&#xff1f;Gzip压缩一般是指web服务器中的一个功能&#xff0c;当有人来访问这个服务器中的网站时&#xff0c;服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来&#xff0c;一般对纯文本内容可压缩到原大小的40&#xff05;。这样传输就…

dev c++为什么会显示无法更改到模板目录_Kali Linux下Dirb工具web网站目录爆破指南...

在本文中&#xff0c;我们将重点介绍使用Kali Linux工具DIRB的临时目录&#xff0c;并尝试在Web服务器中查找隐藏的文件和目录。一个路径遍历攻击也被称为“目录遍历”目标访问的文件和目录存储在Web根文件夹之外。通过使用带有“ ..”的序列的引用文件及其变体来操纵变量&…

采用建站cms制作企业网站的好处

随着网络的发展和普及&#xff0c;现在各行各业开展业务都离不开网络推广&#xff0c;而网络营销推广的标配就是企业必须有一个企业网站&#xff0c;目前做企业网站制作主要有两个方法&#xff0c;一种找网络公司开发&#xff0c;一种利用cms来制作网站&#xff0c;那么建站cms…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起&#xff0c;安全威胁就一直伴随着网站的发展&#xff0c;各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击&#xff08;…

网站api自己怎么写_短视频文案怎么写?看这4个素材网站就够了

短视频文案很难吗&#xff1f;对于小白来说挺难的。但也不用特别担心&#xff0c;接下来豌豆豆会跟大家分享一些方法跟技巧&#xff0c;方便大家快速入门。一般有三个方法。01观点/事件转折因为观点也好&#xff0c;事件也好&#xff0c;都是大家平常熟知的点&#xff0c;所以在…

电脑维修网站源码_搭建一个网站所需要的准备有哪些?

搭建一个网站到互联网上所需要的东西1.域名2.服务器3.FTP上传工具4.网站源码解释一下&#xff0c;我们将一个网站比作房子&#xff0c;域名(网址&#xff1a;www.xxxxxx.com)如同门牌号&#xff0c;服务器地皮&#xff0c;而我们的网站源码就是相当于房子。需要注意的一点是&am…

网页设计 滑块控制_设计神器!5分钟就能上手的动态文字生成网站 – Space Type Generator - 优优教程网...

你是不是在为不会使用AE、C4D制作动效很头疼&#xff1f;或者在为制作灵感而烦恼&#xff1f;又或是因为制作动效麻烦繁琐而熬夜秃头&#xff1f;今天小编为你带来超炫酷超强大动效文字生成器——Space Type Generator&#xff0c;让你通过简单的参数调整就能创造无限种创意可能…

浏览器排名_怎样提升seo快速优化排名?提升seo快速优化排名的4种方式

怎样提升seo快速优化排名&#xff1f;有确切的消息显示谷歌正在更新移动搜索排名的算法更新&#xff0c;简单来说就是移动优先索引&#xff0c;她的意思是谷歌会根据移动端的排名情况影响pc端的关键词排名情况。目前&#xff0c;该算法正在内测中&#xff0c;估计很快就能跟大家…