引入

  1. CDN 的全称是 (Content Delivery Network),即内容分发网络。
  2. 组成: 分布式存储 + 负载均衡 + 网络请求的重定向 + 内容管理 + 全局的网络流量管理,后两项为核心。内容服务基于缓存服务器,也称作代理缓存。
  3. 将源站的资源缓存到位于全球各地的 CDN 节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都从源站获取。
  4. 解决由于网络带宽小、用户访问量大、网点分布不均等原因,避免网络拥塞、缓解源站压力,提高用户访问网站的响应速度。

CDN 回源

  1. 回源是 CDN 领域的专用词,指的是 CDN 缓存服务器从源站获取所需要分发的资源。
  2. CDN 缓存服务器一般是不会主动回源的,只有在缓存服务器缺少用户请求的资源时(可能是该资源 CDN 缓存服务器没有缓存,也可能是缓存过期),CDN 缓存服务器才会向源站发起请求,获取所需要分发的资源。
  3. 通常有三种情况:
    • CDN 节点没有对应资源时主动到源站获取资源
    • 缓存失效后,CDN 节点到源站获取资源
    • CDN 管理后台或者使用开放接口主动刷新

CDN 工作原理

调度原理

传统网络访问过程

  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的 ip 地址
  2. LocalDns 向 ROOT DNS 查询域名的授权服务器(这里假设 LocalDns 缓存过期)
  3. ROOT DNS 将域名授权 dns 记录回应给 LocalDns
  4. LocalDns 得到域名的授权 dns 记录后,继续向域名授权 dns 查询域名的 ip 地址
  5. 域名授权 dns 查询域名记录后,回应给 LocalDns
  6. LocalDns 将得到的域名 ip 地址,回应给用户端
  7. 用户得到域名 ip 地址后,访问站点服务器
  8. 站点服务器应答请求,将内容返回给客户端

CDN 访问过程

用户-本地 DNS-根 DNS-授权 DNS-智能调度 DNS-CDN 节点 IP

  1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的 ip 地址
  2. LocalDns 向 ROOT DNS 查询域名的授权服务器(这里假设 LocalDns 缓存过期)
  3. ROOT DNS 将域名授权 dns 记录回应给 LocalDns
  4. LocalDns 得到域名的授权 dns 记录后,继续向域名授权 dns 查询域名的 ip 地址
  5. 域名授权 dns 查询域名记录后(一般是 CNAME),回应给 LocalDns
  6. LocalDns 得到域名记录后,向智能调度 DNS 查询域名的 ip 地址
  7. 智能调度 DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的 CDN 节点 ip 地址回应给 LocalDns
  8. LocalDns 将得到的域名 ip 地址,回应给用户端
  9. 用户得到域名 ip 地址后,访问站点服务器
  10. CDN 节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)

缓存原理

如果用户首次访问个数据,数据会从源服务器缓存到 CDN 服务器上,当有其他用户在再次访问这些数据的时候,数据会从 CDN 服务器反馈给用户

  1. 用户输入 URL,浏览器将解析过后的域名发给 DNS 服务器
  2. CDN 返回该域名对应的 CNAME,此时浏览器需要再次对获得的 CNAME 进行解析,才能得到 CDN 缓存服务器的 IP 地址。在此过程中全局负载均衡 DNS 解析服务器会将用户的访问请求定位到离用户最近、负载最轻的 CDN 缓存服务器上。这种技术也被称为“DNS 重定向”。DNS 服务器不是为每个请求返回相同的 IP 地址,计算出距离这个用户最近的 CDN 服务器,于是返回一个悉尼 CDN 节点的 IP 地址。这种方法也不一定是最优的,因为地理位置上最近的两个点,延迟可能反而很高。
  3. 再次解析后,浏览器得到 CDN 缓存服务器的实际 IP 地址,向缓存服务器发起请求。
  4. 缓存服务器根据浏览器提供的域名,通过内部 DNS 解析得到此域名源服务器的真实 IP 地址,再由缓存服务器向该服务器发起访问请求。
  5. 缓存服务器拿到数据后,一方面将数据发回浏览器,另一方面进行本地保存,以备后用。之后再次访问,数据将从 CDN 缓存服务器中被返回。CDN 不会永久保存数据,可以设置 CDN 的刷新频率,来达到数据的更新。
  6. 浏览器得到由缓存服务器发回的数据,并将其显示出来。

技术手段

  1. 高速缓存: 适用于静态内容
  2. 镜像站点服务器: 让内容直截了当地进行分布,适用于静态和准动态的数据同步。

网络架构

当用户访问加入 CDN 服务的网站时,域名解析请求将最终交给全局负载均衡 DNS 进行处理。全局负载均衡 DNS 通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户能够得到快速的服务。同时,它还与分布在世界各地的所有 CDN 节点保持通信,搜集各节点的通信状态,确保不将用户的请求分配到不可用的 CDN 节点上,实际上是通过 DNS 做全局负载均衡。

CDN 节点组成:

  1. 负载均衡设备: 负责每个节点中各个 Cache 的负载均衡,保证节点的工作效率;同时,负载均衡设备还负责收集节点与周围环境的信息,保持与全局负载 DNS 的通信,实现整个系统的负载均衡。
  2. 高速缓存服务器: 负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。
  1. 中心: 指 CDN 网管中心和 DNS 重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房。
  2. 边缘: 指异地节点,CDN 分发的载体,主要由 Cache 和负载均衡器等组成。

动态 CDN 特点

通过智能路由、多线回源、协议优化、数据压缩等技术,达到加速目的

  • 首页加载速度更快
  • 更可靠的连接(只要负责连接边缘服务器,如果直接走回源线路的话,线路会很长,不可靠)

常见问题

CDN 能缓存接口吗

  1. 在一般情况下,CDN 只会对 HTTP GET 请求的 URL 进行缓存,而 HTTP POST 请求的数据是不进行缓存的。因为 HTTP POST 请求中的数据有可能是用户的个人信息或者其他重要数据,一旦被缓存下来就会存在安全问题。
  2. 在一些特殊情况下,CDN 也可以缓存服务接口。比如,当 CDN 作为反向代理服务器(Reverse Proxy)时,CDN 会缓存后端服务的响应内容并且将响应结果返回给用户,这时候 CDN 就会缓存服务接口。

图片各格式的区别

  1. PNG: PNG 是一种无损压缩格式,支持透明度和高品质图像,最适合用于对精度和细节要求较高的图像,但文件体积较大。
  2. JPG/JPEG: JPG 是一种有损压缩格式,可以压缩图像文件尺寸而不影响图像质量,适用于对文件大小有限制的情况,但对于较大的文件,它可能会导致失真。不支持透明度
  3. BMP: BMP 是一种无压缩的图像格式,可以保持完美的图像质量,但是文件体积很大,适合用于处理要求高质量的文件。
  4. SVG: SVG 是一种矢量图形语言,可无限缩放而不失真,支持亚像素级渲染,适合用于网页与移动设备。
  5. TIFF: TIFF 是一种无损压缩格式,支持多种色彩模式,可用于高品质打印和艺术品的制作,但文件体积较大。
  6. WebP: 由谷歌开发的 WebP 格式是一种无损压缩图像格式,与 JPG 相比,可大幅减少文件体积,但在一些老旧的浏览器中可能不受支持。
    • 有损 WebP 压缩使用预测编码对图像进行编码,相同 VP8 视频编解码器用于压缩视频中的关键帧的方法。预测编码使用相邻像素块中的值来预测值在一个块中,然后只编码差异。
    • 无损 WebP 压缩使用已经看到的图像片段,以便精确重建新像素。如果没有,它也可以使用本地调色板 找到有趣的匹配。
  7. GIF: GIF 是一种支持动画和透明度的图像格式,对于一些小的简单动画效果,它是最好的选择,但对于大多数图像类型,它可能会有限制和色彩限制。