CDN静态资源加速

概述

一般在我们的系统中存在着大量的静态资源请求

  • 对于移动 APP 来说,这些静态资源主要是图片、视频和流媒体信息;
  • 对于 Web 网站来说,则包括了 JavaScript 文件、CSS 文件、静态 HTML 文件等等

一般这些静态资源是部署在Nginx 等 Web 服务器上,由于请求量大常常占据了很高的带宽,这时会出现访问速度慢带宽被占满影响动态请求的问题;所以对于静态资源也需要考虑对其进行访问加速的问题。

所以我们考虑在业务服务器的上层增加一层特殊的缓存,用来承担绝大部分对于静态资源的访问,这一层特殊缓存的节点需要遍布在全国各地,这样可以让用户选择最近的节点访问。这就是CDN

CDN关键技术

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。

CDN的关键技术在于两点:

  • 如何将用户的请求映射到 CDN 节点上;
  • 如何根据用户的地理位置信息选择到比较近的节点。
  1. 如何让用户的请求到达 CDN 节点

    这就需要依靠 DNS 来帮我们解决域名映射的问题了。

    image-20230502111709920

    可以将系统域名解析结果的 CNAME 配置到 CDN 提供的域名上,这样用户在请求这个地址时,DNS 服务器会将域名解析到 CDN域名上,然后再将这个域名解析为 CDN 的节点 IP,这样就可以得到 CDN 上面的资源数据了。

    缺点:域名的解析过程有可能需要跨越公网做多次 DNS 查询,在性能上是比较差的。

    解决:DNS 解析结果需要做本地缓存,降低 DNS 解析过程的响应时间。

  2. 如何根据用户的地理位置信息选择到比较近的节点。

    利用GSLB(Global Server Load Balance,全局负载均衡),对于部署在不同地域的服务器之间做负载均衡。

    image-20230502112543672

    GSLB 可以通过多种策略来保证返回的 CDN 节点和用户尽量保证在同一地缘区域

    • 将用户的 IP 地址按照地理位置划分为若干个区域,然后将 CDN 节点对应到一个区域上,根据用户所在区域来返回合适的节点
    • 通过发送数据包测量 RTT 的方式来决定返回哪一个节点