网关与反向代理
目前网络中流行的技术架构
反向代理与网关都是从网站架构中发展而来的产物,原来在Web1.0与Web2.0时代,一般都用反向代理,采用前置反向代理来完成反向路由、负载均衡、日志监控、缓存、兼容熔断等功能,常见的就是Nginx等等,反向代理一般采用静态配置,是因为Web时代中网站更新换代是不快的。
现在进行到了Web3.0时代,也就是微服务时代,由于应用形态变化,出现了大量提供的API服务,这些API服务升级更新频率很高,对动态配置、路由、负载均衡要求很高。那么传统的代理配置就有很大缺点了,一是更不上较快的动态配置、路由更新等产品需求,二是传统的代理方式效率低下,运维团队无法做到自主的配置。这个时候网关就应用而生了。
网关一般面向API和微服务,提供更灵活的配置能力来面对产品需求,例如Zuul。来解决持续交付、动态配置的主要问题。网关和反向代理的功能其实是大同小异的。
又过了一段发展时期,迎来了云原生时代,那么云原生这个时代,对动态配置、持续交付、负载均衡、大数据处理、云端存算等功能实际上是必须的。需要对网关动态可配置、动态可编程。目前将网关与反向代理融合配置,产生了统一代理的产品,构成了云原生目前的架构基础,这些统一代理的产品,可以当网关用,也可以当反向代理来用,兼容多种高性能的功能。
网关
1、网关的定义
网关,Gateway、又称网间连接器、协议转换器。
网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。
网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
通俗点来理解的话,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。Gate在英文中就是大门的意思。
2、网关的作用
网关是设备与路由器之间的桥梁,由它将不同的网络间进行访问的控制,转换,交接等等。
比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。
网络代理
1、正向代理
首先需要知道的是,目前整个因特网网络都是建立在TCP/IP协议栈的基础之上的。
正向代理:是指用户利用代理服务器访问目标服务器。也就是说,代理服务器的代理对象是用户。如下图所示。
2、正向代理的作用
1、简单的来说,正向代理可以让我们访问一些我们并不能直接访问的资源服务。
打个比方来说,我们在饿了么上面,是不能直接购买香烟等产品的,但是我们可以通过骑手跑腿代购,让骑手帮忙买了香烟之后,再来送给我们。
在这个过程中,骑手跑腿就可以理解为 正向代理,让我们间接的访问资源。
在网络中,比较常见的是网游加速器,比如“吃鸡绝地求生”,这种外国游戏的服务器一般在国外,那么如果我们通过国内的家庭网络直接去进行游戏,那么肯定会有各种网络问题,丢包、延迟、重连等等各种问题都会接踵而来,顾名思义就是延迟、掉帧、卡顿感。那么网络厂商又是如何解决该问题的呢?是通过增加代理服务器来优化这种网络连接的,通过代理服务器,我们可以连上较好的网络,解决这些问题。
3、反向代理及作用
反向代理的对象则是 目标服务器。是指服务端利用代理服务器给用户提供服务。
和正向代理相比,二者都是利用代理服务器实现的,不过反向代理的主语是服务端,所以说反向代理对于用户来说是透明的,在用户的视野里,代理服务器便是目标服务器。
还是拿外卖做比方:类似饿了么『专星送』服务,我们(用户)在想喝咖啡的时候,并不需要知道我们附近哪个广场哪个角落有家星巴克(目标服务器),我们只需要打开专星送(代理服务器),直接下单就是,其会自动分配合适的门店为我们提供咖啡。
从上面的例子可以想到,反向代理在实际应用可以起到保护和隐藏真正提供服务的那个星巴克门店,也可以在区域分店爆单或者停业时,对用户的需要提供负载均衡,自动派单给相近的门店。
如何实现代理?
接下来通过计算机网络模型来深入了解代理的实现过程:
1、四层代理
四层代理(L4 Switch 四层交换)这个四层指的便是『运输层』,我们的四层代理服务器在接收到数据报文后会进行拆包工作,且只做到第4层运输层。在运输层拆包拿到的数据报文,除了包括应用层需要的数据报文,在标头信息中包括了端口信息,再结合网络层拆包所得的 IP,通常是根据这个 IP+PORT 得到实际的目标服务器信息,再修改报文的 IP 地址为目标服务器的 IP 地址信息。所以说,如果数据报文是个 TCP 连接,客户端最终将与真实的目标服务器建立连接。
2、七层代理
七层代理便是指拆包到应用层后,再根据应用层数据特征来判断目标服务器。例如,Nginx 便是我们经常用来搭建七层代理的服务器软件,我们在访问一个 URL 里,Nginx 会根据 URL 进行判断,分配请求到目标服务器因为七层代理依赖应用层信息,所以用户在访问网站的时候,会先与七层代理服务器三次握手建立连接,再发送具体的请求报文给代理服务器,代理服务器再跟目标服务器三次握手建立连接,然后由代理服务器来访问目标服务器。