网络协议梳理(六)(CDN)

CDN

通过DNS将域名解析成IP地址过程繁琐,其实可以优化。

类比于当前的电商,会将商品分布放置在全国各个仓库。通过信息调研来决定各个仓库的库存。这样,用户可以更快的获取中间购买的商品。网络也可以借鉴“就近配送”来进行类似的优化。

CDN的分发系统的构架

全球分布数据中心,可以在数据中心里部署几台机器,形成一个缓存的集群来缓存数据,那么用户访问数据时,可以实现就近访问。这些分布在各个地方的各个数据中心节点,就成为边缘节点

由于边缘节点数目较多,但是每个集群的规模比较小,不能缓存所有东西,因为可能会命中失败,为了增加命中率,在边缘节点上增加区域节点,区域节点上增加中心节点。如果还是不能名字,那就只能去源数据出错进行访问了。

客户端如何找到相应的边缘节点进行访问

在没有CDN的情况下

用户输入www.baidu.com这个域名,客户端访问本地DNS服务器的时候,如果本地DNS服务器有缓存,则返回网站的地址;如果没有,递归查询到网站的权威DNS服务器,这个DNS服务器是负责baidu.com的,他会返回网站的IP地址。本地DNS服务器缓存下IP地址,将IP地址返回,然后客户端直接访问这个IP地址,就访问到这个网站。

有CDN之后

在baidu.com这个权威DNS服务器上,会设置一个CNAME别名,指向另一个域名www.baidu.cdn.com,返回给本地DNS服务器

本地DNS服务器拿到这个新域名时,需要继续解析这个新的域名。这个时候,再访问的就不是baidu.com的权威DNS服务器了,而是baidu.cdn.com的权威DNS服务器,这是CDN自己的权威DNS服务器。

在这个服务器上,会设置一个CNAME,指向另外一个域名,即CDN网络的全局负载均衡器

接下来,本地DNS服务器去请求CDN的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台适合的缓存服务器提供服务,选择的依据包括:

  • 根据用户IP地址,判断哪一台服务器距用户最近
  • 用户所处的运营商
  • 根据用户请求的URL中携带的内容名称,判断哪一台服务器上用户所需的内容
  • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力

基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的IP地址。

本地DNS服务器缓存这个IP地址,然后将IP返回给客户端,客户端去访问这个边缘节点,下载资源。

CDN可以进行缓存的内容有很多种

适合缓存的内容——静态页面、图片。

使用了大量CDN的内容——流媒体

CDN支持流媒体协议。流媒体往往是连续的,因此可以进行预先缓存策略,也可以预先推送到用户的客户端

静态页面往往采取拉取的方式,当未发现命中的时候,再去上一级进行拉取。但是流媒体数据量大,如果出现回源,压力会比较大,往往采取推送的模式,将热点数据主动推送到边缘节点。

对于流媒体来讲,很多CDN还提供预处理服务,也即文件在分发之前,经过一定的处理(如将视频转码为不同的码流,以适应不同的网络带宽的用户需求)

对于流媒体CDN来讲,有个关键的防盗链问题。

最常用的防盗链方法——http头的refer字段,当浏览器发送请求的时候,一般会带上referer,告诉服务器是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理。如果refer信息不是来自本站,就阻止访问或者跳到其他链接。

referer的机制相对比较容易破解,还需要配合其他的机制

一种常用的机制——时间戳防盗链

客户端取出当前的时间戳,要访问的资源极其路径,连同加密字符串进行签名算法得到一个字符串,然后生成一个下载链接,带上这个签名字符串截止时间戳去访问CDN。

在CDN服务端,根据取出过期时间,和当前CDN节点时间进行比较,确认请求是否过期。然后CDN服务端有了资源及路径,时间戳,以及约定的加密字符串,根据相同的签名算法计算签名,如果匹配一致,访问合法,才会将资源返回给客户端。

猜你喜欢

转载自blog.csdn.net/qq_29996285/article/details/88373224