CDN 原理与选型
你的服务器在美国,但用户在东南亚。没有 CDN,每次请求都要跨太平洋,延迟高达 200ms+。CDN 把内容缓存在离用户最近的节点,延迟可以降到 20ms 以内。
CDN 工作原理
graph TD
subgraph 没有 CDN
U1[用户 - 新加坡] -->|200ms| S1[源服务器 - 美国]
end
subgraph 有 CDN
U2[用户 - 新加坡] -->|15ms| E[CDN 边缘节点 - 新加坡]
E -->|缓存命中| U2
E -->|缓存未命中| S2[源服务器 - 美国]
S2 -->|内容| E
end
CDN 的核心机制:
1. 用户请求 https://example.com/image.jpg
2. DNS 把请求导向最近的 CDN 边缘节点
3. 边缘节点检查缓存:命中 → 直接返回;未命中 → 回源服务器获取并缓存
4. 下次同地区用户请求同一资源,直接从边缘节点返回
CDN 的核心价值
| 价值 | 说明 |
|---|---|
| 降低延迟 | 从离用户最近的节点返回内容 |
| 减少源服务器压力 | 大量请求由 CDN 边缘处理,不到达源服务器 |
| 抵御 DDoS 攻击 | 分散流量,隐藏源服务器 IP |
| 全球加速 | 静态资源(图片、CSS、JS)全球快速访问 |
| 自动 SSL | CDN 统一处理 HTTPS,简化证书管理 |
主流 CDN 对比
| CDN | 免费计划 | 节点数 | 特点 | 适合场景 |
|---|---|---|---|---|
| Cloudflare | ✅ 有(功能全) | 300+ 城市 | 全套安全 + 性能,免费计划非常强 | 独立站、SaaS、博客 |
| AWS CloudFront | 12 个月免费 | 400+ 节点 | 深度集成 AWS 服务 | AWS 生态用户 |
| Akamai | ❌ | 4000+ 节点 | 企业级,最全球 | 大型企业 |
| Fastly | ❌ | 60+ 节点 | 配置灵活,实时缓存清除 | 技术团队强的公司 |
| BunnyCDN | ❌ | 110+ 节点 | 价格低($0.01/GB) | 价格敏感的独立开发者 |
独立站和中小型 SaaS 的推荐:Cloudflare,免费计划足够覆盖大多数需求。
哪些内容适合 CDN 缓存
| 类型 | CDN 缓存 | 说明 |
|---|---|---|
| 图片(PNG、JPG、WebP) | ✅ 强烈推荐 | 体积大,访问频繁 |
| CSS、JavaScript | ✅ 推荐 | 静态资源,变化少 |
| 字体文件 | ✅ 推荐 | 不变动的静态资源 |
| HTML 页面 | ⚠️ 谨慎 | 动态内容慎用,需要仔细设置缓存规则 |
| API 响应 | ⚠️ 谨慎 | 用户个性化数据不能缓存 |
| 购物车、支付页面 | ❌ 不要缓存 | 必须实时,缓存会导致数据混乱 |
CDN 与 DNS 的关系
接入 CDN 后,你的域名 DNS 需要指向 CDN,而不是直接指向服务器:
graph LR
A["example.com\nDNS: CNAME → CDN"] --> B[CDN 边缘节点]
B -->|源服务器 IP(隐藏)| C[你的服务器]
B -->|缓存内容| D[用户浏览器]
Cloudflare 的优势:同时作为 DNS 托管商和 CDN,切换只需要把 DNS 代理状态从灰色云(仅 DNS)改为橙色云(DNS + CDN 代理)。
下一节:Cloudflare 接入实战——从 DNS 托管到性能优化的完整配置步骤。