Skip to content

CDN 与静态化

动静分离、CDN 加速原理、静态化。

Updated View as Markdown
For humans

CDN 与静态化

静态资源(图片、JS/CSS、页面)占流量大头,但不需要应用服务器计算。动静分离把静态流量卸到 CDN,应用只服务动态请求。面试主线:CDN 怎么工作、静态化解决什么。

动静分离

类型 内容 载体
静态 图片、CSS/JS、字体、预渲染页面 CDN / 对象存储
动态 API、个性化内容 应用服务器
  • 静态资源由浏览器/边缘直接拿,不经过应用
  • 应用只处理动态请求,QPS 压力大幅下降
  • 规范实践:静态资源独立域名(static.example.com),便于 CDN 接入和 Cookie 隔离

CDN 工作原理

CDN: 边缘缓存 + 回源

  • 边缘节点:全球/全国分布的缓存服务器,用户请求被 DNS 解析到最近的节点
  • 命中:边缘有缓存直接返回,用户无感知加速
  • 回源:边缘没缓存,回源站取一次,之后本地缓存
  • 关键参数:缓存命中率(90%+ 是健康水平)、回源带宽(回源多说明命中率低)

静态化

把动态内容预渲染成静态文件:

场景 做法
页面 模板预渲染成 HTML,定期重建(数据变化时触发)
列表/详情 生成静态 JSON/HTML 放 CDN,变化时失效重建
图片处理 上传时生成多尺寸,CDN 分发

静态化收益:页面不经过应用(QPS 压力归零)、CDN 就近加速、抗流量冲击。代价:内容有延迟(重建周期内是旧数据)、发布流程复杂(重建/失效机制)。

缓存失效与版本

  • 文件名哈希:JS/CSS 带内容哈希(app.a1b2c3.js),发布即新 URL,天然失效
  • CDN 主动刷新:内容更新时调用 CDN API 刷新缓存
  • Cache-Control:静态资源长缓存(max-age=31536000),动态接口不缓存或短缓存

面试追问

  1. 动静分离解决什么? 静态流量不进应用,应用只服务动态请求。QPS 压力和带宽成本大幅下降
  2. CDN 怎么加速? 边缘节点就近响应,命中直接返回。回源只发生在冷缓存时
  3. CDN 命中率低怎么办? 查缓存头(Cache-Control 没设长缓存)、key 设计(URL 带随机参数)、预热
  4. 静态化的代价? 内容延迟(重建周期内旧数据)、发布流程复杂。适合变化不频繁的内容
  5. 静态资源怎么发布? 文件名哈希 + CDN 刷新。哈希 URL 天然缓存失效,不需要手动清缓存
Navigation

Type to search…

↑↓ navigate↵ selectEsc close