返回文章

CDN 技术详解与问题分析

目录


CDN 的不同用法

同资源多份缓存

  • 描述:通过 Vary: Accept-Encoding 实现同资源多份缓存。
  • 实现原理:
    • 源站返回响应头 Vary: Accept-Encoding,CDN 会识别该头部。
    • 当客户端请求时,如果带上 Accept-Encoding: gzip,CDN 返回 Gzip 压缩版本;如果客户端不支持 Gzip,则返回普通版本。

Auto Polyfill

  • 描述:针对不同浏览器版本提供不同的 Polyfill。
  • 实现原理:
    • 使用自定义头部(如 User-Agent 集合)来区分浏览器版本。
    • 源站返回 Vary 头部,CDN 根据客户端的 User-Agent 提供对应的 Polyfill 文件。

Auto WebP/AVIF

  • 描述:根据客户端支持的图片格式动态返回 WebP 或 AVIF 格式。
  • 实现原理:
    • 客户端请求头带上 Accept: image/avif,CDN 自动返回 AVIF 图片格式。
    • 如果客户端不支持 AVIF,则返回默认格式(如 JPEG 或 PNG)。

动态加速

  • 描述:通过网络专线或 CDN 路由优化提升动态请求性能。
  • 实现原理:
    • 路由优化:通过改变 BGP 选路路径,结合多路探测技术,选择最优链路(基于丢包率、RTT、整体下载时间等指标)。
    • IP 获取:
      • HTTP 请求:CDN 通过 X-Forwarded-For 或 ORIG_CLIENT_IP 标记用户 IP。
      • HTTPS 请求:由于加密报文无法解密,CDN 将用户 IP 放入 TCP Option 中,避免解密 HTTPS 报文。

举个具体例子: 如果用户访问html请求,CDN回源如果有配置动态加速,不是走的公网,走的CDN优化过的专线那么传输时间会更快。

Prefetch 加速

  • 描述:提前将静态资源从源站加载到 CDN 边缘节点。
  • 实现原理:
    • DNS 解析时,权威 DNS 返回 CNAME 指令指向 CDN 全局调度器。
    • CDN 从源站获取 HTML 文件并解析出图片 URL,提前缓存到边缘节点。

CDN 场景问题

  1. CDN 节点故障导致 HTML 请求超时:

    • 可能原因:节点宕机或网络异常。
    • 解决方案:切换到其他可用节点或回源。
  2. 新增节点丢包率 100%:

    • 可能原因:网络配置错误或硬件故障。
    • 解决方案:检查网络设备和配置,确保链路正常。

调度方式

  1. 基于成本:

    • 描述:在某些国家节点少但访问量大的情况下,为了降低成本,可以将流量调度到其他国家的节点。
  2. 基于优先级:

    • 描述:高优先级用户的调度精准率更高,确保优质用户体验。

指定缓存时间

  • 实现方式:通过响应头中的 s-maxage 指定 CDN 缓存时间。
  • 作用:避免 HTML 在浏览器端缓存,导致 PV 计算不准确。

IVS 架构

  • LVS(Linux Virtual Server):

    • 一种基于 Linux 的负载均衡解决方案,能够将用户请求分发到多个后端服务器,提高系统可用性和扩展性。
  • Full NAT(全地址转换):

    • 将进入 LVS 的请求源 IP 和端口号转换为 LVS 自身的 IP 和端口号,然后转发到后端真实服务器。
  • 四层转发(L4 Forwarding):

    • 基于传输层(TCP/UDP)进行负载均衡,效率高但灵活性较低。
  • RealServer(真实服务器):

    • 承担具体业务逻辑的服务器。
  • Linux 内核 TCP Kernel:

    • 处理 TCP 协议栈,解析 TCP 报文并提取相关信息。

CDN 的问题

  1. 覆盖式发布导致缓存不生效:

    • 原因:新版本文件未及时刷新缓存。
    • 解决方案:主动刷新 CDN 缓存。
  2. 带时间戳可能导致缓存击穿:

    • 原因:每次请求的时间戳不同,导致缓存失效。
    • 解决方案:去掉时间戳或使用固定版本号。

专业技术

  • CDN 是网络加速:
    • 一般将资源推送到 OSS,然后刷新 CDN 缓存。

案例

  • 用 CDN 还是 OSS:
    • CDN 更适合动态加速和全球分发,OSS 更适合存储静态资源。

Vercel CNAME 优化

  • CNAME Value:cname-china.vercel-dns.com
  • 特点:Vercel 针对中国网络做了专门优化,提升访问速度和稳定性。

CDN 的作用

  • 定义:CDN 是一种分布式网络,用于缓存和分发静态资源。
  • 功能:
    • 将静态资源缓存到离用户最近的边缘节点,减少延迟。
    • 提升资源加载速度,改善用户体验。
    • 减轻源站的负载压力。
  • 适用场景:适用于高频访问的静态资源(如图片、CSS、JavaScript 文件等)。

源站的角色

  • 定义:源站是资源的原始存储位置,通常是一个服务器或服务集群。
  • 功能:
    • 当 CDN 缓存未命中时,请求会回源到源站获取资源。
    • 源站负责提供最新的资源版本。
  • 特点:
    • 源站通常是动态内容的处理中心。
    • 在静态资源分发中,源站更多扮演后备角色。

OSS 的本质

  • 定义:OSS(对象存储服务)是一种高可用、高可靠的云存储服务。
  • 功能:
    • 存储海量的静态资源(如图片、视频、文档等)。
    • 提供高并发访问能力,支持全球加速。
  • 本质:OSS 本质上是一个存储服务,专注于数据的持久化和管理。
  • 优势:
    • 高扩展性:支持海量文件存储。
    • 成本低:按需付费,适合大规模存储需求。
    • 可靠性高:多副本存储,保障数据安全。

协作流程

  1. 优先走 CDN:

    • 用户请求资源时,首先尝试从 CDN 获取。
    • 如果 CDN 缓存命中,则直接返回资源,无需访问源站。
  2. 回源到源站:

    • 如果 CDN 缓存未命中,请求会回源到源站。
  3. 源站走 OSS:

    • 源站接收到请求后,从 OSS 中获取资源。
    • OSS 作为底层存储服务,提供资源的最终存储和管理。
  4. 更新缓存:

    • 源站返回资源后,CDN 会缓存该资源,以便后续请求直接从 CDN 获取。

References