本文整理自声网数据平台首席架构师何丰在 RTC 2018 实时互联网大会的演讲内容。他的演讲内容主要包括,如何以数据来衡量实时通信质量,质量透明化背后的数据挑战,以及声网面向开发者免费推出的通信质量诊断分析产品“水晶球”(Agora Analytics)的应用与技术难点。以下为演讲实录。

我们是提供实时音视频服务的。我们希望让开发者们使用实时通信服务,就像使用水、电一样方便。用户的设备接入了我们的云服务后,就可以直接与全球其它国家和地区的用户进行实时的语音或视频互动。

在声网的实时通信云服务上,已经有很多种应用,比如直播与社交,像参加本次大会的 MeetMe 就是美国目前最大的约会社交平台;再比如教育,有很多教育类产品为国内学生与海外老师搭建了实时互动的教学平台;再比如游戏,此前游戏比较流行一起打怪升级,现在很多手游已经集成实时通信的功能,开始变得社交化。在前不久,我们已经开始为小天才儿童手表提供了实时语音、视频的服务,实际上也是 RTC 技术应用于 IoT 领域的一个典型案例。

一、为什么开发者需要实时通信服务的质量监控与质量透明?

在实现了这么多的业务场景的同时,我们也会思考,是不是帮开发者们实现了实时通信之后,服务即到此为止呢?实际上不是。

我们与一些 RTC 大会现场观众交流过。大家都觉得,实时通信服务的关键是质量能做到多好,以及质量是否能得到保障。

举一个教育场景下的真实案例。在一场多人的在线课堂里,上课过程中,有一个学生反映,刚刚有一堂课效果很不好,因为画面一直卡。在教育场景下,很多课程都是付费的,当收到学生的投诉后,这个客户非常着急,向我们求助,希望能查一查影响这位学生上课体验的原因。我们很快为他们做了诊断和分析,结果发现,刚才那位老师是用的是高清分辨率画面,而这位学生用的第一代的 iPad,但这个设备不支持这种高清分辨率,所以一整堂课里,只有这位学生感到体验很差。经过我们反馈后,客户知道问题出在学生的设备上,让学生换了一个设备听课就解决了。

这只是一个案例。终端用户遇到问题会找到客户,而客户遇到用户投诉但又无法自己调查,会导致整个问题解决的效率很低。这里面有三个角色,终端用户、客户、声网。涉及的问题层层传递,等我们最后调查问题,给出结论,到解决问题,可能已经过了几个小时,这期间问题仍然存在,学生一天的课程上完了,却体验很差。

图:常规的质量问题诊断流程

在实时通信场景下会有类似大量的问题发生。我们经过了整理和筛查后发现,有这么几类:

  • 设备问题,如型号老旧、系统兼容性差、故障。
  • 网络环境问题,如终端用户带宽因过低。
  • 集成问题,如错误的 API 调用、使用了有问题的库。
  • 终端用户误操作问题,如用户自己按了静音等。
  • 声网服务问题,如 SDK 或 SD-RTN™ 的 bug 或其它问题。

你会发现,其中很多问题是开发者能自己为终端用户快速解决的。所以我们认为,能提供实时通信服务还不够,还需要将服务质量透明化,展示给使用的开发者。质量透明后,一方面,开发者可以直观了解到终端用户口中的“体验差”是差在哪里,有多长时间的影响,另一方面,可以确定是网络问题、设备问题,还是其它问题。质量透明可以加速服务质量与产品体验的迭代、优化。质量透明让80%的质量问题可得到快速解决。

二、如何用数据来体现、衡量通信质量?

在声网内部有一套非常完善的质量数据体系,通过内部的工具和系统可以定位诊断,可以监测到实时通信过程中全链路的数据信息,例如用户的设备状态,系统是否静音,网络的切换,SDK 在客户端上的运行状态,网络传输发送时的码率、上行网络丢包、抖动、延迟等质量相关数据。数据会经过 SD-RTN™ 进行跨国、跨洲际的传输,其中的数据传输质量也会得到监测。在数据传输到另一方接收端时,解码、播放、渲染的状态等,这些客户端上与质量相关的状态信息都会被收集起来。

图:全链路数据的收集
图:体系化的质量问题分类

与此同时,由于有时开发者、客户会希望可以调查某一次通话的质量问题,所以我们也会对每次通话的质量状态进行监控。2017年,我们每天会收集 100亿组运行时状态的数据,到了2018年,这个数据已经达到了2000亿组/天。

这套数据体系有几个使用场景。它不仅可以用于问题诊断,也可以用于实时的质量监控。例如,我们可以实时获知哪个区域的用户接入网络状态突然变差,或某个网络向外海传输的线路有较大的丢包情况等。同时这套数据体系,我们在内部还用于驱动质量改进、A/B Test 等工作。

我们认为,这么丰富的全链路质量数据,应该开放给我们的开发者。如果说提供实时通信服务是为开发者提供了一辆车,那么质量透明就像是车上的仪表盘,让开发者不再盲目行驶,可以随时了解车况。于是我们最近推出了第一版实时通信质量透明数据产品——声网水晶球(Agora Analytics)。

三、质量透明工具需要提供哪些数据?

提到“水晶球”质量透明工具的作用,我们认为有两点:第一,解决“体验差”无法定义的问题,开发者、客户可以基于水晶球的这套数据体系明确遇到的问题是哪一类,问题的严重程度;第二,通过水晶球可以判断质量问题是什么,从而快速找到解决方法。

要做到这两点,我们就需要提供实时检索所有通话的能力,无论是已发生的还是正在发生的通话,都可以根据开发者已知的信息来查询。以下图为例,是四个终端用户的通话状态,横轴以上是视频流的状态,横轴以下是音频的,可以看到所有的码率都处于稳定的状态,甚至可以看出用户在观看几个大画面和几个小画面,他是 Android 还是 Web 的终端用户。

再进一步,开发者可以进入诊断界面,经过对比发送端、接收端的质量数据,包括设备操作情况、上下行网络、上下行码率、采集帧率等,来分析判断影响质量体验的原因。

以下图为例,我们可以看到左边发送端用户整体网络上行质量非常好,但是接收端的数据显示出现过3次95%的丢包情况,对比视频的卡顿情况来看,可以判断是由于下行网络状况较差导致的。

四、做质量监控、质量透明,需要面对哪些技术挑战?

要做到这种质量工具有很多技术挑战,我们总结后有如下几点:

第一是数据的收集。我们的通话分布在全球各个地方,运行时的指标需要从各地用户的设备上去收集。我们骨干传输网络覆盖了全球超过200个国家和地区,我们也需要从这些节点去收集终端用户的网络状态信息。目前我们现在可以实现99.9%的传输成功率,基本上全球用户的通话状态数据都能够很好地收集上来。也就是说,除了做到本身的实时传输工作之外,必须还有一套全球的可靠的数据收集网络。

第二是数据聚合。我们收集的这些数据比较分散,包含 SDK 在客户终端的使用,通话的网络传输质量信息,还有发送端与接收端的通信质量、设备状态等信息。我们要实现问题的分析诊断,就需要将这些数据放在同一个“上下文”中去看,要将数据关联起来,所以最大的一个挑战就是如何将这么大量级的数据聚合。

第三就是数据规模。我们现在每天要处理2000多亿规模,这些数据涉及平台挑战,不仅要把每天的数据存储下来,还要实时接收下来,并进行及时处理。因为很多用户都是需要在发现问题时就进行调查。

第四是实时数据检索。除了运行指标,还有很多通话信息、用户设备型号等信息,我们需要让开发者能通过这些信息能够快速检索,来检测出现问题的是哪一通通话,从而解决用户的质量问题。

水晶球的意义就在于为应用开发的老司机们提供了一个仪表盘,可以随时准确掌握实时通信中的每一个细节,让整个产品体验更有保障。目前,我们已经推出了这个工具,并希望以后能把更多质量数据和更智能化的质量分析服务充分提供给开发者们。

P.S. 开发者在声网Agora (agora.io)登录账号后,可以在 Dashboard 中直接找到并免费使用水晶球产品。欢迎各位 RTC 技术开发者、技术爱好者在声网官网论坛对水晶球多多提意见和建议。我们会为方便大家使用而不断改进。