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-ForORIG_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 Valuecname-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 获取。

当发布很酷的东西时,请第一时间通知我

订阅电子邮件,以获得我的最新文章。我不会向您发送垃圾邮件。随时取消订阅。