当前位置: 移动技术网 > IT编程>开发语言>Java > 一文简单理解反向代理和正向代理模型

一文简单理解反向代理和正向代理模型

2020年07月17日  | 移动技术网IT编程  | 我要评论
正向代理和反向代理正向代理和反向代理1、代理(Proxy)2、反向代理和正向代理参考正向代理和反向代理1、代理(Proxy)引出代理之前,首先介绍C/S架构,也即是Client-Server的架构。对于请求量非常少的服务,这样的部署不会有什么问题,但如果这个服务请求量上来的时候,这样部署的架构就很有问题了。首先一个很客观的问题:如果单从服务器的物理特性来看,这个服务器就不能支持这么高的请求量。这种情况下,就迫使开发者去把服务迁移到一个CPU更强、内存更高,综合性能更好的服务器。通过更换服务器当

正向代理和反向代理

1、代理(Proxy)

引出代理之前,首先介绍C/S架构,也即是Client-Server的架构。
在这里插入图片描述
对于请求量非常少的服务,这样的部署不会有什么问题,但如果这个服务请求量上来的时候,这样部署的架构就很有问题了。

  • 首先一个很客观的问题:如果单从服务器的物理特性来看,这个服务器就不能支持这么高的请求量。这种情况下,就迫使开发者去把服务迁移到一个CPU更强、内存更高,综合性能更好的服务器。通过更换服务器当然可以解决这个问题。
  • 第二个问题:如果服务Server单节点发生了故障,就必然会影响整个服务,因为对于众多的Client客户端都是连接的一个Server服务端。

基于代理的可横向拓展的C/S架构
在这里插入图片描述
在这个部署的架构当中,除了Server节点,还多出了一个叫Proxy的节点,那么这个节点是干嘛的呢?

Proxy的这个节点,它把他接收的所有的请求都转发到他后面的Server节点当中,然后等待Server节点处理请求,再从Server节点取回执行结果返回到Client。所以“Proxy”的这个节点,他实际上不处理任何的请求。

1、服务器性能不足的问题:假设Server节点S1性能到达瓶颈了,不能处理更多的请求了。我们可以添加Server节点S2,同时告诉“Proxy”节点,让他把部分原来转发到S1节点的请求转发到我这里来。这样子通过服务分流减少压力的方法就可以解决原来S1节点性能不足的问题了。

在这里插入图片描述
2、单点服务器挂掉了怎么办:还是考虑Server节点S1和S2,两者所能够提供的服务是一样的,假设某一个时候S1挂掉了,这时如果有“Proxy”节点的存在,并且“Proxy”节点能够察觉到S1挂掉了的话,那么让“Proxy”节点把原来要转发给S1节点的请求转发到S2进行处理就可以了,这样子通过服务冗余的方法就可以解决原来S1突然挂掉影响服务的问题。
在这里插入图片描述

“Proxy”节点相当于一个中介,或者说是一个代理,代理Client去寻找实际的Server节点去完成服务。这样子的模式在现实生活也非常常见,在买房子的时候,通常由房产中介帮助你完成和卖者之间的手续,而不需要你亲自去处理这些事情,你只需要协调好自己与中介之间的手续就好了,这里的中介,就和我们的“Proxy”节点所做的工作非常类似。

2、反向代理和正向代理

理解了什么是“代理”,离我们理解什么是“反向代理”就只差“反向”两个字了,与“反向”相对的,就是“正向”,本质上来讲,代理都是存在于Client和Server之间,但是由于性质不同,所以也分为这两种.

假设由A、B和C三人,他们之间存在借钱的关系。

对于正向代理,理解起来就是:

1、A需要钱,A知道C由很多钱,想向C借钱
2、但是A和C有矛盾,于是A想到通过B去借C借钱
3、B向C借到钱了,C不知道是A的存在
4、这样B就帮助A借到了Z的钱
在这里插入图片描述
在这个过程,B就充当了代理借钱的角色,并且是代替A去借钱的,这样就是正向代理。

接着是反向代理:

1、A需要钱,C有很多钱,A不知道C很多钱
2、A找B借钱
3、B知道C有很多钱
4、B向C借钱,并把借到的钱给A,而没有使用自己的钱借给A
5、A拿到钱以后,以为钱是B的,A不知道C的存在
在这里插入图片描述
在这个过程当中,B也充当了代理借钱的角色,不过这次不是代替A去借的,而是用C的钱借给A的,换言之即是代替C将钱借给了A,这就是反向代理。

两者区别

  • 1、服务对象不同
    • 正向代理,代理的是客户端,也就是例子中的A,服务端不知道实际发起请求的客户端
    • 反向代理,代理的是服务端,也就是例子中的C,客户端不知道实际提供服务的服务端
    • 总括:正向代理隐藏真实客户端,反向代理隐藏真实服务端
  • 2、安全模型不同
    • 正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此必须采取安全措施以确保仅为授权的客户端提供服务
    • 反向代理都对外都是透明的,访问者并不知道自己访问的是代理,访问者不知道服务节点的存在,认为处理请求的就是代理节点

总而言之,正向代理是从客户端的角度出发,服务于局域网用户,以访问非特定的服务,其中最典型的例子就是翻墙;反向代理正好与此相反,从服务端的角度出发,服务于所有用户,隐藏实际的服务节点,服务节点的架构对用户透明,以代理节点统一对外服务。

参考

1、https://www.zhihu.com/question/24723688/answer/583903276
2、https://www.zhihu.com/question/24723688

本文地址:https://blog.csdn.net/JMW1407/article/details/107353965

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网