CDN 内容分发网络

摘要:依靠部署在各地的边缘服务器,根据用户位置分配最近的静态资源。以实现就近访问


目录

[TOC]

CDN 内容分发网络

分布在全国各地,主要用来处理静态资源的请求。通过CDN的负载均衡系统,智能调度边缘节点提供服务。

CDNContent Delivery/Distribution Network内容分发网络 :依靠部署在各地的边缘服务器,根据用户位置分配最近的静态资源。以实现就近访问

关键技术主要有:

  1. 内容存储:指的是静态资源,比如图片、视频、文档、JS、CSS、HTML。
  2. 分发网络技术:指的是将静态资源分发到位于多个不同地理位置机房中的服务器上,以实现就近访问
    • 进而加快静态资源的访问速度,减轻服务器以及带宽的负担。

CDN 工作原理

搞懂下面 3 个问题也就搞懂了 CDN 的工作原理:

  1. 静态资源是如何被缓存到 CDN 节点中的?通过缓存系统回源、预热、刷新将静态资源缓存到 CDN 节点中。
  2. 如何找到最合适的 CDN 节点?通过 GSLB 找到距离请求地址最近的 CDN 节点。
  3. 如何防止静态资源被盗用?可以利用 Referer 防盗链 + 时间戳防盗链

缓存代理系统

CDN有的核心能力有两个,一个是缓存,一个是回源。

缓存系统:是 CDN的另一个关键组成部分,会有选择地缓存那些最常用的资源。

其中有两个衡量CDN服务质量的重要指标:

  1. 命中率:命中次数与所有访问次数之比。
    • 命中:用户访问的资源恰好在缓存系统里,可以直接返回给用户。
  2. 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比。

命中率越高越好,回源率越低越好。

缓存系统也可以划分出层次,分成一级缓存节点和二级缓存节点。

  • 一级缓存配置高一些,直连源站,二级缓存配置低一些,直连用户。

  • 回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,可以有效地减少真正的回源。

回源、预热、刷新

  1. 回源:访问的资源不在 CDN 节点中,CDN 节点将请求源站获取资源。
  2. 预热:将源站的资源同步到 CDN 的节点中。用户首次请求资源就可以直接从 CDN 节点中取,无需回源。
  3. 刷新:如果资源有更新的话,可以删除 CDN 节点上缓存的资源,当用户访问对应的资源时直接回源获取最新的资源,并重新缓存

GSLB 全局负载均衡

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

  • 最常用的是基于 DNS 的 GSLB。
  • GSLB 内部可以看作是 CDN 专用 DNS 服务器和负载均衡系统的组合。

详细步骤

  1. 浏览器向 DNS 服务器发送域名请求;
  2. DNS 服务器根据 CNAME 别名记录直接?向 GSLB 发送请求;
    • CNAME 指向CDN的全局负载均衡系统 IP 地址;
  3. GSLB (根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标来综合判断),返回性能最好、最合适的(通常距离请求地址最近)的 CDN 节点(边缘服务器,真正缓存内容的地方)的 IP 地址给浏览器;
    • 边缘节点:缓存了源站内容的代理服务器。用户在上网时不用直接访问源站,而是访问离他“最近的”一个 CDN 节点。
  4. 浏览器直接访问指定的 CDN 节点。

img

如何防止资源被盗刷?

为了防止静态资源被盗用,可以利用 Referer 防盗链 + 时间戳防盗链

  1. Referer 防盗链:通过 HTTP 请求头里的 Referer 字段获取到当前请求的来源页面地址,确定请求是否来自合法的网站,对请求进行限制。

    • 缺点:不过,如果站点的防盗链配置允许 Referer 为空的话,通过隐藏 Referer,可以直接绕开防盗链。
  2. 时间戳防盗链:安全性更强一些。加密的 URL 具有时效性,过期之后就无法再被允许访问。通常有两个参数:

    1. wsSecret 签名字符串:一般是通过对用户设定的加密字符串、请求路径、过期时间通过 MD5 哈希算法取哈希的方式获得。

    2. wsTime 过期时间

      1
      2
       // 时间戳防盗链 URL 示例
       http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
      
  3. 其它:IP 黑白名单配置、IP 访问限频配置等机制来防盗刷。

0%