1. 目标:通过CDN缓存视频减少回源流量,降低带宽成本;2. 准备:确认视频格式(MP4/HLS/DASH)、确认Origin服务器能支持Range请求与正确的CORS头;3. 工具:浏览器、curl、CDN控制台或CLI、日志与监控(如Prometheus/CloudWatch)。小分段:a) 列出热门视频并统计流量;b) 确认是否已有CDN接入;c) 备份现有配置以便回滚。
2. CDN缓存基于请求路径与缓存规则(TTL、Cache-Control、缓存Key);视频常用两种交付方式:整体文件(MP4)与分片(HLS/DASH)。小分段:a) MP4适合小文件或点播短视频;b) HLS/DASH分片利于并行缓存与逐段缓存;c) Range请求用于断点续传和播放器按需拉取大文件。
3. 步骤:1) 在高峰期抓取CDN与Origin的流量报表;2) 统计回源字节数与命中率;3) 按视频分列出Top N消耗。小分段:使用curl检测头信息:curl -I https://cdn.example.com/video.mp4,查看Cache-Control、Age、X-Cache等字段。
4. 步骤:1) 在Origin服务器上设置静态资源头:Cache-Control: public, max-age=31536000, immutable(对长期不变的文件);2) 对易变资源使用短TTL并配合版本号;3) 在CDN控制台创建规则优先级:视频路径/*.mp4 或 /hls/*.m3u8。小分段:a) 对m3u8使用较短TTL(例如60s),对.ts或分片使用长TTL(3600s-86400s);b) 配置If-Modified-Since/ETag支持以减少回源。
5. 步骤:1) 将视频打包为分片(例如HLS: .m3u8 + .ts/.fmp4),每片时长2-6秒;2) 上传分片并确保分片URL包含内容hash或版本号;3) CDN缓存分片并将播放列表m3u8设置短TTL以便切换清晰度或紧急下线。小分段:a) 分片命名示例:video_v1_seg0001.ts;b) 当更新视频时,仅改变m3u8或version字段即可,避免清理所有缓存。
6. 步骤:1) 确认Origin返回Accept-Ranges: bytes;2) 在CDN控制台启用Range请求缓存(有些厂商默认支持);3) 测试:curl -r 0-1023 -I https://cdn.example.com/bigvideo.mp4,检查返回206 Partial Content。小分段:a) Range缓存能让不同用户共享已缓存片段;b) 对大文件启用分段缓存显著降低回源。
7. 步骤:1) 设定缓存Key只包含必要部分:主机+路径+分片名,去掉动态query(如token、ts);2) 如果使用签名URL,令签名只在边缘验证,但缓存Key不包含签名;3) 在CDN规则中设置“忽略参数列表”。小分段:a) 示例:/videos/abc/seg1.ts?token=xxx → 缓存Key为 /videos/abc/seg1.ts;b) 若确有必要区分参数,明确白名单。
8. 步骤:1) 热点视频可预先上传至CDN边缘或使用预热API推送;2) 遇到回源峰值启用origin shield或回源限速;3) 清理策略:使用版本化优先,必要时通过CDN API清理单个分片或m3u8。小分段:a) 预热示例:调用CDN provider prefetch API上传分片列表;b) 回源故障时切换到降级播放列表。
9. 步骤:1) 开启边缘日志并统计命中率、出边流量、回源流量;2) 按需计算带宽节省:节省(GB)=出边流量 - 回源流量;成本节省=节省*回源带宽单价;3) 持续优化:提高命中率到95%通常能显著下降成本。小分段:a) 使用ELK/云监控汇总日志;b) 每周校验并调整TTL与分片策略。
Q1:为什么我的视频仍然频繁回源?
A1:常见原因包括Cache-Control未设置或被动态参数打散缓存Key、播放器使用随机query string、m3u8 TTL太短或Origin不支持正确的缓存头。解决:检查响应头、统一缓存Key、给分片长TTL并版本化m3u8。
Q2:如何在不影响更新速度的前提下降低回源?
A2:采用m3u8短TTL+分片长TTL的组合,视频更新时只替换m3u8或使用版本号;对于即时下线场景,可在控制台清理单条播放列表或通过版本切换避免大规模清理。
Q3:CDN缓存是否适合直播?
A3:直播场景差异大,通常使用低延迟HLS/LL-DASH和边缘转发为主,CDN边缘可缓存切片短期缓冲以减回源。对纯实时要求极高的直播,缓存作用有限,但对回看和时移功能非常有效。
