开发必备知识:通过网站架构演进与计算机网络模型深入理解“网关”、“正向代理”、“反向代理”含义

简介: 反向代理与网关都是从网站架构中发展而来的产物,原来在Web1.0与Web2.0时代,一般都用反向代理,采用前置反向代理来完成反向路由、负载均衡、日志监控、缓存、兼容熔断等功能,常见的就是Nginx等等,反向代理一般采用静态配置,是因为Web时代中网站更新换代是不快的。

目前网络中流行的技术架构


反向代理与网关都是从网站架构中发展而来的产物,原来在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 进行判断,分配请求到目标服务器因为七层代理依赖应用层信息,所以用户在访问网站的时候,会先与七层代理服务器三次握手建立连接,再发送具体的请求报文给代理服务器,代理服务器再跟目标服务器三次握手建立连接,然后由代理服务器来访问目标服务器。


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 数据处理
大模型开发:描述长短期记忆网络(LSTM)和它们在序列数据上的应用。
LSTM,一种RNN变体,设计用于解决RNN处理长期依赖的难题。其核心在于门控机制(输入、遗忘、输出门)和长期记忆单元(细胞状态),能有效捕捉序列数据的长期依赖,广泛应用于语言模型、机器翻译等领域。然而,LSTM也存在计算复杂度高、解释性差和数据依赖性强等问题,需要通过优化和增强策略来改进。
|
1月前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
24 2
|
1月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
38 8
C++ Qt开发:QTcpSocket网络通信组件
|
1月前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
84 1
|
1月前
|
消息中间件 存储 缓存
Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
94 2
|
1月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
99 0
|
2月前
|
机器学习/深度学习 测试技术 Ruby
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
129 2
|
10天前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
26 4
|
22天前
|
SQL 前端开发 Java
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
五邑大学餐厅网络点餐系统设计与实现(包含完整源码详细开发过程)
|
1月前
|
消息中间件 缓存 API
微服务架构下的API网关性能优化实践
在现代的软件开发中,微服务架构因其灵活性和可扩展性被广泛采用。随着服务的细分与增多,API网关作为微服务架构中的关键组件,承担着请求路由、负载均衡、权限校验等重要职责。然而,随着流量的增长和业务复杂度的提升,API网关很容易成为性能瓶颈。本文将深入探讨API网关在微服务环境中的性能优化策略,包括缓存机制、连接池管理、异步处理等方面的具体实现,旨在为开发者提供实用的性能提升指导。