CDN 分发系统的架构。CDN系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰他
image.png
在没有CDN的情况下,用户向浏览器输入 www.web.com 这个域名,客户端访问本地的DNS服务器的时候,如果本地DNS的服务器有缓存,则返回网站的地址;如果没有,递归查询到网站的权威DNS服务器,这个权威DNS服务器是负责web.com的,他会返回网站的IP地址。本地的DNS服务器缓存下Ip地址,将IP地址返回,然后客户端直接访问这个IP地址,就访问到了这个网站。
有了CDN之后,情况发生了变化。在web.com这个权威DNS服务器上,会设置一个CNAME别名,指向另外一个域名www.web.cdn.com,返回给本地DNS服务器。
当本地DNS服务器拿到这个新的域名时,需要继续解析这个新的域名。这个时候,在访问就不会是web.com的权威DNS服务器了,而是 web.cdn.com的权威DNS服务器,这是CDN自己的权威DNS服务器,在这个服务器上,还是会设置一个CNAME,指向另外一个域名,也即CDN网络的全局负载均衡器
本地DNS服务器去请求CDN的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器进行提供服务,选择的依据包括:
根据用户IP地址,判断哪一台服务器距离用户最近:
用户所处的运营商:
根据用户所请求的URL中携带的内容名称,安排哪一台服务器上有用户所需要的内容。
查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
基于以上这些条件,进行综合分析以后,全局负载均衡器会返回一台缓存服务器的Ip地址。
image.png
对于流媒体CDN来讲,有个关键的问题是防盗链问题,因为视频是要花大价钱买版权的,为了挣点钱,收点广告费,如果流媒体被其他的网站盗走,在人家的网站播放就亏大了
最常用的简单的方法就是 HTTP 头的referer字段,当浏览器发送请求的时候,一般会带上referer,告诉服务器是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理,如果refer信息不是来自本站,就阻止访问或者跳转到其他链接
refer的机制相对比较容易破解,所以还需要配合其他的机制。一种常用的机制是时间戳防盗链,使用CDN的管理员刻印在配置界面上,和CDN厂商约定一个加密的字符串。客户端取出当前的时间戳,要访问的资源和路径。连同加密字符串进行签名算法得到一个字符串,然后生成一个下载链接,带上这个签名字符串和截止时间戳访问CDN。在CDN服务端,根据取出过期时间,和当前CDN节点时间进行比较
,确认请求是否过期,然后CDN服务端有了资源以及路径,时间戳,以及约定的加密字符串。,根据相同的签名算法计算签名,如果匹配一直,访问合法,才会将资源返回给客户。
动态CDN。主要有2种模式
一种是生鲜超市模式,也即边缘计算的模式,既然数据是动态生成的。所以数据的逻辑计算盒存储,也相应的放在边缘的节点,其中定时从源数据哪里同步存储的数据,然后再边缘进行计算得到结果。就像对生鲜的烹饪是动态的,没办法事先做好缓存,因而将生鲜超市放在你家旁边,既能够送货上门,也能够现场烹饪,也是边缘计算的一种体现。
另外一种冷链运输方式,也即路径优化的模式。数据不是在边缘计算生成的,而是在源站生成的,但是数据的下发则是可以通过CDN的网络,对路径进行优化。因为CDN节点比较多,能够找到距离源站很近的边缘节点,也能找到距离用户很近的边缘节点。中间的链路完全由CDN来规划,选择多一个更加可靠的路径,使用类似于专线的方式进行访问。
容来源于[极客时间]《趣谈网络协议》
网友评论