从最原始的代理到内容分发服务

前言

网上关于内容分发服务的资料很多很多,这篇文章从另一个角度整理了一下在内容分发服务诞生之前经历了什么,是什么催生了内容分发服务的诞生。

正向代理

我们现在熟知的缓存服务器是通过代理机制对数据进行缓存的服务器,代理介于 Web 服务器和客户端之间,具有对 Web 服务器访问进行中转的功能,这种代理服务器是部署在 Web 服务器这一端的。 实际上,缓存服务器使用的代理机制最早是放在客户端一侧的,也就是缓存服务器和客户端在同一个局域网内(通常部署在运营商处),这才是代理的原型,称为正向代理(forward proxy) 正向代理的作用,除了缓存还有可以用来实现防火墙功能。在使用正向代理时,一般需要浏览器或者手机 app 在「代理服务器」中填写正向代理的 IP 地址,之后的请求,会忽略发起请求的目的地域名,直接将所有的请求发送给正向代理。

-w250

反向代理

正如上面所说的,使用正向代理需要用户具体设置,这样的成本就很高了,于是,针对正向代理进行改良,使得不需要在浏览器中设置代理也可以使用,这才有了反向代理,也就是我们现在熟知的缓存服务器。访问缓存服务器的方式通常是将缓存服务器的 IP 注册到 DNS 服务上,当用户访问 Web 服务器时,返回缓存服务的 IP。

-w250

透明代理

缓存服务器判断转发目标的方法还有一种,那就是查看请求消息的包头部,因为包的 IP 头部中包含接收方的 IP 地址,只要知道了这个地址,就知道用户要访问哪台服务器了,这种方式成为透明代理。 透明代理集合了正向代理和反向代理的优点,但是如何才能让请求消息到达透明代理呢? 必须将透明代理放在请求消息从客户端传输到 Web 服务器的路径中,当消息经过时进行拦截,听起来有点粗暴,但只有这样消息才能到透明代理处,然后再转发给 Web 服务器。 如果请求消息有多条路径可以到达 Web 服务器,那么就必须在这些路径上都放置透明代理,因此一般是将网络设计成只有一条路可以走的结构,然后在这一条路径上放置透明代理。连接互联网的接入网就是这样的一个关抠,因此可以这接入网的入口出设置透明代理,使用透明代理时,用户不会感知到其存在,也不会注意到 HTTP 消息是如何被转发的,因此现在大家更倾向于将透明代理说成是缓存

-w250

内容分发服务

缓存服务器部署在服务端还是客户端,效果是有差别的。 当缓存服务器放在服务端时,可以减轻 Web 服务器的负载,但无法减少互联网中的流量。互联网中会存在一些拥塞点,如果在客户端部署缓存服务器,就可以不受或少受到拥塞点的影响,让网络流量更稳定,特别是当访问内容中含有大图片或视频时效果更明显。 不过,客户端的缓存服务器是归客户端运营商管理者所有的,服务器无法控制它,当服务器上大容量的内容增多的时候,可以针对服务端的缓存服务器扩容,但是对于存放在客户端的缓存无能为力。

因此,这两种部署服务器缓存的方式各有利弊,但是也有一种方式能够集合两者的优点:Web 服务器运营者和网络运营商签约,将可以自己控制的缓存服务器放在客户端的运营商处。 这样一来,我们可以缓存服务器部署在距离用户很近的地方,同时 Web 服务器运营者还可以控制这些服务器,但这种方式也有问题,对于在互联网上公开的服务器来说,任何地方的人都可以来访问它,因此如果要实现这个方式,必须在所有运营商 POP 中都部署缓存服务器才行,但是这个数量太大了,非常不现实。 为了解决这个问题,一些专门从事相关服务的厂商出现了,他们来部署缓存服务器,并租借给 Web 服务器运营者,这种服务就成为内容分发服务 CDN(或者 CDS),提供这种服务的厂商成为 CDSP,他们会与主要的供应商签约,并部署很多台缓存服务器,另一方面,CDSP 会与 Web 服务器运营商签约,这样缓存服务器可以缓存多个网站的数据,因此 CDSP 的缓存服务器就可以提供给多个 Web 服务器的运营者共享,成本也就降低了。

访问最近的缓存服务器

互联网中那么多缓存服务器,我们肯定需要一种机制,即使用户不进行任何设置,也能够将请求发送到最近的缓存服务器。 方法一:通过 DNS 服务器来分配访问,使其返回距离客户端最近的缓存服务器的 IP 方法二:利用重定向的方式分配最近的缓存路由器 以上两种方式是让客户端访问距离其最近的缓存服务器所采取的方式,那关键还需要获取到距离最近的是哪台服务器。我们需要实现将缓存服务器部署地点的路由器上的路由信息收集起来,依次查询所有路由器的路由表以后,可以判断出哪台缓存路由器最近了。