StarRocks 在 Shopee 数据产品的实践

作者马腾,于彦芳

编者荐语:

StarRocks 在 Shopee 的应用表现出色,凭借高速外部数据湖查询、优化的多表连接性能及优于 Presto 的执行效率和资源节省,广泛应用于数据服务、Data Go、Data Studio 等多个数据平台。

背景介绍

StarRocks 是一款 SQL 查询引擎,能够在数据湖仓上提供数据仓库级别的性能。StarRocks 是一款出色的分析引擎,具有强大的功能,例如向量化执行引擎、基于成本的优化器、数据缓存和具有透明查询重写能力的物化视图。除了其自管理的专有表格式外,它还支持直接查询大多数流行的数据湖表格式,如 Hive、Iceberg、Delta Lake 和 Hudi。借助其内置的目录功能,只需一个创建外部目录的 SQL 语句,即可立即部署 StarRocks 并查询数据湖表。

在 Shopee,我们在多个平台上采用了 StarRocks ,利用其能力来满足各种分析需求。让我们深入探讨一下 StarRocks 如何在三个不同场景中在我们的数据环境中发挥了关键作用。

1. DataService - 构建低成本和高速的外部数据湖

  • 使用 StarRocks 的 MV on External Catalog (Hive) 来提高查询性能

2. DataGo - 加速表连接和洞察提取

  • 使用 StarRocks 的多表 Join 能力

3. DataStudio - 选择 StarRocks 替代 Presto,以获得更快的查询速度和资源节省

  • 使用 StarRocks on Hive

Data Service x StarRocks

Data Service 产品简介

Data Service 是 Shopee 的一个数据平台产品,旨在以 API 的形式提供用户需要的数据,并管理整个 API 生命周期。通过数据服务,用户可以轻松选择所需的 Hive 表和列,配置过滤条件,创建 API。在后台,Data Service 根据用户的配置生成查询语句。当用户触发 API 时,数据服务运行查询语句并将请求的数据返回给用户。然而,当查询过于复杂时,可能需要数分钟到数小时才能完成查询执行;有时甚至需要更长时间。

Data Service 使用 StarRocks 来实现查询加速 – OLAP SpeedUp

为什么选择 StarRocks

a. StarRocks 支持对 Hive 进行查询,并且这一功能已经达到生产级别。

b. StarRocks 支持基于外部引擎(Hive)构建物化视图(MV)。

c. 使用 StarRocks 在 Hive 上的 MV,用户无需维护从 Hive 到 OLAP 引擎的实时或近实时写入管道。这不仅节省了用户在人工资源开发成本上的支出,也减少了实时管道所需的组件成本。此外,这种方法对用户的使用没有任何影响;他们无需做任何工作就能从 API 查询性能的提升中受益。这种方法也大大提升了用户业务推广的效率。

  • 其他引擎如 ClickHouse 也可以利用物化视图来预计算查询数据。然而ClickHouse 对数据湖的支持有限,并且在社区路线图中没有开发计划。这意味着使用 ClickHouse 实现类似 OLAP 的功能需要手动开发 API,或者将 Hive 数据传输到 ClickHouse 并使用 ClickHouse 的 MV 进行预计算。或者,可以使用 Flink 实现实时预计算逻辑,然后将结果写入 ClickHouse。不论选择哪种方法,都需要大量的人力支持,并且还会增加 ETL 管道组件的成本

OLAP Speed Up 方案 (StarRocks MV On Hive) 介绍

Data Service 利用 StarRocks 来加速查询,这一功能称为 olap-speedup。以下查询为例。Data Service 首先要求用户把 SQL 逻辑写成 CTE 的模式然后后端会将用户的 SQL with 部分 提取出来改造成 StarRocks 异步物化视图的 create stmt。“With” 语句中的 SQL 称为公共表表达式(CTE)。

Data Service 在 StarRocks 物化视图上构建用户查询的 CTE 部分。通过引用这些物化视图,数据库引擎可以快速检索预计算结果,从而显著提升查询速度。

OLAP speed-up 性能结果

这种优化使查询执行速度提高了 10 到 2000 倍,减少了资源消耗并提高了整体效率。

  • Data service 计划推出 10 个高流量 API,这些 API 将占据平台总流量的 70%。目前,已有 5 个 API 上线。
  • 基于这 5 个 API 的查询响应时间,olap speed up 解决方案取得了显著的成果

下表显示了 Data Service API 的执行时间统计。目前,这 5 个 API 分别通过 Presto 查询 Hive 和查询 StarRocks 物化视图各运行一次。这使得可以直观地比较两种方法的 p90 和 p99 执行时间。

  • 在上图中,第二列,query_count,表示在所选时间窗口(24小时)内调用当前API的次数。第三列,result_consistency_ratio,指示了 StarRocks 加速结果与直接使用 Presto 查询 Hive 结果之间的比较。(第五个 API 的低准确性是因为其存储表每小时更新一次,而标记设置为每日更新。StarRocks 材料化视图的刷新取决于标记配置。)第四和第五列分别显示了在使用 StarRocks 材料化视图加速后的查询延迟 p99 和 p90。最后两列代表了使用 StarRocks 材料化视图相对于直接在 Hive上使用 Presto 进行查询的性能改进,分别针对 p90 和 p99 的查询
  • 为什么一些 API 在 StarRocks 下可以将查询性能提升超过 1000 倍?StarRocks 在给定时间段内执行速度更快,而 Presto 较慢且倾向于排队,导致大部分 API 调用的延迟时间花费在排队上。

Data Service 资源使用总结

在 Data Service 的 OLAP 加速场景中,StarRocks 支持基于外部存储的材料化视图加速,也就是说在物化视图刷新期间,它将根据物化视图的计算逻辑,从 Hive 中提取预计算的数据到本地 StarRocks 存储。这提供了 ETL 和预计算的功能。不论是业务用户利用数据服务平台,还是数据服务平台的开发人员,都无需额外的人力来维护实时写入流水线。这显著节省了人力成本,以及实时流水线所需的 ETL 任务的组件成本。

Data Go x StarRocks

Data Go 产品简介

Data Go 是一个 codeless 的数据查询构建平台,支持业务用户从可访问的数据模型中检索感兴趣的指标数据(例如店铺绩效、订单 GMV 等)。数据模型由数据管理员创建,通过向数据模型中添加1个或多个表或者数据列。数据用户可以选择适当的数据模型,通过选择输出列并应用筛选器来构建查询。当用户在 UI 上触发查询时,Data Go 使用 Presto 引擎检索 Hive 数据 并将数据下载到 CSV 文件供用户使用。然而当从多个表中提取数据时,多表连接查询的性能优化可能具有挑战性,往往会导致增加的资源消耗和查询执行时间。

Data Go 使用 StarRocks 实现加速 多表 JOIN 的场景

为什么选择 StarRocks

StarRocks 是非常适合进行多表连接查询的数据库产品,因为它配备了基于成本的优化器。这个优化器非常创新,特别为向量化执行引擎定制,能够使 StarRocks 以快速且优化的方式执行查询执行计划,最终提供比竞争对手更好的多表连接查询性能。

Join Table 查询性能

Data Go 已经实施了使用 StarRocks 代替 Presto 进行表连接查询的策略。在多个国家的多个数据模型上进行了使用 StarRocks 和 Presto 的查询性能对比测试。

  • 基于对 Data Go上实时业务场景的监控,可以观察到,StarRocks 在 Hive 上的性能比 Presto 在 Hive 上提高了 3 到 10 倍。

以 “Product Group - MY” 为例,以下是基于产品组的一个样本查询。在使用 Presto 执行这种复杂查询时,平均耗时 364 秒。而 StarRocks 仅用 20 秒就完成了相同的查询。因此,StarRocks 执行查询所需的时间显著减少。这种高效性使 StarRocks 能够在相同的时间框架内处理更多的查询,同时每个查询分配的资源更少。

StarRocks 集群和 Presto 集群资源使用对比

StarRocks 集群 CPU 资源使用:

  • 峰值 CPU 用量:150 core
  • 均值 CPU 用量:40 core

Presto 集群 CPU 资源使用:

  • 峰值 CPU 用量:2000 core
  • 均值 CPU 用量:100 cores

Data Go 资源使用总结

基于对 Data Go 在线使用情况的分析,利用 StarRocks 在 Hive 上进行业务操作,与使用 Presto 查询 Hive 相比,平均性能提升了 3 到 10 倍,同时节省了 60% 的 CPU 资源。

  • 显著的性能提升和计算资源节省主要归因于两个主要原因Data Go 业务的查询模式相对固定,主要涉及多个每日更新表的连接。我们的StarRocks 集群支持内存数据缓存和磁盘数据缓存(Data Go 的集群配置为 10GB 内存数据缓存和 400GB 磁盘数据缓存),这使得 Data Go 的业务查询具有很高的缓存命中率。StarRocks 自研的优化器比 Presto 的优化器更高效。在处理执行计划和计算过程是主要耗时因素的复杂查询(例如连接和嵌套子查询)时,StarRocks 表现出显著优势。相比之下,对于以 I/O 为主要耗时因素的查询,两者的差异不大。

Data Studio x StarRocks

Data Studio 产品简介

Data Studio 是一个支持临时和定时数据作业的数据开发平台。对于临时查询,用户创建一个空文件,输入查询语句,然后通过简单的“运行”命令来执行查询。然而,这个过程消耗大量资源,且复杂的分析查询通常需要较长的处理时间才能生成结果。

Data Studio StarRocks On Hive 介绍

为什么选择 StarRocks

  1. StarRocks 作为一个强大的查询执行引擎,支持外部目录如 Hive。用户可以利用 StarRocks 直接查询 Hive 表。借助其大规模并行处理(MPP)框架,单个查询请求被分成多个物理计算单元,然后可以在多台机器上并行执行。计算单元的并行执行充分利用了所有 CPU 核心和物理机器的资源,加速了查询性能。此架构使得 StarRocks 在查询性能上表现出色,特别是在处理涉及聚合、求和和分组的复杂分析查询时。
  2. 为了解决 Data Studio 在处理复杂查询时的当前挑战,团队正在考虑使用 StarRocks 来执行用户查询。他们正在进行实验,以评估性能和错误率,并将 StarRocks 与现有引擎 Presto 进行比较。
  3. StarRocks 对数据湖有成熟的支持。其他公司,如携程,利用 StarRocks 查询 Hive 以生成报表,而小红书则使用 StarRocks on Hive 作为临时查询引擎。腾讯进一步利用 StarRocks 进行 Iceberg 的查询和写入,实现冷热数据分离,并定期将冷数据沉入 Hive。

StarRocks & Presto 查询性能对比

集群计算资源概况

  • StarRocks 400 core; 2700 GB Memory
  • Presto 400 core; 2700 GB Memory

查询 Benchmark 基准

  • SQL:选择 Data Studio 平台上 2024年3月25日到2024年3月29日用户执行的 Ad-Hoc Query SQL。
  • 测试方法:分别使用1、5、20、40和50个线程并发压力测试 StarRocks 和 Presto。
  • 查询延时结果统计:在相应的并发压力测试下,测量 StarRocks 和 Presto 的平均延迟、P90 延迟和 P99 延迟。

测试报告

Data Studio 资源使用总结

根据 Data Studio 的测试结果,在使用相同计算资源(400 核心 + 2700GB 内存)的情况下,StarRocks 的性能比 Presto 提升了 2 到 3 倍。换句话说,StarRocks 可以用 Presto 仅 50% 到 70% 的资源提供与 Presto 相当的计算能力。

  • 对于 Data Studio ,主要的改进来源于 StarRocks 优化器的优越性。Data Studio 中日常临时查询的特点是不固定模式,而是带有大量嵌套子查询和连接的复杂查询。这正是 StarRocks 擅长处理的查询模式。此外,由于临时查询模式的不可预测性,数据缓存
  • 对我们的 Data Studio 场景影响较小。

总结

总而言之,StarRocks 在多种用户场景中表现出色,提供了从外部数据湖的高速查询、优化的多表连接查询性能,以及比 Presto 更优越的执行速度和资源节省。StarRocks 在我们组织中的广泛应用,包括数据服务、Data Go、Data Studio 等。它有效地解决了痛点并优化了数据分析的资源利用,使其成为数据分析需求的理想解决方案。

特别资讯:Shopee 大数据专家工程师马腾 将于 12 月 7 日在 StarRocks Summit Asia 2024 湖仓最佳实践分论坛分享 StarRocks 相关应用实践,欢迎感兴趣的用户扫码报名,到现场近距离了解详情~

大会官网:point_right:http://mkt.mirrorship.cn/activity/ActivityInfo/7Yev6K/k46OTWk