性能平台数据提速之路
作者 | 性能中台团队
导读
性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何在数据合规基础上快速满足数据报表提速?本文从业务优化视角整体介绍提速思路,包含5类优化路径,涉及18种提速方法。
全文3689字,预计阅读时间10分钟。
01 概述
1.1 性能平台
性能平台是APP性能追踪的一站式解决方案平台,为APP提供全面、专业、实时的性能分析服务与工具链。基于先进的端异常采集能力、实时反混淆技术等,提供实时性强、定位速度快、场景丰富的应用监控分析能力,并构建异常解决的闭环,在厂内移动端产品得以大范围应用,保障移动端用户体验,有效地减少了用户流失。
1.2 接入情况
已覆盖了厂内大多数重点产品,其中包括:百度APP全打点、小程序、矩阵APP等,数据指标如下:
-
接入情况:几乎覆盖了厂内已有APP,小程序,创新孵化APP,以及厂外收购APP。
-
服务规模:处理数据千亿/日、端到端入库时间毫秒级别、覆盖用户数6亿+。
1.3 名词解释
图灵:新一代数仓平台,在实时计算、存储能力、查询引擎、资源调度等均有提升。
UDW:Universal Data Warehouse,百度通用数据仓库,UDW用平台化的存储管理、数据管理、数据建设过程管理和元数据管理技术,提供全面、一致、高质量、面向分析的用户行为基础数据,百度早期数据仓库。
TM:是一个面向工作流的分布式计算系统,具有简洁、高可靠性和高吞吐量的特性,且易被方便地管理和监控。能够满足准实时(秒到分钟级)的流式计算需求,故障时可以做到数据不丢不重。
一脉:整合多种数据源的全业务自助分析工具,为分析师、PM、运营、RD各角色提供服务。一脉打破了原有报表、工具的定制限制,支持零SQL基础的同学可视化拼接查询条件、或直接SQL查询,同时提供多种通用分析模板供大家使用。
AFS:百度自研的Append-Only分布式文件系统产品,覆盖百度所有业务线,为开发者提供高性能、高可用、高可扩展的存储能力,广泛应用于离线计算、AI训练、数据备份等场景。
1.4 业务介绍
-
覆盖范围:涵盖崩溃、卡顿、Flutter、端异常、日志回捞、网络库、磁盘等大部分性能场景,覆盖了公司多条产品线
-
数据加工:提供实时、可靠准确的实时用户监测,秒级精确加工10万QPS吞吐数据。
-
异常感知方面:事前线下检测,事中平台上线check机制、事后分钟级告警、感知并分析异常,快速止损;
-
问题分析阶段:多维聚类、多维探测、全网热力图、日志调用链分析、日志回捞等工具,协助快速定位问题;
02 面临的问题
2.1 数据生产阶段
-
数据技术基建落后;存储系统(厂版化无法迭代)、查询引擎(厂内引擎下线、查询速度较慢)、实时计算(不支持实时引擎)、资源调度(资源弹性弱)等能力不足;
-
数据缺少服务分级;核心数据与非核心区分,服务级别保障机制不明确;离线数据流架构不合理、大量使用公共队列数据SLA无法保障。预期:实时流数据分钟级别SLA、准实时数据30分钟级别SLA、离线流数据小时级别SLA;
-
数据无效/重复上报;部分点位下线、点位之间功能重合度高仍在上报导致数据总量存在虚高;数据报表冗余,无人访问或者业务重复;有限计算/存储资源供给到无效数据上。
2.2 数据消费阶段
-
数据合规性难保障;数据缺少统一出口,数据消费同时存在接口、结果层数据库、中间层数据等系统中进行数据报表呈现,用于数据分析、报警监控。
-
数据需求满足度低;报表类需求占我们需求整体接近50%, 数据需求需要点对点单独排期与开发,此研发流程投入大,需求交付速度慢。
-
用户整体满意度低;数据实时性差:从数据产生到数据可被查询,中间存在较高时延(从数十分钟到天级别不等)查询较慢,SLA保障机制弱;数据需求交付慢:用户数据需求完全依赖数据团队产出,当有人力补充时数据维护/学习成本高,容易出现Delay,增加字段/修改数据源等会覆盖整个流程。
03 优化路径
3.1 新老基建对比
思路:基于流批一体的思路,通过TM引擎的实时解析平铺 + Spark动态索引导入图灵的方式代替QE引擎静态导入UDW,从而进行ETL阶段的提速,在该阶段提前将嵌套字段进行铺平形成图灵研发大表去除旧数据流中的中间表产出环节。
3.1.1 新老基建对比
3.1.2 新老数据流
3.2 数据服务分级
3.2.1 服务分级理论支持
-
提高服务效率:更好地了解用户的需求,提供更加精准、专业的服务,从而提高服务效率。
-
改善服务质量:服务分级可以让用户享受到更加贴近需求的服务,提高服务的质量和满意度。
-
优化资源配置:更好地根据不同的服务需求和服务对象,优化资源配置,提高资源利用率。
3.2.2 数据流/报表SLA
3.3 数据点位/指标/报表治理
3.3.1 治理思路
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ezx2sPvX-1678155747102)(https://mmbiz.qpic.cn/mmbiz_png/5p8giadRibbO9765J2SfqzcZFneaEYktrhGsuY2DPzAUO42UkeViblKmWILWHbAzch1Hibk1w6dibcGZyHWD202KHWA/640?wx_fmt=png)]
3.4 数据合规性治理
3.4.1 背景介绍
2021年9月1日正式实施《中华人民共和国数据安全法》,涉及数据的出口管制、数据分类分级、数据合规性等一系列数据方面法律法规要求。数据消费流程增加势必会影响用户使用体验,如何在数据满足合规的基础上快速助力业务发展是我们的努力的方向。
数据BI平台/ 性能平台/其他数据分析平台数据接入方案大致分为如下几种:
1、直连存储引擎;
2、数据抽象API ;
3、数据自产自销;我们的业务特点连接双端研发、多方数据、QA等多方面角色对接,初中期适合API方式,慢慢收敛到数据自产自销。
补充说明:
市面上的BI分析均支持API方式连接,基本已实现协议标准化。BI连接数据库查询方式,主要优点在于快速实现报表,但是在数据合规、数据缓存、负载均衡、多引擎数据聚合等能力上明显弱于API方式。
3.4.2 API优化点举例说明
3.4.3 元数据查询协议说明
// Schema 数据获取能力描述
// 协议能力描述:
// 1. 数据查询能力,多引擎/标准SQL查询能力封装「如:palo/mysql/clickhouse/es-sql等」Query结构。
// 2. 数据聚合能力,具备单关键字数据组合&Merge能力,如果Len(Schema.Query)>1:具备数据聚合能力.
// 3. 数据缓存能力,两层级缓存能力封装,Cache结构。
type Schema struct {// 元数据查询能力描述Query []Query `json:"query"`// 元数据整体缓存能力描述Cache Cache `json:"cache"`
}// Query 数据查询能力描述
type Query struct {// 结构化查询描述SQL string `json:"sql"`// 产品线信息, rpc_name = meta_{engine}_{prod}.toml, rpc通信具备超时控制、服务发现、高级负载均衡策略等稳定性提升能力Prod string `json:"prod"`// 存储引擎描述, 调用不同引擎能力Engine string `json:"engine"`// 单次查询缓存能力描述Cache Cache `json:"cache"`
}
3.5 数据自助化建设
3.5.1 背景介绍
通过近一年需求数据分析,报表类需求占整体数据需求的50%,如果实现数据报表自助化,需要按照数仓分层,可达成数据消费侧的需求快速交付与报表时效性提升。
自助化方式与数据流有关,针对实时数据流采用内存方式构建宽表,准实时/离线采用磁盘宽表构建。
3.5.2 实时化自助化(内存)
内存自助化核心逻辑包含:
-
日志协议Schema的解析;性能平台在业务方配置自助化任务之前,会采用离线任务天级别的将性能平台涉及到的UBC点位进行Schema的解析,即将UBC协议的Schema进行按层级全局展开,供业务方在界面上进行勾选。
-
内存宽表的建立; 业务方在性能平台上完成自助配置化任务时,勾选自身需要清洗的UBC点位日志经过平铺后的协议字段,通过性能平台提供的通用函数解析(透传、时间函数、网络函数等)以及性能平台提供的自定义函数QLExpress进行原始协议的清洗,然后平铺成一张内存宽表。
-
宽表数据聚合;业务方自身的需求往往有PV聚合、UV聚合、分位数聚合等一些常用指标的聚合计算,此时利用性能平台提供的聚合模板选择相应维度指标进行计算,形成最终的聚合结果指标。
-
UI配置、告警配置;业务方得到最终的聚合结果指标后,可以选择聚合后的维度和指标构建UI,例如折线图,表格等。同时,也可以根据聚合后的指标配置阈值告警。最终,通过上述的流程,业务方自助化的完成了数据流的建立、UI报表的生成,告警的配置。
3.5.3 准实时&离线数据自助化(磁盘)
以Feed研发宽表举例说明,通过数据分层强化数据层职责范围,每一层级数据量级明显减少,对用户侧结果数据报表提速明显。数据研发同学关注各层之间数据SLA与需求功能的满足;用户通过业务宽表、宽表说明文档、报表自助化平台实现报表自助化,来达成需求快速实现。
04 未来展望
前文介绍了性能平台在数据生产与数据消费端的提速手段与具体案例,所做的一些努力。后面我们还会继续优化系统,如:
-
数据时效性可说明,报表承诺时间与报表实际产出时间,各个阶段数据漏斗,达到时效性数据的沉淀与可分析。
-
数据准确性可证明,在APP接入层与数据报表之间,通过构造预期Case与实际数据做对比,来判别系统数据准确性;
希望,性能平台在数据安全合规的基础上快速赋能支撑业务发展。
——END——
推荐阅读:
采编式AIGC视频生产流程编排实践
百度工程师漫谈视频理解
百度工程师带你了解Module Federation
巧用Golang泛型,简化代码编写
Go语言DDD实战初级篇
Diffie-Hellman密钥协商算法探究
相关文章:
性能平台数据提速之路
作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何…...
Dns域名解析服务器
前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址? 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议,用来获取域名对应的IP地址 域名解析服务器的介绍 DNS(Dom…...
关于 JavaScript 中的 Promises
在 JavaScript 中,Promise 是一个对象,它表示一个可能还不可用,但会在未来解决的值。Promises 用于处理异步操作,例如发出网络请求或访问数据库,其中结果不是立即可用的。如果你准备好了,我想开始我们的冒险…...
PMP考前冲刺题——错题集
3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品,所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门,运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...
【C++】30h速成C++从入门到精通(多态)
多态的概念多态:通俗来说就是多种心态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象,去调用同意函数,产生了不同的行为࿰…...
从proc文件系统中获取gateway的IP地址
在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有ip route或者route -n,其实route -n也是通过读取proc文件系统下的文件来从内核获取路由表的,但ip route是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路…...
【LeetCode】剑指 Offer(17)
目录 题目:剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer …...
MySQL索引类型
MySQL 是最流行的关系型数据库管理系统,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 索…...
你了解HashMap吗?
一、前言:面试过的人都知道,HashMap是Java程序员在面试中最最最经常被问到的一个点,可以说,不了解HashMap都不好意思说自己是做Java开发的。基本上你去面试十家公司,有七八家都会问到你HashMap。那么今天,就…...
我一个女孩子居然做了十年硬件……
2011年,一个三本大学的电子信息专业的大三女学生跟2个通信专业的大二男生组成了一组代表学校参加2011年“瑞萨杯”全国大学生电子设计大赛,很意外的获得了湖北赛区省三等奖,虽然很意外,但还是挺高兴的,毕竟第一次为喜欢…...
【Linux】编译器gcc g++和调试器gdb的使用
文章目录1.编译器gcc/g1.1C语言程序的翻译过程1.预处理2.编译3.汇编4. 链接1.2 链接方式与函数库1.动态链接与静态链接2.动态库与静态库1.3 gcc与g的使用2.调试器gdb2.1debug和release2.2gdb的安装2.3gdb的使用2.4gdb的常用指令3.总结1.编译器gcc/g 1.1C语言程序的翻译过程 1…...
高效能自动化港口数字化码头智慧港航,中国人工智能企业CIMCAI世界港航人工智能领军者,成熟港口码头人工智能产品中国人工智能企业
打造高效能自动化港口数字化码头智慧港航,中国人工智能企业CIMCAI中集飞瞳世界港航人工智能领军者,成熟港口码头人工智能产品全球顶尖AI科技CIMCAI成熟AI产品全球前三船公司及港口落地,包括全球港口/堆场智能闸口验箱,全球港口岸边…...
HTTP协议(一)
HTTP协议(一) 什么是HTTP协议 客户端连上web服务器后,如果想要获得web服务器中的某个web资源,需要遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器之间通讯的格式;基于TCP连接的传输协议ÿ…...
计算神经网络参数量Params、计算量FLOPs(亲测有效的3种方法)
1.stat(cpu统计) pip install torchstat from torchstat import statstat(model, (3, 32, 32)) #统计模型的参数量和FLOPs,(3,32,32)是输入图像的size 结果: 问题:当网络中有自定义参数时&am…...
sizeof与一维数组和二维数组
🍕博客主页:️自信不孤单 🍬文章专栏:C语言 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 sizeof与一维数组和二维数组 文章目录sizeof与一维数组和二维数组前言1. sizeof与…...
Spark UI
Spark UIExecutorsEnvironmentStorageSQLExchangeSortAggregateJobsStagesStage DAGEvent TimelineTask MetricsSummary MetricsTasks展示 Spark UI ,需要设置配置项并启动 History Server # SPARK_HOME表示Spark安装目录 ${SPAK_HOME}/sbin/start-history-server…...
windows应用(vc++2022)MFC基础到实战(2)
目录向导和资源编辑器使用 MFC 应用程序向导创建 MFC 应用程序使用类视图管理类和 Windows 消息使用资源编辑器创建和编辑资源生成 MFC 应用程序的操作1.创建一个主干应用程序。2.了解即使在不添加你自己的任何一行代码的情况下,框架和 MFC 应用程序向导也能提供的内…...
记一次反射型XSS
记一次反射型XSS1.反射型XSS1.1.前言1.2.测试过程1.3.实战演示1.3.1.输入框1.3.2.插入代码1.3.3.跳转链接2.总结1.反射型XSS 1.1.前言 关于这个反射型XSS,利用的方式除了钓鱼,可能更多的就是自娱自乐,那都说是自娱自乐了,并且对系…...
BUUCTF-[羊城杯 2020]Bytecode
题目下载:下载 这道题是一个关于python字节码的。 补充一下相关知识:https://shliang.blog.csdn.net/article/details/119676978dis --- Python 字节码反汇编器 — Python 3.7.13 文档 手工还原参考:[原创]死磕python字节码-手工还原python源码-软件逆…...
《Uniapp入门指南:从安装到打包的全流程》
Uniapp是一款基于Vue.js的跨平台开发框架,可以快速构建出同时支持多个移动端平台和Web端的应用程序。本文将介绍Uniapp的基础知识和开发流程,帮助读者快速入门Uniapp开发。一、Uniapp的基础知识1.Uniapp的优势Uniapp的最大优势是可以快速开发同时支持多个…...
机器学习算法集成系统
版权所有:CSDN——川川菜鸟 本系统并不作为本专栏要求,这一篇自愿学习。 文章目录 本系统设计背景设计思路完整代码本系统设计背景 随着人工智能技术的不断发展,机器学习成为了人工智能领域的重要组成部分。机器学习算法能够从大量数据中发现模式、规律,并利用这些规律对新…...
scratch绘制雷达 电子学会图形化编程scratch等级考试三级真题和答案解析2022年9月
目录 scratch绘制雷达 一、题目要求 1、准备工作 2、功能实现 二、案例分析...
VRRP主备备份
1、VRRP专业术语 VRRP备份组框架图如图14-1所示: 图14-1:VRRP备份组框架图 VRRP路由器(VRRP Router):运行VRRP协议的设备,它可能属于一个或多个虚拟路由器,如SwitchA和SwitchB。虚拟路由器(Virtual Router):又称VRR…...
【软件逆向】软件破解?病毒木马?游戏外挂?
文章目录课前闲聊认识CTF什么是CTFCTF解题模式什么是逆向定义应用领域CTF中的逆向现状推荐书籍学习要点逆向工程学习基础常规逆向流程阶段一:信息收集阶段二:过保护后静态调试阶段三:结合动态调试阶段四:写解题脚本逆向例题概览1-控制台程序解题过程2-Crackme3-游戏4-移动安全C…...
curl请求常用参数和返回码
curl是一个用于传输数据的工具,支持各种协议,如HTTP、FTP、SMTP等。以下是一些常用的curl请求参数及其作用: -X, --request:指定HTTP请求方法,常见的有GET、POST、PUT、DELETE等。 -H, --header:设置HTTP请…...
【STM32】进阶(一):抢占式优先级和响应式优先级(NVIC_PriorityGroupConfig)
1、简介 STM32(Cortex-M3)中每个中断源都有两级优先级:抢占式优先级(pre-emption priority)和子优先级(subpriority),子优先级也叫响应式优先级。 1.1 抢占式优先级 望文知义,就是优先级高的…...
LogCompilation后JIT输出文件格式解析
https://wiki.openjdk.org/display/HotSpot/LogCompilationoverview https://spotcodereviews.com/articles/optimization/2020/12/23/why-does-the-jit-continually-recompile-the-same-method.html task_queued count表示总共执行次数,iicount表示解释器执行次数…...
Linux学习第二十四节-Podman容器
一、容器的概念 容器是由一个或多个与系统其余部分隔离的进程组成的集合。我们可以理解为“集装箱”。 集装箱是打包和装运货物的标准方式。它作为一个箱子进行标记、装载、卸载,以及从一个 位置运输到另一个位置。该容器的内容与其他容器的内容隔离,…...
基于quartz实现定时任务管理系统
基于quartz实现定时任务管理系统 背景 说起定时任务框架,首先想到的是Quartz。这是定时任务的老牌框架了,它的优缺点都很明显。借助PowerJob 的readme文档的内容简单带过一下这部分。 除了上面提到,还有elastic-job-lite、quartzui也是相当…...
vue-element-admin:基于element-ui 的一套后台管理系统集成方案
文章目录一、vue-element-admin1、vue-element-admin1.1简介1.2安装2、vue-admin-template2.1简介2.2安装一、vue-element-admin 1、vue-element-admin 1.1简介 vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 GitHub地址:https://github.com…...
电子商务网站建设流程/中国站长之家网站
JarsLink (原名Titan) 是一个基于JAVA的模块化开发框架,它提供在运行时动态加载模块(一个JAR包)、卸载模块和模块间调用的API。也是阿里巴巴的开源项目之一 https://github.com/alibaba/ja...,目前在微贷事业群广泛使用。 使用场…...
wordpress批量换网址/竞价托管哪家效果好
这篇很水,因为就只有一行代码; Camera.main.transform.Translate (Vector3.forward); 这行代码控制主摄像头向前移动,其它的如下: up:向上 down:向下 left:相左 right:向右 back&…...
多梦wordpress主题/长春网站制作系统
《信条》打造的光影奇观让观众眼前一亮,其展现出的时间逆行和顺行的人互相战斗的场面让人感到震撼和惊奇,然而这部电影却也令很多观众感觉想不通,觉得BUG太多。而深究这些BUG的原因,绝大多数都是由于电影中引入了“熵减”的概念&a…...
唐山做网站企业/优化师
什么是FireMonkey的Winsoft条形码? Winsoft Barcode v6.1用于FireMonkey的Delphi和C Builder条形码组件。 Winsoft Barcode for FireMonkey v6.1的Winsoft条码主要功能: 利用Zint条形码生成器 支持50多种符号,包括Code 128,Data Matrix&…...
在新闻网站做采编/品牌策划与推广
1、清单文件AndroidManifest.xml需要添加SD卡的读取和写入权限2、MainActivity.java package com.t20.camera;import java.io.File; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;import android.net.Uri; import android.os.Bundle;…...
三亚网站建设兼职/怎么创建自己的网站平台
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivityFragment的时候会更加频繁。比如,如果Fragment没有提供默认构造方…...