新闻资讯
直播优化实践
1.1、监控——加载监控体系
首先,要知道你的业务瓶颈,这就是通过业务的监控分析出来的。没有监控是很难知道业务的瓶颈在哪里。那到底要监控哪些点呢?可能有人会比较茫然,那么多业务,哪些点是重点,哪些点是必须要做的点,难道每个都要监控吗?
在此,列出了在业务中需要做的点:
不管是从资源的加载,还是资源的使用,还是版本的覆盖,还是本身的前端的错误,这些都是要做的。如果这些都没有做,那么说明对业务的掌控是不够的,你不知道用户哪里出了问题。所以说监控是很重要的点, 现在有很多开源工具可以帮助你去做,也有很多现成的统计工具。
当然,监控不是最终目的,优化业务和提升业务才是。工具做好之后,就要去在监控中发现问题,最好是能主动发现问题,而不是被动的依靠用户投诉。
1.2、监控——视频流监控体系
在直播业务中,还有个很特别的东西就是视频流。因为它的特点是量很大,加载对用户的网络要求很高,在视频上面对视频流需要比传统的资源更细致的处理。需要去从它的加载、播放等各个方面做监控和完善。做完这些你才知道你的业务问题和瓶颈在哪里。然后再经过分析,就能知道要从哪里下手进行优化。
1.3、监控——机器性能指标监控体系
同时,刚才也有提到,业务对机器的性能要求越来越高。有很多的机器甚至可能根本没办法支持很高的FPS业务。性能对业务的影响非常大,同样的性能,A业务能跑起来,B业务如果跑不起来,用户的感觉就是B业务做得烂,团队很差。性能能够帮助建立业务的影响力和用户的口碑。
对于性能,其实也有很多办法可以去做监控,比如说给业务在机器上做性能的评分,通过评分能够知道机器到底是什么情况,用户的机器到底能承载多少FPS业务,再根据结果进行降级和升级优化。这就需要统计和分析用户到底是处在什么样的机器性能什么。还有给不同动画进行FPS归类、针对资源分类打包等等方式,都是监控性能比较好的方式。
1.4、监控——前端日志监控体系
刚刚也有提到,用户的环境非常复杂,这也是为什么说做前端要去细分到每个用户的原因。不像做服务端,机器上跑什么版本你是知道的,搞定这个版本怎么做就ok。但用户不一样,每个用户都是不同的,出了问题不一定能知道。在大量的数据情况下,是需要测试才能测出来的。因此,要对用户的实际情况进行监控,到底业务走到哪里了,没有走到的原因是什么?将这些信息全部收集上来。
2、监控体系的自动化
有了这么多监控方式,自然希望说它们能够自动化去处理。仅仅依靠人力,每个业务上线都去弄一遍,那很难跑下来,人力成本会十分恐怖。因此需要去做自动化的处理,能够实时的知道业务出了问题,问题出在哪。而且希望能够通过一些前端的染色,毕竟用户的网络其实也是有成本的,什么都上报,流量费用比其它业务高很多,用户可能会进行投诉,这就需要染色的能力。染色的能力就是说通过配置server去抓取你想要的用户出错信息。
3.1、业务优化实践——节点、场景优化
有了这些自动化之后,就要开始实践了。在业务中去实践的时候可以看到,一个页面的加载会分为很多流程。这些流程下面就是需要去针对细化的各个节点,并确定每个点到哪一步需要什么优化方案。还有在各种场景的细分和划分,针对这些场景进行优化。
3.2、业务优化实践——移动页面性能优化
对直播业务来说,移动端的业务量非常大。因此要学会充分利用性能工具来做事情,学会用工具作分析。同时要关注CPU变化趋势和GPU渲染能力。如果说实在通过H5已经解决不了问题了,就要适当去找你的环境,环境会提供很多native的能力,不管是用React-Native还是用原生native接口的方式,都只有一个目标,就是通过环境来帮助你业务可以更好的体验。
3.3、业务优化实践——图片资源优化
在直播行业,有两个资源比较重要,一个是视频,一个是图片。先看图片要怎么去做优化。
图片其实有很多很多方式可以做,首先要考虑用户的情况:第一,这个图片能不能快速的加载下来;第二,这个图片在用户端能不能快速渲染。这些决定了图片在业务上打开的快慢。
3.4、业务优化实践——视频资源优化
在直播行业,通用的视频架构几乎都会包含下面这些模块,每一个模块在处理时都需要时间,而最终都会体现在影响用户体验的时延。主播开始直播,从上传视频源的这一秒开始计时,到用户能看到主播说这话的这个时间段就是时延。时延是直播业务非常重要的参考数据,时延太高,互动性会非常差。
举例来说,主播开播,那他就是视频的上行,从上行的开始,要去申请很多很多流程,同时要把这个视频流做一些格式的封装和解码,这就需要处理时间。同时,视频资源比较大, 不能以普通的服务器来承载,要用CDN这种方式来承载,这时流的传送也是一个时延。
在下行端也一样,CDN的架构会有很多很多的云,用户接入时候需要从异地云上拉取资源,这也有时间等待。这里面的时间最终会体现在用户的拉取时延上面,打开视频,可能要等3秒、5秒、10秒。
视频要怎么优化?互动时延和加载时延的问题要怎么解决?
直播业务里面有一个比较关键的数据——GOP关键帧,就是一组动画关键帧。在播放器播放时,是按关键帧解析,非关键帧无法独立解析,必须依赖关键帧才能去渲染。在移动端H5的播放时需要3个HLS分片,分片是关键帧在服务端经过转码之后打包后出来的。因此,要解决互动时延的问题,其实就是优化关键帧的间隔。比如5秒一个HLS分片,3个就是15秒,那主播说一句话,用户要等15秒后才能听到。加载时延就是上面提到的流的分配,能不能优化主动去push到这些节点而不是等用户去拉取。而且上行很多时候是不稳定的,更需要去做很多很多处理,假设丢包了,很多画面解析不出来,这时候还要补帧。
另外就是回放,回放和直播唯一的不同是不需要互动性,主要需要优化加载时延。这涉及到另外一个概念,就是MP4的格式。MP4是按个块封装,可以理解为一个一个的指针,指针的位置是需要相乘,MP4的文件头需要下载下来才能播,如果指针的信息越来越多,索引越来越多的话,不利于加载,这就需要在服务端处理。
回复列表