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

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

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://xiahunao.cn/news/2806180.html

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

相关文章

基于MATLAB优化的多焦点相位

1、概要 目前智能手机的显示屏得益于机械或化学性能的稳定,让这些手机非常耐用,显示屏具有足够硬度使其可以承受住很大的压力,甚至多年使用下来都没有磨损迹象。 但是另一方面,材料的硬度通常伴随着脆性,手机的屏幕玻…

第四十二回 假李逵翦径劫单身 黑旋风沂岭杀四虎-python读写csv和json数据

李逵答应了宋江三件事:不可吃酒,独自前行,不带板斧。李逵痛快答应了,挎一口腰刀,提着朴刀,带了一锭大银子,三五个小银子就下山去了。 宋江放心不下,于是请同乡朱贵也回家一趟&#…

【Postman+Newman】接口自动化测试以及测试报告输出

Newmanpostman自动化测试 postmanPre-request Script前置脚本 Newman测试报告输出 postman 学习postman脚本编写 Pre-request Script前置脚本 Newman 测试报告输出 输出报告时使用的命令:     -r html,json,junit 指定生成html,json&#xff0c…

Java并发-并发编程的三个核心问题

文章目录 并发编程的三个核心问题参考 并发编程的三个核心问题 并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问…

猫头虎分享已解决Bug || Rust Error: expected function, found module ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【Java程序设计】【C00277】基于Springboot的招生管理系统(有论文)

基于Springboot的招生管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生管理系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块:在系统首页可以查看首页、专业…

Git diff Word 文档

前言 前段时间用 nodeJS 写了一个提交代码的工具,开发过程中在认证部分遇到了一些小问题,于是就想看看官方的文档中有没有什么说明之类的,没想到文档中的内容十分丰富,除了解释了 git 相关的原理外,还学到了很多有用的…

软考-中级-系统集成2023年综合知识(三)

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 软考中级专栏回顾 专栏…

【PythonGIS】基于Python融合矢量数据(多面合一)

之前发过使用批量合并矢量数据的文章:【Python&GIS】基于Python批量合并矢量数据,正好前段时间有需求把矢量数据进行融合,然后就编了一段融合矢量数据的代码。今天就和大家分享一下如何使用Python对矢量数据实现融合的操作。 1.定义 首先…

金南瓜SECS/GEM如何添加工程?

公开资料皆为是2、3年前版本 编译SecsEquip.dll依赖库 ① 打开示例程序中的SecsEquip项目 ② 选中SecsEquip工程,右键选择属性 如果没有“解决方案资源管理器”页面,可以从菜单的“视图”->“解决方案资源管理器”打开 ③ 选择跟设备相同的NET版本…

This dependency was not found解决方法

问题如上(前端代码),我是引用js文件出的问题,无法找到api/userManage模块。 解决:没感觉哪有问题,把后面加了个/,就解决了,代表src目录,应该是目录和目录之间应该有/作为分割:

python 提取PDF文字

使用pdfplumber,不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

DIcom调试Planar configuration

最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容,自己写得原生解析不兼容。 给对方调好了格式,下次生成文件还会有错。 简单记录下,日后备查。 今天对方又加了 个字段:Planar configuration 查…

koa项目部署云服务器(部署本地虚拟机中)

文章目录 一、服务器安装Node、MySQL1.1. 安装Node.js1.2. 安装MySQL1.3.配置MySQL1.4. 数据库迁移 二. 部署Node项目2.1. 代码托管到Git仓库(选做)2.2. 代码clone到服务器(选做)2.3. VSCode中打开代码(推荐&#xff0…

【二十七】【C++】二叉树练习

606. 根据二叉树创建字符串 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与…

集成TinyMCE富文本编辑器

若依的基础上集成TinyMCE富文本编辑器 前端bootstrap TinyMCE官网链接 TinyMCE所需静态资源下载链接 开源项目-若依链接 将TinyMCE静态资源包放入项目中&#xff1b; 代码引入css&#xff1a; <!-- 引入TinyMCE CSS --><link th:href"{/ajax/libs/tinymce/j…

抖音视频评论数据提取软件|抖音数据抓取工具

一、开发背景&#xff1a; 在业务需求中&#xff0c;我们经常需要下载抖音视频。然而&#xff0c;在网上找到的视频通常只能通过逐个复制链接的方式进行抓取和下载&#xff0c;这种操作非常耗时。我们希望能够通过关键词自动批量抓取并选择性地下载抖音视频。因此&#xff0c;为…

什么是调制比

一般情况下&#xff0c;调制波和载波的最大幅值是不一样的。 正弦波的最大幅值低于三角波的最大幅值。 这样做的目的就是产生最大占空比&#xff08;2000W逆变器中最大占空比是80%&#xff09; 调制波就是正弦波的最大幅值比三角载波的最大幅值 问题1 为什么调制波要小于1&…

Oracle不能启动,提示设备空间不足,实际上是信号量不够(ORA-27300,ORA-27301,ORA-27302)

我的一个客户的Oracle数据库不能启动&#xff0c;出现下面的提示&#xff1a; ORA-27154: post/wait create failed ORA-27300: OS system dependent operation:semget failed with status: 28 ORA-27301: OS failure message: No space left on device ORA-27302: failure oc…

邮件发送/接收过程分析、常见邮箱sport/dport列举、检测规则开发思路分析

一、邮件发送和接收过程分析 &#xff08;转载自&#xff1a;邮件的发送和接收过程——STMP、POP、IMAP、MIME_当收件人接收电子邮件时自己的邮件服务器通过什么收文件-CSDN博客&#xff09; 电子邮件发送协议 是一种基于“ 推 ”的协议&#xff0c;主要包括 SMTP &#xff1…