StarRocks 在小红书自助分析场景的应用与实践

news2025/5/25 2:05:36

作者:小红书 OLAP 研发负责人 王成

近两年 StarRocks 一直是小红书 OLAP 引擎体系里非常重要的部分,过去一年,小红书的 StarRocks 使用规模呈现出翻倍的增长速度,目前整体规模已经达到 30 个集群,CPU 规模已经达到了 3 万。

在 11 月 17 日举行的 StarRocks Summit 2023 上,小红书 OLAP 研发负责人王成介绍了最近一年小红书的 StarRocks 的应用新进展,并重点分享了 StarRocks 在小红书自助分析场景下的应用与实践经验。据王成介绍,StarRocks 3.0 在湖上分析能力的增强促使小红书自助分析场景的主力查询引擎通过灰度迁移机制从 Presto 平滑迁移到 StarRocks,已迁移部分的平均查询性能提升了 6~7 倍。

我们将王成的精彩演讲整理出来,希望小红书的实践经验对大家能有所启发。

背景 数据平台架构

alt

图中是小红书数据平台的整体架构,从下往上分别为存储层、表格式层、数据加工层、查询层、应用层。

  • 存储层,小红书的所有的存储都架构在各家云厂商的对象存储之上;
  • 表格式层,以 Hive 和 Iceberg 为主;
  • 数据加工层,包括离线跟实时两个链路,离线同步链路主要使用 Spark ,实时则主要使用 Flink ;
  • 查询层,目前主要有4款查询引擎,在这些引擎的基础上,我们构建了非常丰富的数据产品以及分析产品;
  • 应用层,包括各类的实时报表平台、自助分析平台以及一些即席分析平台。

基于 StarRocks 的实时分析场景

alt

近两年,StarRocks 的存算一体的模式,一直支撑着小红书实时分析场景发展,我们已经全面覆盖了广告、社区、电商直播等等各个核心领域的报表以及数据产品。

StarRocks 在实时分析场景的规模

alt

过去一年,小红书的 StarRocks 使用规模翻倍增长,目前整体规模已经达到 30 个集群,总 CPU 核数达到 3 万,每天数据写入量达到千亿级别,查询达到上亿次,单个集群的查询峰值 QPS 能够达到 2000 甚至 3000,并且整体的平均查询延迟能够控制在 200 毫秒,这些数字都充分说明了 StarRocks 小红书内部起的关键作用。

Adhoc 场景遇到的问题

alt

但是这种存算一体的模式也存在一定缺陷,最核心的问题是存在额外的数据同步过程,数据必须同步到 StarRocks 内部才能对外提供服务,这就引入了数据同步以及数据冗余,带来了额外的资源消耗。此外,数据同步以及数据校验方面的工作,也给我们带来了很大的运维压力。

在自助分析场景下,查询的 QPS 以及延迟时间要求会稍微低一些,但是数据规模非常大,底层数据是整个数仓的基础数据,包括上万张表、 EB 级别的数据,如果想把这么多数据都同步到 StarRocks 里明显不现实。在这个场景下,我们之前选择了采用 Presto 来优化整体的查询性能,Presto 因其在交互式分析以及复杂查询上面的优势,过去几年帮助我们在很好地提升了查询性能、提高用户体验。但是随着小红书自助分析场景需求的不断增长,Presto 已不能满足我们日益增长的降本增效方面的需求。 在 Adhoc 场景下,Presto 上遇到了几个问题:

  1. 技术架构复杂化,公司内部同时有 Clickhouse、Presto 及StarRocks 三个核心查询引擎需要维护,大大增加了我们开发以及运维上面的难度。
  2. Presto 的性能优化困难。
  3. Presto 的主从模式还存在单点故障的问题,有潜在的稳定性的风险。

升级选型与真实场景测试

alt

StarRocks 湖仓新范式

StarRocks 3.0 提出了湖仓分析的新范式,在湖上分析能力的增强,给我们带来了曙光。根据官方的一个Benchmarks,相比于 Trino, StarRocks 直接分析湖仓数据的能够有 3~5 倍的性能提升,因此我们也是选择从 Presto 迁移到 StarRocks 上。

迁移的理由包括:

  1. StarRocks 性能的优化代表它能够提供更高的性价比,能够给我们在降本增效上带来收益。
  2. StarRocks 能够简化我们的技术体系,降低运维难度。现在 StarRocks 实际上在小红书内部已经是最重要的一款查询引擎,我们对 StarRocks 的运维以及技术方面的积累更为深厚的。在这种情况下,如果能把 Presto 替换成 StarRocks,我们的整体的运维压力以及运维难度会大大降低。
  3. 从 Presto 到 StarRocks 的迁移非常方便,我们在 StarRocks 里面如果要查询外部数据,只需要简单定义一个 catalog 就可以了,同时 StarRocks 能够支持一些 Java 的 udf,这就方便我们去迁移在 Presto 上开发的一些定制化的功能。更重要的是,StarRocks 3.0 支持了 Trino 的方言模式。对我们来说用户是我们的分析师,他们的常用习惯是很难改变的,在这种情况下,兼容 Trino查询语义,可以让我们的整个迁移过程变得更平滑,用户体验也会更好。

***基于实际业务验证的四个方向(((

我们基于实际业务验证的 4 个方向分别是正确性、稳定性、性能以及兼容性。正确性和稳定性是查询引擎的生命基线;性能决定着我们在迁移之后能够拿到多大的业务价值;兼容性则代表着迁移的步伐,以及迁移的难度。

  1. 正确性方面,我们整体的验证过程起始于 3.0 版本,收敛于 3.1 版本。在 3.0 版本上,我们在测试过程中其实也是遇到了一些问题,但是在跟社区合作过程中,社区非常活跃,及时地解决了这些问题,在 3.1 版本基本上不再存在正确性方面的问题了。

  2. 在稳定性方面,3.1 版本已经能够达到非常高的稳定性,在我们的高压的测试当中,可以稳定运行一周以上。我们做了不同并发下的一个压力测试,分别是 10 并发、20 并发以及 30 并发,使用了 StarRocks 3.1.4 和线上稳定的 Presto 版本进行对比。随着查询并发数的增加,StarRocks 在稳定性方面的表现明显优于 Presto。

alt
  1. 在性能方面,我们从过去的线上的实际查询中抽取了 3000 个查询,分别进行了串行 10 并发、20 并发、30 并发的压力测试。对比 Presto 3000 个查询里面有 96% 的查询都有非常明显性能优化效果。同时在所有的并发度下,StarRocks 的查询性能相比于 Presto 而言都会有 4 倍以上的提升。
alt
  1. 在兼容性上,3.1 版本在对很多的语法兼容能力进行补全之后,目前对 Presto 相关语法兼容性能够达到 90%,还差了少量特殊语法,例如 CTAS。目前我们线上的整体覆盖度能够达到60%。

目前我们线上稳定版本已经升级到 3.2 ,该版本不仅提供了 CTAS 语法的支持,并通过jni接口帮助我们去扩展更多的 table format,以及还有很多 Iceberg 相关的兼容性优化。基于这些优化,我们的整体覆盖度已经提高到 85%左右,我们还在持续地扩展部分自定义功能,预计整体覆盖度可以提升到 90% 以上,达到新的里程碑。

alt

从上述 4 个维度上来说,StarRocks 都已经达到了生产准入的标准。

迁移过程

在后续的迁移过程中,我们希望整个迁移过程尽可能的平稳以及稳定,因此采取了动态灰度策略。

原查询服务整体架构

alt

如图所示是引入 StarRocks 之前小红书自助分析的整体架构,在这里面的 Kyuubi 是具有分布式以及多租户特性的网关服务,也是我们查询服务 SQL 查询的入口。在 Kyuubi 上我们也做了深度定制化开发,在这个场景里面,我们用到的核心功能是查询的路由功能和灰度功能。查询路由功能就是 Kyuubi 在接收到用户的查询之后,会根据用户查询的语法特性以及负载情况,将其动态路由到合适的计算引擎进行查询。

在这个场景下,我们是以 Presto 的查询引擎为主,当用户的查询涉及到一些比较特殊的语法或者数据的扫描量特别大的时候,会将这些查询路由到 Spark 去执行。

灰度迁移机制

alt

在引入 StarRocks 之后,我们对原有的 Presto 集群进行了切割,搭建了一个 StarRocks 集群,同时在路由规则里面增加 StarRocks 目前还不兼容的语法判断条件。当用户的查询过来之后,会首先判断用户的查询是否在 StarRocks 上能兼容,如果不能兼容,就会直接路由到 Presto 去执行。如果能够兼容,就会根据我们的灰度规则来动态决定它是发到 StarRocks 还是 Presto。这里的灰度规则主要是指动态的灰度比例,可以进行实时调整。

实际业务效果

alt

在整个灰度调整过程中,我们会进行持续的正确性验证,会利用每天闲时,也就是集群使用量较低的低峰期时间段,去对 StarRocks 上的查询结果跟 Presto 查询结果进行动态比对。只有当天的查询性能、稳定性以及正确性都满足目标的时候,我们才会进一步增加动态灰度比例。这样的灰度调整大概持续了一个月,StarRocks 的灰度比例从 0% 提升到了100%,在这个过程中,我们切实享受到了 StarRocks 带来的性能提升效果。就已经迁移的部分而言,整体的平均查询性能提升了 6~7 倍,查询的 p90 降低了 90%,对于用户来说,查询体验得到了非常大的优化。并且我们整个迁移过程非常平稳,没有出现任何事故,也没有遇到用户吐槽。

弹性伸缩降本增效

集群架构

alt

基于以上已经灰度的 StarRocks 湖上分析集群,我们拿到了很多的性能上的收益。同时我们希望能够在保持这部分性能不变的情况下,进一步达到降本增效的效果,因此我们在弹性伸缩上做了一些尝试。我们的 StarRocks 湖上分析集群整体架构分为 FE、CN 两部分,其中 CN 作为计算节点,本身就没有状态,非常符合弹性伸缩的理念。

基于 AWS Spot 的弹性伸缩方案

通常可以通过 CN 的容器化来进行弹性伸缩,我们的场景会更特殊一点,因为我们目前的数仓架构体系核心还是构建在 AWS 之上的,而 AWS 提供的 Spot 实例的服务,可以让我们以竞价的方式来获取空闲的机器,这个竞价相比于包年包月的方式能够最高享受到 90% 的折扣,并且可以随起随用,在低峰期可以直接把机器还给 AWS,不收取任何费用。

为了适配弹性伸缩,我们主要实现了两块内容,一个是 CN 的自动化部署的脚本,还有一个是 CN 会自动的向 FE 进行注册跟注销。在扩容的时候,我们会自动向 AWS 去申请 Spot 实例机器,当这些实体机器就位之后,会通过我们的自动化部署脚本进行部署,然后注册到我们的 FE上,这时候就可以对外提供服务了。缩容的时候,会自动的从 FE 进行注销,注销完之后再向 AWS 归还我们的 Spot 实例。这两个自动化脚本让我们整体的扩缩容的流程变得更加的丝滑,扩缩容操作可以在 2 分钟内完成。

在整体架构上,我们所有的 FE 以及少量的 CN 上,使用的是包年包月方式,少量常驻的机器能保证我们能够提供最基础的服务能力,另外有 90% 的 CN 节点是通过 Spot 来申请的,可以在低峰期将这部分机器完全还掉。

成本优化效果

alt

目前我们采取的还是一种固定时间进行弹性扩展的方式。比如现在定义的低峰期就是 00:00~8:00,高峰期是9:00~23:00。高峰期机器比较抢手,竞价价格会比较高,我们也不希望我们的机器经常被其他用户所抢占,因此高峰期的成本基本持平。在低峰期我们可以将 90% 的 CN 机器全部还掉,这能够节约大量的成本。总体而言,在目前查询性能不变的前提下,总体的成本能够降低 35%。

未来规划

短期目标:进一步拓展 StarRocks 的湖上分析能力

未来我们的短期目标还是继续在 StarRocks 的湖上分析上进行更多拓展。StarRocks 湖上分析是我们走向湖仓一体的第一步,这一块目前还有一些欠缺。

  1. 我们目前最关注的指标就是整体查询的覆盖度,3.2 的版本的发布给我们带来很大的覆盖度提升。剩下一部分主要是 udf 功能持续的丰富,StarRocks 目前的 udf 相比于 Hive 而言灵活性稍差,比如支持的类型有限,不能支持动态返回类型等,我们未来会和社区一起在这方面进行持续的功能拓展。

  2. 数据湖 Iceberg 的集成优化,这一块目前也有很多亟需优化的点,我们会持续的跟社区一起去合作打磨。

  3. 我们目前完全没有开启缓存,上述的那些测试数据都是不包括缓存的,我们未来也希望能够去对本地缓存以及分布式缓存进行持续的探索,看看能不能基于缓存去进一步优化我们整体的查询性能。

长期目标:实践存算分离与湖仓一体

alt

长期来看,我们的两个方向,一个是存算分离模式的实践,另外一个还是湖仓一体的建设。

存算分离模式的引入能够帮助我们去替换掉更多的 OLAP 分析场景,帮助我们进一步降低整体技术栈的复杂度。

在湖仓一体方面,我们希望能将存算分离模式和湖上分析场景融合到一起,通过湖仓一体架构带来更强的数据开发和数据分析能力,包括但不止于以下两个关键特性:

1 ,打破湖和仓之间的隔阂,降低架构复杂度

存算分离模式,StarRocks 私有的数据格式也会放到云上,实际上成为了整个湖仓体系中一个普通的数据 format。用户在基于湖数据进行自助分析时,如果对查询性能有了更高的要求,可以通过物化视图的方式,将数据聚合成更高维度的 StarRocks 私有格式数据,提供查询加速。物化视图的构建也可以根据查询历史自动化构建,更为智能和高效。

2 ,数据的流转更加方便高效

社区目前也在尝试通过 Spark 直接生成 StarRocks 自由格式数据,这项功能可以进一步实现读写分离,优化湖仓一体场景下数据同步的性能和便利性。

本文由 mdnice 多平台发布

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

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

相关文章

一文讲透怎样用SPSS做二项Logistic回归分析?结果如何解释?

推荐采用《SPSS统计分析入门与应用精解(视频教学版)》 杨维忠、张甜 清华大学出版社“7.4 二元Logistic回归分析” 的解答。 本节内容选自《SPSS统计分析入门与应用精解(视频教学版)》 杨维忠、张甜 清华大学出版社“7.4 二元Logi…

新手必看!STM32通用定时器-输入捕获!

一、用途与工作原理 用途:用于测量信号的参数,比如周期和频率。   工作原理:在输入捕获模式下,当捕获单元捕捉到外部信号的有效边沿(上升沿/下降 沿/双边沿)时,将计数器的当前值锁存到捕获/比较寄存器TIMx_CCR&#…

如何制定知识竞赛活动的竞赛规则

知识竞赛既然是知识的竞赛,就应该制定相应的细则或规则。竞赛规则一般应包括以下内容:竞赛编组、答题形式、每场题量、竞赛记分、违例处罚、观众答题、名次奖励及对参赛人员的要求。 1、竞赛编组 竞赛编组一般由抽签决定。在参赛人员较多、场次较多的…

JS数据类型转换注意事项【建议收藏】

ToPrimitive(obj, Number) 和 ToPrimitive(obj, String) 调用顺序不同在于: 区别在于调用 toString 方法和 valueOf 方法的顺序,区分这一点就行了。 ToPrimitive(obj, Number) > Number({}) 如果 obj 是基本类型,直接返回否则,调用 valueO…

简易机器学习笔记(九)LeNet实例 - 在眼疾识别数据集iChallenge-PM上的应用

前言 上一节大概讲了一下LeNet的内容,这一章就直接来用,实际上用一下LeNet来进行训练和分类试试。 调用的数据集: https://aistudio.baidu.com/datasetdetail/19065 说明: 如今近视已经成为困扰人们健康的一项全球性负担&…

【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济

毫无疑问,随着整个社会加速数字化转型,尤其是5G、人工智能、大数据等技术兴起,以及智慧医疗、智慧金融、智能制造等应用加速落地,算力网络在经济社会发展中扮演了愈来愈重要的角色,成为支撑数字经济蓬勃发展的“新引擎…

2023-RunwayML-Gen-2 AI视频生成功能发展历程

RunwayML是一个人工智能工具,它为设计师、艺术家和创意人士提供了一种简单的方式来探索和应用机器学习技术。 RunwayML官方网页地址:Runway - Advancing creativity with artificial intelligence. RunwayML专区RunwayML-喜好儿aigcRunwayML 是一种先进…

大创项目推荐 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…

如何在win7同样支持Webview2 在 WPF 中使用本地 Webview2 ,如何不依赖系统 Runtime

项目运行环境: .Net Framework 4.5.2 Windows 7 x64 Service Pack 1 WebView2 Microsoft.WebView2.FixedVersionRuntime.120.0.2210.91.x64 考虑到很多老项目,本项目使用的是.Net Framework 4.5.2,.Net 更高版本的其实也是可以支持的。 …

win2003搭建DNS服务器域名解析方法

可以搭建DNS服务器的系统有很多,这里以win2003举例。 要在Windows 2003上搭建DNS服务器,需要按照以下步骤操作: 一 配置DNS服务器 1、打开“控制面板”,选择“添加/删除程序”,点击“添加/删除Windows组件”。 2、在“Windows组件向导”中…

亚马逊促销效果不好怎么办?亚马逊促销规则是什么?-站斧浏览器

亚马逊促销效果不好怎么办? 分析原因:首先需要深入分析促销效果不佳的原因。可能是促销活动的设计不够吸引人,或者是目标受众定位不准确。 调整策略:根据分析结果调整促销策略。例如,优化广告文案、更改推广时段或调…

什么是负载均衡?什么情况下又会用到负载均衡

什么是负载均衡 在大型的网络应用中,使用多台服务器提供同一个服务是常有的事。平均分配每台服务器上的压力、将压力分散的方法就叫做负载均衡。 [利用 DNS来实现服务器流量的负载均衡,原理是“给网站访问者随机分配不同ip”] 什么情况下会用到负载均…

苹果Vision Pro将于1月27日上市!

在无数期待中,苹果全新产品Vision Pro头显终于定下上市日期。 彭博社记者马克古曼(Mark Gurman)于近日在X(前推特)平台爆料了这一信息,预计苹果Vision Pro头显将于2024年1月27日率先在美国上市。 在过去看…

实战SRC | api接口未授权 + 越权漏洞

本文由掌控安全学院 - zxl2605 投稿 一次在fofa上通过学习的fofa语句进行查询,无意中查询到了一个网址 其登录界面如下: 使用浏览器的F12打开开发者工具,查看JS寻找接口: 从JS代码中查询到一处接口如下: 发现是以p…

解决SyntaxError: future feature annotations is not defined,可适用其他包

方法:对报错的包进行降级 pip install tikzplotlib0.9.8site-packages后面是使用pip install安装的包,根据这个找到报错的包 想法来源: 环境是python3.6,完全按照作者要求进行环境配置,但仍报错。 我在网上找的解决…

视频号小店全新赛道,新手如何入驻?

我是电商珠珠 视频号小店为视频号团队所研发。距今为止也才发展了一年时间,在23年下半年掀起了不小的浪花。 我做视频号小店也有一年时间了,在他刚开始三个月的时候,就开始带着团队一起做。到现在也拥有了自己的视频号小店运营团队&#xf…

ArkTS语言应用开发入门指南与简单案例解析

文章目录 前言创建项目及其介绍简单案例学习本文总结问答回顾-学习前言 在前几节课中,我们已经了解了ArkTS语言的特点以及其基本语法。现在,我们将正式利用ArkTS来进行应用开发。本节课将通过一个快速入门案例,让大家熟悉开发工具的用法,并介绍UI的基础概念。 创建项目及…

yolo增加Shape-IoU,完美超越SIoU/EIoU/CIoU

论文地址:https://arxiv.org/pdf/2312.17663.pdf 代码地址:GitHub - malagoutou/Shape-IoU 摘要 作为检测定位分支的重要组成部分,边界框回归损失在目标检测任务中起着重要作用。现有的边界框回归方法通常考虑GT框和预测框之间的几何关系&…

数组指针和指针数组

首先,理解一下数组指针和指针数组这两个名词: “数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了—— 数组的指针:是一个指针,什么样的指针呢?指向数组的指针。 指针的数…

Windows内核理论基础学习

文章目录 前言Windosw内核 理论基础Windows体系结构CPU权限级别内存空间布局Windows内核结构硬件抽象层(HAL)内核层执行体层设备驱动程序文件系统/存储管理网络 Windows子系统窗口管理图形设备接口 系统线程和系统进程 内核基本概念处理器模式内存管理进…