【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第四节:请求链路中代理的作用

news/2025/2/28 4:43:43/

架构师>架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第四节:请求链路中代理的作用

本篇文章我们来学习代理。

经过我们前面的内容,比如说用户经过我们的DNS、CDN,还有比如说多地址之类的一些方案,请求到达了我们的系统之上。

在这里插入图片描述

用户找到这个系统,其实只是找到了这个系统的一个IP地址,这个系统它不一定是对外提供业务服务的,这么一个系统有可能它只是对外提供一个唯一IP,多个请求到了这个系统之后,还可以把请求分发给不同的小系统,也是做了一次负载均衡。

在这里插入图片描述

那么在这个系统做负载均衡的这个方法上,我们会涉及到一个概念,这个概念就叫做代理。在一般的公司中,是通过反向代理这一步来实现的,将对一个IP地址的请求,分发到后面的多台机器上,这个是反向代理

那么在我们学反向代理之前,我们先来了解一下什么是正向代理。

正向代理

好多人不理解正向代理和反向代理的区别。什么是正向代理呢?

正向代理就是,用户端设置代理服务器,比如说所有的请求都由代理服务器发出,无法判断代理了多少用户端,这叫做正向代理,画一个图,大家就理解了:

在这里插入图片描述

比如说这有好多个客户端,每个客户端里都配置了一个代理的网络转发。然后有一个代理服务器,这个请求要去访问,他直接请求代理服务器,然后代理服务器代理他们去请求真正的系统。代理,他们去请求真正的系统OK,这个叫正向代理。正向代理关键点在于无法判断代理多少个用户端,因为每个用户端自己去配置这个代理。

我们要记住,正向代理是用户端配置代理。

反向代理

正向的代理说完之后,我们来看反向的代理。

什么是反向代理

那么反向代理是什么呢?反向代理是服务端配置代理。所有的请求,由服务端接收,然后再由代理服务器分发到后面的服务器。我们来画一个图:

在这里插入图片描述

这是一个代理服务器,代理服务器里配置了后面好多个服务器的地址,所有的用户请求,都来请求它,但是代理服务器这边配置了后面好多服务器的地址,然后代理服务器再将这些请求分发到后面的不同的机器上去,这个就叫做反向代理好了。

这样一来,所有的请求呢,都由这么一个服务器来接收,无法判断这台代理服务器代理了多少的后端服务。

我们刚才所说的这种反向代理,它就可以把请求分发到不同的机器上,从而减少每个节点的并发数。而这些节点在外界看来就是一个系统。就是我有好多个节点,只不过前面架了一台代理服务器,请求来的时候,所有的请求都只访问这个服务器,而实际上是请求的后面的多个服务器。对于用户来说,只表现一个IP。

反向代理如何实现

我们来看一下,反向代理是怎么实现。

反向代理的实现手段有很多,根据工作层级的不同,分为两种。一般的我们知道网络有OSI的七层模型,反向代理有四层反向代理或者七层的反向代理,一般是从下往上数就是最高一层是第七层。最低一层物理层,次低一层是数据链路层、网络层、传输层、会话层、表示层,最高一层是应用层。

在这里插入图片描述

每一层向相邻的上层提供一个确定的服务,就是你只调我,我实现某一些功能,然后你做一些业务逻辑,你再向上面提供一些确定的功能。

可以看到一下,如果说我们做四层反向代理应该怎么做呢?

四层反向代理

在传输层,我们就只知道传输层是通过IP端口进行传输的。

越靠近用户层知道的信息越多,越靠近下面知道的信息越少,包括最后最下面物理层那知道的肯定就是一些物理的连接,物理的介质。

越往上面知道的信息越多,那么第四层他知道的信息,比如说IP和端口。如果我们要在这一层做代理,我们就是通过IP和端口,你给我一个IP和端口,我们来把你进行转发。

在这里插入图片描述

七层反向代理

那如果说要做七层代理呢?七层代理就可以用http,那么在http中就会有URL是吧,就会有各种各样的地址,就会有请求的头,请求的正文等等,进行转发。

也就是说,四层做反向代理的话,掌握的信息更少,实现更简单,但是效率更高,因为它越靠近底层,效率越高。

用七层做反向代理的话,可以做到更智能。七层我可以知道http的各种信息;我可以解析cookie;针对不同的cookie,我们进行不同的转发;我们还可以根据请求资源的类型进行转发,比如说请求图片我给你转发到哪里,请求视频我给你转发到哪里。这样的话功能更丰富,但是效率就会更低一些。因为它越靠近上层,它需要处理的这些逻辑就会越多,它虽然知道的信息更多,但是它的效率也会更低下。

在这里插入图片描述

什么叫上游?

实现反向代理,会有一个概念,一个“上游”的概念,什么叫上游?

比如说这是一个代理,代理服务器,我们要代理别人,其实跟我们实际中的做生意的差不多,比如说我代理的一个电脑品牌,那比如说我代理联想,那么联想就是我的上游,别人要找我买电脑,我就去找联想,戴尔,惠普,我代理的这三家。别人找我买电脑,我给你联想,给你惠普,给你戴尔,那么我的上游就是它们三个,它们三个叫上游。

在这里插入图片描述

所以说在nginx,比如说做反向代理的负载均衡服务器nginx,nginx里面就会有一个“upstream”的一个概念。我们的nginx配置的时候肯定会配upstream,这里面配置的就是上游的节点,就是后方的这些信息。

在这里插入图片描述

还有nginx里面有access_by_lua_file,后面写了一个lua的.lua文件,一个lua规则。你就可以根据lua的规则做反向代理

在这里插入图片描述


http://www.ppmy.cn/news/1575417.html

相关文章

面试八股文--数据库基础知识总结(2) MySQL

本文介绍关于MySQL的相关面试知识 一、关系型数据库 1、定义 关系型数据库(Relational Database)是一种基于关系模型的数据库管理系统(DBMS),它将数据存储在表格(表)中,并通过表格…

创建第一个 Maven 项目(二)

六、添加依赖 在 Maven 项目开发过程中,添加依赖是一项常见且关键的操作。通过添加依赖,我们可以引入项目所需的各种库和框架,极大地扩展项目的功能。接下来,我们将以 JUnit 依赖为例,详细介绍如何在 Maven 项目中添加…

IP---网络类型

这只是IP的其中一块内容-网络类型,IP还有更多内容可以查看IP专栏,前一章内容为访问服务器流程,可通过以下路径查看IP----访问服务器流程-CSDN博客,欢迎指正 2.网络类型 网络类型---根据二层(数据链路层)所…

服务端配置TCP探活,超出探活时间后的行为?

server端启动 (完整源码在最后) 配置探活 setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPIDLE, &(int){5}, sizeof(int)); // 空闲60秒后探测setsockopt(client_fd, IPPROTO_TCP, TCP_KEEPINTVL, &(int){10}, sizeof(int)); // 探测间隔10秒…

SQL_优化

1 SQL优化 (1) 数据读取 ①分区裁剪:使用时只读取需要的分区. ②列裁剪:读取操作(select、where、join、group by、sort by等),不读取不需要的列,减少IO消耗. (2) 数据筛选 ①分区先过滤,区分度大的字段先过滤. ②不在筛选字段上使用函数和表达式. (3) 分组聚合 ①使用窗口函数…

API技术深度解析:构建高效、安全与可扩展的接口服务

在当今的数字化时代,应用程序接口(API,Application Programming Interface)已成为连接不同软件系统和服务的桥梁,是推动数字化转型的关键技术之一。无论是企业内部系统集成、第三方服务接入,还是面向开发者…

记录一下在k3s快速创建gitlab

废话不多说,直接上配置文件 需要修改的地方(备注都有写): 1.命名空间 namespace 2. claimName 文件挂载 Deployment kind: Deployment apiVersion: apps/v1 metadata:name: gitlabnamespace: cicd # 替换为您的命名空间la…

【Linux网络编程】高效I/O--select/poll服务器

目录 多路转接之select select服务器实现 获取连接 handlerEvent select服务器代码链接 select的优缺点 多路转接之poll poll服务器实现(select服务器改写) poll的优缺点 多路转接之select select的作用 I/O的本质 等 拷贝 多路转接就是通过同时等待多个文件描述…