vivo 基于 StarRocks 构建实时大数据分析平台,为业务搭建数据桥梁

news2024/10/6 0:28:20

在大数据时代,数据分析和处理能力对于企业的决策和发展至关重要。

vivo 作为一家全球移动互联网智能终端公司,需要基于移动终端的制造、物流、销售等各个方面的数据进行分析以满足业务决策。

而随着公司数字化服务的演进,业务诉求和技术架构有了新的调整,已有的基于 Trino 的架构面临着数据时效、查询性能、并发能力、复杂运维等方面的瓶颈,为此 vivo 大数据团队进行了一系列技术架构的探索和实践。

vivo 业务快速发展带来更多数据挑战

在数字化演进的过程中,vivo 面临着业务诉求和技术架构方面的新挑战,主要包括时效性要求提升、访问量大、计算场景复杂和运维难等问题。

vivo 原有数据平台是基于 Trino+Hive 的架构来实现,一方面通过 Trino 来抽取业务库里的数据(MySQL、Oracle、SQLserver 等),另一方面将抽取的数据写入到 Hive 中,根据业务侧需求进行数仓的加工处理。

时效性挑战,业务分析决策需加速

随着数字化进程推进,制造、营销、销售等业务对实时分析的应用越来越多,基于 Trino+Hive 架构的小时级数据时效性已无法满足业务需求,业务侧需要数仓架构能够实时抽取业务侧数据并加工,从而实现上层报表的实时呈现,以便更好地支持相关的决策分析。

alt

访问量挑战,性能与稳定性亟待提高,支撑业务稳定运行

随着业务规模向全球发展,vivo 的分销代理系统覆盖用户量级飞速增长,营销、计价、订单、库存等业务系统均需要实时数据来保证销售业务精准稳定运营,这使得原有数仓架构的访问量持续增长,同时,随着各种大数据分析相关新业务的上线, Trino 负载越来越高,逐渐无法满足访问量持续增长带来的查询压力。

alt

计算场景挑战,难以满足业务复杂查询需求

在业务侧的实际分析需求中,经常会有十几张表 Join 的场景,业界存在 Flink 和 Trino 两种方案。

第一种方案是在写入数仓前利用 Flink 等提前做好相关表的 Join 计算,将其加工成大宽表写入数仓中,但 Join 后的数据存储占用代价高。

第二种方案则是直接将各个维表存储在数仓中,分析查询的时候再进行 Join 计算,但 Trino 在处理多表 Join 时性能一般,难以满足业务侧实际的查询需求。

这两种方案都没有办法很好的平衡表 Join 的性能和数据存储占用的问题。

运维挑战,用户查询体验需优化

在实际运维使用 Trino 的过程中,vivo IT 部门发现 Trino 不支持高可用和多副本的问题,在业务高峰期,Trino 负载较高,会影响到数据平台的稳定性和用户查询体验,降低业务决策效率,甚至有可能收到用户对数据平台的投诉。

StarRocks 破局:OLAP 选型与实践

面对上述挑战,vivo 开始寻找一款新的 OLAP 引擎以提升数据平台的性能。

vivo IT 部门调研了几款当前比较流行的 OLAP 引擎,包括 Trino、ClickHouse、StarRocks 和 Doris,并从查询延迟、SQL 类型、并发性能、Join 性能和运维成本等多个维度进行了对比:

  • Trino 当前的查询性能和并发能力是无法满足需求的,且 Join 查询的能力也相对较弱。
  • ClickHouse 虽然查询延迟表现很优秀,但由于其支持的 SQL 类型为非标准 SQL,可能会涉及到较多的业务改造,同时其并发能力和 Join 能力也无法满足需求,且运维起来比较复杂。
  • StarRocks 在调研的各个维度上表现都非常好,能够很好地解决当前数仓架构所面临的问题。
  • Doris 在选型时还不支持向量化引擎,其查询表现和 StarRocks 相比还存在一定的差距。
alt

经过深入调研与测试,vivo IT 部门总结了 StarRocks 的一些优势: 查询性能优秀:查询延迟在亚秒级别,Join 性能优秀,能够满足 vivo 对实时大数据分析的需求

使用方便:支持数据导入、导出等功能

数据模型丰富:支持明细模型、聚合模型、更新模型、主键模型,其中主键模型能够很好地满足 vivo 大数据的场景

运维成本低:支持高可用、在线扩缩容、数据分片自动均衡

基于以上的对比与考量,最终选择了使用 StarRocks 来作为数据平台的 OLAP 引擎。

StarRocks 应用为业务搭建数据桥梁

在过去 2 年里,vivo IT 部门深度应用 StarRocks,并通过 StarRocks 进一步完善数据架构,帮助业务更好地使用和查询数据。

vivo IT 部门对接的业务主要有可视化报表、BI 数据探索、营销分析、驾驶舱、数据大屏等,另外对应的还有研发系统和运维系统。

vivo 的数据主要来自于手机相关的订单、ERP、MES 以及其他数据,在升级数据分析平台架构后,他们将 StarRocks 应用在查询引擎中,为业务团队搭建数据桥梁,支撑上层业务应用更快地查询,更准地分析。

alt

数据链路优化,让查询更便捷

vivo 的数据链路分为离线和实时链路,其中离线链路主要是通过 Trino 进行离线抽数到 Hive 中,经过 Hive 加工处理为大宽表,再推到 ClickHouse 中进行离线场景数据的查询;

实时链路则通过 Flink 加工后写入到 Kafka 中,然后通过 Flink 消费处理写入到 StarRocks 中进行实时表的查询。

alt

列更新(Partial Update),优化性能同时降低资源消耗

StarRocks 的 Join 性能表现很好,不过频繁的 Join 查询会带来计算资源的大量消耗。基于此,vivo IT 部门使用 Flink 将多个维表打平为大宽表,写入 StarRocks 来进行查询,在节省 StarRocks 计算资源的同时,查询体验也更好。

针对维表历史数据变更的场景,他们使用 StarRocks 提供的部分列更新(Partial Update)功能,在 Flink 写入主键模型大宽表的过程中,通过一些简单的配置开启部分列更新,实现以较小的代价灵活地更新大宽表中对应的列数据。

alt

集群监控告警,灵活、便捷运维

在常规的监控告警方面,由于 StarRocks 提供了丰富的 Metrics 接口,便于Prometheus 采集并存储 StarRocks 集群各个节点的状态信息,以供 Grafana 生成各种可视化的 Panel。

另外 vivo IT 部门还会对集群的审计 SQL 进行采集分析,通过 ELK 将各个 FE 节点的审计日志采集后写入到 Elasticsearch 中,通过配置规则,筛选出其中的慢 SQL,推送到告警系统中,以提醒相应的同事关注及优化。

弹性方案,降本增效

vivo 的业务特点是业务访问量存在波峰波谷,且波峰波谷之间的访问量差异明显、时间界限明显,业务对访问持续时间更短的波峰期性能要求高,服务器资源使用率考核压力大。

对于国内集群,vivo IT 部门采取了多集群的模式来分担高峰期的查询访问量,通过负载均衡将流量分摊到主备集群。

alt

海外集群则依赖于 StarRocks 的多副本高可用机制,采用各个节点轮询升降配实现集群配置的扩缩容。具体的流程如下图所示,vivo IT 部门将整个流程通过代码的方式嵌入到运维平台里,通过程序自动化调度执行,提高扩缩容执行的效率。

alt

结语

在过去两年多的探索中,vivo 发现 StarRocks 具有便捷运维、便捷部署与弹性扩缩容能力,同时提供了卓越的查询性能,足以应对高并发查询场景。借助 StarRocks 数据库,vivo 打造了实时大数据分析平台,为业务实时分析提供高效支持。

在未来,vivo 将在云原生建设、存算分离等场景与 StarRocks 进行更加深入的探索,以实现数据平台的持续演进,同时也将关注 StarRocks 社区的发展,与其他企业和开发者共同推动项目进步。

本文由 mdnice 多平台发布

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

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

相关文章

解密高并发系统设计:聊聊负载均衡算法

引言 随着公司业务的飞速发展,以及业务的多样性,用户数会迅猛增长,系统的流量会越来越大。因此,大规模的并发用户访问会对系统的处理能力造成巨大的压力,系统必须要有足够强的处理能力才能应对。 这篇文章就来介绍一…

VMware使用虚拟机,开启时报错:无法连接虚拟设备 0:0,因为主机上没有相应的设备。——解决方法

检查虚拟机配置文件并确保物理设备已正确连接。 操作: 选中虚拟机,打开设置,点击CD/DVD。在连接处选择使用ISO镜像文件

被动收入 | Audible 联盟营销计划:如何每月赚取 5000 美元?

你是否正在寻求被动收入的方式,或者在你的网站或平台上寻求赚钱的方式?亚马逊的Audible Depot联盟营销计划是一个不错的选择。作为会员,可以向听众推广有声读物,并从中获得收益。每月有可能赚取高达5000美元的收入,现在…

【Vuforia+Unity】AR04-地面、桌面平面识别功能(Ground Plane Target)

不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下: 01.Vuforia的地面识别功能仅支持的设备清单: Recommended…

【MySQL】MySQL从0到0.9 - 持续更新ing

MySQL SQL 基础 DDL 语句 show databases; show tables; desc table_name; # 获取表信息 show create table 表名; // 查询指定表的建表语句 数据类型 char(10) 不满10个会用空格填充,性能好一点 varchar(10) 变长字符串,性能差一点 CREATE TABLE tabl…

数据库-MySQL-01

这里写目录标题 数据库开发-MySQL首先来了解一下什么是数据库。1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 2. 数据库设计-DDL2.1 项目开发流程2.2 数据库操作2.2.1 查询数据库2.2.2 创…

从SDRAM到DDR的变化

1、结构概述 在此之前,曾经通过一篇文章从SDRAM的内部芯片框图出发,分析过SDRAM的功能实现,本文开始继续分析DDR、DDR2、DDR3的芯片内部框图,从而认识他们各自的区别,便于后续使用。 下图时镁光的128Mb的SDRAM内存芯片…

大学生多媒体课程学习网站thinkphp+vue

开发语言:php 后端框架:Thinkphp 前端框架:vue.js 服务器:apache 数据库:mysql 运行环境:phpstudy/wamp/xammp等开发背景 (一) 研究课程的提出 (二)学习网站的分类与界定…

RabbitMq:RabbitMq 主从镜像模式②

一、模式思想 所有的技术设计思想,基本都在两点上下功夫:1. 生产力上 2. 稳定上 二、集群模式 今天又有人问起来rabbitmq的高可用方式,因为和常见的主从模式有点区别,所以就记录一下。 rabbitmq集群的镜像队列提供了更高级的主从…

数字化转型导师坚鹏:数据安全法解读与政府数字化转型

网络安全法、数据安全法、个人信息保护法解读与政府数字化转型 课程背景: 很多机构存在以下问题: 不清楚网络安全法、数据安全法、个人信息保护法立法背景? 不知道如何理解网络安全法、数据安全法、个人信息保护法政策? 不…

LeetCode 第一题: 两数之和

文章目录 第一题: 两数之和题目描述示例 解题思路Go语言实现 - 一遍哈希表法C实现算法分析 排序和双指针法Go语言实现 - 排序和双指针法C算法分析 暴力法Go语言实现 - 暴力法C算法分析 二分搜索法Go语言实现 - 二分搜索法C算法分析 第一题: 两数之和 ‍ 题目描述 给定一个整…

【统计分析数学模型】聚类分析: 系统聚类法

【统计分析数学模型】聚类分析: 系统聚类法 一、聚类分析1. 基本原理2. 距离的度量(1)变量的测量尺度(2)距离(3)R语言计算距离 三、聚类方法1. 系统聚类法2. K均值法 三、示例1. Q型聚类&#x…

变量与数据类型(详解版)

新年的第一篇博客,我也开始步入了对于java的学习,感觉c语言还是有很多的不懂,还是会继续学习c语言的,毕竟还是练习太少了! 话不多说,我们直接开整! 1. 字面常量 如上图中的输出语句&#xff0…

(202402)多智能体MetaGPT入门1:MetaGPT环境配置

文章目录 前言拉取MetaGPT仓库1 仅仅安装最新版2 拉取源码本地安装MetaGPT安装成果全流程展示 尝试简单使用1 本地部署大模型尝试(失败)2 讯飞星火API调用 前言 感谢datawhale组织开源的多智能体学习内容,飞书文档地址在https://deepwisdom.…

Java内部类的使用与应用

内部类的使用与应用 1. 内部类用法 普通内部类: 实例化内部类对象需要先实例化外部类对象,然后再通过OuterClassName.new InnerClassName()方式实例化内部类。内部类对象在创建后会与外部类对象秘密链接,因此无法独立于外部类创建内部类对象…

智慧农业—农业资源数据中心

综述 农业资源数据中心建设的目标是将大量的农业生产信息通过采集、清洗、核准后实现统一存储、统一管理,实现数据的共享和集中管理,保障数据的安全,也为数据的挖掘分析提供决策分析创造条件。 农业资源数据中心的数据架构如下图所示: (1)农业专家数据库。主要收录国内、…

手撕Transformer(二)| Transformer掩码机制的两个功能,三个位置的解析及其代码

文章目录 1 掩码的两个功能1.1 功能1 输入掩码,统一长度1.2 功能2 遮挡未预测信息 2 掩码存在的三个位置3 代码实现 Transformer的掩码机制是非常重要的 三个位置,两个功能 1 掩码的两个功能 1.1 功能1 输入掩码,统一长度 实现不同的长度句…

使用C++和SFML库创建2D游戏

FML(Simple and Fast Multimedia Library)是一个跨平台的C库,用于开发2D游戏和多媒体应用程序。它提供了许多功能,包括图形、声音、网络、窗口管理和事件处理等。 ———————————————不怎么完美的分割线——————…

使用命令符用cd切换不了

bug:cd 切换不进去 解决办法: 在cd后面加 /d

(HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕

一、电路接法 电路接法参照江科大视频。 二、相关代码及文件 说明:代码采用hal库,通过修改江科大代码实现。仅OLED.c文件关于引脚定义作了hal库修改,并将宏定义OLED_W_SCL(x)、OLED_W_SDA(x)作了相关修改。 1、OLED.c void OLED_I2C_Init(voi…