热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实时监控系统如何帮助FreeWheel支持超级赛事直播广告?

嘉宾介绍:陆琴,2010年加入FreeWheel,目前是FreeWheel监控平台高级经理,同时负责

嘉宾介绍:陆琴,2010 年加入 FreeWheel,目前是 FreeWheel 监控平台高级经理,同时负责 Adserving 部门质量保证工作。陆琴在软件测试理论、测试平台搭建、如何设计并保证高可用系统等方面拥有丰富的经验,曾任 Adserving 部门首席测试工程师。2017 年起,负责搭建 FreeWheel 监控平台,倡导技术变革和理念更新,为 FreeWheel 如何使用实时监控平台保证超级赛事直播质量做出突出贡献,先后带领团队组织并实施了超级碗、奥运会、世界杯等在线支持。在加入 FreeWheel 之前曾于暴风影音工作。

InfoQ:介绍一下您自己以及 FreeWheel 的主要业务?

陆琴:您好,我叫陆琴,是 FreeWheel 监控平台的高级经理,之前是在 FreeWheel 广告投放部门任首席测试工程师。从 2017 年开始,我们重新开始搭建新的监控平台,基于新搭建的监控平台,带领团队支持了从今年 2 月份开始的超级碗、冬奥会,还有今年的世界杯等直播赛事,最近也正在做 NFL 美国橄榄球联赛的直播。

我们的公司叫 FreeWheel,它的中文名叫飞维美地,主要业务就是通过在不同的视频终端上,通过广告来变现优质视频。我们提供的是一体化的视频广告解决方案,包括视频广告的管理、投放、预测还有报表等等的增值服务,是美国本土领先的视频广告管理和投放平台。

我们服务了全美大概 90% 的主流电视媒体和运营商。 传统运营商,比如说 Comcast、COX,有点类似于中国的歌华有线,还有一些传统的电视台,比如说 ESPN、FOX,有点像国内的湖南卫视、浙江卫士。同时我们还有一些纯数字化的平台,比如索尼、Crackle 这样的公司,有点像我们国内的爱奇艺、优酷这样的视频平台。

所以我们公司的覆盖面还是非常广的。

InfoQ:直播视频广告有什么特点?

陆琴:我想大家平常都看过直播视频,NBA 是一个非常典型的例子,还有美国比较流行的 NFL 橄榄球比赛,都是特别典型的例子,可能跟足球比赛不一样,因为足球比赛的直播,广告点基本上比较固定,就是中场休息,但是对于像 NBA、NFL 橄榄球比赛,你根本就不可能知道教练什么时候叫暂停,所以也就不知道具体的广告时间。对于我们系统来说,主要有三个特点:高并发、实时响应和高可用。 高并发:直播赛事进广告的时候,几乎是所有用户都同时发起广告请求, 也就是说,所有的广告请求几乎同时要发给广告投放服务器,导致我们系统面临突发的高并发的压力。

实时响应,就像刚才说的 NBA 和 NFL 橄榄球比赛的广告时机不可预测,从知道可以插入广告到用户看到广告播放,只有短短数秒时间,需要我们的广告服务器能实时响应。

第三个是高可用性,对于直播来说,广告机会一旦错过,不可恢复。跟购物网站对比,极端情况下的可用性,只是影响用户体验,而直播广告系统,直接影响客户的收入。而我们公司支持的直播赛事又都是超级直播赛事,所以对于我们系统的要求会更高一些。

所以基于这样三个特点,对我们的监控平台也会带来比较大的压力,要求我们的广告投放平台非常稳定,也就要求我们的监控平台也能够做到实时地发现以及定位线上的问题。

InfoQ:FreeWheel 的实时监控平台在设计的时候有哪些考虑?采用了哪些组件?

陆琴:首先对于我们的监控平台来说,我们第一是要符合广告投放系统的一些特点,像刚才说直播广告有这样那样的特点,其实就对我们的监控平台提出了一些要求,所以我们也是基于直播广告的特点来设计我们的监控平台。

第一,需要有统一的监控平台,需要我们能基于应用、系统、业务做立体全方位的监控。

第二,数据可插拔,支持接入各种各样的数据,支持各种模块、各种组件、以及各种模式的数据。

第三,实时响应。我们的广告请求都是非常快的进来,所以我们要能够抓住这样的广告请求的时机,我们的监控平台也要能够实时响应。现在我们线上的广告平台数据采集频率是 10 秒钟的时间。

还有像任何一个监控平台一样,它也要具备数据

的可视化,故障分析和定位的功能,通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态等直观的信息。 监控系统能够通过各种监控指标,历史趋势分析、帮助我们找到及解决根源问题。

最后一点,自动化和智能化。当线上报警触发后,可以通过自动化运维的方式来止损,同时我们会引入人工智能的方式,自动识别 abnormal pattern,进而判断异常的发生。

我们的监控平台采用了哪些组件,其实我们的监控平台跟任何其他的监控平台一样,我们都有四个模块组成,第一是数据采集,第二是数据存储与查询引擎,第三是数据的可视化,第四是报警,能把问题通知到相关的人。

首先我们来说一下数据采集,我们主要是通过 Prometheus 的方式来做数据采集的,因为 Prometheus 定义了标准的监控指标类型,也有很多开源的 exporter 能够帮助我们去做监控数据的采集。

我们自研的应用会基于 Prometheus 的 client library 来定义应用自己的监控指标, 而对于通用的服务,如 mysql, kafka 等,会使用相应的 exporter 来帮助我们做监控. 数据都是通过 Prometheus 来采集。同时我们也自研了一个 Prometheus 监控指标的转换适配器,我们叫它 Gather。对于一些历史遗留性的服务,比如 cronjob、或者 script 脚本类的服务,它不太适合通过 Prometheus 的接口来暴露监控指标, 于是我们就开发了 Gather,Gather 是运行部署在本地的,它其实就相当于是本地的 Prometheus 的 native collector agent,它能够帮我们把本机的所有监控指标都收集起来,并且转换成 Prometheus 的格式,供 Prometheus 来采集。这是我们的数据采集部分。

数据存储主要是用 InfluxDB 来做 Prometheus 的远程存储,因为 InfluxDB 的 cluster 版本是要收钱的,所以我们也通过自研的方式,开发了数据库的中间件 DB-Proxy。通过这个 DB-Proxy 能够帮我们实现数据库读写的高可用、负载均衡、数据库的扩容等等。

由于我们的数据采集是 Prometheus,而数据的存储是 InfluxDB,所以就存在一个数据转换的问题。我们也把 Prometheus 的 Influxdb remote read adapter 实现到我们的 DB-Proxy 里面去了。同时我们也对于 Prometheus 到 InfluxDB 数据转换的查询这块也做了一些相应的优化,这是我们的数据存储。

我们还采取了开源 Trickster 查询缓存,来帮助我们减少数据库的查询压力。Trickster 是 Comcast 开源的,专门针对 Prometheus 数据的查询缓存工具。 这是数据存储和查询我们主要用到的一些组建。

我们的 UI dashboard 基本上都是用 Grafana 来做展现的。

最后来说一下 Alert 报警模块。我们的 Alert 其实是使用了 InfluxDB 的原生 Alert 模块叫 Kapacitor,但是如果只使用它来做报警的话会导致 Alert 泛滥的问题,因为它没有做报警收敛的功能。所以在这个基础上我们又自研了 alert manager 来帮助我们基于时间维度和业务维度的报警聚合,同时报警的历史数据存入数据库,便于我们对 alert 进行分析和处理。同时由于我们需要对 Alert Rule 进行增删改查的操作,所以我们也自研了 UI 和 API。刚才也说到 alert 被触发之后,我们要支持后续的自动化运维,所以我们也开发了 Alert post action 来支持警报自动化运维处理及故障定位与分析。这些就是我们的监控平台主要用到的模块组件。

InfoQ:FreeWheel 的实时监控平台,它是怎么样帮助工程师提前发现一些线上的问题的?

陆琴:这个方面,真的还有挺多可以说的,因为在我们的实时监控平台发展到当前阶段之前,经常会遇到一些问题,比如在线上报警报出来的时候,我们已经来不及处理止损了。现在我们是基于系统、业务、应用三维一体的来去做线上的监控。我认为很重要的一点是在我们去重新搭建新的监控平台的过程中,我们跟各个应用方一起梳理了应用本身,它到底需要做哪些监控、哪些地方需要去做监控。所以在平台和应用方共同的努力下,我们对于系统和应用都加了很多监控指标。 同时为了防止问题在最后一刻才被爆出来,以致我们没有办法止损的情况,我们对报警定义了不同的级别,例如 info、warning 和 critical。对 info 级别设的报警条件相对松一些,到 critical,那真的是很 critical 的问题。我们现在线上的情况是,当有一些苗头的时候,潜在的问题就通过 info 或者 warning 的方式发现、报告出来了。有一个很常见的例子,出现过很多次的,是我们的广告投放系统的性能下降的问题。

我们线上的广告投放系统的性能,它依赖于广告投放服务器它所服务的线上流量。虽然我们自己会针对于线上的流量来做线下的流量回放,但仍然会有一些意想不到的集成上线,而工程师们没法提前知道。所以我们把系统性能指标的报警设得相对严格。有一点点下降的苗头,我们就提前都知道了。我们对性能指标做了非常详细的细分,到底有哪些方面有可能影响广告投放系统的返回时间,都有相应的监控指标。现在基本上当发现广告投放系统性能有下降的趋势时,我们都能够找出来到底是什么原因导致了性能下降。同时我们也会把原始的流量都记录下来,帮助我们来发现和还原问题。

InfoQ:FreeWheel 实时监控平台确实是非常有特色的一个平台,但是不可能所有平台都是尽善尽美的,在您看来,FreeWheel 实时监控平台还有哪些可以改进的地方?

陆琴:肯定有需要改进的地方,因为系统的发展是由小到大的,监控平台支持的监控数据也是由少到多,监控系统也是逐渐变得复杂的。所以大量的监控数据的接入对我们的监控平台本身也造成了一定的压力。 刚刚我也介绍了,我们采用 InfluxDB 作为我们的远程存储,它本身存在单点的问题,虽然我们用 DB-Proxy 作为中间件对它做了一些可扩展性等等的优化,但随着更大量数据量的接入,我们的远程数据存储也存在着性能瓶颈。所以我们现在也在考虑,是不是要切到 OpenTSDB 或者 AWS Timestream 这样的数据远程存储。

如果我们的数据存储切到另外的方式的话,就意味着我们的 Alert 模块也得做相应的改动。因为刚才我也介绍了,我们的 Alert 是基于的 InfluxDB 原生的 Kapacitor 的,这个可能会有比较大的改动。

同时也就像我刚才所介绍的那样,在自动化、智能化方面,我们也有一些想法,希望能够更好地来利用监控平台,能够减少人工的干预,帮我们自动的发现、修复一些问题。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
author-avatar
7-好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有