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

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
2672 91
|
7月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
7月前
|
JSON 文字识别 BI
如何开发车辆管理系统中的加油管理板块(附架构图+流程图+代码参考)
本文针对中小企业在车辆加油管理中常见的单据混乱、油卡管理困难、对账困难等问题,提出了一套完整的系统化解决方案。内容涵盖车辆管理系统(VMS)的核心功能、加油管理模块的设计要点、数据库模型、系统架构、关键业务流程、API设计与实现示例、前端展示参考(React + Antd)、开发技巧与工程化建议等。通过构建加油管理系统,企业可实现燃油费用的透明化、自动化对账、异常检测与数据分析,从而降低运营成本、提升管理效率。适合希望通过技术手段优化车辆管理的企业技术人员与管理者参考。
|
7月前
|
消息中间件 缓存 JavaScript
如何开发ERP(离散制造-MTO)系统中的生产管理板块(附架构图+流程图+代码参考)
本文详解离散制造MTO模式下的ERP生产管理模块,涵盖核心问题、系统架构、关键流程、开发技巧及数据库设计,助力企业打通计划与执行“最后一公里”,提升交付率、降低库存与浪费。
|
6月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
7月前
|
消息中间件 JavaScript 前端开发
如何开发ERP(离散制造-MTO)系统中的技术管理板块(附架构图+流程图+代码参考)
本文详解ERP(离散制造-MTO)系统中的技术管理板块,涵盖产品定义、BOM、工序、工艺文件及变更控制的结构化与系统化管理。内容包括技术管理的核心目标、总体架构、关键组件、业务流程、开发技巧与最佳实践,并提供完整的参考代码,助力企业将技术数据转化为可执行的生产指令,提升制造效率与质量。
|
7月前
|
消息中间件 JavaScript 关系型数据库
如何开发一套ERP(离散制造-MTO)系统(附架构图+流程图+代码参考)
本文介绍了面向离散制造-MTO(按订单生产)模式的ERP系统设计与实现方法。内容涵盖ERP系统定义、总体架构设计、主要功能模块解析、关键业务流程(订单到交付、BOM展开、MRP逻辑、排产等)、开发技巧(DDD、微服务、事件驱动)、参考代码示例、部署上线注意事项及实施效果评估。旨在帮助企业与开发团队构建高效、灵活、可扩展的ERP系统,提升订单交付能力与客户满意度。
|
7月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
555 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
6月前
|
运维 监控 安全
公链开发中的高可用架构设计要点
本指南提供公链高可用架构的可复用流程与模板,涵盖目标拆解、先决条件、分步执行、故障排查及验收标准,结合跨链DApp与量化机器人案例,提升落地效率与系统稳定性。
|
6月前
|
消息中间件 运维 监控
交易所开发核心架构拆解与流程图
本文系统解析交易所架构核心要素,从接入层到清算结算,结合系统流程图拆解各模块职责与协作机制。深入剖析撮合引擎、账本设计与风控逻辑,建立性能、可用性、安全性等多维评估标准,并提供可落地的流程图绘制、压测优化与进阶学习路径,助力构建高效、安全、可扩展的交易系统。(238字)