摘要:依靠部署在各地的边缘服务器,根据用户位置分配最近的静态资源。以实现就近访问。
目录
[TOC]
CDN 内容分发网络
分布在全国各地,主要用来处理静态资源的请求。通过
CDN的负载均衡系统,智能调度边缘节点提供服务。
CDN(Content Delivery/Distribution Network)内容分发网络 :依靠部署在各地的边缘服务器,根据用户位置分配最近的静态资源。以实现就近访问。
关键技术主要有:
- 内容存储:指的是静态资源,比如图片、视频、文档、JS、CSS、HTML。
- 分发网络技术:指的是将静态资源分发到位于多个不同地理位置机房中的服务器上,以实现就近访问。
- 进而加快静态资源的访问速度,减轻服务器以及带宽的负担。
CDN 工作原理
搞懂下面 3 个问题也就搞懂了 CDN 的工作原理:
- 静态资源是如何被缓存到 CDN 节点中的?通过缓存系统、回源、预热、刷新将静态资源缓存到 CDN 节点中。
- 如何找到最合适的 CDN 节点?通过 GSLB 找到距离请求地址最近的 CDN 节点。
- 如何防止静态资源被盗用?可以利用 Referer 防盗链 + 时间戳防盗链 。
缓存代理系统
CDN有的核心能力有两个,一个是缓存,一个是回源。
缓存系统:是 CDN的另一个关键组成部分,会有选择地缓存那些最常用的资源。
其中有两个衡量CDN服务质量的重要指标:
- 命中率:命中次数与所有访问次数之比。
- 命中:用户访问的资源恰好在缓存系统里,可以直接返回给用户。
- 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比。
命中率越高越好,回源率越低越好。
缓存系统也可以划分出层次,分成一级缓存节点和二级缓存节点。
-
一级缓存配置高一些,直连源站,二级缓存配置低一些,直连用户。
-
回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,可以有效地减少真正的回源。
回源、预热、刷新
- 回源:访问的资源不在 CDN 节点中,CDN 节点将请求源站获取资源。
- 预热:将源站的资源同步到 CDN 的节点中。用户首次请求资源就可以直接从 CDN 节点中取,无需回源。
- 刷新:如果资源有更新的话,可以删除 CDN 节点上缓存的资源,当用户访问对应的资源时直接回源获取最新的资源,并重新缓存。
GSLB 全局负载均衡
GSLB (Global Server Load Balance,全局负载均衡):是 CDN 的大脑,负责多个 CDN 节点之间相互协作。
- 最常用的是基于 DNS 的 GSLB。
- GSLB 内部可以看作是 CDN 专用 DNS 服务器和负载均衡系统的组合。
详细步骤
- 浏览器向 DNS 服务器发送域名请求;
- DNS 服务器根据 CNAME 别名记录直接?向 GSLB 发送请求;
- CNAME 指向
CDN的全局负载均衡系统 IP 地址;
- CNAME 指向
- GSLB (根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标来综合判断),返回性能最好、最合适的(通常距离请求地址最近)的 CDN 节点(边缘服务器,真正缓存内容的地方)的 IP 地址给浏览器;
- 边缘节点:缓存了源站内容的代理服务器。用户在上网时不用直接访问源站,而是访问离他“最近的”一个 CDN 节点。
- 浏览器直接访问指定的 CDN 节点。

如何防止资源被盗刷?
为了防止静态资源被盗用,可以利用 Referer 防盗链 + 时间戳防盗链 。
-
Referer 防盗链:通过 HTTP 请求头里的 Referer 字段获取到当前请求的来源页面地址,确定请求是否来自合法的网站,对请求进行限制。
- 缺点:不过,如果站点的防盗链配置允许 Referer 为空的话,通过隐藏 Referer,可以直接绕开防盗链。
-
时间戳防盗链:安全性更强一些。加密的 URL 具有时效性,过期之后就无法再被允许访问。通常有两个参数:
-
wsSecret签名字符串:一般是通过对用户设定的加密字符串、请求路径、过期时间通过 MD5 哈希算法取哈希的方式获得。 -
wsTime过期时间1
2// 时间戳防盗链 URL 示例 http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
-
-
其它:IP 黑白名单配置、IP 访问限频配置等机制来防盗刷。