简单系统设计 —— 代理(六)
本系列,是自己学习Grokking the System Design过程中的笔记。
希望读者在看完全文后,也能留下你们的经验。我万分荣幸能收到你们的消息。
如果能从这里学到点东西,记得请我喝杯☕☕☕~
—— MinRam
一、前言 Overview
前面提过负载均衡, 会将前端的流量按规则分发给后端服务集群,以此来分摊压力。而代理就是其中的一个能力。
代理服务器,是客户端和后端服务器的中间服务器。特别是WEB类型的后端服务器。客户端通过连接代理服务器,请求对应的资源(HTML,CSS,Connect等)服务。它可以是软件形式(如Nginx)又或者是硬件形式(因价格昂贵,比较罕见)。
简单讲,代理就是我们不直接去做一件事而是让另外一个人代替我们去做一件事。通常,代理用于过滤请求、记录请求,或者有时转换请求(通过添加/删除头、加密/解密或压缩资源)。
除此之外,代理还能做到:
- 缓存网页,来提高响应性能
- 负载均衡
- 作为一个前端,控制和保护某个服务的网络请求
- 隐藏用户身份(如VPN😗)
负载均衡器 和 代理服务器 在整体系统中的位置一致,往往整合成网关模块。前者侧重于分摊压力,后者侧重于屏蔽客户端对服务的感知。可以理解为,负载均衡是依靠代理实现的。
二、类型 Types
代理层,主体是放在客户端和业务服务器之间,所以它可以在客户端上,也可以在业务服务前新增服务器等。而常见的几种类型:
1. 正向代理 Foward Proxy
大多时候说的代理服务器,指的是正向代理。一个面向内网的代理其中客户的客户端或组提供服务。通常,这些客户端是内网的一部分。
以www.example.com的服务器为例,从客户端发起请求开始:
- 内网客户端尝试连接到代理服务器,请求访问www.example.com;
- 请求通过内网到达代理服务器;
- 代理服务器根据之前设置的策略,选择通过,或者拒绝;
- 允许: 将请求转发到对应的Web服务器,将结果返回给代理服务器,再响应之前的请求。
- 拒绝: 根据策略返回响应内容;
正向代理是权限和控制的关键点,并且容易插入访问安全策略。
- 企业、组织、学校使用正向代理,以屏蔽内网中的客户端访问Internet的重要内容。主要考虑的过滤方式:例如URL,DNS黑名单,URL正则表达式过滤,MIME过滤或内容关键字过滤。
- 内网中的缓存服务器。如果一个资源被下载了很多次,那么代理可以将内容缓存在服务器上,这样下次另一个客户端下载相同的内容时,代理会将之前存储在服务器上的内容发送给客户端。
一些常见的正向代理软件(基于服务器的):
- Cgi-Proxy
- Glype
- Squid
- …
只要理解组件的使用场景和实现原理,就能快速了解该类型的软件。在大厂中往往有自己一套的代理软件。
2. 反向代理 Reverse Proxy
反向代理的作用与正向代理的作用完全相反。
针对客户端的正向代理代理,针对服务器的反向代理代理。
反向代理通常是一个面向系统内部的代理,作用在请求流的前端来控制和保护对系统内部网络上服务器的访问。
来自 Internet 并以系统为目的地的所有流量都将通过代理服务器。在客户端看来,系统只是一个门。反向代理服务器代替其后端服务器,接受来自外部客户端的请求,并将请求转发到一台或多台后端服务器以处理请求。客户端接收到来自代理服务器的响应中,并不会有任何原始服务器的信息。
以www.example.com的服务器为例,从客户端发起请求开始:
- 客户端向系统发起请求;
- 请求通过Internet到达代理服务器;
- 代理服务器根据之前设置的策略,选择通过,或者拒绝;
- 允许: 将请求转发到对应的Web服务器,将结果返回给代理服务器,再响应之前的请求。
- 拒绝: 根据策略返回响应内容;
正向代理隐藏客户端的身份,而反向代理隐藏服务器的身份。
反向代理用于以下目的:
- SSL加速:创建安全网站时(如协议为https),安全套接字层 (SSL) 加密通常不是由 Web 服务器本身完成,而是由配备 SSL 加速硬件的反向代理完成。反向代理为任意数量的主机提供 SSL 加密,无需为每个主机提供单独的 SSL 服务器证书;
- 负载平衡: 反向代理可以将负载分配到多个后端服务器;
- 缓存静态内容:反向代理可以通过缓存静态内容(如图片,静态HTML等)来分担Web服务器的压力。详见缓存篇
- 压缩:代理服务器可以优化和压缩内容以加快加载时间。
- 安全性:代理服务器是额外的防御层,可以防止某些操作系统和 Web服务器特定的攻击
常见的HTTP反向代理软件(服务端):
- Apache mod_proxy(也可以作为 HTTP 的正向代理)
- Nginx
- HA-Proxy
- Varnish Cache
三、尾言
系统设计中各功能的实现,都有相对应的基础算法,在社招面试中常伴随着一起考察。