写点什么

从多引擎到统一平台:去哪儿网的 StarRocks 实践

作者:StarRocks
  • 2025-08-08
    河北
  • 本文字数:6094 字

    阅读完需:约 20 分钟

从多引擎到统一平台:去哪儿网的 StarRocks 实践

作者:任志民,2023 年加入去哪儿旅行数据平台团队,主要负责数据平台 OLAP 引擎基础建设和相关数据产品研发工作。

导读:

在去哪儿网新一代数据平台架构中,StarRocks 作为统一 OLAP 引擎,替代了原有的 Trino、Presto、Druid、Impala、Kudu、Iceberg、ClickHouse 等多个引擎。如今,去哪儿网 StarRocks 集群覆盖全司业务线,支撑 7 大数据产品,集群规模达数十台,日 PV 突破百万,外表 P95 秒级、内表 P95 毫秒级,性能表现稳定高效。

本文将带你走进这一实践过程,解读架构升级背后的思路与成效。

业务背景

去哪儿网的数据平台为了满足各业务线的看数、取数、用数需求,沉淀出多种数据产品,包括 QBI 看板、质检系统、即席 /SQL 分析、趣分析、离线圈人、实时营销等。这些数据产品依赖于多种计算引擎和数据存储来满足不同的业务场景需求。例如:

  • Trino、Presto:基于 Hive 数据分析,应用于看板、即席分析场景

  • Impala、kudu:业务系统埋点数据实时写入,Hive 离线、kudu 实时数据联邦分析

  • Druid:kafka 数据实时写入,应用于看板

  • ClickHouse:Hive 数据离线导入,应用于用户分析、离线圈人场景

然而,多引擎架构带来了诸多挑战,如引擎之间的兼容性问题、性能瓶颈、运维成本高等。因此,去哪儿网决定对现有的计算架构进行升级,引入一种更为高效、统一的数据处理方案。

选型与评估

在选型过程中,对 StarRocks、ClickHouse、Trino、Kylin 等多个引擎进行了深入调研和评估。从场景覆盖度、查询性能、运维难度等多个角度综合考虑,StarRocks 表现优异,最终成为去哪儿网数据平台升级的首选方案。

场景覆盖度

写入能力对比

(1)StarRocks

  •  支持 Flink/Kafka 实时摄入+ 批量导入( broker load )

  •  独创的 Primary Key 模型支持 UPSERT(类似 Kudu)

(2)ClickHouse

  •  更适合批量导入(如 INSERT INTO SELECT)

  •  实时写入依赖 Kafka 引擎表+物化视图,链路复杂

(3)Trino

  •  本质是查询层,写入依赖底层存储(如 HDFS/S3)

  •  无法自主优化数据布局

(4)Kylin

  •  必须通过 Cube 构建作业(通常小时/天级延迟)

  •  无法处理实时更新

运维成本的关键考量

另外当前看板平台引擎以 Trino 为主,StarRocks 支持了 Trino 方言,兼容率达到了 90%,经过二次开发后兼容率达到了 99%,这样可以极大的提高迁移效率,降低了迁移成本。

StarRocks 简介

StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 分布式数据库。可以满足企业级用户的多种分析需求,包括 OLAP (Online Analytical Processing) 多维分析、定制报表、实时数据分析和 Ad-hoc 数据分析等。

StarRocks 的架构简单,分为前端和后端。前端节点称为 FE。后端节点有两种类型,BE 和 CN (计算节点)。当使用本地存储数据时,需要部署 BE;当数据存储在对象存储或 HDFS 时,需要部署 CN。StarRocks 不依赖任何外部组件,简化了部署和维护。节点可以水平扩展而不影响服务正常运行。此外,StarRocks 具有元数据和服务数据副本机制,提高了数据可靠性,有效防止单点故障 (SPOF)。

StarRocks 特性-MPP 架构

StarRocks 采用的是 MPP 分布式执行框架,一条查询请求会被拆分成多个物理计算单元,在多机并行执行。每个执行节点拥有独享的资源(CPU、内存),能够使得单个查询请求可以充分利用所有执行节点的资源。

以下图为例,查询 SQL 在经过词法、语法解析、生成逻辑计划、逻辑计划重写、CBO 优化器后,最终生成了物理执行计划。每个物理计划是由一系列的操作算子组成,例如 Frgment2 包含了 Scan、Local Aggregate、DataSink。每个物理执行计划又会按照实际处理的数据量大小,生成多个实例执行,每个实例是最小的执行单元,会调度在 BE 节点执行。不同逻辑执行单元可以由不同数目的物理执行单元来具体执行,以提高资源使用率,提升查询速度

其他特性

另外 StarRocks 具备其他特性,例如全新的 CBO 优化器,在复杂的多表关联场景下,优秀的优化器可以选择一个更优的执行计划,这样才可以保障极致的查询性能。智能物化视图,可以用于数仓分仓、查询加速,StarRocks 的物化视图支持基表更新、物化视图同步更新的策略。

应用实践

集群现状

目前去哪儿网的 StarRocks 集群已经覆盖了全司业务线,包括 7 个数据产品。集群规模达到数百级,最大单集群规模达到几十台。日 PV 近百万+,外表 P95 耗时秒级,内表 P95 耗时毫秒级。这些性能指标充分证明了 StarRocks 在去哪儿网数据平台中的高效性和稳定性。

新数据平台架构

在新数据平台架构中,StarRocks 作为统一的 OLAP 计算引擎,替代了原有的 Trino、Presto、Druid、Impala、kudu、Iceberg、ClickHouse 等多个引擎。这一变革极大地简化了数据平台的运维工作,降低了运维成本。同时 StarRocks 的高性能也提升了数据平台的整体查询性能。

新的数据平台演进主要分为基础建设、业务产品落地两个阶段。

基础建设

为了保障 StarRocks 集群的稳定性和高效性,去哪儿网在基础建设方面做了大量工作。包括建设可观测、高可用的 StarRocks 集群,并基于 StarRocks 建设统一的查询服务。通过采集服务、监控告警、节点自愈等技术手段,实现了对 StarRocks 集群的全面监控和管理。此外,还通过分区裁剪、物化缓存等技术手段对查询性能进行了优化。

可观测性-指标监控

为了全面掌控 StarRocks 集群的运行状态,我们决定将 StarRocks 的指标信息与公司内部的监控系统实现无缝对接,以此为基础构建一套完善的监控与管理体系。具体而言,我们将主要开展以下工作:

(1)优化 StarRocks 的指标信息体系:我们对 StarRocks 进行改造,以丰富和完善其现有的指标信息。在此过程中,我们将特别关注那些对集群性能有重要影响的关键指标,如访问 HDFS 和 MetaStore 的相关耗时等,并考虑将它们作为自定义指标纳入监控体系。这将有助于我们更准确地了解集群的实时运行状况,及时发现潜在的问题。

(2)采集 StarRocks 的 metrics 数据并集成到监控系统中:部署专门的采集服务,用于实时抓取 StarRocks 的 metrics 数据。这些数据将被实时传输到 watcher (监控系统的核心组件)中,由后者进行进一步的处理和分析。通过 watcher,我们可以实现对 StarRocks 集群的实时监控,包括性能指标、健康状态等关键信息的展示和告警。

(3)部署常驻服务以实现自动化处理:为了提升集群的运维效率,在集群节点上部署常驻服务。这些服务将负责接收 watcher 发出的回调信息,并根据预设的策略进行自动化处理。例如,对于某些可以通过重启恢复正常的节点故障,常驻服务可以实现节点的自动重启,从而大大缩短故障恢复的时间。

通过上述措施的实施,我们将能够建立起一套高效、可靠的 StarRocks 集群监控与管理体系,为集群的稳定运行提供有力保障。

高可用-集群灾备

为了确保对外提供稳定且高效的服务,集群灾备方案的实施是不可或缺的。在集群的设计过程中,我们深入考虑了业务的独特性质,包括使用高峰时段、严格的响应时间要求以及容错性需求。例如,看板服务的访问主要集中在每天的 10 点至 20 点,且对响应时间有着极高的要求;而邮件服务则主要在 0 点至 24 点进行访问,对响应时间的要求相对较低,但对容错性有着较高的标准。为了应对这些不同的业务需求,我们做了以下工作。

(1)搭建了两个独立的集群( StarRocks1 和 StarRocks2)。看板、邮件服务均接入统一的查询服务,该服务根据业务类型智能地路由到不同的集群(看板服务路由到 StarRocks1,邮件服务路由到 StarRocks2),从而实现了物理层面的隔离。

(2)针对看板服务在特定时间段内资源利用率较低的问题,我们充分利用了 StarRocks 的 CN 节点快速上下线的特性。在非高峰时段,即非 10 点至 20 点的时间段内,我们将 StarRocks1 集群中的部分 CN 节点下线,并将这些资源灵活地扩容到 StarRocks2 集群中,以应对质检和邮件服务在夜间高峰时段的资源需求。

(3)此外,为了避免邮件服务和质检服务在 StarRocks2 集群中可能产生的资源竞争问题,我们运用了 StarRocks 的资源组功能,实现了业务之间的隔离。这不仅确保了每个业务都能获得所需的资源,还提高了整个系统的稳定性和可靠性。

通过这一系列精心设计的策略,我们成功地构建了一个既高效又灵活的集群系统,能够充分满足各种业务的复杂需求。

查询性能-性能优化

StarRocks 作为一个功能强大的开源产品,虽然在多数情况下能够提供出色的性能和功能,但在某些特定的应用场景中,仍然存在一定的优化空间。为了更好地满足我们业务的需求,我们结合实际使用场景,对 StarRocks 进行了一系列有针对性的优化。

如下图,两个 SQL 语义相同,查询 Hive 表的昨天分区的一条数据,但是执行情况却相差很大,包括扫描的分区数、读取的数据量、以及最终的查询耗时。

于是我们通过分析进行了特定优化。

(1)对 SQL 的解析流程进行了详尽的分析,从 SQL 文本输入到最终生成物理执行计划,整个流程涵盖了词法分析、语法分析、逻辑计划生成、逻辑计划重写、基于代价的优化(CBO)以及物理计划的最终确定。在深入剖析这一流程后,我们发现生成逻辑计划和逻辑计划改写这两个环节对 SQL 执行计划的影响尤为显著。

(2)在生成逻辑计划的过程中,系统遵循一系列预定义的规则来进一步简化关系表达式。

(3)其中 FoldConstantsRule 规则扮演着至关重要的角色,它专注于常量折叠,通过不断迭代操作符,对函数类型的操作(如 callOperator )利用预置的函数进行反射调用,从而提前计算出常量值,实现表达式的简化。

(4)以 date_format(days_add(now(), -1), %Y-%m-%d) 为例,具体的递归结果如下。

(5)随后在逻辑计划改写环节,系统进一步应用分区裁剪等优化规则,以减少不必要的数据扫描和处理,提高查询效率。

(6)经过深入的分析和讨论,确定 jodatime_format 函数没有折叠是因为缺少相应的解析函数,因此在生成逻辑计划的阶段新增 jodatime_format 方法。这个方法将利用 Joda-Time 库(或类似的日期时间处理库)来更高效地处理日期和时间的格式化操作,从而进一步提升 SQL 解析和执行的效率。通过这一优化措施,能够为用户提供更加快速和准确的查询服务。

应用落地

StarRocks 凭借其强大的查询分析能力,完美支持了对 Hive、Pamion 等数据湖存储平台的深度整合与高效查询。这一特性使得 StarRocks 能够轻松驾驭看板展示、即席查询、质量检测等多种复杂分析场景,为用户提供了前所未有的数据洞察能力。在存算分析方面,StarRocks 更是展现出了其独特的优势。它支持实时导入和离线导入两种灵活的导入方式,为用户提供了极大的便利,已经成功应用于趣分析、基础平台、CDP 等多个产品,同时在机票价格分析、漏斗分析、机票售后服务等场景中,也展现出了其强大的分析能力和应用价值。

最佳实践-QBI 看板

QBI 看板简介

QBI 看板是去哪儿网数据平台中的重要应用之一。QBI 看板实现了自助化看板配置,承载了全司的报表业务,月 PV 是百万级别、月 UV 是千级别。通过视图、图表、看板分层,实现了数据与可视化的解耦以及数据复用。这些特性极大地提升了 QBI 看板的使用效率和用户体验。

QBI 看板应用效果

自 3 月份起,QBI 看板项目踏上了逐步迁移的征程,并在 4 月份圆满完成了整个迁移过程,随着迁移工作的持续推进,QBI 看板的查询性能越来越好。具体来看,2 月份时,查询 P95 还徘徊在 5.7 秒的较高水平;而到了 4 月份,随着迁移工作的逐步完成,查询 P95 已经显著下降至 3.3 秒;5 月份,这一指标进一步优化至 2.4 秒,实现了近乎翻倍的性能提升。

挑战与方案

(1)结果一致性保障

引擎切换需要保障结果一致性以及迁移过程对用户透明。因此我们建立了完善的校验体系、保障了平滑的迁移。主要工作包括:

a. 自主研发智能化比对工具链

  • 实现全量 SQL 采集与自动化回放验证

  • 支持多维度结果比对(数值精度容错、NULL 值等价判断、排序规则标准化)

  • 智能归因分析引擎,自动分类不一致场景

b. 动态路由保障体系

  • 基于一致性校验结果的智能路由决策

  • 双引擎无缝切换机制

  • 故障自动降级策略,确保业务连续性

  • 全流程用户无感知迁移方案

(2)语法兼容性挑战

针对 StarRocks 与 Trino 语法体系的兼容性挑战(基准兼容率 90% ),如果需要手动兼容,工作量巨大且容易出错。因此我们改造 StarRocks 来实现最后 10% 的兼容,主要涉及复杂函数语义、特殊语法结构和执行逻辑等核心难点,主要工作包括:

a. DDL 语法增强

  • 支持 CTAS(CREATE TABLE AS SELECT)语法

  • 支持 INSERT INTO 语法兼容

b. 函数库深度对齐

  • 实现 dow/week 等日期函数语义统一

  • 开发 date_parse/parse_datetime 等时间解析函数

  • 支持 from_iso8601_timestamp 等 ISO 格式处理

c. 特殊值处理

  • 统一 NULL 值语义处理标准

(3)迁移流程图

最佳实践-趣分析迁移

趣分析是去哪儿网提供的一款灵活自助的多维分析工具,实现了对后端埋点数据和离线数仓表的接入分析。同时通过 SQL 拆分、碎片缓存、结果拼接等技术手段,提升了查询性能和分析效率。

趣分析架构

(1)离线数据无需写入,数据存在 HDFS 上,Trino 连 Hive 可直接读表查询。

(2)实时数据来源包括实时数仓、规范化埋点实时数据等,通过 Kafka 由 Flink 实时写入 Kudu 表作为热数据,同时写一份到 HDFS 做为冷数据和备份

(3)在 Hive 表和 Kudu 表基础上建 Impala 视图,将离线和实时数据表 Union 在一起,以供查询。

迁移过程

为了确保趣分析平台上近 200 个项目能够顺利且平稳地完成迁移,我们主要采取以下策略:

(1)在数据写入层采用双写,同步写 StarRocks、Kudu,同时会做数据一致性校验,保证数据的完整性、准确性。

(2)在数据查询层,增加路由信息,以根据实际需求自动或手动调整查询引擎。

(3)在切换查询引擎前,进行了详尽的性能测试,以确保 StarRocks 能够满足业务需求,同时做了语法校验,保证查询结果的一致性。

挑战与方案:如何保障数据低延迟?

为了保证实施数据的低延迟,对 Flink 任务进行了分析,主要分为 3 个环节,kafka-source 负责读取数据,data-transform 负责做数据转换,sr-sink 负责把数据写入到 StarRocks。

其中 sr-sink 是采用的 StarRocks 提供的 connector,基本原理是在内存中积攒小批数据,再通过 Stream Load 一次性导入 StarRocks。

为了保障数据低延迟同时又不增加导入 StarRocks 频率的有效方法是把相同项目的数据,发送到同一组的 sr-sink 算子, 使内部尽快达到行数或者字节数的条件。同时为了保证数据延迟的可观测性,采集了算子的相关指标,进行监控。

StarRocks 改造以及社区贡献

在 StarRocks 的落地过程中,我们对 StarRocks 做了改造,包括提高 Trino 语法兼容率( 90% -> 99% );改造优化器支持语法裁剪;增加自定义参数、自定义指标,提高集群的自我保护机制,并向社区提交多个 PR。

具体功能改造,举例如下:

未来规划

(1)在当前数据驱动决策的时代背景下,企业对于数据仓库的扩展能力、灵活性、可靠性及稳定性提出了更为严苛的要求。为此,我们未来会把 StarRocks 部署于公司自建的 Kubernetes 集群之上,旨在借助 Kubernetes 的强大基础设施管理能力,为 StarRocks 提供一个更加健壮、灵活且易于扩展的运行环境。

(2)在实时数仓场景中,利用物化视图的多层构建和同步更新机制,可以显著提升查询性能,为了实践该特性,为企业提供了更为实时、准确的数据支持,助力业务决策的高效进行。

用户头像

StarRocks

关注

新一代极速全场景MPP数据库 2020-08-08 加入

StarRocks一直致力于打造世界顶级的新一代极速全场景MPP数据库,帮助企业建立“极速统一”的数据分析新范式,助力企业数字化经营。当前已帮助腾讯、携程、顺丰、Airbnb等超过110家大型用户构建全新的数据分析能力。

评论

发布
暂无评论
从多引擎到统一平台:去哪儿网的 StarRocks 实践_数据库_StarRocks_InfoQ写作社区