1) 收集基线:用日志/监控(Prometheus/Grafana、ELK)统计峰值QPS、平均响应体大小、常见URL路径。
2) 分类资源:将资源分为静态(图片、JS、CSS)、可缓存动态(带有可缓存头的API)、不可缓存(用户即时写入、支付)。
3) 目标设定:确定CDN命中率目标(例如95%+)、回源QPS上限(例如每台origin 200 QPS)和容错目标(95百分位延迟)。
1) 静态资源:设置长TTL(Cache-Control: public, max-age=31536000, immutable),并使用文件指纹化(例如 filename.hash.js)。
2) 可缓存动态:使用短TTL或stale directives(Cache-Control: public, max-age=60, stale-while-revalidate=30, stale-if-error=300)。对相似查询使用统一缓存键(移除无关的查询参数)。
3) 缓存键:在CDN控制台配置包含Host、Path、去除Cookie/Authorization等敏感头;必要时把用户区分放到cookie或header里并排除它们以提高命中率。
1) 开启边缘缓存规则:在CDN(Cloudflare、Fastly、阿里云CDN 等)设置路径规则与TTL,逐步放开由小范围到全站。
2) 启用“Origin Shield”或“Regional POP Shield”以减少源站并发连接。
3) 在边缘启用“Serve stale on error”或类似功能,使在回源失败时继续提供过期内容,降低对回源的冲击。
1) Nginx 限流示例(在 http{} 区域定义):
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s; # 每IP 20r/s,全局可调
在 server 或 location 中应用: limit_req zone=one burst=40 nodelay;
2) 全局入口使用负载均衡器或网关做全局令牌桶:比如 Kong/Envoy 配置 rate limiting 插件,设置 global QPS 上限并返回 429/503 并带 Retry-After。
3) 对敏感路径(登录、订单)单独配置更严格的限流和验证码策略,减少攻击面。
1) 503 + Retry-After:当回源接近容量阈值,主动返回 503 并带上 Retry-After,使CDN暂停回源。
2) 服务熔断:在网关层实现熔断规则(例如当后端错误率>10%时,10秒内不再回源)。
3) 降级内容:对于动态页面采用骨架页或缓存旧版页面以保证可用性,而不是让服务完全不可用。
1) 预热:部署新版本后,通过脚本分批 curl 到常用页面以预热 CDN 缓存(避免一次性并发回源)。示例:for url in $(cat urls.txt); do curl -sS $url > /dev/null & sleep 0.05; done
2) 缓存清除:使用 CDN API 按 URL/前缀清除缓存,例如 Cloudflare:curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone}/purge_cache" -H ... -d '{"files":["https://..."]}'。批量清理要分批,以免回源瞬间涌入。
3) 验证:用 curl -I 检查响应头(Age, X-Cache, Cache-Control),命令示例:curl -sI https://example.com/path | egrep -i 'age|cache|x-cache|retry-after'

1) 工具:使用 wrk、k6、ab 做分阶段压力测试,从10%到150%流量,观察回源QPS和错误率。示例:wrk -t12 -c400 -d60s https://example.com/api/endpoint
2) 指标:关注回源QPS、origin CPU/内存、95/99百分位延迟、CDN命中率与错误代码分布。设告警阈值并自动扩容或触发限流。
3) 调整:根据测试结果调整 CDN TTL、origin 限流阈值与burst参数,再次测试直到稳定。
答:先用 curl -I 检查返回头是否存在 Cache-Control、Vary、Set-Cookie 等阻止缓存的头;检查缓存键是否包含不必要的 query/cookie;对静态资源启用指纹并设置长 TTL;对动态资源统一化 URL/参数并使用边缘缓存规则。逐步上线改动并监测命中率提升。
答:采用分级限流和智能降级:对非关键路径使用更严格缓存与缓存替代(骨架页),对关键交易流量设置优先级和更高的配额;在返回 429/503 时,提供友好消息并尽量带上 Retry-After,辅以异步重试机制以减少用户感知。
答:第一时间打开更长的边缘缓存、启用 serve-stale/Origin Shield;如果支持,临时增加 CDN 的边缘规则宽松度(例如放宽缓存键、延长TTL);并在源站启动更严格的限流与降级策略,等待缓存逐步填满后再恢复正常策略。