10 · CDN 与负载均衡
"为什么海外访问慢""为什么大促不挂"——答案一半在 CDN,一半在负载均衡。本篇讲 CDN 的 DNS 调度与缓存、负载均衡的调度算法与健康检查,给前端一个能听懂、能排查的版本。
速览卡
| 项 | 内容 |
|---|---|
| 一句话定位 | 静态加速与流量分发的两个基础设施 |
| 核心内容 | CDN 调度/缓存/回源、LB 算法/健康检查/会话保持 |
| 读完能回答 | CDN 怎么把请求分到最近的节点?LB 轮询就一定公平吗? |
| 相关板块 | N03 DNS | N09 代理与网关 |
一、CDN 在做什么
text
DNS 智能调度 → 就近节点 → 命中缓存直接返回 → 未命中回源| 环节 | 作用 |
|---|---|
| DNS 调度 | 按地理位置/运营商返回最近节点 IP |
| 边缘缓存 | 静态资源就近返回,省跨区带宽 |
| 回源 | 缓存未命中时到源站取,并缓存 |
二、CDN 缓存与刷新
| 概念 | 说明 |
|---|---|
| 缓存规则 | 按路径/扩展名/响应头控制 |
| 刷新 | 主动失效某条 URL 的缓存 |
| 预热 | 提前把热点资源推到边缘节点 |
| 命中率 | 边缘直接响应的比例,越高越省源站 |
前端感受:改完静态资源不上线/看到旧版,先想 CDN 缓存,再想浏览器缓存。文件名 hash 是治本手段。
三、负载均衡:把流量分到多台机器
text
LB → 按算法选择一台上游 → 转发 → 健康检查保底| 算法 | 特点 | 场景 |
|---|---|---|
| 轮询 | 依次分发,简单 | 同质化节点 |
| 加权轮询 | 按机器能力分配 | 机器规格不同 |
| 最少连接 | 分给连接数最少的 | 长连接、计算型 |
| 一致性哈希 | 同一 key 固定到同一节点 | 需要会话/缓存亲和 |
四、健康检查与优雅上下线
| 机制 | 说明 |
|---|---|
| 健康检查 | 周期性探测,摘除失败节点 |
| 优雅下线 | 停流量 → 排空存量请求 → 再停服务 |
| 会话保持 | 让同一用户固定到同一节点(有损弹性) |
五、排障要点
| 现象 | 可能原因 |
|---|---|
| 静态资源旧 | CDN 缓存未刷新 / hash 未变 |
| 某地区慢 | 该地区节点异常或未命中 |
| 时好时坏 | LB 里某台上游不健康未摘除 |
| 请求打到源站 | 命中率低 / 未配缓存规则 |
六、自检清单
- [ ] 能画出 CDN 的"调度 → 缓存 → 回源"链路
- [ ] 知道刷新、预热、命中率各是什么
- [ ] 能说清几种负载均衡算法的适用场景
- [ ] 知道健康检查与优雅下线的意义
- [ ] 能排查"改了不生效/某地慢"的基本方向
七、常见误区
| 误区 | 事实 |
|---|---|
| "CDN 只加速下载" | 也做 DDoS 防护与源站保护 |
| "轮询就是最公平" | 长请求下最少连接更合适 |
| "会话保持必须开" | 它会牺牲弹性与故障切换 |
| "刷新缓存就完事" | 文件名 hash + 缓存规则才是根治 |
八、动手练习
练习 A:看 CDN 头
打开一个常见站点,Network 里看静态资源响应头里的 CDN 标识与缓存信息。
练习 B:对比源站与 CDN
分别请求同一个静态资源的直连与 CDN 域名,对比 DNS 解析出的 IP 与响应耗时。
练习 C:读一次 LB 配置
用 Nginx upstream 配置轮询/加权/健康检查,理解三个字段分别对应本篇哪些概念。
相关文档
本区
- 03 · DNS 原理与排查 —— CDN 依赖的智能调度
- 09 · 代理与反向代理与API网关 —— LB 常由代理层承载
其他域
- 部署与 CI/CD:Docker 到云端 —— 上云后的 CDN/LB 配置
- IN 网络面试题 —— CDN 与 LB 高频题