无需数据搬迁,10倍性能提升!携程的统一分析之旅

news2024/11/24 15:30:18

作者:携程技术中心大数据总监 许鹏

携程自 2022 年起引入了 StarRocks,目前已经成为了集团内部的主要技术栈,应用到酒店、机票、商旅、度假、市场、火车票等多个关键业务线。目前,携程内部已经拥有超过 10 个 StarRocks 集群,内表总数据量超过 230T,每日查询量超过 1100W ;StarRocks-Hive外表每日查询量超过 10W。

Artnova 是携程内部统一的报表平台,承载了集团所有 BU 的报表业务,如酒店、机票、商旅、度假、市场、火车票等。业务人员可以通过在平台内配置自定义报表来获取所需的业务数据,辅助业务监控和决策。Artnova 报表查询具有如下特点:

SQL复杂、底表大:为了满足复杂的业务需求,用户配置的报表 SQL 往往涉及多表关联、子查询、聚合等复杂操作,非常多的 SQL 达到数百行。并且,用户查询的底表通常很大,往往超过了百 GB,甚至超过 TB。

高并发、低耗时:用户习惯上会把数据通知的邮件任务设置在整点,比如 8:00、9:00 是发送邮件的高峰期。这时系统内会有超过上千个复杂 SQL 同时查询,给整个集群带来比较大的压力。并且,单个仪表盘往往包含十多张甚至几十张报表,当用户打开仪表盘时,会有几十个复杂 SQL 同时查询。如何降低 SQL 延迟,保证响应足够快,让用户 0 等待也是一个比较大的挑战。

Complex Workflow -> One Data,All Analytics

类似大部分互联网公司,携程基于 Hive 进行了数仓建设。由于 Artnova 的查询特殊性,直接基于 Hive 的查询是无法满足业务需求的。Trino 虽然提供了一定的查询加速能力,但在复杂和高并发查询上的性能仍旧有瓶颈。于是我们开始寻求其它的解决方式。

Stage1: StarRocks as an OLAP, 10 time faster but complex

一个最直观的方案是把数据导入至 OLAP 数据库内进行加速。经过一系列调研、测试、验证,自 2022 年起,携程就开始采用 StarRocks 作为加速 Artnova 报表的新引擎。

alt

第一阶段我们把 StarRocks 当作 OLAP 数据库使用,小表通过 StreamLoad 方式、大表通过 SparkLoad 方式将数据从 Hive 导入到 StarRocks 内部,并针对 SQL 查询创建合适的索引。这样的方案取得了非常好的加速效果,加速后平均耗时从 20 秒左右降低到了 1.5 秒,性能有 10 倍以上提升,真正为业务提供了秒级的报表体验。

alt

图表为日均查询耗时,可以看到前后对比明显

然而,这样的方式也有一定弊端:

导入性能虽然比较快,但相较查询 Hive 数据仍有一定的滞后,业务查询的灵活性和实效性受到了影响。 需要额外维护导入任务、针对不同查询进行表模型、索引设计,为整个数据 pipeline 引入了复杂性。 由于 Artnova 的业务量巨大,这个方案的复杂度使之无法规模化。我们无奈只选取了最重要、性能最需要提升的业务进行了迁移,剩余业务仍旧通过 Trino 来进行湖上查询加速。整体的查询延时问题并没有得到彻底的解决。

Stage2: StarRocks as a Lakehouse, fast and also easy and scalable

我们迫切的需要一种能够在降低数据链路复杂度的前提下提升性能的方式。作为 StarRocks 的用户,我们一直积极地参与社区、关注社区的最新进展。社区自 2.0 版本之后就开始不断打磨湖上联邦查询的能力。3.0 版本发布之后,StarRocks 正式宣布升级为湖仓一体的新范式。不仅在查湖的性能、稳定性上进行了增强,外表物化视图的能力更是让人眼前一亮,而且社区还支持了 Trino 的语法,大大降低了迁移门槛。这让我们迫不及待的开始了测试。

测试效果非常惊艳。StarRocks 在直接查湖的性能上非常优异,在开启 Data Cache 后性能是 Trino 的 7 倍,某些场景下创建物化视图后甚至有几十倍性能提升。 alt

上图为 Artnova 当前的架构。新的架构充分利用了 StarRocks 数据湖查询以及异步物化视图的能力。新架构有如下优点:

无数据延时:StarRocks 的 Hive Catalog 可直接对 Hive 进行高效查询,提供比 Trino 更快的查询加速,解决了 StarRocks 作为 OLAP 时的数据延时问题。

无数据搬迁:因为直接查询的性能已经足够优秀,大部分场景不用再将数据导入内表;对于部分需要进一步加速的极端复杂场景,可以通过物化视图来维护计算逻辑以及更新 pipeline。这大大降低了数据链路的维护成本,使整套方案更加通用可扩展。

按需透明加速:物化视图的透明查询改写能力使平台可以按需对慢 SQL 进行治理。当出现慢查询时,平台只需分析 SQL 逻辑、创建合理的物化视图即可,不需要大张旗鼓地对数仓各层表逻辑进行更改。对于业务用户来说,也无需更改查询语句,即可通过透明改写享受到查询提速。从而业务用户可以不再关注性能优化,专注于业务逻辑;平台也提升了体验优化的效率。

下面来展开讲解整个测试流程及应用方案。

湖上直查性能强悍,7倍以上性能提升

湖上直接查询的性能是选型基础。网上有很多使用 TPC_DS、SSB 标准数据集测试StarRocks 和 Trino 的报告,效果非常理想。我们便跳过这一阶段,直接用真实业务报表进行测试。

先介绍下我们报表平台的数据结构:数据集和报表。数据集结构是指基础 SQL,可以是单表查询,雪花模型,星形模型等复杂 SQL。报表结构则是在数据集基础之上,进一步加工聚合的业务 SQL,同一个数据集上根据业务需求不同可能会存在多张报表。本次测试选取了涉及 10 个常用数据集的共 4000 张报表,包含 15 种业务场景,涵盖多表 join,单表,大表,小表等 4000 多个常用查询。在稳定性,正确性,查询性能等方面都得到了验证。

在同等配置的集群下,在未开启 DataCache 情况下,StarRocks 是 Trino 的2.2倍,在开启了 DataCache 之后,平均是 Trino 的7.4倍。

测试结果下:

图表中延时为每一类查询的平均延时。

alt alt

StarRocks为什么能比Trino直查快

StarRocks 凭借其优秀的向量化引擎、pipeline 执行引擎、CBO、Global Runtime Filter 等特性,在复杂场景下的查询原生就具备优势。但是,湖上查询与内表不同,一方面数据在远端存储上,计算和存储不在一个节点会导致天然的网络开销。另一方面,元数据不是 StarRocks 托管的,很难像内表一样完全掌控统计信息用于加速查询规划和调度。

但是好在 StarRocks 也对湖上查询做了非常多的专项优化,主要分为两大块:

裸查加速优化 湖上查询加速的瓶颈主要在 I/O 跟元数据上。StarRocks 做了很多降低 I/O 的优化:

I/O 合并:根据查询情况自适应 I/O 合并,从而减少 I/O 次数;

延迟物化:首先对带谓词筛选的列进行过滤,定位目标行,再对应读取其他需要访问的列,减少 I/O 总量;

针对各类文件类型 Reader 的优化

同时 StarRocks 也针对做了元数据做了优化,包括元数据、统计信息的缓存以及更新机制。

Data Cache

StarRocks 查询 Hive 外表需要把远端数据拉取到BE节点进行计算,这一阶段比较消耗网络开销,也会对 HDFS 造成一定压力。并且,如果 HDFS 有抖动,也会对最终的响应时间有一定影响。

StarRocks 的 Data Cache 可以在用户第一次查询时异步地按照查询范围的 block 块缓存原始数据到 BE 节点,当后续查询命中 block 块时便可以直接从 BE 节点读取,避免了再次从 HDFS 取数。社区也在研发异步填充 Cache 的优化,从而让 Cache 填充本身不会对查询性能产生影响。

除了这些湖上的原生加速手段,StarRocks 还拥有一个其他湖仓架构没有的加速利器:物化视图。

物化视图锦上添花,整体 10 倍以上性能提升

虽然直接查询已经比 Trino 的性能好很多,但是还是有一些老大难的数据集不仅数据量大、查询复杂,业务的查询时延要求还较高。在这种情况下,原来我们只能将数据提前进行处理,然后将结果数据导入到 StarRocks 来进行加速。这意味着我们需要额外维护数据的加工及导入逻辑,用户的查询 SQL 也需要对应改到查询 StarRocks 内表。

通过物化视图可以方便、无痛地解决这个问题。物化视图具备如下几个特点:

自动异步加载数据

物化视图可以自己维护刷新的逻辑,尤其分区物化视图还能自动根据分区变更进行增量刷新,降低了维护成本。另外物化视图加载和处理数据的速度非常快,原来 Spark Load 耗时一小时的表,物化视图大概只需要 5 分钟。

透明加速

物化视图支持透明的查询改写,从而用户不用修改 SQL 便可借用物化视图进行查询加速,做到了对用户透明。

我们针对某个查询延时要求较高、数据量较大的场景进行了 PoC 验证。该场景需要对 16 亿行的大数据集进行聚合计算,由于数据量太大,全部导入内表基本不可能。然而,直接通过 Catalog 冷查询的性能在 1-2 分钟,不能满足业务需求。因此我们根据查询创建了物化视图。物化视图的大小缩小至 10GB 左右,整体刷新在 15 分钟内即可完成,基于物化视图的查询耗时缩短至了 2.5 秒以内,性能有 3-40 倍提升。

物化视图非常适合数据聚合加速的场景,应用可以非常灵活,在单表聚合、多表 join 在聚合等场景都能发挥价值。某特慢数据集从 Trino 转为 StarRocks Hive 外表+MV 的查询前后性能对比如下,可以看到在8月23日之后查询耗时有断崖式的下跌。

alt

通过 Catalog+MV 的整体方案,提速非常显著,已迁移 StarRocks Hive 外表的报表平均提速达到 10 倍,与 StarRocks 内表提速相当。目前已超过 10W 查询从 Trino 切到 StarRocks Hive 外表上。用户体验得到显著提升。

最佳实践

接下来介绍在整个迁移过程中的一些经验:

语法兼容性 99%,为业务迁移打好基础

StarRocks 和 Trino 都有自己的方言,部分函数并不兼容。前期我们通过 Calcite 工具把 Trino SQL 转成 StarRocks SQL,这种方式解决了常见的兼容性问题。StarRocks 3.0.0 版本之后内置了语法兼容,可通过 set sql_dialect = "trino" 开启。其原理是通过设置 Trino 方言,把 Trino SQL 解析成 Trino AST,然后把Trino AST 转成 StarRocks AST,再进一步生成执行计划,复用 StarRocks 执行框架。我们使用生产 SQL 反复测试得出其内置语法兼容性已经超过 99%,比例非常之高。

开启 Data Cache

Data Cache 是在 BE 节点上进行配置的,在配置时需要考虑到内存大小和磁盘的容量,如果 BE 磁盘容量过小可能效果并不理想。和社区讨论得知后续的版本中 Data Cache 的管理将更加精细化,可以配置缓存数据的规则,以及黑白名单等,其主要参数如下

alt

创建合适的物化视图

物化视图特别合适加速重复聚合查询和周期性多表关联查询。为了能够让 MV 及时刷新,我们借助调度工具进行配置,与 MV 中的基表 Job 设置成依赖关系,当基表数据导入之后便可第一时间刷新 MV。

另外,如果刷新出现问题也可以借助调度工具进行告警通知。

alt

DataNode混部

由于 Data Cache 和 MV 本质都是空间换时间,因此需要选择有存储的机器当做BE节点。为了合理利用资源,我们选择和 HDFS 的 DataNode 进行混部。在与 DataNode 同一块磁盘上,StarRocks 单独创一个目录,用来存储 MV 和 Data Cache 的数据

自动迁移

为了让引擎能够自助平滑的从 Trino 迁移到 StarRocks,我们设计了校验服务,每天把 TrinoSQL 回放到 StarRocks 测试集群,并分析 SQL 是否运行成功以及 SQL 结果的数据是否正确,如果运行失败则分析具体原因。Artnova 报表平台每天会选取部分测试成功的数据集从 Trino 切换到 StarRocks,同时会发送邮件告知其 owner。整个自动迁移服务如下图

alt

后续优化方向

除了持续推动存量 Trino 查询迁移到 StarRocks 外表+物化视图的查询方式外,我们也在积极与社区沟通,探索进一步的数据加工提速方案以及产品优化方向

物化视图的智能推荐

当前 MV 的分析、创建、校验还是纯人工完成。为了能够更加节省人力,将物化视图的应用规模化,我们将联合社区探索物化视图的智能推荐,通过程序自动给出合理的物化视图建议。

物化视图的索引

MV 和 StarRocks 内表有相同的数据结构,为了进一步加速、充分利用 StarRocks 原生存储优势,我们开发了基于物化视图创建索引的功能,目前也已经贡献给社区。

通过StarRocks进行湖上ETL:Iceberg+DBT+StarRocks StarRocks自3.1版本支持Iceberg写入的能力之后,我们就在尝试通过Iceberg+DBT+StarRocks 来把数仓的整体实效性进一步提升。在实际的测试过程中,发现 StarRocks 还有很多优化方向,例如:

支持 Iceberg V2 表的 equal-delete 读取

支持更新 Icerberg 文件(Merge Into语法)

Iceberg 文件 compaction 及管理优化

目前,我们已经和 StarRocks 社区以及其他在这方面有需求的用户展开了深入的讨论与规划,并积极地参与到后续的研发工作中来。期待 StarRocks 能够在这一场景上发挥更大价值!

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c语言函数宏的几种封装方式

c语言函数宏的几种封装方式 在c语言开发中,除了使用函数封装代码之外,也经常使用宏来封装一些重要或简洁的代码。 宏在c开发有三种:预定义宏,不带参宏,和带参数宏,通常,带参数宏也叫函数宏&am…

HR应用人才测评来提升人才价值

对于企业而言,产出价值是最重要的,但企业拥有人才,才能产出更多的价值,做HR这么久发现很多企业,都欠缺人才管理的测评技术,导致很多人才被埋没或者浪费,这也说明一个很大的问题,一定…

Github 自动化部署到GitHub Pages

1.准备工作 新建仓库 新建项目 配置 vite.config.ts base: ./,部署应用包时的基本URL,例:vue-cli 5.x 配置 publicPath 推送到远程仓库 2.配置 GitHub Token 点击 Settings -> Actions -> General 找到 Workflow permissions,选中第…

sqlserver涉及到三种排序后生成的数字

with temp as (select 1 标识,2023-01-01 日期,a 项目union all select 1,2023-01-01,a union all select 2,2023-01-01,a union all select 2,2023-01-01,b union all select 3,2023-01-01,a union all select 3,2023-01-01,b union all select 3,2023-01-01,c union all …

耳朵小戴什么耳机合适,2023年适合小耳道的蓝牙无线耳机分享

你们是否曾为了追求音乐的同时,担心自己的听力健康呢?尤其是耳朵小的群体,佩戴入耳式时间一长,就会感觉耳道存在一定的疼痛感,不过别担心,现在有了一种完美的解决方案——骨传导耳机!这种炫酷的…

解决Windows Server 2012 由于没有远程桌面授权服务器可以提供需求可证

刚开始提示 之后就登录不了 (如下图提示) 由于windows server 2012 R2 安装了 远程桌面角色,但是这个角色是120天免费的,需要购买授权的。解决方法是取消/删除这个角色,就可以恢复正常的远程 一直下一步 远程桌面服…

2023年阿里云双11活动云服务器可选实例规格、配置及活动价格分享

阿里云服务器2023年双11活动价格是多少?轻量应用服务器2核2G3M带宽轻量服务器87元1年、2核4G4M带宽165元1年;云服务器经济型e实例2核2G3M配置99元1年;计算型c7实例2核4G1M配置864.79元1年;通用型g7实例2核8G1M配置1089.91元1年&am…

Linux C语言进阶-D9字符指针与字符串

初始化字符指针:把内存中字符串的首地址赋予指针,并不是把该字符串复制到指针中。 char str[] "Hello World"; char *p str; 在C编程中,当一个字符指针指向一个字符串常量时,不能修改指针指向的对象的值 char * p &…

【PC】第26赛季第2轮更新公告

正式服维护日期 ※ 下列时间可能会根据维护情况而发生变化。 11月8日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于北京时间每周三上午10点进行。 ※ 在随机选择地图的区域中,各地图将按大型地图25%、小型地图12.5%的概率随机匹配。 测试服 普通比赛&#xf…

Capybara库如何批量下载新浪图片

按照要求写一个使用Capybara库的下载程序。该程序使用Ruby下载新浪新闻的图片,并使用爬虫IP服务器duoip的8000端口进行下载。 require capybara require mechanize# 创建一个爬虫IP服务器实例 proxy Mechanize.new爬虫IP主机: duoip,爬虫IP端口: 8000# 访问新浪新闻…

黑马最新「SpringBoot3+Vue3」全套教程上线,练手很香

转眼2023年仅剩2个月,大家的“卷”也进入了白热化阶段,毕竟10月随份子的钱还没还完,双11又付了一大笔尾款,还要准备回家过年的钱……为了更卷(赚更多钱),又又又有程序员来找播妞要新教程了。 “…

全球地表动态水体产品(数据集V2.0)(2000-2020年/8天/250米)

摘要 全球地表动态水体产品(8天/250米)GSWED(Global Surface Water Extent Dataset)由中国科学院空天信息创新研究院湿地与环境遥感研究团队制作而成。本套数据集是基于MODIS数据构建了一套全球地表水体NDVI阈值时空参数集,在此基础上使用遥感大数据云平台进行研发的,使用G…

全优学堂功能说明

1. 快速使用系统 系统首页 #2. 功能列表 使用端功能模块PC端微信生态微信生态接入配置课程班级管理课程配置,支持多种收费方式、多校区配置班级所有学员班级课表上课记录学生学生信息、综合信息查询:报读课程、订单、课表、上课记录、变动日志家长绑定…

小程序 - 起步

小程序代码的构成-项目结构 了解项目的基本组成结构 ①用来存放所有小程序的页面 ②utils 用来存放工具性质的模块(例如:格式化时间的自定义模块) ③app.js 小程序项目的入口文件 ④app.json 小程序项目的全局配置文件 ⑤app.wxss 小程序项…

苹果手机如何导出微信聊天记录?3个方法,教你快速导出!

微信聊天记录不仅只是几句话、几张图片、几个视频,更是我们与好友之间的感情见证。所以说,把微信上的一些重要聊天记录导出或者备份是很有必要的事情。 如果出现误删或者手机损坏、丢失等情况,那么这些珍贵的聊天记录就会消失。如何导出微信…

tolua中table.remove怎么删除表中符合条件的数据

tolua中table.remove怎么删除表中符合条件的数据 介绍问题(错误方式删除数据)正确删除方案从后向前删除递归方式删除插入新表方式 拓展一下总结 介绍 在lua中删除表中符合条件的数据其实很简单,但是有一个顺序问题,因为lua的表中…

【蓝桥杯】2023省赛H题

考察知识点:双向链表,小根堆 完整代码在文章末尾 题目 【问题描述】 给定一个长度为 N 的整数数列: A1,A2,...,AN。你要重复以下操作 K 次 :…

Day 5 登录页及路由 (三) 基于axios的API调用

系列文章目录 本系列记录一下通过Abp搭建后端,VueElement UI Plus搭建前端,实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释Day 3 登录页以及路由 (一)Day 4 登录页以…

三菱MC协议及报文格式详解

一、简介 三菱MC协议是指三菱电机公司(Mitsubishi Electric)使用的一种通信协议,用于在三菱PLC(可编程逻辑控制器)和其他设备之间进行数据交换和通信。 三菱MC协议有多个版本,最常见的是MC-Protocol&…

uniapp原生插件之安卓USB扫码枪扫码插件

插件介绍 安卓USB扫码枪扫码,监听USB扫码枪 插件地址 安卓USB扫码枪扫码插件 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 插件方法 开启监听:setListener 重要说明:当开启监听后当前窗体不可点击,点击无任何…