2019年,字节跳动整合了旗下抖音、火山小视频、西瓜视频的直播技术、业务团队,成立服务于公司全线产品直播的直播研发团队。
他们每天接受上百万直播间实时开播的考验,扛住了数百万人同时在线的抖音奇妙夜直播,护航了抖音奇妙好物节直播带货屡创新纪录……
实时交互、不能延迟、没有补考机会,面对众多技术难题,这支屡屡交上高分答卷的技术团队,都做对了什么?
不打没准备的仗
几百万人同时涌入,能不能稳住? 直播期间用户给主播发送大量评论,导致占用CPU、硬件发热,如何使用降级策略解决? 采用功能降级时,如何尽可能不影响用户体验? 大量的C端流水,打赏、主播提现,如何避免资金风险? ……
-
提前预判,做好资源准备和降级策略方案 -
多次彩排追求极致 -
重保小组+大后方配合护航
研发团队通常会先和市场、运营同学沟通,然后通过一套此前经各种活动验证的转化比计算方法,算出瞬时流量的并发量级。
“投放的包括push、开屏,投放时间点,以及整个产生作用的曲线,其实我们是心里有数的,综合考虑这些因素后,我们就大约清楚在某一个时间点会有多大的量进来。” 字节跳动直播研发负责人周鹰说,根据预测量级,团队将设计好相应的预备方案,把资源补充到位,同时留一定的余量出来。
老罗首秀开播前一个月,演练就开始了。由客户端、服务端、平台、流媒体等方向的oncall同学组成了一支重点保障小组,护航整场直播的所有环节。直播当天下午三点的终演彩排,不仅是码率清晰度、网络状况被反复调试至满意,连麦克风放哪个位置更好的细节,重保小组的同学都在现场帮助操作。
彩排再多,总归还是会碰上没遇到过的问题。
罗永浩直播在电商这块的高并发症问题就比较明显,早期也暴露了诸多购买路径、售后等方面的问题,对整个电商直播服务的优化成长帮助很大。
比如首场直播时,对于一些优惠力度大的秒杀活动,老罗喊了开抢后,用户在商品列表却一直刷不到货。技术团队找原因才发现,由于货是先上架到电商后台,再同步到直播的商品列表,结果当初就被某些黑产利用这个漏洞直接在电商后台把单抢完,导致用户感觉有内幕。
为了缩短定位问题的路径,团队针对高热直播间做了涉及各个节点的端监控。比如进入直播间的首帧画面卡顿率,或者送礼成功率,一旦指标变化较大,就会触发监控系统自动报警。而一旦有用户问题在群里抛出,可以直接分到对应的方向去查,定位到具体问题,比如是CDN的问题、还是服务端问题。
诸如卡顿、清晰度这类问题,十几分钟内就能被解决掉。
“一般最紧张的就是开播后几分钟,以及抢红包的那一秒,这种重点时刻的预判对了,事情就大体稳了。”参与支持了多场大型活动的直播服务端研发沈杰说。
自动给自己划重点
高热直播间预测+房间开播实时人数计算的机制 · 根据之前所有的开播历史和一系列相关数据,利用机器学习的手段预测一个直播间是否会在开播后高热,从而予以重点关注 · 秒级计算所有直播间人数,根据直播间人数的变化,自动地做一些相应的重保和降级手段
在直播场景下,每个直播间能够发送成功(被客户端接收并展示)的消息数目是控制在一定范围内的,因为如果一个直播间能够发送的消息特别多,刷屏速度太快,会导致用户体验差,反之如果消息很少会显得直播间很冷清。
“每个直播间都有消息发送频控,并且阈值是由服务端动态调整的。对于高热直播间的写入频控阈值就需要降低,这大幅降低了推送端网卡的消耗,保证服务端运行平稳。”
目前直播消息系统采用的推拉结合的模型,给用户提供更优越的直播互动体验。具体采用哪种策略对于客户端来说是透明的,无需关心。
对于近千万人同时在线的直播间来说,服务端全链路的QPS也能够达到千万量级,这对业务服务端来说压力是巨大的,需要有完备的容灾预案——缓存、异步化、压缩算法优化、全链路监控,以及非关键链路的数据动态采样策略,关键链路数据实时双通道保障等多种容灾降级手段。
“对于如抖音美好奇妙夜这种量级在线观众的直播活动来说,适当提高部分消息触达延迟,并且结合客户端的平滑展示的方式,来降低服务端压力,换取服务端的平稳运行。而对于用户体验来说是几乎无感知的。”
在自动化重保系统尝试之前,2019年4月,武扬带领团队同学花了近两个双月的时间自研了一套更适合直播场景的分布式存储系统。
它有更完善灵敏的弹性伸缩和流量调度机制,可以根据直播间人数、网卡流量变化等灵活动态扩缩容及流量调度。
这一切对于用户来说都是透明的,保证服务高可用的同时充分提高了资源利用率,顶住了多次流量洪峰。
在线房间查询帮助我们抗住了流量快速翻3倍的挑战,哪怕在线直播间涨到30万,并发请求600w QPS,性能却更好了。 不仅节省了大概几千万机器的资源,延时还降到了1/10甚至是1/100。 从用户体验来说,过去主播从开播到房间被推荐可能要5秒,现在低于1秒就行。
高效背后的挑战
各个团队以前的实践和做事方式不太一样,对于每个工程师来讲,面临的都是之前没有遇到过的问题。 比如我以前考虑火山App就好,但现在每一个改动,都要面向所有产品线,可能本来只是想改产品a的逻辑,结果影响了产品b。
直播场景丰富多元,有泛娱乐直播、游戏直播,语音直播,主播端开播,当然还有媒体官方直播间,电商直播等。
抖音直播安卓端研发黎新很快发现了一个问题,因为一个功能会在多个类型的直播间存在,基于这个背景,前期如果没有一个很好的框架去支持,就需要通过人工方式去维护。
而安卓之前是用原生的XML模式去描述布局文件,不够灵活,大量不同种的直播间的模式堆积冗杂在一起。
这是个比较激进的尝试,但leader就鼓励我、给我时间。 先做出来再说,不要担心其它事情。
加入直播研发团队
【社招岗位】
后台核心研发工程师
服务端测试开发工程师
客户端Android/iOS开发工程师
前端开发工程师
图形/图像开发工程师
↓扫码投递
【实习生岗位】
客户端研发实习生
测试实习生
前端开发实习生
后端研发实习生
图形/图像研发实习生
↓扫码投递
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论