代理 – 居间包办的学问

任何一项服务的实施流程,都离不开 服务请求方 和 服务提供方 两个核心要素。请求方提出服务的请求,提供方针对请求给出对应的服务,即可构成一个完整的服务链。当服务请求方与服务提供方可以直接联系时,服务链简洁快速;而有些情况处于某种原因,服务请求方与服务提供方 不愿不能 直接联系,此时,为了完成一个完整的服务流程,必须要借助处在请求方和提供方之间的第三方居间服务者,才能打通服务链,则这个(类)居间服务者,或称“中介”,就称为代理。

20210529-1

代理,或“中介”,作为服务链的居间服务者,可以为服务链的两头提供支撑;由此,依其在服务链上服务的方向(目标对象)的不同,可分为正向代理反向代理两种类型。

正向代理

代理(中介)服务的目标对象是服务请求者,即其服务范围为整个服务链的前端时,这种代理称之为正向代理。

  • 正向代理模式中,服务请求者和代理整合到一起,构成了一个“服务请求黑匣子”,外面无法了解这个“服务请求黑匣子”的内部情况,只能看到代理作为“服务请求黑匣子”的对外接口,从而通过“黑匣子”隐藏了真正的服务请求者。
  • 从服务提供者的视角,它只看到代理作为请求者提出了服务请求,并予以响应。服务提供者并不知道真正的请求服务的人是谁。

20210529-2

正向代理符合对人们对代理的最基本认识,也是生活中常见的代理应用模式。在计算机网络领域,正向代理也应用十分广泛。

反向代理

当代理(中介)服务的目标对象是服务提供者,即其服务范围为整个服务链的后端时,这种代理称之为反向代理。

  • 反向代理模式中,与正向代理正好相反,代理和服务提供者整合到一起,构成一个“服务资源提供黑匣子”,外面无法了解这个“服务资源提供黑匣子”的内部情况,只能看到代理作为“黑匣子”的对外接口,从而通过“黑匣子”隐藏了真正的服务提供者。
  • 从服务请求者的视角,它只看到代理作为提供者响应了服务请求,提供了服务资源。服务请求者并不知道真正提供服务的人是谁。

20210529-2

反向代理在生活中也有很多常见的例子。比如,10086 电话。当客户有问题拨通 10086 时,客户并不知道由谁来回答问题,回答问题的人员由 10086 来负责分配安排。不管 10086 安排什么样的人员,最终都会提供答疑服务。这里的 10086 总机号码就是反向代理。客户不知道真正提供服务人的是谁。

计算机网络领域,架构上,反向代理与后台众多服务器形成一个“服务资源池”,反向代理是“服务资源池”真正的管理者,它为服务链路(IP + Port)统一门户接口,承接所有的服务请求,并对外提供服务。作为一种服务器端的典型技术,反向代理展现出其独特的魅力。

  • 性能优化 – 负载均衡

    关注度高的网站(资源)会面临大量的请求,单一服务器无法保证高效的响应。此时,需要使用多台服务器来应对大量服务请求,这些服务器全部执行相同的功能,在所有服务器前部署反向代理,对请求进行分流。

    反向代理接到客户端请求后,根据请求类型、各个服务器的运行状态,将请求分配到适当的服务器进行响应,再将响应结果返回给客户端。反向代理充当了“请求路由”的角色

    反向代理没有使一台服务器响应所有请求,而是在服务器之间分配了请求,从而缩短了响应时间,不会使任何服务器工作过度,由此完成负载均衡的任务。

    负载均衡的一个重要特点是,后台服务器必须均提供同质化资源,如此,才可保证无论客户端的访问请求被最终分配给哪个服务器来完成,客户端得到的都是统一同质、无差别的服务内容。

  • 安全保障

    使用反向代理,请求不会直接到达服务器,这样,内部服务器结构详细信息不会直接对外暴露,从而使访问或破坏内部服务器变得更加困难。反向代理起到了服务端隐私保护 – “信息隐藏”的作用

  • 额外功能

    除完成上述两个主要任务外,作为一个独立的计算节点,反向代理还可以添加一些额外的计算任务,进一步提高服务端的性能和安全性。比如,

    • 反向代理可以充当缓存机。访问频繁的资源可以留存反向代理本地,无需访问后台服务器,直接响应请求,减轻后台服务器的负担;
    • 反向代理完成一些额外安全处理分析任务,如完成防火墙功能等,为后台服务再加一层安全“滤网”;
    • 反向代理作为统一接口,集中处理数据加解密(如 SSL)和数据压缩等任务。

反向代理典型场景

以访问 baidu 为例,当请求 www.baidu.com 时,背后可能有成千上万台服务器提供服务,具体是哪一台,并不知晓,也无需知道,只要知道反向代理服务器是谁就好 — www.baidu.com 就是反向代理服务器,是访问请求的统一门户,反向代理服务器会将请求转发到真实的服务器哪里。

在这个场景里,

  1. 需要有负载均衡设备(可能一台或多台)来分发用户请求,将用户请求分发到空闲的资源服务器上;
  2. 资源服务器返回自己的服务到负载均衡设备;
  3. 负载均衡将服务器的服务返回用户。

由此可见,用户没有接触到真正的服务器,其实一直在和负载均衡设备直接通信,也就意味着用户做服务器域名解析时,解析得到的 IP 其实是负载均衡的 IP,而不是服务器的 IP。这也是我们访问高流量网站的常见场景。

反向代理实现工具

  • Nginx
  • frp

Reference

  1. https://www.zhihu.com/question/24723688
  2. https://zhuanlan.zhihu.com/p/230829571

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注