百亿级监控场景大数据分位值计算实践

e6b9b8046128840c9697b832d15c9e0a.png

全文3286字,预计阅读时间7分钟

一、背景

百度广告业务系统建立在分布式系统之上,面向商业服务,每天发生各类接口调用PV达到百亿次,产生TB级的监控数据,对监控系统的设计也提出了巨大的挑战。分位值对接口性能的敏感度高,在性能分析中具有很大价值。


1.1 分位值是什么

分位值是一组数据中排名在某个百分比的值。如:开机时360提示“您的电脑击败了全国80%的用户”,即代表启动时间在全国所有电脑中排名20%分位值。


1.2 Why分位值?

在接口性能分析中,分位值至关重要。因为许多极端请求都集中在99%分位值以上,数量少但影响大,通过平均值无法观察到。99%的正常请求会把1%的极端数字平均掉,导致看起来系统响应很快。但这些少数极端请求会造成1%用户极为不好的用户体验。

二、分位值常见计算方案

2.1 流式计算

实时采集数据样本,上传到Spark,Flink等计算集群,进行流式计算。

  • 优点:最高可以得到100%精确的分位值;

  • 缺点:在百亿级场景下,将全量数据导入计算集群,消耗资源巨大,成本极高。不适用监控场景。


2.2 离线计算

离线计算,将数据直接导入数仓,再由定时进行任务批量计算分位值。

对于APM线上监控的场景,对实时性要求较高,不适用离线计算架构。


2.3 压测端计算

使用JMeter,LoadRunner等压测工具,在压测过程中采集数据样本,实时排序,即时计算。

  • 优点:精度高,实时性强;

  • 缺点:但局限于单个应用,压测阶段。规模有限,且没有长周期的变化趋势等分析能力。


2.4 即席查询计算

如Prometheus等监控工具,可收集各个实例数据样本,在需要查询分位值时,再即时计算。

  • 优点:节约计算资源,可按需计算,灵活性强;

  • 缺点:耗费存储资源,尤其是在百亿级场景下,存储数据结构的选取大幅影响资源开销和即席查询响应时间,对技术可行性有决定性影响。


三、分而治之的计算架构

3.1 分而治之

分而治之是大数据计算的基本思路。但是分位值如何归并,是分而治之的重点难题。分位值的特点决定了分位值不能简单地分治计算再归并。与平均值不能再求平均同理,同一个应用的多个实例求得的分位值再求平均没有数学意义,不能代表集群整体的分位值。

既然分位值本身不能归并,那么原始数据可以归并吗?当然是可以的。既然原始数据可以归并,那么原始数据的摘要可以归并吗?也是可以的。

解释:摘要是对原数据样本的一个数据分布的抽象,可以在一定误差内,等同于原数据样本。常见的数据摘要算法有,直方图,T-Digest,GK算法等。

3.2 采集端聚合

基于数据摘要,我们可以在各个实例本地维护一个数据分布(即摘要),每次得到一个请求耗时样本数据,就更新数据分布,在本地实现一次聚合。每隔固定周期将本地聚合的数据分布上传到数据仓库。

「这是第一次聚合」,可以将单个实例每小时数百万次请求,压缩成占用几十kb的数据分布,大幅降低数据规模,使承载百亿级场景成为可能。

3.3 汇聚层归并

在数据仓库中存储各个实例上传的数据分布,不进行计算。直到有用户查询某个接口的分位值数据时,才筛选出该接口下的所有数据分布,归并成一个数据分布,再用该数据分布推算出分位值。

「这是二次聚合」,假设一个接口有100台实例,每小时采集一次,则一天只有2400个数据分布。归并2400个数据分布,在0.1s内就可以完成。

通过两级聚合,可将计算开销分摊至数万实例上,对业务性能几乎没有影响,又无需引入额外计算资源。结合即席计算的优势,可实现秒级查询,和高度灵活性,高度符合APM场景。

四、具体实现

总体架构如下图:

1a787054c62f65b3b77b41c8bace035f.png

▲总体架构

原理具体分为如下步骤:
  1. 「接口拦截」 在接口调用时进行拦截,获取接口响应时间;

  2. 「端上聚合」 将拦截到的响应时间聚合进数据分布中,每到达聚合时间区间后,将本地的数据分布上传到数据仓库,然后清空数据分布;

  3. 「二次聚合」 在数据仓库端,对各个实例上传的数据分布按接口名进行二次聚合,按每个接口分别合并成接口总数据分布,从而推算接口总分位值。


Step1. 接口拦截

在接口拦截阶段,需要实现拦截应用的各个接口,在接口执行前后执行监测逻辑,从而计算出接口的响应时间,然后将响应时间发送到数据分布,以进行后续聚合逻辑。具体逻辑如下图:

3d1a72e5280448d81b50e2ef42c0e00c.png

▲接口拦截

接口拦截的具体技术可以通过手工埋点、Java字节码增强等方式来实现。

Step2. 端上聚合

数据分布是对接口响应时间数据样本的摘要,用来在后面的环节中近似估算分位值。数据分布需要满足如下特征的数据结构:

  • 描述原数据样本的分布结构

  • 可接收新的数据样本,调整数据分布

  • 符合结合律,即多个数据分布可以合并成一个总的数据分布

  • 可以用数据分布估算出原数据样本的近似分位值

  • 使用常数大小内存空间,且精度可控

数据分布的具体实现有很多种,如 直方图,T-Digest,Q-Digest,DK算法 等。分位值的精度取决于数据分布算法选型,我们在实践中选用T-Digest结构。

每次拦截到接口调用后,获取到本次调用的相应时间,然后更新本接口的数据分布。流程如下:

1e8548b846fd3ede3e42b19ade07f5bf.png

▲更新分布

由于每个应用实例上会包含若干个(几十到上百个)接口。对于每个接口我们需要分别记录响应时间的数据分布。我们利用一个表格数据结构来存储各个接口的数据分布。聚合项存储数据结构:

实例元信息:
  • 「应用名:app1」

  • 「实例:instance1 (10.20.30.40)」

  • 「聚合开始时间:2020-10-10 18:00:00」

  • 「聚合周期:1h」

  • 「下次提交时间:2020-10-10 19:00:00」

聚合信息:
接口(名字仅作示意)响应时间数据分布

com.baidu.app1.Foo.play()

<数据分布>

com.baidu.app1.Bar.play()

<数据分布>

com.baidu.app1.Cool.play()

<数据分布>

......


当采集到数据样本时,先根据接口名,在上述表格中找到接口对应的行(如果没有则新建一行),然后将数据样本(即本次调用响应时间)合并进接口名对应的数据分布中。流程如下图:

22820cd94dc1b00d9429be01017d46cd.png

聚合

应用实例在本地分别记录各个接口和其响应时间的数据分布。每到达既定时间后,将上表全部内容发送到数据仓库,并清空本地表格。流程如下:

0843a30ae4de0785fe4d1625acef7baf.png

上传

数据分布数据为内存中的二进制数据,在上传的过程中需要进行序列化。序列化的具体实现一般推荐如下处理:

  • 「采用小端格式」数据仓库多为C++实现。如果选择C/C++实现的数据仓库,则需采用小端格式序列化。因为x86架构基于小端格式,序列化数据保持一致格式,方便C/C++解析。如果采用Java实现或其它大端格式的数仓(如Hive),则无需采用小端格式。实践中,我们采用百度自研的Apache Doris数仓,并使用C++开发分位值二次聚合算子。

  • 「压缩」由于接口响应时间样本数据往往具有强偏向性,数据分布数据结构内部会存在大量零值,启用压缩可以显著压缩数据体积,减小网络传输和存储资源占用。具体压缩算法可以采用GZIP,BZIP2等。实践中我们采用GZIP算法,压缩比率在30%-40%左右。

  • 「编码」由于直方图数据本身是二进制格式,通过例如BASE64等算法编码成文本格式,更加易于传输、存储和调试。实践中,BASE64编码对体积有20%左右增加,但存储空间相对廉价,相比带来的优势,可以接受。

Step3. 二次聚合

数据仓库中存储了分布式系统中所有接口的响应时间直方图。大体表结构如下:

列名类型含义

app

字符串

所属应用

method

字符串

所属接口

quantile_data

数据分布

分布内容

log_date

日期

记录时间

为了计算某个接口的响应时间分位值p,我们需要将各个实例上传的该接口的数据分布聚合项做二次聚合,用二次聚合后的数据分布聚合项来计算分位值p,则此分位值即代表该接口在整个应用集群(所有实例)上的总分位值。

e1cb016a356d3c4e3eeb73d49403d8fc.png

▲二次聚合

这里分位值p是由用户查询时实时指定的。也就是说,每次计算分位值的时候,都可以支持任意分位值的计算,而不是预设的分位值。我们的T-Digest结构在百亿数据下每日1GB左右数仓存储,最高精度0.1%左右。


五、技术优点

总体架构简单,性能高,成本高度可控,易于维护,稳定,风险低,多快好省地满足线上系统监控分位值计算场景。同时对于其它大数据分位值需求场景,也是一种非常优秀的参考方案。

参考阅读:

技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 从零开始讲解大数据调度系统构成,集成大数据计算任务构建大数据工作流,基于Oozie构建实现企业自动化任务开发 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,每一块知识点, 都有配套案例, 学习不再迷茫。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程内容 第一章:工作流任务调度系统 1.大数据调度系统概论 2.企业工作流 3.工作流依赖调度 4.工作流定时调度 第二章:企业任务流调度系统Oozie 1.Oozie的应用场景 2.Oozie的功能及模块 3.Oozie的与MR的关系 4.Oozie的工作流实现原理 5.Oozie中的特殊概念Action 6.Hadoop的集成配置 7.Oozie的部署配置 第三章:Oozie调度开发实战 1.Shell脚本工作流调度开发实战 2.Hive Job工作流调度开发实战 3.MapReduce工作流调度开发实战 4.复杂工作流调度实战 5.分支与合并逻辑控制组件 第四章:Oozie定时依赖调度 1.基于时间的任务流调度 2.Coordinator时区配置 3.Coordinator任务实战开发 第五章:Oozie可视化开发 1.集成Hue配置 2.基于Hue构建Oozie工作流开发实战 第六章:Oozie监控任务管理 1.Oozie任务的查看 2.Oozie任务的提交 3.Oozie任务的关闭
"大数据"的认识与思考 刘姝祎 目录 1"大数据"的时代背景 4 1.1"大数据"的概念 4 1.2"大数据"产生的背景 4 1.3"大数据"的特征 5 1.4"大数据"的发展阶段 5 1.5"大数据"带来的机遇 6 2"大数据"的关键技术 9 2.1"大数据"的采集和预处理 9 2.2"大数据"存储技术 10 2.3"大数据"分析技术 10 2.4"大数据"与云计算 11 3大数据产业的应用 12 3.1大数据产业 12 3.2"大数据"在典型领域中的应用 13 3.3智慧城市:立体的大数据生态系统 14 3.3.1智慧城市的产生 14 3.3.2全球智慧城市的实践 15 3.3.3.中国智慧城市 16 4问题与挑战 18 4.1数据质量 18 4.2数据安全 18 4.3用户隐私与便利性的冲突 18 4.4庞大能耗 18 4.5数据分析与管理人才紧缺 19 4.6跟风现象较为严重 19 4.7缺少技术创新水平较高的互联网公司 19 5对大数据产业发展的建议 20 5.1政府方面 20 5.2企业方面 21 5.3公众方面 22 1"大数据"的时代背景 1.1"大数据"的概念 纽约时报在2012年宣布"大数据时代"已经降临,"大数据"成为了时下最火热的词汇。 顾名思义,大数据是"无法任意时间内用常规软件工具对其内容进行抓取、管理和处理的 大量而复杂的数据集合"。Gartner认为大数据是"需要新处理模式才能具有更强的决策力 、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产"。"大数据"的要义 是尽可能地收集众多可以相互叠加补充的信息,据以完成对"未来"的预测。这些数据可 能有些混乱,甚至会出现纰漏,但数据量的"多"和时间的"即刻"可以弥补数据质量的瑕 疵,"大数据"将以最快的速度"预测"出最"可靠"的答案,指引人们迅速采取行动。 1.2"大数据"产生的背景 大数据的应用和技术是在互联网快速发展中诞生的,起点可追溯到 2000 年前后。当时互联网网页爆发式增长,每天新增约 700 万个网页,到 2000 年底全球网页数达到 40 亿,用户检索信息越来越不方便。谷歌等公司率先建立了覆盖数十亿网页的索引库,开 始提供较为精确的搜索服务,大大提升了人们使用互联网的效率,这是大数据应用的起 点。当时搜索引擎要存储和处理的数据,不仅数量之大前所未有,而且以非结构化数据 为主,传统技术无法应对。为此,谷歌提出了一套以分布式为特征的全新技术体系,即 后来陆续公开的分布式文件系统(GFS, Google File System)、分布式并行计算(MapReduce)和分布式数据库(BigTable)等技术,以较低的成 本实现了之前技术无法达到的规模。这些技术奠定了当前大数据技术的基础,可以认为 是大数据技术的源头。 伴随着互联网产业的崛起,这种创新的海量数据处理技术在电子商务、定向广告、智 能推荐、社交网络等方面得到应用,取得巨大的商业成功。这启发全社会开始重新审视 数据的巨大价,于是金融、电信等拥有大量数据的行业开始尝试这种新的理念和技术 ,取得初步成效。与此同时,业界也在不断对谷歌提出的技术体系进行扩展,使之能在 更多的场景下使用。2011 年,麦肯锡、世界经济论坛等知名机构对这种数据驱动的创新进行了研究总结,随即在 全世界兴起了一股大数据热潮。 2012年3月,美国政府发布《大数据研究和发展计划》,同时组建大数据指导小组 ,以协调政府在数据领域的两亿多美元投资。根据这一计划,美国希望利用大数据技术 再多个领域实现突破,包括科研教学、环境保护、国土安全等,此举标志着,美国把应 对大数据技术革命带来的机遇和挑战,提高到国家战略层面,形成了全体动员格局。随 后,英国、法国、日本等各国都相继将大数据计划作为国家战略型计划提上日程。得 一提的是,由中国各政府主导的大数据计划也已经全面展开,"大数据"已成为推动我 国经济和科技发展的重要力量。 1.3"大数据"的特征 "大数据"具有4V的特点:一是数据容量巨大(Volume)。国际数据公司(IDC)的研 究报告称,2011年全球被创建和被复制的数据总量为1.8ZB(2的70次方),并预测到20 20年,全球将拥有35ZB的数据量。二是数据类型众多 (Variety)。相对于过往以文本形式为主的结构化数据大数据时代的数据类型涵盖了 图片、音频、视频、网络日志和地理位置信息等种类繁多的半结构化和非结构化数据。 三是数据密度低(Value)。举例而言,在一个连续监控三个小时的视频中,能够 提供有效信息帮助刑侦人员破案的画面可能只有三五秒。四是处理数据的速度要求非常 快(Velocity)。一方面,面对如此巨大的数据量,处理效率至关重要,另一方面,越 来越多的处理需要在瞬间完成
2021 数据科学与大数据 专业培养 / 专业前景 / 远期目标 汇报人: 制作时间:2021.11.7 数据211 数据科学与大数据技术-专业导论全文共8页,当前为第1页。 Contents 专业培养 MAJOR TRAINING 专业前景 MAJOR PROSPECTS 远期目标 LONG-TERM GOAL 数据科学与大数据技术-专业导论全文共8页,当前为第2页。 专业培养 PART 01 https://www.ypppt.com/ 数据科学与大数据技术-专业导论全文共8页,当前为第3页。 1. 专业基础要扎实 在四年的大数据技术学习中,我们要具备扎实的数学与统计学理论基础,并能够熟练的运用编程、机器学习、数据挖掘、深度学习、云计算技术来解决实际问题 2. 实践创新能力要强 3. 思想道德素质要高 4. 拥有一定的信息获取能力 5. 拥有较强的交流和表达能力 专业培养 MAJOR TRAINING 在数据大爆炸的时代,面对浩瀚的数据信息,我们要学会运用现代化工具来获取数据、处理数据、使用数据 大数据专业是应用型专业,因此在四年的大数据技术学习中,要着重培养自己的动手能力 在大数据技术学习过程中,不仅要有一定的动手能力,也需要培养自己的交流与表达能力,与业界同行及社会公众进行有效沟通和交流 国家用财政为我们提供高水平的高等教育,我们要做到热爱祖国,自觉拥护中国共产党的领导,做到责任担当、贡献国家、服务社会 6. 拥有创新与终身学习的能力 数据科学是一门发展中的学科,因此在大数据技术学习的过程中,要树立创新意识和终身学习的习惯 数据科学与大数据技术-专业导论全文共8页,当前为第4页。 专业前景 PART 02 数据科学与大数据技术-专业导论全文共8页,当前为第5页。 01 02 04 03 智慧城市 大数据技术可以实现智能交通、智能安防、车辆监控与车辆调度。 智能物流 大数据技术可以对物流环境进行分析与决策,优化并合理配置物流资源,使物流供给与需求匹配,降低物流成本 信息推送 大数据技术可以通过分析用户的行为信息来为用户精准推送用户感兴趣的信息 安全领域 通过大数据技术实时分析与统计垃圾短信、诈骗信息,及时提醒用户,防止诈骗与消息骚扰 大数据应用场景 BIG DATA APPLICATIOON SCENARIOS 数据科学与大数据技术-专业导论全文共8页,当前为第6页。 个人远期目标 PART 03 数据科学与大数据技术-专业导论全文共8页,当前为第7页。 远期目标 LONG-TERM GOAL 01 扎实完成学业 在大学本科四年中,扎扎实实完成学业目标,顺利完成毕业论文。 02 考研顺利上岸 在完成大学四年本科学习的基础上,充分运行课余时间进行考研备考,争取考上理想学校的计算机专业研究生 不是所有的坚持都有结果,但总有一些坚持,能从一寸冰封的土地里,培育出怒放的十万朵蔷薇——八月长安《最好的我们》 数据科学与大数据技术-专业导论全文共8页,当前为第8页。 https://www.ypppt.com/ 8

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值