导读 本次分享的主题是腾讯灯塔融合引擎的设计与实践,主要围绕以下四个方面进行介绍:
1. 背景介绍
【资料图】
2. 挑战与融合分析引擎的解法
3. 实践总结
4. 未来演进方向
分享嘉宾|冯国敬 腾讯 后台开发工程师
编辑整理|翟佳鹤 京东
出品社区|DataFun
01
背景介绍
腾讯灯塔是一款端到端的全链路数据产品套件,旨在帮助产品、研发、运营和数据科学团队 30 分钟内做出更可信及时的决策,促进用户增长和留存。
2020 年后数据量仍然呈爆炸性增长的趋势,且业务变化更加迅速、分析需求更加复杂,传统的模式无法投入更多的时间来规划数据模型。我们面临一个海量、实时和自定义的三角难题。不同引擎都在致力于去解决这个问题。谷歌等博客中曾提到,也是我们很认可的一个观点是以卓越的性能可直接访问明细数据(ODS/DWD)成为下一代计算引擎的必然趋势。
下图展示了 灯塔融合分析引擎的整体技术架构 :
左侧对接应用系统,包括灯塔自己提供的分析模型、可视化方案和一些 API 请求;右侧为融合分析引擎,包括查询引擎层、计算层、物化存储层、存储层分析策略中心和产品化中心。
服务层, 包括查询、接收以及治理,比如任务级别的缓存拦截等服务相关功能。 计算层 ,不同于其他公司的自研方案,我们是在开源能力之上做增强和整合,来满足不同场景的需求。 物化存储层 ,其中包含了我们构建现代物化视图的解决方案,实现了基于 Alluxio 的块级别缓存池,以及针对 BI 场景基于 Clickhouse 的抽取加速方案。 存储层 ,对接了多种存储引擎,包括托管给灯塔的存储层和非托管的存储层,即业务方自己的数据。 分析策略中心 ,位于上述四层之上。主要负责业务方查询的工作负载中的治理和理解执行的整体链路。从一个任务开始执行,到执行计划的各个阶段的计算的资源消耗、存储的消耗、效率等表征作统一存储,并基于这些明细的数据抽出来一些衍生的指标,以推动任务优化,比如物化模型的构建和 SQL 自动优化,旨在端到端地解决这些问题。 产品化中心 ,除了灯塔产品套件整体作为产品对外输出以外,融合分析引擎也可以单独作为产品对外输出。--
02
挑战与融合分析引擎的解法
回到前文提到的挑战,即以卓越的性能直接访问明细数据,我们会从融合、内核优化和加速三个方面发力。
1. 融合
同类产品的思路多为一体化,而本文的思路是取长补短,博采众长,融合开源社区的能力实现 1+1>2 的效果。
① 多源融合前端
前端聚焦于提供集中化的 SQL 解析、优化和执行计划生成。它更多的承担的是对各个底层的理解以做出更优逻辑执行计划的角色。
前端是基于 Calcite 的两段式。第一段为常规操作,一个 SQL 要经过 Parse、Validate、Optimizer、Planner,通过自建的统一元数据管理中心来提供了运行时的Catalog和统计信息以辅助生成更优的执行计划;第二段为不同引擎的融合,提供统一的对外接口且进行一些定制化的增强。
② 融合后端
前端主要解决的是 SQL 解析和执行计划的生成优化,融合后端真正解决计算层面融合。
RDBMS面临算力、内存不足,无法提高计算并行度;Clickhouse 数据源面临复杂查询效率低等问题。
针对上述问题分别有以下解决方案:
通用 MPP 引擎(Presto\Impala)加上高性能 connector。 增强版 JDBC Connection,基于Mysql表模型对 Split Providers 进行自适应的优化,将单个 Table Scan 转换为多个 Table Scan 以提升计算效率。 针对 Clickhouse 数据源会将分布式表运算改为基于本地表运算。 对 Projection、Aggregation、Predicate 操作进行下推。③ WLM(Workload Management)
前端和后端解决的是多个引擎如何融合和配合的问题,除此之外是端到端的分析策略中心的实现。裸用开源引擎存在以下问题:
引擎 Profile 指标无持久化,单点分析粒度太细,无法对租户整体进行洞察; 对运维人员要求高,需要足够的工作负载的洞察与优化的能力。本设计的解决方案是通过自研的WLM(Workload Management),自动化收集不同引擎的 Query Profile 并结合历史查询给出基于专家经验给出优化建议,在策略中心基于优化建议自动设置 Query Options、Hints 等优化配置。
通过一系列的规则探查到这个 SQL 会存在大量的 Shuffle,会导致占用了大量的内存和网络资源。该装置会注入一些 Query Options 和 Hints,比如把它的 broadcast 换成 shuffle join,对于一些 CPU 优化器完成不了的事情基于我们的策略做一个自动优化,等 SQL 再进来就会有比较好的规划。
2. 内核优化
在商业场景下经常会遇到很消耗资源量的大查询,如何能够在运行时识别和隔离大查询成为一个挑战。
查询在运行前是无法断定其查询对资源的影响的,比如两表 JION 后笛卡尔积的导致其输出有上万亿记录数的规模。于是本引擎在收集监控运行时的指标参数,结合负载中心的优化建议,自动设置优化参数,以使得查询更高效的运行;对于无法优化且识别对资源使用有严重影响的查询,会进行拦截,及时止损。
① Impala
Impala 面临的一个挑战是如何充分利用计算引擎的索引加速。
引擎 IO 调度内核优化,比如局部性的同文件多 DataRange 排序;通过调整权重以实现大查询 IO 惩罚,因为有些场景更多想保小查询,将大查询放到慢车道。 存储特性价值发挥-索引(Pageindex、Zorder、Hillbert)。要高效查询原始数据,就需要利用好原始数据中的索引,比如 Parquet 中的数据页 Page Index,可以结合原始存储数据中的索引信息,在运行时进行数据过滤。如果要达到很高的效率,往往不是算法本身,而是底层的数据分布。比如一个谓词的列都是随机分布,那么一个值分布在每个数据页,就无法进行跳过,我们会通过负载中心查看历史查询去优化 Zorder 或者 Hillbert 索引。② Presto
云架构 Presto 在大规模集群下如何保持高效的 Scalabaility Coordinator 单点问题是一个公认的挑战,这部分优化并非我们独创,而是业界的一个 feature。
第一种方案是 Coordinator HA 方案 ,但其并没有从根源解决问题,一旦 Active 节点失活,过不久 stand by 节点也会挂掉。
第二种方案是多 Cluster 联邦方案 ,部署多个集群,通过 Presto Gateway 路由不同的集群。但是路由策略管理是一个很大的难点,如果路由策略不当会带来严重的资源碎片化。
第三种方案是 Disaggregated Coordinator 方案 ,引入了 ResouceManager 聚合分布式资源状态,每个 RM 内存中维护一份状态数据,RM 之间通过心跳达成状态数据的最终一致。Coordinator 可以正常的 Parse、Validate、Plan,准入时 RM 统一获取资源视图,判断是执行还是等待等状态。
③ Kudu
这是一个不常见的问题,在一个运行很久的大集群,有一台机器要裁撤,由于大集群长时间运行元信息负债严重,导致 Tablet Server 无法优雅下线(需要重启 master),耗时可能高达几小时。
在一次实际生产 Case 中,几十万 Tablet,占用内存 50G 以上,Master 启动和Leader 切换都非慢。经排查,集群一直在加载元数据,并发现以前删除的表和数据集群还在维护。通过源码级别的增强,Master 内存消耗降低 10 倍。
3. 加速
考虑到集群的算力和引擎本身的瓶颈上限,除了融合和内核优化,我们还需要做各种各样的加速手段。
除了引擎优化,Databrick 商业版的 OLAP 引擎添加了缓存层和索引层;Snowflake 支持了物化视图的能力;Google 的 BigQuery 提供了多级缓存,以进一步的加速。缓存、计算优化、索引与数据分布、物化、云化是业界的主攻方向,本次分享主要介绍三种手段。
① 缓存
实际场景中经常会遇到重复的查询,我们需要解决如何通过多级缓存机制避免“硬查”集群,加速“SQL 内”的数据扫描性能。该引擎的缓存设计借鉴了 Databrick 的内核缓存、Snowflake 的数仓缓存的缓存设计理念,研发了预计算与多级缓存的技术。
预计算(固定图卡):通过“增量缓存”只刷最新天数据,避免大量数据扫描 统一缓存(重复查询判+非固定图卡缓存):深耕 Calcite 源码,基于 SQL 常量折叠(变更检测)、SQL改写、SQL规则判断。 内核缓存(大 SQL 内存缓存):通过远程告诉缓存+SQL磁盘溢写缓存(Alluxio),加速大查询,减轻 HDFS IO 压力。 Alluxio(HDFS 热数据缓存->SSD):通过对历史 SQL 性能数据分析,缓存热表(如大左表)。② BI Engine
由于 BI 场景不用其他的查询分析场景,BI 场景下的看板对出数的时延要求很高,所以需要 BI 场景进行了特殊的优化。借鉴以 BigQuery 为例,它是有一块单独的内存池,它会根据历史查询判断出热数据并以列式的缓存下来。该引擎除了使用到上述的默认策略,还会添加一个 Clickhouse 的缓存层,基于历史记录判断那些数据是可加速并透明的将可加速的表移动到 Clickhouse 中作为缓存数据。这一整套策略可以让亿级数据运行至毫秒级。
③ 现代的物化视图
如何更高效利用好物化视图面临着三个问题:如何达到用最少成本达到最高性能;如何低成本维护好物化视图;查询时,在不改变查询语句的前提下如何将查询路由到不同的物化视图? 现代物化视图就是在致力于解决上述三个问题。
如何达到用最少成本达到最高性能? 一般方案是做一些领域专家模型。但是对于这样一个平台化的产品是无法做到这一点的, 因为业务方才是最了解业务的。所以该产品可以依赖端到端的负载中心去历史查询记录来找到最大的公共子查询来自动的实现物化视图。同时,还会做一些其他的优化,比如添加相应的索引或者 Zorder\hillbert 排序。 如何低成本维护好物化视图? 增量刷新物化视图,并通过负载中心来分析历史查询物化视图是否起到加速的效果,删除加速效果较差的物化视图。 查询时,在不改变查询语句的前提下如何将查询路由到不同的物化视图? 通过基于 Calcite 的自动改写功能,用户不需要修改原有的 SQL 语句,SQL 会透明地路由到不同的物化视图。--
03
实践总结
灯塔融合分析引擎,在 SQL、计算和存储三个技术领域,做了很多的技术创新和沉淀。下图列出了重要的优化点。
--
04
未来演进方向
我们未来将继续致力于从融合、内核优化和加速三个方向,解决“以卓越性能直接访问数据”的问题。
今天的分享就到这里,谢谢大家。
|分享嘉宾|
冯国敬| 腾讯 后台开发工程师
2013年毕业于哈尔滨工业大学,一直从事大数据领域研发工作,目前在腾讯灯塔负责融合分析引擎的研发。
|《数据智能知识地图》下载|
业内首个 《 数据智能知识地图》已发布!涉及 15个 领域, 133个 体系框架, 1000个 细分知识点,欢迎大家下载!
上下滑动,查看 全景图 (完整版请关注公众号“大话数智”获取)
|DataFun新媒体矩阵|
|关于DataFun|
专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章900+,百万+阅读,16万+精准粉丝。
导读本次分享的主题是腾讯灯塔融合引擎的设计与实践,主要围绕以下...
1、AirJordan(缩写:AJ)是耐克公司旗下经由美国NBA篮球巨星迈克尔...
1、中国制方生物地理区,属于全球南方大施大区的一部分,位于东洋界...
1、中国·廊坊首届古玩艺术品交流会,由河北茶仓科技有限公司举办,...
大家好,我是青帝今天十周年更新,上线赵统赵广和是仪与测试服比都...
元宵节将至,为保证节日期间的食品安全,青浦区市场监管部门近日加...
1、中国菜(zgc)文化传播中心(筹)。2、又名:中国菜(zgc)文化...
1、中山宜安制衣厂有限公司于1994年08月31日在中山市工商行政管理局...
1、四门有100W-200W经验以及彩果(刷2次奖励-半。2、5次没东西拿包...
立春将至,罗城县民众积极投入农业春耕生产之中,翻整田地,播种施...
1、《建筑装饰装修工程监理》分上、下两篇。2、以现行建筑工程法律...
1、《临汾大中楼》是当代诗人伯昏子创作的一首诗。2、。文章到此就...
1、在我国,年轻人的年龄在15岁到34岁之间,他们被称为青年。2、随...
查看最新行情北京时间3日晚,美股周五低开。苹果、谷歌和亚马逊等重...
证券时报e公司讯,安徽建工(600502)2月3日晚间公告,公司2022年第四...
“粤港澳大湾区组合港”激活珠三角水运“一盘棋”---近日,在广东佛...
对于房产方面的知识很多小伙伴现在其实都不是很清楚,会产生各种各...
工业和信息化部等五部门联合印发的《虚拟现实与行业应用融合发展行...
雷达财经出品文|孟帅编|深海曾四次登上春晚舞台的机器人企业优必...
1、习水县苹果售后客服中心是习水县地区专业的苹果产品维修公司,该...
为弘扬中华优秀传统文化,丰富少年儿童的精神文化生活,让小读者度...
新年伊始,多家房企开启组织架构变革,涉及区域之多、调整范围之大...
现在汽车越来越普及,基本上家家户户很快都会有车。所以当汽车这么...
1、本书由夜已深沉写作。2、主要内容:主人公为完成母亲遗愿,刚与...
1、是用来描述踝关节活动度的专业术语跖屈度的正常值是45度表示足向...
*ST金洲(000587)2月2日晚间公告,截至2023年2月2日,公司股价收盘价...
德明利最新股东户数1 1万户,低于行业平均水平。公司户均持有流通...
带着特殊的“寒假作业”,这14位“00后”上了舟山市两会!
1、云南晋宁黄磷有限公司海口分公司于2013年09月12日成立。2、法定...
1、模式特征2、一个特点:无刀无线,一分钟激战。3、-血月杀模式下...