1.
准备阶段:明确测试目标与资源
- 明确目标:是测观众并发(拉流数)、主播并发(推流数)还是整体链路(端到端延迟、卡顿)。
- 硬件/网络:准备具备足够带宽的压测机(建议每台至少1Gbps上行/下行),准备多台分布式压测节点或云实例。
- 工具清单:ffmpeg(推流)、Puppeteer+headless Chrome(拉流自动化)、hls.js(播放器)、wrk/hey(HTTP并发段请求)、Prometheus+Grafana(监控)、tcpdump/iftop(抓包与带宽观察)。
2.
选择测试CDN候选并确认接入方式
- 列出候选:至少3家CDN供应商或不同产品线(全球/国内/加速/直播专线)。
- 确认接入:RTMP推流域名、HLS/HTTP拉流域名、WebRTC配置(TURN/STUN)、鉴权与签名方式,确保测试帐号、streamKey可用。
- 准备同一主播源(同一码率/分辨率)用于不同CDN的对比。
3.
搭建测试场景与流分级
- 定义场景:低码率(360p/500kbps)、中码率(720p/2Mbps)、高码率(1080p/4-6Mbps)。
- 多分辨率策略:对同一直播间做多码率输出(ABR),分别测单码率与多码率的并发影响。
- 决定协议:RTMP上行+HLS/DASH下行常见;若目标为低延迟则加入WebRTC或LL-HLS测试。
4.
构建推流与拉流模拟器
- 推流:用ffmpeg循环推本地样本视频到CDN推流域名,命令示例:
ffmpeg -re -stream_loop -1 -i sample.mp4 -c:v libx264 -preset veryfast -b:v 2000k -c:a aac -ar 44100 -b:a 128k -f flv rtmp://push.cdn.com/app/streamkey
- 拉流(轻量):使用headless Chrome+Puppeteer加载内嵌hls.js页面,保存播放开始时间、缓冲事件、卡顿次数;可在Node里并发启动N个浏览器实例模拟N个观众。
- 拉流(HTTP层面):用wrk或自定义脚本并发GET m3u8与.ts片段,测CDN边缘的HTTP吞吐。
5.
压测流程:分步递增并发
- 预热:先在目标并发的10%-20%运行10-15分钟,确认无配置问题。
- 递增策略:按照阶梯增长(例如50、100、200、500、1000、2000),每一档稳态运行时间建议5-15分钟(视片段长度与业务要求)。
- 观察点:每档记录成功率、拉流启动时间、首帧时间、卡顿率、丢包、HTTP 4xx/5xx 错误率和带宽/CPU使用率。
6.
分布式压测与地域覆盖
- 多区域节点:把拉流压力放在不同地域的实例上(CDN边缘节点分布差异会影响真实体验)。
- 并发分配:按比例分配到各区域(如:北上广、华东、海外),记录各区域的差异。
- 网络条件模拟:用tc/netem在客户端模拟丢包、延迟、抖动,测试CDN在劣质网络下的表现。
7.
监控指标与采集方法
- 关键指标:并发连接数、带宽(上/下行)、TPS(请求每秒)、错误率、首帧时延、平均播放延迟、卡顿次数、重连次数。
- 服务端指标:边缘/回源CPU、内存、带宽、连接表、磁盘I/O(如果涉及录制)。通过CDN提供的API和Prometheus抓取。
- 客户端数据:通过Puppeteer上报每个客户端日志到集中存储(S3/ES),做统计分析。
8.
如何判定“真实并发承载力”
- 判定规则示例:当并发达到某值时,任一关键指标超过阈值则视为超载(例如:卡顿率>5%,HTTP错误率>1%,CPU>75%且持续5分钟)。
- 95/99分位:关注95/99分位首帧与延迟,若95分位仍满足SLA即可认为该并发基本可用。
- 留有余量:建议把CDN标称承载力乘以安全系数(例如0.7)作为实际建议容量。
9.
结果对比与报表输出
- 对比表:把候选CDN在相同场景下的关键指标放在一张表格中(并发档、成功率、95p延迟、带宽成本)。
- 可视化:用Grafana做时间序列图、热力图(地域差异)和堆叠图(错误构成)。
- 建议输出:给出推荐CDN、备份CDN、成本/性能权衡说明与操作建议(如分流策略、回源优化)。
10.
常见问题与优化手段
- 高并发下掉帧:检查上游推流码率与边缘转封装,必要时改用低延迟协议或多码率。
- 边缘缓存穿透:优化m3u8和.ts缓存规则,使用CDN的分片预热或保留时间策略。
- 登记日志:开启完整请求日志,便于事后回放与问题定位。
11.
实战小技巧与自动化脚本思路
- 自动化:把推拉模拟器、监控采集、数据上报整合到一个CI任务,支持一键跑完整压测并生成PDF报表。
- 重现性:每次测试保留视频样本、ffmpeg命令、脚本commit id,确保对比有效。
- 成本控制:用短时间多节点并发替代长时间单节点跑,避免云费用膨胀,同时保证代表性。
12.
问:如何快速复现直播卡顿并定位是CDN问题还是回源问题?
答:先做分段定位:在边缘节点并发拉流抓取HTTP状态(m3u8/.ts)看是否边缘返回404/5xx或超时;同时直接向回源发起相同请求比较响应时间。如果边缘正常但回源慢/错误,说明回源成为瓶颈;如果回源快而边缘返回高错误率,倾向于CDN边缘问题。结合边缘/回源的CPU、带宽与连接数指标可以快速定位。
13.
问:用多少并发作为测试上限合适?
答:上限取决于业务预期与峰值预估。建议以历史峰值的1.5~2倍作为目标测试上限,并按阶梯递增法验证。若没有历史数据,可与CDN供应商确认其单边缘节点或单租户限制,再在此基础上乘以地域/节点数预测并发。
14.
问:测试完成后如何把结论落地到生产调度策略?
答:基于测试报告制定SLA与自动化调度规则,例如:当并发接近测试确认阈值时自动打开备用CDN、或按地域流量阈值进行DNS分流;同时把监控告警门限(错误率/延迟)与自动化扩容脚本关联,确保线上流量触发时能及时切换。