本篇文章内容来自2016年TOP100summit Microsoft资深产品经理邢国冬的案例分享。
编辑:Cynthia

邢国冬(Tony Xing):Microsoft资深产品经理、负责微软应用与服务集团的大数据平台构建,数据产品与服务.

导读:微软的ASG (应用与服务集团)包含Bing,、Office,、Skype。每天产生多达5 PB以上数据,如何构建一个高扩展性的data audit服务来保证这样量级的数据完整性和实时性非常具有挑战性。本文将介绍微软ASG大数据团队如何利用Kafka、Spark以及Elasticsearch来解决这个问题。

一.案例简介

本案例介绍了微软大数据平台团队设计和部署的基于开源技术(Kafka、Spark、ElasticsSearch、Kibana)的大数据质量监控平台,这个平台具有实时、高可用、可扩展、高度可信的特性,成为微软Bing、Office365、Skype等年收入270+亿美元的业务在监控数据质量方面的可靠技术保障。同时,基于业务需要,我们在设计和实现中达成下面一系列的目标:

● 监控流式数据的完整性与时延;
● 需要监控的数据管道(pipeline)具有多个数据生产者、多处理阶段、多数据消费者的特性;
● 数据质量的监控需要近实时(near real time);
● 数据质量发生问题的时候,需要提供相应的诊断信息来帮助工程师迅速解决问题;
● 监控平台的服务本身需要超级稳定和高可用, 大于99.9%在线时间;
● 监控与审计本身是高度可信;
● 平台架构可以水平扩展 (Scale out)。

二、背景以及问题的引入

为了服务微软的Bing、Office 365以及Skype业务,我们的大数据平台需要处理每天高达十几PB级别的海量大数据,所有的数据分析、报表、洞见以及A/B测试都依赖于高质量的数据,如果数据质量不高的话,依赖数据做决策的业务都会受到严重影响。

与此同时,微软业务对于实时数据处理的需求也日益增加,以前监控批处理数据(batch data)的很多解决方案已经不再适用于实时的流式数据的质量监控。

在另外一个层面,基于历史原因,各个业务集团往往使用不同的技术、工具来做数据处理,怎么整合这样异构的技术、工具以及在此之上的数据质量监控也是一个急需解决的问题。

图1是我们数据处理平台的一个概念性架构。从数据生产者这端,我们通过在客户端以及服务端使用通用的SDK,按照通用的schema来产生数据,数据通过分布在全世界的数据收集服务(collectors)来分发到相应的Kafka,然后通过pub/sub模式由各种各样的计算以及存储框架来订阅。

这样各种团队就可以选择他们最熟悉或者一直以来使用的工具来做处理。例如,从实时处理的角度,各个业务团队可以选用比如Spark或者微软的USQL streaming处理框架,以及其他第三方的工具来做一些特定场景的分析,比如日志分析的Splunk、交互式分析的Interana等。在批处理框架上,用户可以选用开源社区的Hadoop,、Spark或者微软的Cosmos等。

如图2所示,我们在迁移大数据到图1架构的过程中,也看到实时流式数据的快速增长。每天峰值消息高达一万亿个以上,每秒处理一百三十万个消息, 每天处理3.5PB流式数据。

三、数据监控的场景以及工作原理

3.1数据监控场景

基于业务需求,我们总结概括了需要被监控的数据处理管道特性(如图3)
● 多数据生产者(multiple data producers),数据来自客户端和服务端;
● 多个数据消费者(multiple data consumers),这里特指各种数据处理框架;
● 多数据监控阶段(multiple stages),从数据产生到数据处理,数据往往流经多个数据管道的组件,我们需要通过监控确保每个阶段数据都不会发生丢失、高时延、以及异常。

3.2工作原理

基于图3的数据管道,我们把问题具体化为如何确保基于Kafka的数据管道上下游的数据完整性、实时性、数据异常的监测。图4是一个抽象化的监控架构以及工作原理。

蓝色组件是数据管道里数据流经的各个处理阶段;绿色组件是本文中实时数据质量监控的核心服务Audit Trail。在数据流经各个组件的同时,相应的审计(audit)数据也会同时发到Audit Trail, 这个审计数据可以看作是一种元数据(meta data),它包含关于数据流的信息,例如该消息是在哪个数据中心、哪台机器产生;该消息包含几条记录、大小、时间戳等。Audit Trail汇总了各个数据处理组件发来的元数据后,就可以实时做各种数据质量的评估,比如数据在此时刻的完整性如何、实时性如何、有无异常。

基于图5的审计元数据,一旦发生数据质量问题,工程师可以快速定位是哪个数据中心的哪台服务器在什么时间段发生了问题,然后快速采取相应行动来解决或缓解问题,并把对下游数据处理的影响降到最低。

可被监控的数据质量问题可以分为如下几类:
● 数据时延超出规定的SLA (service level agreement)

工程师可以通过如图6所示的时延状态图快速了解在数据质量时延这个维度是否正常,这对于对实时性要求比较严格的数据产品及应用非常重要,如果数据延迟到来,很多时候就失去了意义。

需要注意的是,图表在这里起到的只是辅助作用,在真正的生产环境中是通过系统API调用来定期检查SLA的符合情况,一旦超出时延阈值,会通过电话、短信等手段通知值班的工程师来实时解决问题。

● 数据在移动中发生丢失导致完整性不满足SLA (service level agreement)

工程师可以通过图7中所示简单图表来了解数据完整性的状态,图7所示包含两个数据处理阶段:一个数据生产者和两个数据消费者的应用案例。所以图表中实际上是三条线,绿色是生产者的实时数据量,蓝色和紫色线是两个数据消费者处理的数据量。如果在理想情况下,数据完整性没有问题,这三条线是完全重合。本例中在最后一个点出现了分叉,代表数据完整性出现问题,需要工程师进行干预。

● 数据本身发生异常-通过异常检测来实时监控

数据本身发生异常,我们由相应的基于统计元数据的异常检测(如图8)来做实时监控。异常检测是一个在工业界非常普遍的问题和挑战,几乎每个互联网公司都会有做异常检测的服务或平台,但是做好很不容易,这是一个可以单独写一篇文章的大题目,这里只是单辟一个章节做简单的算法介绍。

本例是通过对于数据量的异常检测来发现上游写log问题,或者其他数据生产的逻辑问题。

3.3异常检测

3.3.1异常检测算法1

我们采用了Holt-Winters算法(图9)来训练模型和做预测,并在此之上做了很多改进来增加算法的强健性和容错能力。

强健性上的改进包括:
● 使用Median Absolute Deviation (MAD) 得到更好的估值;
● 处理数据丢点和噪声 (例如数据平滑)。
功能上的改进包括:
● 自动获取趋势和周期信息;
● 允许用户人工标记和反馈来更好的处理趋势变化。
通过比较预测值和实际值,我们采用GLR (Generalized Likelihood Ratio) 来发现异常点。在这上面我们也做了相应的改进,包括:
● Floating Threshold GLR, 基于新的输入数据动态调整模型;
● 对于噪声比较大的数据做去除异常点。

3.3.2异常检测算法2

这是一个基于Exchangeability Martingale的在线时间序列的异常检测算法,其核心就是假设数据的分布是稳定的。如果新的数据点的加入导致数据的分布(distribution)发生比较大的变化,我们就认为异常发生了。所以基于历史数据,我们需要定义一个新值异常公式(New value strangeness)。下面是这些公式的构成,对数学不感兴趣的读者可以略去。

在某个时刻t, 我们收到一个新的数据点,对于历史每个数据i:
s[i] = strangeness function of (value[i], history)
Let p[t] = (#{i: s[i] > s[t]}+ r*#{i: s[i]==s[t]})/N, where r is uniform in (0,1)
Uniform r makes sure p is uniform
Exchangeability Martingale: Mt=i=1tϵpiϵ-1
EMtp1,p2,…pt-1=Mt-1
Integrate ϵpiϵ-1 over [0,1] and pi is uniform
报警触发门槛通过Doob’s maximal inequality控制
Prob (∃ t :Mt>λ)<1λ
对于异常点,Martingale的值就会大于门槛值。

3.3.3异常检测算法3

这是一个简单而非常有效的基于历史数据的指数平滑算法。
它首先基于历史数据生成动态上下界:

Threshold (width) = min(max(M1Mean, M2Standard Deviation), M3*Mean) (M1 Threshold
预测值 = S1+12S2+14S3+18S4+116S51+12+14+18+116
优点在于处理周期性数据的异常检测很好,并且允许用户反馈和标记来调整动态上下界。

四、系统设计概述

基于业务场景的需要,我们在设计和实现中需要达成一系列的目标以及处理相应的挑战:
● 监控流式数据的完整性与时延;
● 需要监控的数据管道(pipeline)具有多个数据生产者、多处理阶段、多数据消费者的特性;
● 数据质量的监控需要近实时(near real time);
● 数据发生问题的时候,提供相应的诊断信息来帮助工程师迅速解决问题;
● 监控平台的服务本身需要超级稳定和高可用, 99.9%以上在线时间;
● 监控与审计本身是高度可信;
● 平台架构可以水平扩展 (Scale out)。

4.1高可用可扩展的架构

如图10所示,审计元数据通过前端服务(front end web service)到达Kafka, 我们利用Kafka来实现高可用的临时存储(transient storage), 这样,我们的数据生产者和消费者在发送审计数据的同时,就不会发生阻塞进而影响更重要的数据流。

通过Spark streaming的应用,把审计数据按照时间窗口聚合,同时有相应的逻辑处理去重,晚到以及非顺序到来的数据,同时做各种容错处理保证高可用。

ElasticsSearch作为存储聚合的审计数据,通过Kibana做报表展示,进而通过Data Analysis service对外提供API来使得用户获取各种数据质量信息。

Data Analysis Service作为最终的API端,提供各种数据完整性、实时性、异常的信息。
上述组件,每个都设计成可以独立水平扩展(Scale out), 并且在设计上保证高容错已实现高可用性。

4.2异地双活的可靠性保障

通过双数据中心Active-Active灾备(Disaster recovery)如图11所示,来进一步保证高可用高可靠的服务。整体架构保证数据流同时通过两个同构的审计处理管道进行处理,即使一个数据中心因为各种原因下线,整体服务还是处于可用状态,进而保证全天候的数据质量审计与监控。

4.3高度可信的审计与监控服务

对于任何监控服务来说,经常被质疑的就是是否监控服务本身的结果是准确可信的。为了保证这一点,我们通过两种方式来保证服务的可信度:
● 用来审计自身(Audit for audit)(图12);
● Synthetic probe。

在基于Kafka/Spark/ES的管道之外,我们还有一套独立的经由ES的审计元数据的处理管道,通过比较上述两个管道的结果,我们就能保证审计数据的可靠性。
另外,基于synthetic probe的方式,我们每分钟会发送一组synthetic数据进入前端服务(front end web service), 然后试图从Data Analysis web service 读出,通过这种方式进一步保障数据的可靠性。

4.4辅助数据质量问题的诊断

当数据质量发生问题,Audit Trail提供了原始的审计元数据来帮助工程师进一步做问题的诊断。工程师可以使用这些元数据和他们自己的trace来进一步JOIN, 来提供一种交互式的诊断,如图13。

五、效果评估和总结

通过上述系统架构的设计与部署,我们实现了一系列支持公司Bing,、Office,、Skype业务发展的数据质量监控目标:
● 监控流式数据的完整性与时延;
● 需要监控的数据管道(pipeline)具有多个数据生产者、多处理阶段、多数据消费者的特性;
● 数据质量的监控需要近实时(near real time);
● 数据发生问题的时候,需要提供相应的诊断信息来帮助工程师迅速解决问题;
● 监控平台的服务本身需要超级稳定和高可用, 99.9%在线时间
● 监控与审计本身是高度可信;
● 平台架构可以水平扩展 (Scale out)。

11月9-12日,北京国家会议中心,第六届TOP100全球软件案例研究峰会,Microsoft Principal Product Designer Bill Zhong将分享《微软OneNote的敏捷UX转型实践》;微软 data scientist Kirk Lee将分享《reinforcement learning in azure customer engagement》;微软 亚洲研究院资深研究员郑宇将分享《用大数据和AI驱动智能城市》。

TOP100全球软件案例研究峰会已举办六届,甄选全球软件研发优秀案例,每年参会者达2000人次。包含产品、团队、架构、运维、大数据、人工智能等多个技术专场,现场学习谷歌、微软、腾讯、阿里、百度等一线互联网企业的最新研发实践。

大会开幕式单天体验票申请入口

TOP100summit:【分享实录-Microsoft】基于Kafka与Spark的实时大数据质量监控平台的更多相关文章

  1. Top100Summit全球案例研究峰会第一天总结——云计算和大数据

    很荣幸受邀参加Top100Summit全球软件案例研究峰会,这次的大会主题是<技术推动商业变革>,组委会从全国投稿的460多件案例中甄选出100件具有代表价值的案例,进行为期4天的分享,第 ...

  2. Kafka 集群在马蜂窝大数据平台的优化与应用扩展

    马蜂窝技术原创文章,更多干货请订阅公众号:mfwtech Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数 ...

  3. 王家林 Spark公开课大讲坛第一期:Spark把云计算大数据速度提高100倍以上

    王家林 Spark公开课大讲坛第一期:Spark把云计算大数据速度提高100倍以上 http://edu.51cto.com/lesson/id-30815.html Spark实战高手之路 系列书籍 ...

  4. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

  5. MongoDB + Spark: 完整的大数据解决方案

    Spark介绍 按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎. 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及 ...

  6. 基于C#和Asp.NET MVC开发GPS部标监控平台

    基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...

  7. Spark Streaming实时写入数据到HBase

    一.概述 在实时应用之中,难免会遇到往NoSql数据如HBase中写入数据的情景.题主在工作中遇到如下情景,需要实时查询某个设备ID对应的账号ID数量.踩过的坑也挺多,举其中之一,如一开始选择使用NE ...

  8. 推荐一款国产优秀的基于 AI 的 Web 自动化测试工具——kylinTOP 测试与监控平台

    对于于一般的传统的自动化测试工具,如:Selenium,robotFramework,QTP等.QTP可以通过操作录制生成自动化用例脚本.生成的脚本与Selenium.robotFramework类似 ...

  9. Spark RDD编程-大数据课设

    目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...

随机推荐

  1. 【PMP】项目和运营的区别

    运营管理关注产品的持续性生产和服务的持续运作. 项目与运营会存在产品生命周期的不同时点交叉,例如: 在产品开发.产品升级或提高产量时: 在改进运营或产品开发流程时: 在产品生命周期结束阶段: 在每个收 ...

  2. 将cmd中命令输出保存为TXT文本文件

    转自:https://www.cnblogs.com/hongten/archive/2013/03/27/hongten_windows_cms.html 例如:将Ping命令的加长包输出到D盘的p ...

  3. Android Studio 常用快捷键 for mac

    Android Studio 常用快捷键 for mac 查找/查看相关 ⌘O: 全局查找class类名<使用率非常高> ⌘F: 在当前编辑文件中查找<使用率非常高> | 对应 ...

  4. Go 程序的性能调试问题

    英文原文:Debugging performance issues in Go programs 假设你手上有个Go语言编写的程序,你打算提升它的性能.目前有一些工具可以为此提供帮助.这些工具能帮你发 ...

  5. PHP——自定义比较算法

    很多时候,程序都是直接写好逻辑运算,提供给用户的是一个值,然后后台去比较:但是有时会提供一种类似计算器一样的交互方式的时候,PHP只能读懂用户的输入来进行比较了- 最近的一个项目涉及到一个由用户自定义 ...

  6. Spark 核心概念RDD

    文章正文 RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此, ...

  7. 5 Protocols For Event-Driven API Architectures

    The internet is a system of communication, and as such, the relationship between client and server, ...

  8. phpmyadmin登录提示mysqli_real_connect(): (HY000/2002): No such file or directory和mysql8登录失败的问题

    网上的解决方法有很多,但都无法解决我的问题,最后在stackoverflow上找到解决方法,原文地址:https://stackoverflow.com/questions/41881123/mysq ...

  9. Hexo NexT 博客后台管理指南

    上篇文章讲到,将Hexo NexT 博客成功上传到GitHub 并绑定到我们自定义的域名下了. 但是却还是有个问题,那就是Hexo NexT 博客如何进行后台管理呢? 如果总是通过手动创建文件的方式, ...

  10. 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中运行

    Hello,大家好,好久不见!最近终于安定下来了,可以静下心来写东西了.先写篇简单的,找找感觉.工具系列的本身就比较简单,没什么技术含量.因为说到底,工具只是辅助我们工作的,知道怎么用,然后剩下的就是 ...