陌陌直播全景监控系统实践

声明:本文为作者投稿,版权归 CSDN 所有,未经允许,请勿转载。
作者:龚清华,陌陌高级研发工程师,主要负责陌陌直播质量监控。熟悉直播系统架构、熟悉CDN,具有较丰富的广电、互联网直播监控系统建设经验。
责编:屠敏,关注视频直播等领域,寻求报道或者投稿请发邮件[email protected],另有「直播技术交流」群,技术之路,我们共同进步,欢迎开发者加微信tm_forever_miss申请入群,务必备注姓名+公司+职位。

系统建设背景

随着移动互联网技术的高速发展,人们喜欢的媒体交互方式也由文字、图片、小视频迅速切换到了直播。作为一种新兴的社交方式,直播在实时性、交互性方面具备先天优势,这也推进了直播在各行各业的快速应用。作为最大的陌生人社交平台,陌陌自然也少不了直播。

陌陌拥有大量的用户群体,直播上线后,海量的主播和观众开始使用直播社交,系统并发一度达到高峰。在如此高并发的情况下,如何保证为用户提供最佳的直播体验,成为我们的当务之急。为此,我们建设了一套直播全景监控系统,实时监控陌陌全平台直播服务质量。

系统架构实践

陌陌直播全景质量监控系统基于陌陌实时日志基础平台而研发,通过高效的实时分析系统,实时将各业务维度的数据进行聚合呈现,并加以监测报警,提供秒级故障发现机制。 同时,拨测系统在主播开播的第一时间向CDN拉取流媒体,进行内容层面的分析监控,第一时间发现问题流。

日志收集

陌陌直播全景监控系统实践_第1张图片

流媒体分发质量的好坏,大多取决于CDN的节点分布程度,常用商用CDN公司由于资源限制等因素,在建设节点时,会形成一定的节点片区优势,而我们的业务又需要全局最优。 同时,任何系统都不能保证百分百的可靠性,CDN也有故障的时候。为了保证业务系统的高可用和最佳质量,陌陌采用了多路CDN分发,CDN之间互推的流媒体分发策略。

依托此业务架构,我们在推流终端、CDN入口、CDN互推入口、CDN出口、播放终端等重要环节进行流媒体质量指标采集,供全景质量监控系统分析使用。从业务上,日志分为以下两类:

  • 事件类,包含开播、停播、播放、停止、心跳等基础播放行为事件。
  • 质量类,包含带宽、帧率、延迟、卡顿等关键视频质量评测指标。

直播质量评估

我们知道,评测互联网直播分发质量最重要的三个指标是秒开、延迟和卡顿,其中又以卡顿最为影响用户体验。陌陌的大数据分析平台表明,当卡顿率上升的时候,大多数用户会选择放弃观看或者切换频道。

陌陌直播全景质量监控系统定义了一套直播质量评测指标,从不同的维度对当前分发质量做量化,主要包含以下几个方面:

  • 平均接入延迟
    平均接入延迟主要包含请求延迟、首包时间、首帧时间等,其中请求延迟定义为从发起HTTP请求到收到HTTP返回码所耗费的时间,用于衡量CDN网络的接入速度;首帧时间定义为从发起HTTP请求到收到第一帧流媒体数据所耗费的时间,用来衡量CDN的回源速度;

  • 端到端延迟
    端到端延迟是指媒体从主播端产生到观众端播放所耗费的整体链路时间。我们在主播端流媒体编码时,在媒体数据中加入时间戳信息,观众播放流媒体数据时解析该时间戳,即可得到端到端延迟时间。该时间主要用来衡量CDN分发引入的延迟大小,在直播系统中,在不影响卡顿等其他指标的情况下,延迟越小越优。

  • 卡顿率
    卡顿率=出现卡顿的在线用户数/在线总用户数*100%,通过此指标可以衡量当前卡顿影响的人群范围;

  • 人均卡顿次数
    人均卡顿次数=在线卡顿总次数/在线用户数,通过此指标可以从卡顿频次上衡量整体的卡顿严重程度;

  • 卡顿时比
    卡顿时比=卡顿总时间/播放总时间*100%,通过此指标可以从时间维度衡量卡顿严重程度;

  • 推流故障率
    推流故障率=推流失败次数/总推流次数*100%,通过此指标可以衡量当前主播的开播故障情况,通常CDN网络出现故障时会导致主播开播不了,此值会变高。

  • 播放故障率
    播放故障率=播放失败次数/总播放次数*100%,通过此指标可以衡量当前观众播放故障情况。

通过以上算法,已经能够比较全面的衡量直播分发质量情况。

多维度业务聚合

陌陌在直播分类中属于泛娱乐直播,与游戏、户外直播最大的不同之处在于主播数目庞大,我们需要将大量的主播分散到不同的CDN、不同的域名去做分发。运维需要实时关注到各业务维度的直播质量情况,基于在线用户数,监控系统提供了丰富的业务维度聚合监控。

  • 在线用户定义

在线主播,当主播开始直播,主播端会发送“开始推流”事件日志,即可将主播视为上线;当主播停止直播,主播端会发送“停止直播”事件日志,即可视为主播下线。在网络不可靠或者终端crash的情况下,事件日志可能会出现丢失,加上主播端的心跳,即可解决此种情况。

在线观众,当观众进入房间观看,观众端会发送“开始播放”事件日志,即可视为观众上线;当观众退出房间,观众端会发送“停止播放”事件日志,即可视为观众下线。当房间销毁时,所有在该房间的观众视为下线。

  • 业务维度聚合统计

业务维度聚合统计提供了不同角度的质量监控视图,主要分为全网维度、CDN维度、域名维度、CDN节点维度、房间维度、ISP维度、房间类型维度、终端类型维度、观众维度等。

以房间维度为例,主要关注该房间在全网的分发质量情况,例如观众走势、卡顿走势、故障率走势、开播时间等。

实时报警机制

基于多业务维度的统计数据,我们做了一系列的报警机制。报警分为状态类报警和通知。状态类报警定义为当监测指标高于(低于)报警门限值时,报警发生,当监测指标低于(高于)报警门限值时,报警恢复,例如“卡顿率过高”、“故障率过高”等;通知类报警定义为当监测指标达到报警门限时,报警发生,再次达到门限时,报警再次发生,没有报警状态,不存在恢复,例如“在线用户在五秒内减少百分之二十”、“卡顿比环比增加百分之十”等。

报警方式采用陌陌基础智能报警平台,支持IM、短信、电话等众多通知方式,在出现故障时,第一时间通知相关责任人。

主动拨测

实时日志分析只能被动监控线上已经发生的问题,在第一时间驱动故障方解决,算是一种“亡羊补牢”方案。主动拨测系统作为全景质量监控系统的补充,通过智能调度中心进行任务分发,在主播开播前探测主播推流节点故障情况,在主播开播后第一时间探测流媒体可用性,在观众播放前探测重点区域节点可用性情况。

陌陌直播全景监控系统实践_第2张图片

考虑到拨测终端大多数终端部署在IDC机房,用拨测系统来评价网络分发质量不能代表用户终端真实的播放情况,因此,拨测系统的主要设计目的是评价流媒体在内容层面上的可用性及CDN节点的可用性。

  • 流媒体内容指标测量
    流媒体内容层指标我们做了媒体完整性监测和媒体内容质量监测两类。媒体完整性监测主要是分析HTTP+FLV拉取的FLV文件完整性,包含FLV头部信息是否完整,视音频帧是否存在, 首帧是否为I帧(确保首屏不花屏);媒体内容层监测主要分析流媒体的视音频不同步、黑屏等。

  • 智能调度中心
    智能调度中心按照业务需求,对拨测终端进行任务分发及结果收集。从任务上划分,我们定义了自动任务和手动任务,自动任务通过与BO(后台系统)联动,实时获取最新开播房间,自动轮询房间媒体质量情况;手动任务主要用于运维在发现故障的情况下,对指定区域或CDN节点,进行定向拨测。

未来展望

陌陌直播全景质量监控系统的上线,为直播业务运维提供了一双眼睛,在功能逐步完善的情况下,做到第一时间发现问题、第一时间解决问题、第一时间预警问题。

在未来,我们将利用监控系统采集到的质量数据,结合CDN的区域差异、稳定性差异等,优化智能调度系统,让陌陌的流媒体在互联网上最优化传输,为用户提供最佳的直播社交质量体验。

了解最新移动开发、VR/AR 干货技术分享,请关注 mobilehub 微信公众号(ID: mobilehub)。

陌陌直播全景监控系统实践_第3张图片

你可能感兴趣的:(陌陌直播全景监控系统实践)