WeTest腾讯质量开发平台 压测难,难于上青天,80% 的直播应用都败在了这里

腾讯WeTest · 2016年10月27日 · 最后由 loshu2003 回复于 2016年11月29日 · 4119 次阅读

目前腾讯 WeTest 服务器性能测试已经正式对外开放,点击链接:http://wetest.qq.com/gaps/立即体验!

作者:Oliver,腾讯服务器性能测试团队产品经理。
商业转载请联系腾讯 WeTest 获得授权,非商业转载请注明出处。

WeTest 导读

直播的火爆带来了海量的用户,也带来了海量的服务器并发。本文分析了目前直播行业存在的难点,从腾讯目前的新直播产品——NOW 直播出发, 了解直播应用背后的那些事。

直播,突然成为了中国互联网的一个最流行的词汇。在《2016-2020 年中国网络直播行业深度调研及投资前景预测报告》中的数据表示,2015 年,全国在线直播平台数量接近 200 家,其中网络直播的市场规模约为 90 亿,网络直播平台用户数量已经达到 2 亿,大型直播平台每日高峰时段同时在线人数接近 400 万,同时直播的房间数量超过 3000 个,更可怕的是,这一数据还在以极快的速度向上攀升。

直播平台用户数量 2 亿是什么概念?2016 版的《微信数据化报告》中提到,目前微信用户达到了 6.97 亿人,也就是说,在你身边同龄的 3-4 个朋友之中,很有可能有一个人是网络直播的用户。

直播火没火,看用户就知道,但是直播有没有前景,就要看科技巨头们对它的态度了。

国外的 Facebook 推出的 Facebook live 给其用户带来的全新的体验,不仅增加了用户粘性,还给 Facebook 带来了新的收入来源。而 YouTube live 与电视点播相结合的经营模式也给用户带来了新的视频体验。

国内方面,斗鱼、虎牙、熊猫、龙珠、奇秀、花椒等专业的直播平台如雨后春笋般出现。阿里、百度、腾讯等巨头也不甘人后,纷纷推出了自己的直播平台。而直播所涉及的行业领域也从电竞、社交、电商等各个行业间开始广泛出现。

直播下的服务器压力

如此大的用户体量下,直播类的应用对于服务器的要求要高过一般的应用,我们来看看直播类的应用对服务器有哪些更多的挑战?

1、更大的数据量

视频数据和文本数据完全是两个量级的概念,假设一个直播房间有 5000 人,视频 1s 的数据 60K,那么就需要 5000*60=300000KB=292.97MB,基本已经达到了 2-3 三个手游的大小了,而这只是一个房间产生的流量。今年 4 月刘涛入驻直播领域,创造了同时在线人数 17 万,总收看人数 71 万的数据,如果按照这个数量,服务器就会产生 9.73Gbps 的带宽,而当前某著名网络直播 APP 日活跃用户超过了 800W,服务器将承受 458Gbps 的带宽压力。

2、更高的并发量

不同于普通应用和游戏,直播类应用的使用时间段非常的集中,一般来说,社交类的直播 app 时间集中在晚饭后时间至睡前 20 点~23 点,游戏类 App 活跃时间集中在下班后 18~20 点间,秀场类 App 集中在 13 点和 18(午休及下班时间),因此在这短短几小时之间,会涌入大量的用户,一次大 V 的直播通常就会造成百万级的用户登录,APP 需要有详尽的限流、分流和负载均衡策略,保证服务器不会被冲垮。

(数据来源:大数据解析网络直播市场到底有多火,
http://mt.sohu.com/20160716/n459532686.shtml

3、更真实的用户登录场景

直播应用与普通应用相比,交互的功能异常多,除了直播视频流的服务器压力之外,还要包括用户消息推送、聊天、礼物、支付以及统计系统带来的数据交互压力,服务器进行需要识别不同的业务字段,才能精确判定用户的行为是否成功完成,从交互频率的角度上来说,直播类的应用,与其说更像应用,不如说更像游戏。

4、更低的延迟

直播需要一个很强的即时性,如果主播的行为和用户的评论无法同步的时候,会给用户非常不好的体验,如果一个用户发现其他用户在欢呼鼓掌,但是屏幕中的主播什么动静都没有的时候,这个直播应用基本可以不要再用了,因此直播类应用不仅需要面对更大的数据量和更高的并发,还要保证更低的延迟。通常可以要保证服务器的处理数据速度要快,要有足够强大的带宽;另外则是通过 P2P 算法保证数据分享的合理性,保证服务器的数据和 P2P 的数据可以达到平衡。

直播前的服务器准备

直播应用下的服务器成本,与将要承受的流量情况息息相关,不同的直播应用,交互的频度、深度不同,就会产生不同的带宽压力。我们一起来算一笔帐,为直播应用准备服务器,大概需要多少钱?

首先,我们要买一个服务器。买多大的服务器呢?服务器的带宽要满足直播应用的带宽需求,在这里,科普一下带宽是怎么看的:
带宽通常使用的单位是 bps(bits per second),8 bits 通常等于 1Byte,100Mbps 在换算成我们熟悉的文件大小的时候,要除以 8,也就是在 100Mbps 的带宽下,每秒钟可以下载 12.5MB 的文件,那么一般来说,直播应用需要多少带宽呢?见下图:

直播应用一般使用的分辨率是 360p,720p 以及 1080p 三种,为了看得清晰一些,一般人们都会选择 720p,那么在 720p 的清晰度下,直播应用需要 1024kbps 的带宽,也就是每秒传递的数据大小为 1024/8=128KB。简单来说,如果在 APP 中打开直播,使用了 720p 的分辨率,一个用户每秒钟需要传输 128KB 的数据(当然实际情况中直播应用还有消息推送,送礼,支付等行为,直播画面分辨率、压缩比等区别,实际会消耗更多的数据)。

那么,直播类应用现在需要承载多少用户呢?
以目前最红火的几大直播平台为例,斗鱼 TV 的在线人数可以超过 1000 万,战旗 TV 在在线人数约 500 万左右,龙珠在线人数约 400 万左右,虎牙在线人数约 100 万,直播平台的带宽成本通常是带宽峰值月结的形式,如果当月最高同时在线人数是 200W,也就是每秒要传输的数据量高达 244GB,那么理论上消耗的带宽就是 2T 左右,一个月的开销就在 4000W 人民币左右。

对于直播应用来说,服务器最难处理的环节就是视频流量和用户交互等高频率高带宽的场景,用户的行为是难以预测的,经常会出现突发性的暴涨,一般在进行活动的时候,流量可能是平时的几十倍。2016年7月11日,PAPI 酱的一次直播带来了超过 2000W 用户的访问,这对于大多数的直播应用来说,服务器的成本都是难以承担的。这也是为什么越来越多的直播应用开始寻求云服务器的支持,目前的云服务商有腾讯云,阿里云,百度云,金山云等,彼此之间在硬件上的类型差别越来越小。

因此直播应用在上线前需要对多样化的用户操作进行针对性的测试,注册,聊天,礼物,支付等行为都需要进行不同接口的测试,NOW 直播就是其中之一。

直播服务器的测试

测试需求的产生

腾讯 NOW 直播是腾讯目前发展非常迅速的直播应用,获得了通过 QQ 直接登录直播界面的入口,可见其受重视程度,而 NOW 直播在一场线上活动中,需要对活动的所有接口进行压力测试,提前暴露问题并解决,确保活动的顺利实施。为此,NOW 直播与腾讯 WeTest 服务器性能测试进行了合作,对应用的业务后台进行了系统性的测试,对活动进行了一整套场景测试。(对于视频流量、用户交互等高频率高带宽的场景,也同样可以使用 WeTest 服务器性能测试的的高级模式进行,本文不做展开,尽请期待后续干货。)

测试前的思路梳理

一般来说,对于活动中的功能节点,测试过程中通常关注两点:
1、 单接口压测,提前暴露核心模块的问题
2、 多接口架构问题,场景压测尽量模拟真实用户行为,使得压测结果更有说服力
对于这次活动,NOW 直播的思路也同样是通过简单的 HTTP 单接口和复杂的多接口场景压测,通过压测工具给后台和客户端 APP 增加压力源,帮助发现问题。

测试的执行

1、单接口压测——步步为营,逐渐迭代

单接口压测的原理很简单,就是不断的对某个功能接口不断加压,直到发现出现问题的那个极限就可以,在腾讯 WeTest 服务器性能测试上,操作如下:
1)点击压测产品首页中的快捷入口:HTTP 直压。模式选择简单模式,名称和描述可以自己填写。(图中示例起始人数 50 人,每隔 60 秒增加 50 人,加到 200 人为上限)

2)新建一个客户端请求,接口压测包括读写接口,读接口基本是 GET 请求,写接口基本是 POST 请求。GET 请求使用 url 请求参数,POST 请求使用 x-www-form-urlencoded 方式传递参数,在这里 NOW 直播方法选择 GET,填写想要测试的 URL。

3)编辑一下测试模型,增加一个场景名,单接口测试只测试一个功能接口,因此模式选择 “单场景”,压力百分比设置为 100%。

通过这样的压测方式,不断增加服务器压力,直到找到瓶颈位置,腾讯 WeTest 为 NOW 直播实现了 2W/s 的并发量,满足了 NOW 直播的并发需求。

2、多接口压测——真实模拟,定位问题

多接口压测的主要逻辑,就是通过构建不同的功能接口,模拟用户的真实行为,从而帮助开发者定位接口问题。

NOW 直播的测试方式是通过 GET 请求调用一个功能接口,通过这个功能接口随机产生不同行为逻辑的机器人,模拟真实的 QQ 用户,然后通过 POST 请求执行具体的业务行为,从而发现功能之间会产生的逻辑问题。

NOW 直播测试团队读接口基本是 GET 请求,写接口基本是 POST 请求。GET 请求使用 url 请求参数,POST 请求使用 x-www-form-urlencoded 方式传递参数。

(在腾讯 WeTest 服务器性能测试上,我们可以进行如下操作:)

1)首先,通过 GET 请求,读取一个用户的 “登陆态”,通过这个功能接口随机产生不同行为逻辑的机器人,模拟真实的 QQ 用户;然后通过 POST 请求依次执行具体的业务行为,从而发现功能之间产生的逻辑问题。

2)在测试场景中输入场景名,NOW 直播测试的是 “登录 - 进入房间 - 点赞” 这样三个操作,然后 “模式” 选择 “上下文”,点击 “压测场景”,选择调用不同的功能接口。

目前腾讯 WeTest 服务器性能测试支持同时接入 8 个场景,更多的场景可以更真实的模拟用户的行为。

总结

通过 NOW 直播与腾讯 WeTest 在服务器性能测试方面的合作可以看出,目前的直播应用非常注重两块的内容:一个是单接口的承载能力,一个是多接口的架构情况,对于开发人员来说,前者的问题是好解决的,通过平行扩容的方式就可以做到优化,但是后者的问题则需要在多个功能接口之间不断定位问题,不断尝试新的压力测试,才能找到那个存在的隐患。

基于 NOW 直播的需求,腾讯 WeTest 也提升了可同时调用的场景接口,从原来的 4 个增加到了 8 个,之后也会不断的增加;并且也不断的增加可以实现的并发数,为用户提供更大的并发压力和更真实的行为场景,节省了更多的测试成本。
做好这些,才能做出更好的直播应用。

腾讯 WeTest 运用了沉淀十多年的内部实践经验总结,通过基于真实业务场景和用户行为进行压力测试,帮助游戏开发者发现服务器端的性能瓶颈,进行针对性的性能调优,降低服务器采购和维护成本,提高用户留存和转化率。

目前腾讯 WeTest 服务器性能测试已经正式对外开放:
体验地址:http://wetest.qq.com/gaps/
如何使用简单模式:http://wetest.qq.com/help/documentation/10094.html
如何分析报告:http://wetest.qq.com/help/documentation/10099.html
常用测试指标:http://wetest.qq.com/help/documentation/10098.html

共收到 7 条回复 时间 点赞

主要还是协议选择,客户端模拟发起 rtmp 连接并保持,依次叠加连接数,在线上监控。
业务层面直播就 2 个压力环节,其中房间用户推流可以用动态链库 + 协议来实现。

#1 楼 @jiazurongyu 可以交流一下

#2 楼 @fuhe 好的哇,企鹅号:728661182. 线上监控腾讯是很完美的了,在配合协议和虚拟链接更好。

这是类似于压测宝的?

#3 楼 @jiazurongyu 可以先使用下工具看看哦

测试的点不是直播的主流程。登入-加入房间-点赞 这些都是 micro service 做的。 rtmp 流的主瓶颈是带宽和延迟你也提到了。这其实还是回到 10 年前直播的问题,如何平衡。提高压缩比,延迟高。降低压缩比带宽高。

会动的图是怎么做的

—— 来自 TesterHome 官方 安卓客户端

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册