干货 | 基于SRS直播平台的监控系统之实现思路与过程

作者 | 中国农业银行艾明浩、矫宏鹤

责编 | Carol

封图 |  CSDN 下载自视觉中国

当前市面直播平台百家争鸣,直播监控系统是判断一个直播平台是否完善的必要条件。文章简要介绍了笔者搭建的一套基于SRS的直播平台,并从设计思路、实现方法与实现过程等方面重点介绍了针对此直播平台建设的监控系统,对相关直播平台监控系统的建设具有一定的参考价值。

直播平台与其监控系统简介

国内直播行业自2016年“井喷”式发展以来,在各行各业遍地开花,秀场、娱乐、游戏、教育、电商等行业应用尤为突出。笔者与时俱进,准备研究一下企业级视频直播技术应用,目前已经搭建了一套直播平台。在技术选型上,出于性能、文档完善性等方面考虑,我们选择了开源直播框架SRS作为直播服务器。SRS是由国人Winlin大神在Github上开源的一款流媒体服务器软件,定位于运营级互联网直播服务器集群,目前已经更新至V4版本,V3版是其稳定版本。

我们在SRS已实现的基本RTMP等协议推拉流的基础上,开发了用户系统、直播房间管理、防盗链功能、弹幕系统、点赞系统、礼物系统等功能,并开发了Android、iOS、PC、Web直播客户端,实现了一个大致完善的视频直播平台。

随着功能的增多,在开发调试及测试的过程中,我们发现,必须拥有一套针对直播平台的监控管理平台,以增加平台的健壮性、可用性与易用性。该监控管理平台用来对SRS集群进行统一配置管理,对服务器资源、网络流量、多媒体流、房间信息等进行统一监控,以方便后台人员对整个平台进行把控;同时,拥有一系列预警机制以应对大流量、网络中断、服务器断电等突发事件。

监控数据的获取

要进行平台的监控,需考虑需要监控哪些指标,能够从平台获得什么数据,采用什么方式从平台获取数据等问题。

针对基于SRS开发的直播服务平台,我们采集获取监控数据的方式主要有3种:基于SRS提供的HTTP Api获取、从数据库及Redis获取、程序中埋点输出获取。

1. 基于SRS提供的HTTP Api获取监控数据。

SRS提供了一套HTTP Api,供外部程序获取数据及管理服务器,支持跨域访问。以下是SRS官方提出的HTTP Api设计原则:

  • 只提供json数据格式接口,要求请求和响应的数据全都是json。

  • 不提供html数据,譬如运行SRS后,浏览器打开HTTP接口或HTTP服务地址,看到的是json,不是html。

  • 发生错误时,支持HTTP错误码,或者json中的code错误码。

通过查阅SRS官方文档及源码,SRS HTTP Api可获取的数据如下表:

调用SRS提供的HTTP Api,需要在SRS服务器配置中增加http_api相关配置,下图是一个参考配置: 

首先,将enable设置为on,表示开启http api;listen设置为1985,表示其监听端口,假定SRS服务器地址为127.0.0.1,则可以通过http://127.0.0.1:1985/api/v1访问其http接口;raw_api相关配置表示开启服务器配置及重载等写入型接口。

完成配置并重新加载服务后,即可访问SRS服务器的http api。以summaries api为例,在浏览器中输入http://[srs ip]:1985/api/v1/summaries,返回结果形式如下:

可以看出,返回的结果是标准json形式,需要进行json解析并筛选出所需字段进行展示。

2. 从服务端数据库及Redis中获取监控数据。

除了SRS服务器资源相关数据之外,直播间信息、用户信息、直播统计信息、主播及观众等业务相关数据存储在数据库及缓存中。监控系统采用SpringBoot框架开发,导入相关驱动后,映射数据对象即可直接访问数据源获取所需数据。 

3. 程序中埋点输出监控所需数据。

一些中间过程数据可以体现程序处理状态或者系统走势,这类数据既不能在SRS的HTTP接口中获取,也不会在数据库或缓存中存储,此类数据的获取需要在程序中埋点输出。所谓埋点就是在程序生成该数据处添加监控语句,将数据以指定方式输出,如输出到内存、文件、监控缓存或数据库。如果是带时间序列的数据,则会增加时间戳,展示时可展示成历史曲线,用以预测系统走势。

监控指标及数据展示

有了数据获取的途径,接下来需要考虑具体展示哪些监控指标及如何将指标展示的问题。

1. 监控指标

监控指标大致可分为三类:集群性能数据、多媒体流数据、业务统计数据。通过集群性能数据,用户可直观了解直播集群当前CPU使用率、内存大小、网络流量、负载等情况,实现系统层面的指标监控。通过多媒体流数据,用户可获取集群中每台机器的推拉流信息及当前直播的每路推流端的具体信息,实现媒体层面的指标监控。通过业务统计数据,用户可了解当前直播房间数、房间观众数等业务数据,实现业务层面的指标监控。

2. 监控数据展示

通过调用接口、查询数据库及埋点等方式获取的监控数据,经过服务端解析处理后,展示至前端监控平台。以多媒体流数据为例,用户通过管理端页面选择浏览当前推流数据信息,前端页面将请求传至后台,后台调用流信息查询接口向SRS请求流信息数据,SRS收到数据请求后将对应服务器上的流信息以json格式返回,监控平台对json格式报文进行解析,并以约定格式提供给前端以供展示,效果如下:

也可通过定时模块将指定间隔采集的数据记录到数据库中(时间间隔可配置)。当前端发起历史数据查看时,监控平台依据请求从数据库中获取指定时间段内的监控数据,经过处理返回给前端,前端采用echart等插件完成从数据到图形的映射,生成折线图等形式的图表,大幅度提升可视化应用的性能。

平台参数配置

参数配置功能提供服务配置重新加载、服务器全局和Vhost配置等功能。配置重载简化了系统重新加载配置的流程,配合服务器参数配置功能,实现参数实时修改,实时生效。

参数配置功能通过管理端将参数值由前端传至服务端,通过调用系统更新数据接口方式改变所选系统参数。该功能主要基于SRS提供的HTTP RAW API。首先开启raw_api相关设置,允许通过api进行配置修改(若不开启会返回错误码1061)。以配置重载为例,通过直播监控平台前端选择需要重载配置的机器ip,并将请求发至后台,后台收到请求后调用reload接口,SRS接收请求并进行配置修改,若修改成功,则返回成功(code为0)。直播监控平台将SRS的返回处理后发送至前端,前端对返回码进行判断,更新执行结果信息,效果如下:

参数配置功能和数据展示功能相辅相成,用户可通过数据展示了解当前系统运行情况,并以此为据,通过参数配置功能调节系统运行参数,调整后再观察相应指标的数据展示,实现动态调整配置,确保直播系统平稳运行。

总结

文章介绍了一个基于SRS构建的直播平台的监控系统的搭建思路与实现方法,重点从监控数据的获取方法、监控指标需求、数据展示方法与过程、平台参数配置过程等方面介绍监控系统实现过程,为如火如荼的直播平台提供了监控领域的参考。

艾明浩,互联网金融研发工程师,就职于中国农业银行研发中心,从事即时通讯、音视频等领域研发工作;

矫宏鹤,互联网金融研发工程师,就职于中国农业银行研发中心,从事即时通讯、音视频等领域研发工作。


推荐阅读
你点的每个“在看”,我都认真当成了AI
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spark Streaming 和 Flink 都是流处理框架,但在一些方面有所不同。 1. 数据处理模型 Spark Streaming 基于批处理模型,将流数据分成一批批进行处理。而 Flink 则是基于流处理模型,可以实时处理数据流。 2. 窗口处理 Spark Streaming 的窗口处理是基于时间的,即将一段时间内的数据作为一个窗口进行处理。而 Flink 的窗口处理可以基于时间和数据量,可以更加灵活地进行窗口处理。 3. 状态管理 Spark Streaming 的状态管理是基于 RDD 的,需要将状态存储在内存中。而 Flink 的状态管理是基于内存和磁盘的,可以更加灵活地管理状态。 4. 容错性 Flink 的容错性比 Spark Streaming 更加强大,可以在节点故障时快速恢复,而 Spark Streaming 则需要重新计算整个批次的数据。 总的来说,Flink 在流处理方面更加强大和灵活,而 Spark Streaming 则更适合批处理和数据仓库等场景。 ### 回答2: Spark Streaming 和 Flink 都是流处理框架,它们都支持低延迟的流处理和高吞吐量的批处理。但是,它们在处理数据流的方式和性能上有许多不同之处。下面是它们的详细比较: 1. 处理模型 Spark Streaming 采用离散化流处理模型(DPM),将长周期的数据流划分为离散化的小批量,每个批次的数据被存储在 RDD 中进行处理,因此 Spark Streaming 具有较好的容错性和可靠性。而 Flink 采用连续流处理模型(CPM),能够在其流处理过程中进行事件时间处理和状态管理,因此 Flink 更适合处理需要精确时间戳和状态管理的应用场景。 2. 数据延迟 Spark Streaming 在处理数据流时会有一定的延迟,主要是由于对数据进行缓存和离散化处理的原因。而 Flink 的数据延迟比 Spark Streaming 更低,因为 Flink 的数据处理和计算过程是实时进行的,不需要缓存和离散化处理。 3. 机器资源和负载均衡 Spark Streaming 采用了 Spark 的机器资源调度和负载均衡机制,它们之间具有相同的容错和资源管理特性。而 Flink 使用 Yarn 和 Mesos 等分布式计算框架进行机器资源调度和负载均衡,因此 Flink 在大规模集群上的性能表现更好。 4. 数据窗口处理 Spark Streaming 提供了滑动、翻转和窗口操作等灵活的数据窗口处理功能,可以使用户更好地控制数据处理的逻辑。而 Flink 也提供了滚动窗口和滑动窗口处理功能,但相对于 Spark Streaming 更加灵活,可以在事件时间和处理时间上进行窗口处理,并且支持增量聚合和全量聚合两种方式。 5. 集成生态系统 Spark Streaming 作为 Apache Spark 的一部分,可以充分利用 Spark 的分布式计算和批处理生态系统,并且支持许多不同类型的数据源,包括Kafka、Flume和HDFS等。而 Flink 提供了完整的流处理生态系统,包括流SQL查询、流机器学习和流图形处理等功能,能够灵活地适应不同的业务场景。 总之,Spark Streaming 和 Flink 都是出色的流处理框架,在不同的场景下都能够发挥出很好的性能。选择哪种框架取决于实际需求和业务场景。 ### 回答3: Spark Streaming和Flink都是流处理引擎,但它们的设计和实现方式有所不同。在下面的对比中,我们将比较这两种流处理引擎的主要特点和差异。 1. 处理模型 Spark Streaming采用离散流处理模型,即将数据按时间间隔分割成一批一批数据进行处理。这种方式可以使得Spark Streaming具有高吞吐量和低延迟,但也会导致数据处理的粒度比较粗,难以应对大量实时事件的高吞吐量。 相比之下,Flink采用连续流处理模型,即数据的处理是连续的、实时的。与Spark Streaming不同,Flink的流处理引擎能够应对各种不同的实时场景。Flink的实时流处理能力更强,因此在某些特定的场景下,它的性能可能比Spark Streaming更好。 2. 窗口计算 Spark Streaming内置了许多的窗口计算支持,如滑动窗口、滚动窗口,但支持的窗口计算的灵活性较低,只适合于一些简单的窗口计算。而Flink的窗口计算支持非常灵活,可以支持任意窗口大小或滑动跨度。 3. 数据库支持 在处理大数据时,存储和读取数据是非常重要的。Spark Streaming通常使用HDFS作为其数据存储底层的系统。而Flink支持许多不同的数据存储形式,包括HDFS,以及许多其他开源和商业的数据存储,如Kafka、Cassandra和Elasticsearch等。 4. 处理性能 Spark Streaming的性能比Flink慢一些,尤其是在特定的情况下,例如在处理高吞吐量的数据时,在某些情况下可能受制于分批处理的架构。Flink通过其流处理模型和不同的调度器和优化器来支持更高效的实时数据处理。 5. 生态系统 Spark有着庞大的生态系统,具有成熟的ML库、图处理库、SQL框架等等。而Flink的生态系统相对较小,但它正在不断地发展壮大。 6. 规模性 Spark Streaming适用于规模小且不太复杂的项目。而Flink可扩展性更好,适用于更大、更复杂的项目。Flink也可以处理无限制的数据流。 综上所述,Spark Streaming和Flink都是流处理引擎,它们有各自的优缺点。在选择使用哪一个流处理引擎时,需要根据实际业务场景和需求进行选择。如果你的业务场景较为复杂,需要处理海量数据并且需要比较灵活的窗口计算支持,那么Flink可能是更好的选择;如果你只需要简单的流处理和一些通用的窗口计算,Spark Streaming是更为简单的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值