降本增效,StarRocks 在同程旅行的实践

作者:周涛 同程旅行数据中心大数据研发工程师

同程旅行是中国在线旅游行业的创新者和市场领导者。作为一家一站式平台,同程旅行致力于满足用户旅游需求,秉持 "让旅行更简单、更快乐" 的使命,主要通过包括微信小程序、APP、轻应用及其他渠道在内的线上平台,为用户提供几乎涵盖旅游所有方面的全面创新产品和服务选择,涵盖交通、住宿、景点门票预订及各种配套增值旅游产品及服务,旨在满足用户在整个旅途中不断变化的旅游需要。目前,同程旅行的月活跃用户已达到2亿多人。

为了提升数据分析查询性能,同时降低人力和硬件成本,公司的出行、住宿和公共等多个业务线都已接入并使用了 StarRocks 技术。

同程旅行有多年的 OLAP 使用经验,随着业务增长和变化,促使我们需要不断探索更合适的组件来满足需求。在这方面,StarRocks 作为一款优秀的数据库,在同程旅行的生产环境中得到了广泛应用,涵盖实时、离线和 Customer Data Platform(顾客数据平台,以下简称 CDP)等多个应用场景。

本文将从同程旅行 OLAP 平台演进、业务痛点和 StarRocks 是如何解决当前业务痛点这几个部分详细介绍 StarRocks 在同程旅行的生产落地实践。

同程旅行的 OLAP 平台演进

随着公司的业务变化和用户量的增加,数据量也在不断增加。数据分析场景变得越来越多样化,对实时分析的时效性要求也更高了。为了更好地满足这些需求,同程旅行的 OLAP 平台也在不断演进,整体的发展过程大致分为三个阶段:

第一阶段:以 Druid+Kylin 为基础构建的数据分析体系,满足了当时对于离线数据分析加速的需求,但在使用过程中也逐渐暴露出 SQL 分析、联邦查询、BI 兼容等方面能力不足与 CUBE 运维成本较高等一系列问题;

第二阶段(引入 StarRocks 前):在这一阶段,我们采用 ClickHouse+Greenplum 支撑实时、离线业务的分析处理,在一定程度上解决了上一阶段存在的问题;

第三阶段:由 StarRocks 作为统一的 OLAP 组件,减少多组件的维护压力。同时注重在企业内部与相关数据平台的集成,提升用户使用体验,降低用户组件使用和切换成本。

在说明我们为什么选择 StarRocks 作为我们新一代的 OLAP 组件前,我们需要先了解原有平台架构的不足:

  • ClickHouse:主要用于用户行为轨迹和订单实时数据存储和分析

  • Greenplum:主要用于公司内部的灵动分析看板,做分析报表使用

如上图所示,在原始架构中,对于实时场景,业务数据通过 Kafka 传入 Flink,在 Flink 中进行清洗、打宽表等逻辑处理,之后将结果数据导入 ClickHouse 中;对于离线场景,数据统一存储在 HDFS 中,通过 Hive+Spark 进行清洗处理后,将结果数据传入 Greenplum 中。

实时场景

主要涉及业务订单数据,数据可以通过前端用户埋点到 Kafka,或者订阅业务订单数据库 Binlog,实时写入到 MQ,然后使用 Flink SQL,关联维度表,将数据打宽,最后写入到 ClickHouse 中。

离线场景

将实时的用户埋点数据或订单库离线同步数据写入到 HDFS 中,然后经过离线调度做 ETL 数据清洗,再搬运到 ClickHouse 或 Greenplum 中。然而,在使用过程中,我们发现实时和离线分离架构存在一些问题:

  • 分离架构导致开发使用极度不方便,且浪费计算存储资源;

  • 组件技术栈不统一,导致业务人员需要熟悉多种语法;

  • 多组件造成了极高的运维成本。

为解决在使用 ClickHouse、Greenplum 过程中遇到的性能、运维和成本等各方面的问题,我们进行了一些调研,开始对比和了解一些新的 OLAP 组件。接下来,我们将进一步说明使用 ClickHouse 和 Greenplum 架构所带来的业务痛点。通过这些问题的阐述,我们可以更好地理解为何需要寻找新的解决方案。

01 ClickHouse + Greenplum 架构带来的业务痛点

目前,同程 OLAP 组件被广泛使用,并已集成到实时开发平台、离线开发平台、灵动分析、数据地图和快速取数等多个平台系统中。在业务方面,主要涉及以下三类场景:

1.1 实时数据分析

在使用实时数据分析的业务场景,我们主要针对用户行为埋点、用户实时订单等数据进行冷热存储。实时热数据需要存储 30 天至一年不等的时间数据,用于高性能要求的实时统计分析;历史离线数据存储在 HDFS。在查询实时数据时,如果涉及多表关联或者关联历史数据时,当前组件性能无法满足,需要提前离线清洗,导致数据时效性较低。

1.2 灵动数据报表

在使用灵动数据报表的业务场景,用户在离线数仓中清洗出 DWD 或 ADS 层表,通过离线开发平台导入到 Greenplum 中,然后在灵动分析中配置数据集,以拖拉拽的形式生成看板,提供给分析决策使用。然而,在高峰时期,我们经常遇到查询速度慢甚至查询超时等问题,这给业务带来了困扰。

1.3 用户画像 & CDP

在用户画像和 CDP 的场景中,我们会根据用户基本信息、消费数据和行为数据等生成对应标签数据,以创建用户画像,并进行人群圈选和漏斗分析等。

之前我们使用了 ClickHouse 作为存储分析引擎,但随着 CDP 需求的变化,业务场景更加复杂,涉及到多表关联场景以及宽表和 BitMap 关联场景,用户对实时分析的查询性能提出了更高的要求。经过测试,ClickHouse 已无法很好的满足。

针对当前 ClickHouse+Greenplum 体系存在的各种问题,我们开始了基于 StarRocks 构建分析体系 3.0 阶段的升级演变。

StarRocks 在同程旅行的应用与实践

01 选择 StarRocks 的原因

为了解决上述问题,我们追求在新的 OLAP 组件中实现简单、高速和统一的特点(包括支持联邦分析)。为此,我们进行了 StarRocks、ClickHouse、Greenplum 和 Presto 等 OLAP 组件的比较。我们比较了数据摄入速度、查询性能、内存占用率、维护成本和易用性等指标。通过这些比较,我们希望找到最适合我们业务需求的 OLAP 组件。

下图展示了这些组件的具体比较结果:

  • 查询性能优异:

StarRocks 是一款分布式列式存储分析数据库,它具有非常高的查询性能,尤其适用于实时数据分析和查询场景。与ClickHouse 相比,StarRocks 在多表联合查询方面表现更出色,尤其在 Primary Key 模型方面,其在实时动态更新和查询性能方面都表现优异。

  • 维护难度低:

StarRocks 由 FE 和 BE 两类组件组成,不依赖于第三方组件,可以开箱即用。而且,StarRocks 具有良好的可扩展性,集群扩缩容方便,可以根据需求动态扩展集群规模,灵活提高系统性能。此外,数据可以在节点之间自动均衡,无需人为干预。

  • 方便易用:

StarRocks 采用标准 SQL 协议且兼容 MySQL 协议,可以轻松集成到现有系统中。此外,在实时写入方面,官方也提供了 flink-connector-starrocks,写入可实现 exactly-once。另外,StarRocks 还具备方便的联邦查询功能,避免了数据搬运带来的资源消耗,从而提高了系统性能。

经过多方比较,我们最终选择了 StarRocks 作为统一的 OLAP 组件,并预计在未来逐步完成统一 OLAP 层的工作 。

02 StarRocks 的引入

同程旅行主要在以下三个场景中使用 StarRocks:实时数据分析、离线报表和 CDP 系统。

随着 StarRocks 的接入,新的数据应用流程架构如下:

2.1 使用 StarRocks 解决当前痛点

1)实时数据分析的整体时效性提升

在实时应用场景中,业务数据进入到 Kafka 或者 TurboMQ,然后通过 Flink 任务或 Flink SQL 任务进行业务计算转换,最终通过 flink-starrocks-connector 实时写入到 StarRocks,进行实时指标统计或者实时数据分析。实时链路中不再涉及关联打宽,缩短了链路,提升了整体的时效性。同时,StarRocks 采用星型模型组织数据,减少数据冗余存储。以下是我们实际中的一个 Flink SQL 案例:

通过将 StarRocks 集成到实时开发平台,用户可以轻松快速地将实时数据导入 StarRocks 并进行使用。

2)离线报表查询性能大幅提升

我们已经成功将 StarRocks 数据源集成到灵动分析系统中。现在可以将 StarRocks 中的表创建为灵动中的数据集,进行分析看板配置,并实时写入数据。此外,无需重复清洗,还可以直接进行报表配置。由于 StarRocks 支持标准 SQL 并兼容 MySQL 协议,因此系统集成 StarRocks 数据源非常便捷。切换引擎后,与 Presto 和 Greenplum 相比,报表查询性能大幅提升(在某些实际场景中,相较于 Greenplum,查询性能提升近一倍)。

下图是对 14 个 SQL 耗时进行统计对比:

3)CDP 系统查询效率提高

CDP 是一种数据管理平台,它可以集成多方数据,帮助企业更好地了解用户行为、喜好和需求,从而制定更加精准的运营策略。CDP 系统上线后,可以服务于公司各个事业部,对用户进行分层或保存人群进行运营,从而极大地提升了运营效率并降低了运营成本。

CDP 系统的具体工作流程如下:

1)数据导入:

当前先知系统有 1000 多个历史人群需要作为人群圈选的条件,而这 1000 多个人群数据的导入耗时较高,存在性能瓶颈。经过调研,使用以下方法可以很好的解决这个问题:

  • 将 String 类型的用户 ID 转换成 Long 类型的 oneId;

  • 然后通过 Spark 任务将 oneId 转换成 Java 代码的 BitmapValue 对象;

  • 在所有的相同 key 的 BitMap 合并后,转换成 Base64string,这样将相同的 key 的数据合并成一条数据,导入到 StarRocks 中。

经过验证,采用以上方法可以大大提高数据导入性能,将 1.5 亿条数据的 10 个任务同时导入的耗时从 10 分钟以上下降到 10s 以内,并且可以减少导明细数据的集群资源消耗。

如上图所示,根据数据监控显示,红框内时间段是明细导入的网络传输量,而其他时间段为 BitMap 合并 Base64 后的传输量。这两者之间的传输量相差约 10 倍。针对这个问题,我们正在努力优化导入代码,并将其整理成 Demo,以便提交给社区供大家参考使用。

2)人群圈选:

接下来我们需要通过 BitMap 的函数操作,对用户选择的条件进行人群圈选。通过将条件组合成 StarRocks 对应的 BitMap 的 and、or、union 等函数,简单的查询可以在3秒以内得出结果。即使是复杂的(例如涉及宽表与多个 BitMap 表的关联查询)且数据量大的查询,也都可以在 10 秒以内得到结果。

3)人群保存:

这一步将圈选的结果人群 BitMap 转换成一个明细表,然后再通过 export 语句方式,将表的数据导入 HDFS 进行输出应用。

下述是实际应用中的人群分层迁移桑基图的 SQL 示例:

对应结果图:

该 SQL 中包含了 BitMap 与普通宽表的关联操作,以及三个亿级别大表的关联操作,整体可以在5至10秒内计算完成。

未来规划

  • 更多业务场景推广落地

在公司内,我们将继续扩大和推广 StarRocks 的使用,以替换其他业务中遗留的 ClickHouse 和 Greenplum 组件,减少多组件的维护压力。同时注重在企业内部与相关数据平台的集成,提升用户使用体验,降低用户组件使用和切换成本。

  • 上云

将 StarRocks 部署在公司的 Kubernetes 私有云中,以提高集群的扩展性和灵活性,并且可以依赖于 Kubernetes 的容错机制,自动监测和替换故障节点,提升集群可靠性和稳定性。目前,我们已经完成了开发,进行到了测试验证阶段。后续我们也将持续跟进测试 StarRocks 提供的云原生能力。

  • 存算分离特性的使用

在离线报表应用中,我们计划测试使用即将推出的 3.x 版本。根据其存算分离的能力,在不降低查询性能的条件下,可以大大减少离线数据同步的工作量。

  • 与社区共赢

我们将持续保持与社区的沟通,积极地将使用体验和性能测试反馈社区。通过与社区的合作,实现双赢的目标。

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

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

相关文章

CRC16浅析

CRC即循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码。奇偶校验虽然简单,但是漏检率太高,而CRC则要低的多,所以大多数都是使用CRC来校验。CRC也称为多项式码。 任何一个…

【Linux】关于Linux中的权限

文章目录 前言Linux权限文件访问者的分类(人)文件类型和访问权限(事物属性)文件类型基本权限 目录的权限粘滞位权限的总结 前言 前面我们已经知道。Linux下有两种用户:超级用户(root)、普通用户…

Linux ALSA音频驱动二:ALSA驱动注册

在系统/dev/snd下可查看注册成功的声卡信息,如下所示。 ubuntuubuntu:~$ ls -l /dev/snd total 0 drwxr-xr-x 2 root root 60 4月 7 09:22 by-path crw-rw---- 1 root audio 116, 2 4月 7 09:22 controlC0 // 通路控制 crw-rw---- 1 root audio 116,…

CRC编码

循环冗余校验(Cyclic Redundancy Check, CRC) 原理:先在要发送的帧后面附加一个二进制数,(用来校验的校验码);生成一个新帧发送给接收端 附加的二进制数要求:使所生成的新帧能与发送端和接收端共同选定的某个特定数整除 运算:这里…

CLR简介

CLR简介 什么是CLR CLR英文全称Common Language Runtime,即公共语言运行时。 乍一看到这个概念确实不明白,什么是语言运行时? 简单来说,就是一个程序运行所需要的环境,包括各种资源、各种操作等等。 通常来说&…

CRF概述

主要参考 1.李航统计学习方法 2.一个声音好听的小姐姐的讲解视频https://www.bilibili.com/video/av752902225/ 3. 白板推导系列视频 https://www.bilibili.com/video/BV19t411R7QU?p1 一、背景介绍 1、背景算法介绍 HMM,隐马尔可夫模型,是生成模…

CRC-16

文章目录 A.1 CRC16 算法A.1.1 CRC16 算法参数设置A.1.2 LengthA.1.3 CounterA.1.4 Data IDA.1.5 CRCA.1.6 CRC16 算法示例A.1.7 CRC16 算法推荐(查表法)A.1.8 CRC16 实例(查表法) A.1 CRC16 算法 A.1.1 CRC16 算法参数设置 CRC16 算法中要求了 Counter、Data ID、CRC 等参数…

CRF

随机场:由若干个子集组成的一个整体,而每个子集都按照某个分布随机赋予一个值,这个场就叫随机场。 马尔科夫随机场:随机场中某一位置的赋值仅与其相邻位置的赋值有关,和与其不相邻位置的赋值无关。 CRF是马尔科夫随机…

crc(crc是什么职业)

CRC的特点是什么? 在诸多检错手段中,CRC是最著名的一种,其特点是:检错能力极强,开销小,易于用编码器及检测电路实现 CRC的特点有哪些呢? CRC的全称是循环冗余校验,其特点是:检错能力极强&#x…

CRC16

CRC选择 当数据帧长度在8bits-128bits范围内时,推荐CRC-8(CRC-8能够减少额外比特的开销,且有更好的性能表现) 当数据帧长度在128bits-2048bits范围内时,推荐CRC-12,CRC-16,CRC-CCITT(CRC-12额外比特的开销更小&#x…

linux中ls -l出的crw brw lrw代表什么?

原文链接:https://www.cnblogs.com/victorywr/p/15725170.html 每次使用ls -al 查看文件信息,都只看rw-rw-rw- (权限为666),忽略最前面的c/b/l,今天了解一下: linux中c表示字符设备文件&#xf…

一款红队批量脆弱点搜集工具

功能 指纹识别:调用“三米前有香蕉皮“前辈工具,他的工具比finger好用 寻找资产中404,403,以及网页中存在的其他薄弱点,以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 使用 第一次使用脚本请运行p…

【机器学习】正则化详解和过拟合的解决

https://blog.csdn.net/weixin_45434953/article/details/130970273 上一篇文章的例子中,如果使用一个四次多项式去拟合房价函数,会导致过拟合问题 而正则化是解决过拟合的一个方法。右图过拟合是因为其三次方项和四次方项的影响,我们再回顾…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 GhostNet | 从廉价操作中获取更多特征

论文地址:https://arxiv.org/abs/1911.11907 代码地址:https://github.com/huawei-noah/ghostnet 由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络(CNN)很困难。特征图中的冗余是那些成功的神经网络的重要特征,但在神经架构设计中很少研究。本文提出了一种新的G…

【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂,尽量将它分解成若干个简单的部分。这样做的好处是,不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单,需要测试…

妙啊!真实模拟面试 — 面试官究竟会怎么问 数据库索引呢?

什么是索引? 面试官:我看你项目中有做过 SQL 优化,那我们今天就来聊聊索引吧。 (索引能问些啥,无非是索引的概念、索引的使用规则、索引的分类、索引的原理。嘻嘻~我早有准备) 我:数据库中的…

一道面试题:餐馆模拟

前阵子遇到一个面试题,当时没有做出来,后来断断续续的用了一周的时间做了出来,但感觉也不完全对,先来看看题目,稍后再讨论。 问题 模拟一个餐馆,三个厨师,二个服务员,厨师单独做菜…

AI模拟面试官项目实战 | 项目概述

🎯摘要 看完本文,你可能有如下收获: 了解该项目的预览效果、了解技术栈、系统设计以及教程食用指南 ⭐️⭐️该收获仅供参考,真实收获以实物为准😇😇 ☀️系统概述 【AI模拟面试官】是一个模拟线上面试的…

软件测试面试题【2021模拟面试整理版(含答案)】

点击上方蓝色“程序员一凡”,选择“设为星标” 主页点击“领取资料”获取整理好的学习资源 一、问题预测 \1. 让简单介绍下自己(每次面试开场) \2. 让说下自己会的内容 \3. 看了哪些书籍(有问到) \4. 了解过哪些技…

Java程序员模拟面试,解析面试困扰和建议

模拟面试,相信大多数程序员都没有经历过,甚至还有从来没听说针对面试的辅导或者模拟面试啥的,所有的面试经验都来源于网上写的一些文章,然后再在面试的时候通过各种碰壁去揣测面试官在想啥。 前言 前几天组织了一次模拟面试直播&…