1.
问题背景与目标
1. 目标:在CDN视频请求失败时最小化用户可见失败率并减少对源站压力。
2. 场景:玩家流媒体、短视频和直播点播的HTTP/HTTPS请求失败或超时。
3. 风险:不合理重试会造成DDoS放大、源站过载与缓存失效。
4. 要点:客户端重试、CDN缓存控制、源站保护与DNS/域名降级策略协同。
5. 指标:关注请求成功率、平均延时、源站QPS、带宽占用和错误率(%)。
2.
客户端重试策略(建议参数)
1. 重试次数:一般设置为最多3次(初始+2次重试),避免无限重试。
2. 间隔与退避:采用指数退避:第1次延迟500ms,第2次1.5s,第3次4s,带±20%随机抖动。
3. 区分错误码:4xx类不重试(客户端错误),5xx或连接超时可按策略重试。
4. 并发控制:同一资源在客户端最多允许1个并行请求,其他请求等待合并或返回缓存。
5. 指标采集:记录每次重试导致的响应时间与流量,以便策略调整(日志样例见下)。
3.
缓存策略与CDN头部建议
1. Cache-Control:短视频可用max-age=300, stale-while-revalidate=60, stale-if-error=86400。
2. CDN边缘设置:开启Origin Shield/聚合回源,减少回源连接并保持边缘LRU缓存。
3. 缓存键:包含路径+query白名单(如token除外),避免因动态参数导致缓存失效。
4. 强制缓存降级:当边缘与源站连通性差时,允许边缘返回stale内容并异步回源刷新。
5. 监控指标:边缘命中率、回源QPS、缓存命中后延时与回源失败率。
4.
源站与VPS配置与DDoS防护
1. 推荐配置示例:VPS 4 vCPU / 8GB RAM / 1Gbps 带宽,Nginx worker_connections=20000。
2. 连接池与Keepalive:设置keepalive_timeout=65、worker_processes按vCPU数配置。
3. 流量限制:在边缘与源站均配置rate limit(如每IP每秒10个连接)与全局QPS阈值。
4. DDoS防护:启用CDN层流量清洗、WAF规则与BGP黑洞策略作为后备。
5. 日志与报警:设置错误率>1%或回源延时>500ms触发自动告警并降级策略。
5.
DNS、域名与故障转移设计
1. DNS TTL:为快速切换设置短TTL(60s)用于健康检查的记录,普通CDN域名可用300s。
2. 健康检查:CDN与DNS层面均做主动健康探测,连续3次失败判定回源不可用。
3. 多源站:部署主/备两套源站并结合DNS或Anycast做流量切换。
4. 客户端回退:当CDN报错并且缓存可用时,优先使用stale缓存并异步刷新。
5. 域名解析监控:记录解析失败率及异常解析IP以防域名劫持。
6.
真实案例与配置数据示例
1. 案例:某电商直播平台双11压力测试,初始错误率2.4%,回源QPS峰值12k。
2. 采取措施:客户端重试3次(500ms、1.5s、4s),边缘缓存300s+stale-if-error,启用Origin Shield。
3. 结果:错误率降至0.3%,回源QPS降至2.1k,带宽稳定在600Mbps。
4. 配置样例表格(示例值):
| CPU | 内存 | 带宽 | Cache-TTL | 重试策略 |
| 4 vCPU | 8 GB | 1 Gbps | 300s | 3 次,指数退避 |
5. 建议:持续调整重试与TTL以业务指标为目标,避免盲目增加重试次数导致源站崩溃。
来源:开发者手册请求CDN视频失败时客户端重试与缓存策略设计建议