存算分离降本增效,StarRocks 助力聚水潭 SaaS 业务服务化升级
作者:聚水潭数据研发负责人 溪竹
聚水潭是中国领先的 SaaS 软件服务商,核心产品是电商 ERP,协同350余家电商平台,为商家提供综合的信息化、数字化解决方案。公司是偏线下商家侧的 toB 服务商,员工人数超过3500,线下网点超过100个,每天要承载大概2亿包裹量的 ERP 发货流程,产生的数据量超过10TP。
公司数据智能产品的定位是将数据融入到服务流程中,在 ERP 这个大的体系里,帮助商家进行数据提效。从整体分层来说,包括智能报表、智能经营、智能分析,其中智能分析包括实时大屏、渠道分析等。
今年3月,聚水潭将 StarRocks 引入到数仓架构中,针对数据智能产品中的多个服务进行了升级。在 StarRocks Summit 2023 上,公司数据研发负责人溪竹结合应用场景分享了在 StarRocks 使用过程中的许多经验和感受。
我们将溪竹的精彩演讲整理出来,希望对你有所帮助。
数仓架构演进
聚水潭数仓经历了大约 10 年的发展,早期跟很多公司一样采用的是 SQL Server 集群,在数据规模较小的情况下 SQL Server 的在线服务和 OLAP 能力都能满足业务需求。随着业务发展,SQL Server 在复杂查询场景下,无法提供丰富的多维统计指标计算能力。所以从 2018 年开始自建 GreenPlum 作为 AP 分析集群,至 2021 年集群数量已经超过 70 个集群。另外在线的 SQL Server 集群也在不断增加,现在已经超过了 1000 套。从 2020 年开始,我们接入了实时链路,从偏数据库的场景转向了偏计算和存储能力的场景。
至此我们只是在不断的扩展集群规模,增加服务数量,导致了数据是隔离的,服务是分散的。为此我们希望有一款产品具有更强的在线化服务能力和实时数据处理能力,能够帮我们整合数据存储,统一数据服务。经过充分的调研和验证,今年 3 月,我们将 StarRocks 引入进来,逐步形成了现在的统一在线服务架构。目前我们的 StarRocks 集群规模约 10 个,整体 CPU 约 1000 个。

StarRocks 大规模集群的构建及验证
今年 3 至 11 月份,我们一直跟着 StarRocks 在迭代,这个过程中我们根据不同系统和服务的要求总结了三种模式,分别服务于不同业务。
存算分离模式之快递揽收报表

存算分离模式是基于 3.1 的新的湖仓范式探索对于湖能力的一些补充。从 ERP 视角来看,在线业务 10 多年积累下来的庞大的数据之前没有做分级的存储,这块存在很大的资源优化空间。经过统计,我们查询数据的范围超过近三年的都不到 1% ,所以我们通过存算分离的方式将全量数据存储到价格较低的 OSS,本地只 cache 近期的热数据。这样的方式不仅满足了 99% 以上的查询性能要求,同时存储成本也约等于原先的 1/8。
今年 7 月份左右,我们在快递揽收报表业务场景上对 StarRocks 3.1 存算分离进行了完整测试。从业务场景来说,快递揽收属于物流场景,一个单子被揽收掉以后,历史数据就没有意义了,所以我们就默认做了 105 天的本地数据清理策略,完全自动化地管理数据清理动作。这个测试当时在 StarRocks 社区还产生了一些影响力。测试表明,在开启本地 cache 的情况下,查询性能和存算一体基本持平,响应基本上都是毫秒级别,另外让我们有一点惊喜的是,内存管理变得更高效了,存算分离的内存使用相比存算一体减少了 50%,计算资源性价比更高。

下图中为针对 StarRocks 存算分离版本查询性能的测试,我们从一款商业化产品 OLAP 外表切流到 StarRocks 内部表,使用本地盘加速 OSS 的效果非常好,延迟直接从秒级降到了毫秒级,这对于我们基于 StarRocks 3.1 建立湖仓模式是一个信心的基础。

高可用模式之订单全链路分析

在高可用模式下,最重要的就是服务不可以中断,异常情况下服务可以快速恢复。此时 StarRocks 计算节点为单独购买,存储主要依靠云盘,在节点出现故障时,无论是本身基于容器弹性的逃逸能力,还是副本数据迁移的能力,都能够快速恢复服务,保证了服务的高可用。
订单全链路分析业务采用了高可用模式的的部署方式。通过出库单得到拣货、验货、播种、打包等各阶段操作人和操作时间,进行订单的全链路分析。业务方最主要的诉求就是服务稳,查询快。

我们采用了主键模型对事实明细分类存储,仅保留有效记录,通过 colocate group 的方式加速查询效率并优化了查询逻辑,最后 SQL 平均耗时从 7 秒降到了 50 毫秒,性能提升 8 倍!
高性能模式之售后预警

以售后预警中的发货监控服务为例,需要支持六七千的商家同时访问,且对查询访问的时延要求很高。这类业务模式下我们采用高性能模式的部署方案。我们把存储从云盘改到了本地盘。这套架构是一个很经济的架构,3 年 4 折去买 ECS 的机器,然后去部署这套架构,性能很好,成本又很低。
售后实时预警监控如下图所示:

这其中包含了订单/售后单/物流单查询,分类型风险提醒,多店铺/长周期/多维度组合筛选,明细筛选/排序/处理/导出-外部业务对接,智能识别退货物流异常/无信息件,拦截提醒防资损,供分销、三方仓业务等多个业务。主要为售后提效,资损监控提供服务保证。
采用高性能模式我们做到了百亿级数据秒级计算,100MB/s 的写入吞吐,300QPS ,RT 350ms。大家可以在评估自己业务的时候,大概能有一个体感,现在一个 300 core 的 StarRocks 集群能达到什么样的能力?基于本地盘的部署,是可以实现百亿级数据、毫秒级延迟的。

未来展望
我们每天要 load 的数据超过百亿,目前架构下还存在着 load 数据耗时长,多计算引擎数据孤岛、存储浪费等问题,StarRocks 无论是加速 OSS,还是帮助我们去加速阿里云 ODPS 的数据,都可以有效简化我们的数据加工、降低存储成本,这一块非常值得期待。另外,我们从 0 到 1000 core的规模只用了不到一年,我觉得在 StarRocks 使用上还有很大想象空间,未来一年我们希望用 StarRocks 来探索真正的湖仓新范式的落地。

本文由 mdnice 多平台发布
相关文章:

存算分离降本增效,StarRocks 助力聚水潭 SaaS 业务服务化升级
作者:聚水潭数据研发负责人 溪竹 聚水潭是中国领先的 SaaS 软件服务商,核心产品是电商 ERP,协同350余家电商平台,为商家提供综合的信息化、数字化解决方案。公司是偏线下商家侧的 toB 服务商,员工人数超过3500…...

Linux 内核学习笔记: hlist 的理解
前言 最近阅读 Linux 内核时,遇到了 hlist,这个 hlist 用起来像是普通的链表,但是为何使用 hlist,hlist 是怎么工作的? 相关代码 hlist_add_head(&clk->clks_node, &core->clks); /*** clk_core_link_…...
几种设计模式介绍
前言 设计模式是一种用于解决软件开发中常见问题的通用解决方案,它可以提高代码的可读性、可维护性和可复用性。前端开发中也有很多应用设计模式的场景,比如处理异步操作、优化性能、封装复杂逻辑等。 前端开发中常见的设计模式有以下几种: …...
拓展操作(三) jenkins迁移到另一个机器
让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…...

重定向和转发的区别
重定向 1、定义 用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302,并设置一个重定向的路径,浏览器如果接收到了这个302的状态码以后,就会去自动加载服务器设置的路径 一个页面跳转…...

基于ElementUI二次封装弹窗组件
效果: 一、自定义内容类型弹窗 <!-- title:对话框的标题confirmLoading:当前是否处于提交中titleCenter:对话框标题居中方式footerCenter:底部按钮的对其方式visible:是否显示弹窗width:设置…...
linux cat命令改变功能显示当前文件行号
linux的cat命令使用-n显示多个文件行号时,行号是累加的,不是到了新文件就重新计数。这样满足不了我的需求。如果到了新文件能够重新计数,就能使用-nf(在上一篇-f显示文件名功能的基础上)加| grep xxx,既能直…...

Django-REST-Framework 如何快速生成Swagger, ReDoc格式的 REST API 文档
1、API 接口文档的几种规范格式 前后端分离项目中,使用规范、便捷的API接口文档工具,可以有效提高团队工作效率。 标准化的API文档的益处: 允许开发人员以交互式的方式查看、测试API接口,以方便使用将所有可暴露的API接口进行分…...
SpringBoot当中的Singleton和Prototype详解
在Spring Boot中,Singleton和Prototype是两种Bean的作用域。这两种作用域决定了Spring容器如何创建和管理Bean的实例。 Singleton(单例): 当一个Bean被配置为Singleton作用域时,Spring容器在启动时只会创建该Bean的一个…...
LeetCode第1题 - 两数之和
题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 给定 nums [2, 7, 11, 15], …...

(14)Linux 地址空间的理解
前言:本章核心主题为 "进程地址空间"。 一、Linux 进程地址空间 程序地址空间是内存吗?不是!程序地址空间不是内存! 其实,我们称之为程序地址空间都不准确,应该叫 进程地址空间,这…...
Java中的设计模式
设计模式是软件开发中常见问题的可重用解决方案。在Java中,设计模式有助于提高代码的可维护性、可读性和可扩展性。以下是一篇关于Java中设计模式的文章,以帮助您更好地理解这些模式。 一、设计模式简介 设计模式是经过验证的解决方案,用于…...

Hadoop(2):常见的MapReduce[在Ubuntu中运行!]
1 以词频统计为例子介绍 mapreduce怎么写出来的 弄清楚MapReduce的各个过程: 将文件输入后,返回的<k1,v1>代表的含义是:k1表示偏移量,即v1的第一个字母在文件中的索引(从0开始数的);v1表…...

Unity | 快速修复Animation missing错误
目录 一、背景 二、效果 三、解决办法 一、背景 最近在做2D 骨骼动画相关的Demo,我自己使用Unity引擎进行骨骼绑定并创建了anim后,一切正常,anim也能播放。但是昨天我修改Obj及子物体的名称(由中文改为英文,如&…...

ssm基于web的志愿者管理系统的设计与实现+vue论文
摘 要 使用旧方法对志愿者管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在志愿者管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的志愿者…...
C++运算符重载(插入and提取)
介绍 本文主要介绍 插入(>>) and 提取(<<)的运算符重载 1.插入(>>) 提取(<<)只能是友元函数 2.插入关键词istream 例子:istream& operator>>(istream& in, sumber&Left) 3.提取关键词ostream 例子:ostream&a…...

C#高级 08Json操作
1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式, 但是也使用了类似于C语言的习惯。这些特性使…...

封装uniapp签字板
新开发的业务涉及到签字功能,由于是动态的表单,无法确定它会出现在哪里,不得已封装模块。 其中涉及到一个难点就是this的指向性问题, 第二个是微信小程序写法, 我这个写法里用了u-view的写法,可以自己修改组…...

Mybatis行为配置之Ⅳ—日志
专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…...

Java设计模式-外观模式
目录 一、影院管理项目 二、外观模式 (一)基本介绍 (二)原理类图 (三)解决影院管理 (四)注意事项和细节 (五)外观模式在MyBatis框架应用的源码分析 一…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...