Skip to content

什么是 CDN ?

CDN ( Content Delivery Network/Content Distribution Network 内容分发网络)

我们可以将内容分发网络拆开来看:

  • 内容:指的是静态资源比如图片、文档、HTML。
  • 分发网络:这些静态资源分发到位于多个不同的地理位置机房中的服务器上,用户就近请求资源,加快速度,减轻服务器负担。

CDN 简易示意图

绝大部分公司都会在项目开发中使用 CDN 服务,但很少会有自建 CDN 服务的公司。基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。

我们经常拿全站加速和内容分发网络做对比,不要把两者搞混了!全站加速(不同云服务商叫法不同,腾讯云叫 ECDN、阿里云叫 DCDN)既可以加速静态资源又可以加速动态资源,内容分发网络(CDN)主要针对的是 静态资源

阿里云文档:https://help.aliyun.com/document_detail/64836.html

同一个服务在在多个不同的地方部署多份(比如同城灾备、异地灾备、同城多活、异地多活)是为了实现系统的高可用而不是就近访问。

CDN 工作原理是什么?

静态资源是如何被缓存到 CDN 节点中的?

预热:通过将资源提前缓存到 CDN 节点中,用户请求资源可以直接从 CDN 节点中取。资源更新了,可以主动删除 CDN 节点上缓存的旧资源,并强制 CDN 节点回源站获取最新资源。

回源:如果不预热或者资源缓存过期,请求CDN 节点时,CDN将请求源站获取资源,会比没有CDN更慢(两次请求)

命中率回源率 是衡量 CDN 服务质量两个重要指标。命中率越高越好,回源率越低越好。

如何找到最合适的 CDN 节点?

GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个 CDN 节点之间相互协作

  1. 浏览器向 DNS 服务器请求;
  2. DNS 服务器向 GSLB 发送请求;
  3. GSLB 返回性能最好(通常距离请求地址最近)的 CDN 节点的地址给浏览器;
  4. 浏览器直接访问指定的 CDN 节点。

GSLB 会根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标来综合判断具体返回哪一个 CDN 节点的地址。

如何防止资源被盗刷?

Referer 防盗链:根据 HTTP 请求的头信息里面的 Referer 字段限制请求的来源页面地址对请求进行限制。

不过,如果站点的防盗链配置允许 Referer 为空的话,通过隐藏 Referer,可以直接绕开防盗链。

时间戳防盗链 :时间戳防盗链的 URL 通常会有两个参数一个是签名字符串,一个是过期时间。

时间戳防盗链 URL 示例:

plain
http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
  • wsSecret:签名字符串。
  • wsTime: 过期时间。

除了 Referer 防盗链和时间戳防盗链之外,你还可以 IP 黑白名单配置、IP 访问限频配置等机制来防盗刷。

总结

  • 基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。

正在精进