CDN架构与工作原理
约 1845 字大约 6 分钟
cdnarchitecture
2025-07-13
概述
CDN(Content Delivery Network)是由分布在全球各地的边缘服务器组成的网络,通过将内容缓存到离用户最近的节点,减少延迟、提高可用性和降低源站负载。本文深入解析CDN的架构设计、路由机制和优化策略。
CDN拓扑结构
关键组件:
| 组件 | 说明 |
|---|---|
| Origin Server | 源站,存储原始内容 |
| Origin Shield | 源站前的缓存层,合并回源请求 |
| PoP (Point of Presence) | 边缘接入点,包含多台缓存服务器 |
| Edge Server | 边缘服务器,直接响应用户请求 |
| Mid-Tier Cache | 中间层缓存,减轻源站压力 |
DNS调度
CDN最常用的调度机制是基于DNS的智能解析:
DNS配置示例:
# 源站DNS配置(使用CNAME接入CDN)
www.example.com. IN CNAME www.example.com.cdn.cloudflare.net.
# CDN的权威DNS会根据请求来源返回最近的边缘节点IPAnycast路由
除DNS调度外,许多CDN使用Anycast技术:同一IP地址宣告在多个PoP,利用BGP路由将用户引导到最近的节点。
Anycast vs DNS调度:
| 特性 | Anycast | DNS调度 |
|---|---|---|
| 生效速度 | 即时 | 受TTL影响 |
| 粒度 | 网络层(IP包级别) | DNS查询级别 |
| 精确度 | 基于BGP路由 | 基于LDNS位置 |
| DDoS防护 | 天然分散攻击流量 | 攻击可能集中在单IP |
| 协议支持 | TCP/UDP | 不限 |
缓存层级(Cache Hierarchy)
缓存命中率优化:
命中率提升策略:
1. 合理设置缓存Key(避免不必要的变体)
2. 规范化请求参数(排序Query String)
3. 使用Origin Shield减少回源
4. 预热热门内容
5. 设置合理的TTL
缓存Key组成(通常):
cache_key = scheme + host + path + query_string
# 可自定义忽略某些参数缓存失效(Cache Invalidation)
# Cache-Control头部设置
# 可缓存,最长1小时
Cache-Control: public, max-age=3600
# 可缓存但每次需要验证
Cache-Control: public, no-cache
# 或
Cache-Control: public, max-age=0, must-revalidate
# 不缓存
Cache-Control: private, no-store
# CDN可缓存,浏览器不缓存
Cache-Control: s-maxage=3600, max-age=0
# 过期后在CDN更新期间可用旧缓存
Cache-Control: public, max-age=3600, stale-while-revalidate=60# Cloudflare缓存清除API
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" \
--data '{"files":["https://example.com/image.jpg"]}'
# 清除所有缓存
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" \
--data '{"purge_everything":true}'
# 按标签清除(Cache-Tag)
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache" \
-H "Authorization: Bearer {api_token}" \
--data '{"tags":["product-page","homepage"]}'Origin Shield
Origin Shield是源站前的保护层,所有回源请求都通过单一Shield节点,避免多个PoP同时回源导致源站过载。
动态内容加速
CDN不仅能缓存静态内容,也能加速动态内容(不可缓存的API请求等):
动态加速原理:
用户 → 边缘节点 → CDN内部骨干网(优化路由) → 源站
优势:
1. 用户到边缘节点的TCP握手在本地完成(低延迟)
2. CDN骨干网质量优于公网(更稳定)
3. 边缘到源站保持长连接(避免重复握手)
4. 智能路由避开网络拥塞点视频流优化
HLS视频CDN配置示例(Nginx):
location ~ \.m3u8$ {
# 播放列表短时间缓存
proxy_cache_valid 200 5s;
add_header Cache-Control "public, max-age=5";
}
location ~ \.ts$ {
# 视频分片长时间缓存
proxy_cache_valid 200 24h;
add_header Cache-Control "public, max-age=86400";
}CDN安全防护
CDN安全功能:
1. DDoS防护
- L3/L4: Anycast分散流量 + 自动流量清洗
- L7: WAF规则 + Rate Limiting + Bot Management
2. WAF (Web Application Firewall)
- SQL注入检测
- XSS防护
- OWASP Top 10规则
3. Bot Management
- JavaScript Challenge
- CAPTCHA
- 行为分析
4. Zero Trust
- mTLS认证
- JWT验证
- Access PolicyCDN性能指标
# 关键指标
TTFB (Time to First Byte) # 首字节时间
Cache Hit Ratio # 缓存命中率(目标 > 90%)
Origin Offload # 源站卸载比例
Bandwidth Saved # 节省的带宽
P50/P95/P99 Latency # 延迟百分位
# 监控HTTP响应头判断缓存状态
curl -I https://example.com/image.jpg
# 典型响应头:
# cf-cache-status: HIT # Cloudflare缓存命中
# x-cache: Hit from cloudfront # CloudFront缓存命中
# age: 3600 # 缓存已存在3600秒
# x-served-by: cache-hkg... # 服务节点位置总结
CDN通过分布式缓存和智能路由,将内容推送到离用户最近的位置。从DNS调度到Anycast路由,从静态内容缓存到动态内容加速,CDN已成为现代Web架构的标配。在使用CDN时,需要关注缓存策略设计、缓存失效管理、Origin Shield配置以及安全防护等方面,以最大化CDN的价值。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于