直播 APP 后端性能测试思路
作者信息:HHP
一、概述
直播 APP 场景中通常包含主播(+辅麦主播)、粉丝 2个主要角色
- 主播主要的交互以推流为主,粉丝主要的交互以拉流为主
- 另外包括粉丝与主播之间的互动,文本消息、表情、送礼物
直播的中的用户核心性能体验为:主播与粉丝之间的交互延迟,而推流是直播第一步,如果推流不稳定,无论如何优化体验都会非常差。
二、性能需求
关键角色 | 性能体验 |
用户视角 | 第一个画面加载延迟(首次缓冲)、直播画面延迟、卡顿、弱网体验、流量消耗 |
运维视角 | CDN、带宽开销、核心业务的横向扩容能力、(政策原因)对流媒体进行存储产生的存储空间开销 |
开发视角 | 延迟和卡顿的平衡(客户端缓存) |
运营视角 | / |
三、测试实现
1)通讯协议
推、拉流的通讯
- 网络层:Socket 或 St 负责传输
- 协议层:RTMP 或 HLS 负责网络打包(主播连麦:WebRTC)
- 封装层:flv、ts 负责解码数据封装
- 编码层:h.264、acc 负责图像、音频压缩
非推、拉流的通讯
- HTTP、WebSocket
2)测试工具
工具 | 支持协议 | 说明 |
St-load | RTMP | (Linux)通过模拟并发的推拉流实现特定负载的测试 |
Locust | 自带 HTTP Client,其它协议需自行实现 Client | 采用(单进程)协程+IO复用实现并发负载 |
四、测试策略
说明:直播类压测的核心是验证并发下推、拉流的顺畅,是协议层的测试。用户体验的关键是和主播之间的交互延迟。
1)核心角色与业务
- 主播 - 直播 - 抓流/推流
- 主播 - 互动 - 查看/回应粉丝的互动
- 粉丝 - 直播 - 切换直播间
- 粉丝 - 直播 - 拉流
- 粉丝 - 互动 - 评论、打赏等互动行为
2)测试用例编写参考
- 参考上条,略
3)测试场景设计关注点
1、性能基准
建立性能基准
- 对 并发推流 进行测试
- 对 并发拉流 进行测试
- 对 粉丝 进入直播间 的首次缓冲延迟(包括:首包用时延迟、视频首帧延迟) 进行测试
- 对 特定的 码率、帧率 所对应带宽开销进行测试
- 对并发 进入直播间 时的内容交互加载延迟进行测试
- 直播间中的主播与粉丝交互延迟
- 对 弱网环境 进行不同程度的并发测试
2、负载测试
- 关注 日度 业务峰值负载(业务量、时间、时长)
- 关注 周/月 中业务峰值负载(业务量、时间、时长)
- 关注 运营推广 过程中所涉及的业务负载(业务量、时间、时长)
- 关注 意外负载 的出现时机、负载特点
3、容量测试
- 基于“性能基准”结果,参考:1000 - 2000 - 3000 - XXXX 的方式进行主播递增推流测试
- 关注 良好性能体验 条件下的最高支持在线主播数量
- 关注 可容忍上限 条件下的最高支持在线主播数量
- 关注 系统资源充裕 条件下的最高在线主播数量
- 关注 系统资源不足 条件下的最高在线主播数量
4、可用性测试
- 以施加峰值负载的方式达到考核时间周期的业务量
5、可靠性测试
- 关注 网络异常 / 弱网环境 对性能基准的影响
- 关注 服务异常 对性能基准的影响
- 关注 冗余节点 随机的上、下线对性能基准的影响
- 关注 冗余节点 随机的上、下线对:功能可用性、事务性、性能、持久化设计 的影响
6、资源规划 / 扩容配置
- 关注核心业务在性能上横向扩容过程中,节点增加与性能削减的关系
- 关注主播推流对服务产生的存储空间占用开销
- 关注主播推流对服务产生的带宽占用开销
4)测试场景设计
(参考产品设计 与“测试场景设计关注点”:略)
测试场景 | 场景描述 | 场景目标 | 执行策略 | 期望结果 |
性能基准测试 | ||||
负载测试(推、拉流) | ||||
负载测试(HTTP、WS流) | ||||
容量测试 | ||||
可用性测试 | ||||
可靠性测试 | ||||
…… |
五、备注
- 脚本需要实现粉丝端首次缓冲时间的延迟测试,即对首包、首帧画面的断言、延迟、丢帧判断测试。