1、理解CDN
1.CDN 和电商系统的分布式仓储系统一样,就近发货给客户(客户端),所以,必然是提前在仓库中存储了某些商品.
2.CDN最擅长的是缓存静态数据,比如电商系统的热点静态页面,秒杀场景的页面等.
问题:向生鲜这种东西,如果提前存储在了仓库中,没有人够吗咋整?
2、实现的过程
1.全球有这么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。可以在这些数据中心里部署几台机器,形成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就可以就近访问了。
2.边缘节点:这些分布在各个地方的各个数据中心的节点,就称为边缘节点。
3.区域节点:边缘节点数目比较多,但是每个集群规模比较小,不可能缓存下来所有东西,因而可能无法命中,所以在边缘节点之上。设置了区域节点,区域节点规模更大,缓存的数据更多,命中的概率也会更大。
4.中心节点:在区域节点之上,规模更大,缓存数据更多。如果还不命中,就只好回源网站访问了。
3、CDN分发系统架构
1.CDN 系统的缓存,是一层一层的,能不访问后端真正的源,就不访问。这也是电商网站物流系统的思路
4、客户端如何找到相应的边缘节点?
1.CDN 分发网络也是一个分布在多个区域、多个运营商的分布式系统,用DNS域名解析的相同的思路来选择最合适的边缘节点。
1. 在没有CDN的情况下,权威DNS服务器解析后,会直接返回ip地址。
2. 有了CDN之后,你访问www.baidu.com的时候,在 .com 这个权威 DNS 服务器上,会设置一个 CNAME 别名,指向另外一个域名 www.baidu.cdn.com,返回给本地 DNS 服务器.
3. 当本地 DNS 服务器拿到这个新的域名时,需要继续解析这个新的域名,再访问的时候就是xx.cdn.com 的权威 DNS 服务器了,这是 CDN 自己的权威DNS 服务器。
4. 在这个服务器上,还是会设置一个 CNAME,指向另外一个域名,也即 CDN 网络的全局负载均衡器。
5. 本地 DNS 服务器去请求 CDN 的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务。选择的依据:根据用户 IP 地址,判断哪一台服务器距用户最近;用户所处的运营商根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需的内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的 IP 地址。
6. 本地 DNS 服务器缓存这个 IP 地址,然后将 IP 返回给客户端,客户端去访问这个边缘节点,下载资源。//缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地.
CDN 可以缓存的内容
像电商系统的仓储点,适合存储一些不易过期的日用品如纸,家具家电等,而不适合缓存一些生鲜类的产品,对应的就是一些静态页面,图片等。
从上图的接入层的缓存架构Varnish来看,我们将大部分静态资源的访问拦截在边缘,而CDN则是更厉害了,直接缓存在了离用户更新的地方.这样访问性能更好,时延越低。
特殊的CDN缓存:流媒体
- 流媒体往往是连续的,因而可以进行预先缓存的策略,是采取主动推送的方式,因为流媒体数据量大,如果出现回源,压力会比较大。所以,将热点数据主动推送到边缘节点
- 对于流媒体来讲,很多 CDN 还提供预处理服务,也即文件在分发之前,经过一定的处理。
例如:
将视频转换为不同的码流,以适应不同的网络带宽的用户需求;就是我们常见的,超清、标清、流畅。
防盗链问题
因为视频是要花大价钱买版权的,为了挣点钱,收点广告费,如果流媒体被其他的网站盗走,在人家的网站播放,那损失可就大了。
解决方案:HTTP 头的 refer 字段, 当浏览器发送请求的时候,一般会带上 referer,告诉服务器是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理。如果 refer 信息不是来自本站,就阻止访问或者跳到其它链接。
refer 的机制相对比较容易破解,所以还需要配合其他的机制
时间戳防盗链
- CDN 的管理员可以在配置界面上,和 CDN 厂商约定一个加密字
符串。 - 客户端取出当前的时间戳,要访问的资源及其路径,连同加密字符串进行签名算法得到一个字符串,然后生成一个下载链接,带上这个签名字符串和截止时间戳去访问 CDN。
- CDN 服务端,根据取出过期时间,和当前 CDN 节点时间进行比较,确认请求是否过期。然后 CDN服务端有了资源及路径,时间戳,以及约定的加密字符串,根据相同的签名算法计算签名,如果匹配则一致,访问合法,才会将资源返回给客户。
5、动态 CDN
回到之前的仓库中无法缓存生鲜产品的问题,对应的就是动态数据。
两种常用模式:
(1)边缘计算模式:将动态数据的逻辑计算和存储,放在相应的边缘节点,定时从源数据同步存储数据,然后在边缘节点进行计算。
(2)路径优化模式:数据不是在边缘计算生成的,而是在源站生成的,但
是数据的下发则可以通过 CDN 的网络,对路径进行优化。因为 CDN 节点较多,能够找到离源站很近的边缘节点,也能找到离用户很近的边缘节点。中间的链路完全由 CDN 来规划,选择一个更加可靠的路径,使用类似专线的方式进行访问。
tcp优化:
- 问题:常用的 TCP 连接,在公网上传输的时候经常会丢数据,导致 TCP 的窗口始终很小,发送速度上不去。
- 根据前面的 TCP 流量控制和拥塞控制的原理,在 CDN 加速网络中可以调整 TCP 的参数,使得TCP 可以更加激进地传输数据。
- 通过多个请求复用一个连接,保证每次动态请求到达时。连接都已经建立了,不必临时三次握手或者建立过多的连接,增加服务器的压力。另外,可以通过对传输数据进行压缩,增加传输效率。