全球有这么多的数据中心,无论从哪里上网,临近不远的地方基本都有数据中心,比如位于山西阳泉的 百度云计算(阳泉)中心。那是不是在这些数据中心缓存部分数据,那么用户访问数据的时候,就可以就近访问了呢?
当然可以,这些分布在各个数据中心的节点就是 边缘节点。
边缘节点很多,但是不一定是大规模的,所以在每个边缘节点之上还有规模更大的区域节点,在区域节点之上,还有更大的中心节点。
下面解释CDN分发系统的架构
CDN的缓存时一层一层的,能不访问到后端真正的源,就不打扰它,当中心节点都拿不到资源的时候,那就只能回源了。
客户端如何访问到CDN
那么CDN可以将资源放到用户的跟前,用户如何去拿呢?
有了CDN,假设访问 域名 www.web.com ,在web.com这个权威DNS服务器上,会设置一个CNAME别名,指向另一个域名 www.web.cdn.com,返回本地的DNS服务器。本地DNS服务器拿到这个cname域名后还是需要继续解析的,这个时候就访问 www.web.cdn.com 这时,web.cdn.com 就是权威DNS服务器。这是CDN自己的权威DNS服务器,这个时候,它还是会把它设置成一个CNAME,指向另一个域名,假设为 www.yd.web.cdn.com 。这也就是 CDN网络的全局负载均衡器。
接下来,本地DNS服务器去请求CDN的全局负载均衡器解析域名,全局负载服务器会挑一个合适的结果给客户。
选择的依据为
- 根据用户IP地址,判断一个距离用户最近的。
- 用户运营商。
- 根据用户URL所携带的内容名称。
- 查询各个服务器的当前负载情况,判断哪个机器尚有服务能力。
至此,客户端就访问到了CDN上的资源,当这个服务器没有相关资源的时候,边缘节点就会向它的上一级请求相关的数据。直至追溯到网站的源服务器将内容拉到本地。
CDN 可以缓存的内容
CDN可以缓存的内容有很多,尤其是图片,视频类的,CDN是支持流媒体协议的。
对于小的静态图片,CDN可以采用拉取的方式,也就是没有发现命中的情况下会去上一级拉取,源站不会有太大的压力。
但是对于流媒体这种特别大的就需要采用推送了,将热点数据主动推送到边缘节点。
当然,图片,流媒体这种,CDN还要做好防盗链准备,要不我花钱买的CDN,被别人拿去加速了。
常见的防盗链都是靠 NGINX上的一些策略做的,如referer字段,但这太简单,容易被破解。另外就是时间戳防盗链。
- 时间戳防盗链
客户端取出当前的时间戳,要访问的资源及路径,连同加密字符串进行签名算法得到一个字符串,然后生成一个链接,带上这个签名字符串和截止时间戳去访问CDN。
在CDN的服务端取出过期时间,和当前的CDN节点作比较,确认请求是否过期。并根据相同的签名算法计算签名,如果匹配则一致,访问才会合法。
动态数据如何缓存
前面的图片,流媒体都是静态的。那如果是动态数据呢。
动态CDN也是有解决方法的。
一种是边缘计算模式。既然数据是动态生成的,那么数据的计算逻辑和存储都放到边缘的节点上,其中定时从源数据那里同步数据。
一种是路径优化模式。数据仍然从源站生成,但是,数据的下发可以通过CDN网络,对路径进行优化,因为CDN节点多,能够找到非常高质量的线路,中间链路由CDN来优化,就像专线一样来访问。
下面这张图片来自七牛云的 CDN 加速官网的介绍 https://www.qiniu.com/products/fusion
参考 : 极客时间:刘超老师的CDN
网友评论