1. 测试准备与总体思路
准备同一套视频源、相同缓存规则(Cache-Control、Expires)、相同分段(HLS/DASH)和清晰的对比矩阵。小分段:a) 创建稳定的原点(origin)服务器并记录日志;b) 配置多个CDN供应商的接入并保持原始资源一致;c) 设计测试场景:冷缓存、热缓存、断网切换、不同带宽与延迟。
2. 构建测试资源(HLS/DASH)
生成固定质量与多码率的分段:a) 使用ffmpeg生成HLS:ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -hls_time 4 -hls_list_size 0 out.m3u8;b) 上传到原点并确认每个segment可通过HTTP访问;c) 设置合理的Cache-Control(例如 public, max-age=86400)及版本化URL方便失效控制。
3. 基本请求与头信息检查方法
验证缓存命中与头部信息:a) curl -s -D - -o /dev/null "https://cdn.example.com/path/segment.ts" 可查看响应头(X-Cache、Age、Cache-Control);b) curl -s -o /dev/null -w "%{time_starttransfer}\n" URL 获取TTFB(Time to first byte);c) 记录每次请求的X-Cache=HIT/MISS并导出为CSV。
4. 模拟用户播放与ABR行为测试
用自动化工具模拟真实播放器:a) 使用Chrome + Puppeteer或Selenium打开播放页面并启用网络日志;b) 使用tc网络限流模拟不同带宽:tc qdisc add dev eth0 root tbf rate 1000kbit burst 32k latency 400ms(测试后删除);c) 记录首帧时间、启动延迟、缓冲次数与缓冲总时长(通过MediaPlaybackQuality或CDN日志计算)。
5. 并发与压力测试(段级请求)
测试边缘节点吞吐能力:a) 使用wrk或vegeta对固定segment并发压测:wrk -t12 -c400 -d30s --latency "https://cdn.example.com/path/segment.ts";b) 监控响应码、95/99百分位延迟和带宽;c) 对比不同CDN在相同并发下的成功率与延时分布。
6. 地域与DNS解析控制的多节点测试
从不同地理位置验证边缘表现:a) 使用公网VPS或云的不同地域执行相同curl脚本;b) 通过curl --resolve "cdn.example.com:443:1.2.3.4" 强制IP测试特定节点;c) 用traceroute/mtr排查网络路径与跳数差异。
7. 统计指标计算与日志解析
核心指标与计算方法:a) 缓存命中率 = hits / (hits + misses),可从CDN响应头或服务器日志统计;b) 启动延迟(Startup time)= 首字节时间 + 首帧呈现延迟;c) 缓冲比(Rebuffering ratio)= 总缓冲时间 / 播放总时长;d) 平均码率与码率切换次数通过播放器ABR日志计算。
8. 常见问题:如何判断是DNS问题还是CDN回源慢?
问:请求慢要先定位到DNS解析、TCP/SSL握手还是回源延迟吗?
答:是。步骤:1) 使用dig+time测DNS解析;2) curl -w "%{time_namelookup} %{time_connect} %{time_pretransfer} %{time_starttransfer} %{time_total}\n" 检查各阶段时间;3) 若time_starttransfer显著高于connect,则偏回源或边缘处理;结合traceroute和边缘日志进一步确认。
9. 常见问题:如何准确统计缓存命中率?
问:单靠X-Cache头够不够统计命中率?
答:X-Cache可快速验真,但存在差异。推荐同时使用:1) 大量并发请求取样统计X-Cache;2) 汇总CDN供应商提供的边缘访问日志(更准确,含miss原因);3) 对比原点请求量下降幅度验证有效命中。
10. 常见问题:测试完成后如何形成可比报告?
问:对比多个CDN的测试结果怎样展示才有说服力?
答:输出定量与定性结果:1) 表格列出缓存命中率、TTFB中位/95/99、启动延迟、缓冲率、成功率;2) 使用时序图展示并发下延迟曲线;3) 附上原始curl/wrk脚本与环境(带宽、地理位置、时间),便于复现。