导读:数据在很多业务中都至关重要,对于网易云信,我们通过数据来提升服务并促进业务持续增长。借助于服务监控平台的能力,我们可以很直观的感受到线上服务的运行状况,本文将详细分析网易云信的服务监控平台具体是如何实现的。

文|戴强 网易云信资深数据平台开发工程师

通常人类的恐惧都来源于对现实世界的未知。

现实生活中存在很多的不确定性,恐惧是因为我们当前的认知无法对其作出合理解释。例如这次的疫情的突然爆发,人们对死亡的恐惧不断蔓延。世界存在很多的不确定性,什么是不确定性。假设我们对于明天的股票指数是涨是跌作出判断,在没有任何数据作支撑的情况下,我们只能像抛硬币一样都是百分之50的概率。我们所有作出的判断都是不可信的,我们会对自己的决定感到不安。

假如人们了解了所有涉及某种即将发生的事件的因素,那么他们就可以精确地预测到这一事件;或者相反,如果发生了某个事件,那么就可以认为,它的发生是不可避免的,这便是拉普拉斯的信条(又名决定论)。

正如以上的理论所表达的意思,数据可以帮助我们指引方向,并且验证我们的方向是否正确。同样,数据对于网易云信的发展来说也至关重要,我们需要通过数据来提升我们的服务,并促进业务持续增长。

网易云信是集网易21年 IM 以及音视频技术打造的 PaaS 服务产品,我们一直致力于提供稳定可靠的通信服务,而如何保证稳定可靠呢?

服务监控平台就是其中重要的一环,其就相当于布加迪威龙上的仪表盘,汽车的时速是多少,油量是否足够,当前的转速是多少,这些在仪表盘上一目了然,可以帮助我们做出判断:是不是还可以踩一点油门,必要的时候是不是该刹一下车。服务监控平台的目标和价值就在这里,它也就相当于网易云信这辆布加迪威龙的仪表盘,可以告诉我们当前的服务质量怎么样,是不是需要多加点“油”,是不是需要踩一下“油门”或者“刹车”,给我们和客户提供更多的信息,帮助我们提供最优质的、最可靠、最稳定的服务。

本文就来详细分析网易云信的服务监控平台具体是如何实现的,将从整体架构出发,简单介绍网易云信服务监控平台的框架,再仔细分析包括数据采集、数据预处理、监控告警、数据应用四个模块的实现。

1 系统架构

现在网易云信的音视频数据基本都来源于客户端和服务端日志,所以整个数据的采集链路是其中非常重要的一环,决定了数据的有效性和时效性。

首先,我们来看一下网易云信采集监控平台的整体架构,如下图:

采集监控平台整体架构主要分为数据采集、数据处理、数据应用、监控告警四部分,整个处理流程如下:

  • 数据采集:

    • 我们主要的数据来源为业务 SDK 和应用服务器,这些数据可以通过 HTTP Api、Kafka 两种方式接入采集服务。

    • 采集服务对数据进行简单校验和拆分,然后通过 Kafka 传输到数据清洗服务。

  • 数据处理:数据处理服务主要负责对接收到的数据进行处理然后发给下游服务使用。其中我们提供了 JOSN 等简单的数据格式化能力,另外也提供了脚本处理模块,以支持更灵活更强大的数据处理能力,该能力也使得我们监控平台的数据处理能力更富多样性。

  • 监控告警:监控告警模块对于我们一开始提到的服务监控能力来说,是最重要的一环。我们对于采集到的数据进行分维度聚合统计和分析,使用丰富的聚合算法、灵活多变的规则引擎来最终达到服务预警和问题定位的目的。

  • 数据应用:清洗后的数据可以直接写入时序数据库供问题排查平台使用,也可以通过 Kafka 接入 es、HDFS、流处理平台,最终供应用层使用。例如:质量服务平台、通用查询服务、问题排查平台等。

接下来我们会对上述四个模块进行详细的分析。

2 数据采集

数据采集是服务监控平台的入口,也是整个流程的第一步,下图是数据采集模块的架构图。

上文也有提到,为了便于用户接入,我们提供了 HTTP API 和 Kafka 两个通道给业务方。

  • HTTP API 多用于端侧或服务器中偏实时的数据上报场景,用以支持秒级的数据接入。

  • Kafka 多用于高吞吐量、数据实时性要求不太高的场景。

  • 数据过滤预处理模块,提前将一些非法数据进行过滤,并预先数据拆分等处理。

最后通过 Kafka 传输到数据处理服务,接下来就是数据处理阶段的介绍了。

3 数据处理

完成数据采集阶段后,即进入数据处理阶段,具体流程如下:

  • 任务调度,主要负责数据处理线程的生命周期管理,从启动到关闭。

  • 消费者,在获取数据后使用内部的队列进行解耦,从而达到横向扩展的能力以提高数据处理线程的并行度。

  • 处理单元,可以根据需要设置并行度:

    • 数据处理能力分成两种,通用规则和自定义脚本。通用规则就是简单的 JSON 转换、字段提取等,这些基本可以满足80%的需求,但是为了支撑类似多字段关联计算、正则表达式、多流关联处理等复杂业务,我们也提供了自定义脚本进行数据处理的能力。

    • 维度表的使用主要是针对多数据流关联处理的场景,为了解决数据量和并发高的问题使用了本地+第三方缓存的方案。

    • 时序数据库输出:时序数据库我们使用的是NTSDB,NTSDB 是网易数帆基于influxdb做的集群化方案,有高可用、高压缩比、高并发等特点。

数据处理完之后,接下来一个比较重要的阶段就是监控告警。

监控告警

下面这张图简单展示了监控告警的流程:

监控告警阶段分为指标聚合模块以及告警模块。

指标聚合模块支持指定字段分组统计、灵活的聚合窗口时间、数据过滤、细粒度的算子级别的数据过滤、数据延迟最大时间。最重要的是我们支持了非常丰富的聚合算子:累加、最小/最大值、firstValue/lastValue、平均数、记录数、去重计数、TP系列(TP90/TP95/TP99)、环比、标准差等,同时还支持在第一次指标聚合后进行复合计算的能力(复合指标)。这些丰富的算子为我们实现更多灵活的监控规则提供了保证。

另外我们将原有的一阶段聚合改成了两阶段聚合,为什么呢?因为在数据处理的过程中我们经常会遇到的一个问题:数据热点问题导致的倾斜。所以这里我们增加了预处理阶段,在这一阶段利用随机数进行打散,保证数据的均衡,然后预聚合的数据在第二阶段进行总的聚合处理。

告警模块和指标聚合模块从原有的一个模块拆分为两个,指标模块更多的关注如何做数据聚合,而不是和告警模块耦合在一起作为告警模块的一部分。而告警作为一个附加的功能,只需要根据接收到的数据,做一些告警的规则校验、频控校验、告警信息封装、对接消息平台发送告警消息,同时支持了内部 IM 平台、短信、电话等消息通道,多样的消息通道是为了可以第一时间感知到问题的出现。

5 数据应用

数据应用现有的平台:数据可视化、质量服务平台、ELK日志平台、在线离线分析等。下面,我们针对每个平台简单介绍一下。

 数据可视化 

数据可视化这部分,我们和大部分公司一样使用 Grafana 来实现。需要做可视化的数据可以先同步到NTSDB中,然后再使用 NTSDB 作为数据制作图表和大盘。另外对于不支持的图表,我们针对Grafana 做了二次开发以支持更多的可视化需求。

下图皆是针对音视频问题排查场景做的一些仪表盘:

 质量服务平台 

该平台旨在为客户提供直观、高效、全面、实时的问题定位排查工具,客户在收到问题反馈之时,可以第一时间发现、定位问题,并最终反馈用户和进行优化。

 ELK 日志平台 

ELK 技术栈包含 Logstash、ES、Kibana 三个组件,是一整套日志采集、存储、查询及可视化的解决方案。当前在我们的体系中,更多的用于详细日志的查询。

 在线离线分析 

这里我们使用 Kafka 作为数据管道,借助 Flink 平台对日志数据进行切分和归档。将这部分数据同步到离线数仓后,可以进行后续的数据挖掘分析工作,同样这里也不扩展讨论。

6 总结

以上就是本文的全部介绍,分析了网易云信服务监控平台的设计和实践,其中主要介绍了整个服务监控平台的系统架构,并且针对数据采集、数据处理、监控告警、数据应用四个点做了一些阐述。

网易云信的整个数据采集监控体系从2020年初上线至今,从原有的十几个采集任务增长到了300多个,100+的关键用户行为和系统事件、300+的核心音视频指标,每日处理百万行的数据、T级的数据量。整个平台的并发量、吞吐量都在不断地上升,这都得益于云信业务的不断增长,但也使得我们对平台的稳定性和扩展性提出了更高的要求。未来,我们将借助于平台的能力为客户们提供更加优质的服务。

作者介绍 

戴强,网易云信数据平台资深开发工程师,一直从事数据平台相关工作,从0到1搭建了网易云信的实时和离线数仓体系,同时负责服务监控平台、数据应用平台、质量服务平台的设计开发工作。

 更多阅读 

  • 网易云信流媒体首席架构师:新一代音视频技术架构如何构建?

  • 网易云信在融合通信场景下的探索和实践之 SIPGateway 服务架构

  • 网易实战分享|云信IM SDK接口设计实践

网易云信服务监控平台实践相关推荐

  1. cat全链路监控_谛听全链路监控平台实践与思考

    一.项目背景 近几年,信也科技的研发技术伴随着业务的快速增长逐步演化为微服务化的分布式体系架构,但随之带来的系统间的上下游依赖关系的复杂度也呈指数级上升,已有的烟囱式的监控产品(CAT.ELK等)存在 ...

  2. 宝塔部署node项目_SFF一站式node服务管理平台实践

    导语 本文阐述了基于Serverless搭建一站式node服务管理平台过程中,在开发框架.日志.监控.部署等方面遇到的问题及技术方案. 背景 Serverless是一种无服务器架构,它的弹性伸缩,按需 ...

  3. 网易云信 QUIC 应用优化实践

    导读:网易云信作为音视频服务提供商的领导者,一直致力于提供顶级的音视频通话服务体验,为用户在各种恶劣环境下提供可靠的音视频服务.如何在极端弱网条件下仍然能给用户提供可靠的音视频服务,是网易云信关注的重 ...

  4. 基于java开发的开源代码GPS北斗位置服务监控平台

    最近在研究位置服务平台,基于全球卫星定位技术(GNSS).互联网技术.空间地理信息技术(GIS).3G/4G无线通信技术,面向全国公众用户建立大容量.实时.稳定的位置信息服务运营平台.实现管理目标的实 ...

  5. 监控平台实践(三)Telegraf 实现组件监控

    00 telegraf 插件介绍 网页链接: 插件链接:telegraf plugins 网页中展示了telegraf1.17版本支持的插件以及使用说明,包括配置.数据来源.数据格式等,可以参照. 后 ...

  6. 连麦互动直播方案全实践3:网易云信连麦互动的实现方案

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  7. 网易云信联合浙江大学信电学院成立创新与实践基地,探索音视频前沿技术

    在新冠疫情对各行各业的持续冲击下,以音视频为代表的非接触式产业成为数字经济的有力支撑,并呈现出极大的发展潜力.为夯实音视频技术研发能力,让创新驱动发展,11月28日,在网易创新企业大会上,来自网易核心 ...

  8. 网易云信 7 周年丨服务超过 150 万开发者,消息量突破 20000 亿条

    ● 数学家的眼中,7 年能够换算成 2555 天或是 220752000 秒. ● 经济学领域认为,7 年是通常意义上的一个经济周期. ● 生物学家看来,每个 7 年,人体的全身细胞就会完成一次彻底的 ...

  9. 连麦互动直播方案全实践2:网易云信连麦互动直播方案的演变过程

    毫无疑问直播是当前移动互联网最热门的领域之一,在超强热度的引导下直播领域也吸引了大量的商业资本.在各大直播应用万花齐放的时刻,也正是直播应用面临的真正风口.站在这个风口上,直播应用只把握好风向标,推出 ...

  10. 云信服务器代码,云信一键登录服务端API文档-一键登录-网易云信开发文档

    一键登录 > 服务端 API 文档 一键登陆服务端API文档 接口概述 API调用说明 本文档中,所有调用网易云信服务端接口的请求都需要按此规则校验. API checksum校验 以下参数需要 ...

最新文章

  1. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。...
  2. linux设置数据库定时备份,linux中使用计划任务进行数据库定期备份
  3. Dynamic ReLU论文解读
  4. 恒生电子实施怎么样_蓝思科技今年来涨幅超166%,消费电子主题基金如何挑选?...
  5. vue项目使用webSocket前后端建立连接推送消息
  6. 为中国游牧蒙古人造像
  7. XSS 跨站脚本攻击 的防御解决方案
  8. 【Irrlicht Engine笔记】test4-movement
  9. 走向Java架构师之路:成为架构师要掌握的8大能力
  10. python小练习(杂七杂八)
  11. 程序员自爆奇葩入职原因:进腾讯是为了不用续费年费会员,进抖音是想天天上班刷抖音
  12. 实验四:py实现求导数与隐函数偏导数
  13. stm32f103VCT6全新机器 做stm32开发板 原理图以及主要器件规格书
  14. node.js+uni计算机毕设项目基于微信小程序在线抽签系统(程序+小程序+LW)
  15. 如何系统学游戏建模?游戏建模必备知识,值得收藏
  16. sql 授予其他用户权限语句
  17. java[1,2]错题整理
  18. 使用IText7 生成PDF文档
  19. 办理充电宝移动电源GB/T35590-2017费用多少钱
  20. python通过Excel表格读取存储数据

热门文章

  1. 分享基于SpringBoot2+MybatiPlus+LayUI+Snaker+Mysql技术前后端分离开源后台管理系统脚手架
  2. Java反射05 : 修饰符Modifier静态方法学习示例
  3. html的excel表格自动换行,Excel单元格内换行实现同时设置多单元格自动换、避免输入短横线...
  4. xml 解析错误:语法错误 xml解析错误:找不到根元素
  5. CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆
  6. kettle MongoDB数据迁移至Hbase
  7. 97 Three.js 使用 specularMap 设置高光贴图
  8. mysql如何查看bufferpool_查看Buffer Pool使用情况--[转]
  9. mysql 锁级别说明 一
  10. python 小说爬虫_初次尝试python爬虫,爬取小说网站的小说。