CDN — 内容分发网络

CDN(Content Delivery Network,内容分发网络)通过在各地部署边缘节点,将静态资源缓存到离用户最近的位置,从而加速访问速度、降低源站压力。它是集群五层架构中的第一层。

核心原理

用户请求 → DNS 解析 → 智能 DNS 返回最近节点 IP
                     ↓
               边缘节点有缓存?→ 是 → 直接返回
                                → 否 → 回源拉取 → 缓存 → 返回

核心要点:CDN 不生产内容,只是内容的”搬运工”和”缓存工”。

智能 DNS 与 CNAME

CDN 的流量调度依赖 DNS 系统:

  • A 记录:域名 → IPv4(直连服务器)
  • CNAME:域名 → 另一个域名(CDN 专用,将解析权交给 CDN 服务商)
  • NS 记录:指定管辖 DNS 服务器

完整流程:用户请求 → LDNS → CDN 权威 DNS → 返回最优节点 IP

HTTPS / TLS

CDN 需要处理 HTTPS 证书:

  • 证书类型:DV(基础)< OV(企业)< EV(最高级)
  • TLS 握手:Client Hello → Server Hello + 证书 → 密钥交换 → 加密通信
  • HTTPS 加速:CDN 节点做 SSL 卸载,减轻源站计算压力
  • HTTP/2 多路复用:一个 TCP 连接并发多个请求,解决队头阻塞

手动配置 CDN 流程

  1. 在 CDN 控制台添加加速域名
  2. 配置缓存规则(哪些文件缓存多久)
  3. 配置回源地址(负载均衡器域名或 IP)
  4. 修改 DNS 的 CNAME 记录指向 CDN
  5. 上传 SSL 证书开启 HTTPS
  6. 等待 DNS 解析生效

CDN 架构演进

阶段架构说明
阶段1用户 → 后端应用传统单机
阶段2CDN 分发 → 应用服务器引入 CDN 加速
阶段3CDN → Nginx 静态缓存 → 应用静态文件缓存 + 动态请求分离
阶段3+CDN(静态)+ 负载均衡(动态)生产推荐:动静分离,各司其职

OpenResty 自建 CDN 缓存

OpenResty = Nginx 核心 + LuaJIT,可在 Nginx 各阶段嵌入 Lua 脚本:

Nginx 阶段Lua 钩子用途
变量设置set_by_lua设置动态变量
URL 重写rewrite_by_luaURL 重写/重定向
访问控制access_by_luaIP 黑名单/限流
内容生成content_by_lua动态生成响应
日志记录log_by_lua自定义日志

灰度发布(金丝雀发布)

通过 CDN/负载均衡的分流能力,让少量用户先体验新版本:

灰度策略:按权重 → 按 IP → 按地域 → 按用户分组
流程:小流量验证 → 持续观察 → 全量发布

相关页面