当前大数据 OLAP 体系采用存算一体架构(计算与存储混合部署),随着业务数据量激增、核心场景查询并发提升(核心业务峰值 QPS 达 x+),架构瓶颈逐渐凸显,具体痛点及业务影响如下:
● 计算侧:当核心业务执行复杂聚合查询时,CPU 利用率达 90%+,会导致存储侧的实时数据写入延迟从正常的 10s 升高至 120s+,影响实时看板的准确性。
● 存储侧:高频次的物化视图(MV)刷新(日均 x + 次)会占用 30%+ 的 IO 资源,导致非核心业务(如区域数据报表查询)响应时间从 5s 延长至 25s,用户体验下降。
● 单集群存储依赖 SSD/NVMe 本地盘,当前单集群容量有限,需频繁拆分集群,运维成本增加 30%。
● 本地盘数据均衡依赖手动迁移,当单节点存储使用率超 85% 时,均衡过程会占用 20%+ 的网络带宽,导致查询性能波动超 15%。
● 核心业务与非核心业务(如历史数据回溯查询)共享同一集群资源,非核心业务的大表扫描(如近 3 年房源历史数据查询)会导致核心业务查询超时率从 0.1% 上升至 2%,违反 SLA(服务等级协议)要求。
● 新增高可用集群需从旧集群迁移历史数据,单集群迁移周期长达 数天,影响线上业务,期间数据一致性校验成本增加 50%。
针对存算一体架构的痛点,引入 StarRocks 3.3.13-8.0-release作为核心 OLAP 引擎,基于其存算分离能力构建 Multi Warehouse 架构,通过 “资源隔离 + 灵活调度 + 湖仓协同” 解决资源冲突与扩展性问题,具体方案如下:
以 “业务按需分配资源,数据统一湖仓管理” 为核心,将计算资源封装为独立 Warehouse(资源单元),存储层统一对接湖仓存储,实现 “计算弹性扩缩、存储无限扩展、业务互不干扰”。
StarRocks 通过CREATE WAREHOUSE语法定义独立资源单元,支持 CPU / 内存 / IO 资源精细化配置,结合Resource Group(资源组)实现业务与 Warehouse 的绑定,核心能力及落地场景如下:
核心能力 | 技术细节 | 落地场景案例 |
---|---|---|
资源硬隔离 | 每个 Warehouse 独占 CN(Compute Node)节点,支持指定 CN 节点规格(如 4C16G/16C64G),资源不共享 | 核心专属 Warehouse 分配 16C64G CN 节点 ×8 台,非核心业务 Warehouse 分配 4C16G CN 节点 ×4 台,避免资源抢占 |
动态扩缩容 | 支持基于 CPU 利用率(如阈值 70%)自动扩缩容,或通过 API 手动调整 CN 节点数量,扩缩容耗时 < 5min | 早高峰(9:00-11:00)核心 Warehouse 自动扩容至 12 台 CN,平峰期缩容至 8 台,资源利用率提升 40% |
湖仓格式原生支持 | 内置 Paimon/Delta Lake/Hive/Iceberg 连接器,支持批量读、实时写,查询性能比通用连接器提升 30% | 装修业务从 Paimon 表读取实时施工数据,通过专属 Warehouse 执行分析 |
元数据统一管理 | External Database 实现湖仓元数据双向同步(同步频率 1min / 次),支持表结构自动映射,无需手动建表 | Hive 数据湖新增房源表后,StarRocks External Database 自动同步元数据,业务可直接查询,减少运维操作 80% |
资源利用率、业务稳定性、集群扩缩容效率、湖仓生态
架构采用 “统一湖仓存储层 + 弹性 Multi Warehouse 计算层 + 全局管控层” 三层设计,实现 “存储无限扩展、计算按需分配、全局统一调度”,具体架构如下:
3.1.1 存储层:湖仓存储一体
以 “HDFS 为基础存储,多湖格式协同” 为核心,实现数据统一存储与管理,具体设计:
湖仓元数据管理:External Database
● 元数据同步:支持 Paimon/Hive/Iceberg 的元数据自动同步,同步延迟 < 1min,保障数据一致性;
● 双向映射:StarRocks 表结构变更(如新增字段)自动同步至数据湖,数据湖表结构变更也自动同步至 StarRocks,无需手动维护。
3.1.2 计算层:Multi Warehouse 弹性资源池
基于 StarRocks CN 节点构建独立 Warehouse,每个 Warehouse 对应一类业务场景,核心配置如下:
Warehouse 名称 | 业务场景 | CN 节点规格 | 节点数量(动态) | 资源限制 |
---|---|---|---|---|
WH_CORE_xx | 核心 | 16C64G | 8-12 台 | CPU 利用率上限 90%,内存上限 60GB |
WH_TAG_PROCESS | 标签计算 / 物化视图刷新 | 8C32G | 4-6 台 | IOPS 上限 10000 |
WH_LAKE_ACCELERATE | 湖仓加速查询(用户 1/2) | 8C32G | 4-8 台 | 单查询内存上限 16GB |
WH_COMMON_QUERY | 普通查询(多用户共享) | 4C16G | 2-4 台 | CPU 利用率上限 70% |
核心特性:
● 资源硬隔离:每个 Warehouse 的 CN 节点仅服务绑定的业务,不会被其他 Warehouse 占用;
● 独立扩缩容
● 用户级权限控制:支持指定表的查询权限绑定至特定 Warehouse(如房源核心表仅允许 WH_CORE_xxx 查询)。
3.1.3 管控层:全局调度与监控
● 调度中心:基于 StarRocks Resource Group,将业务查询自动路由至对应 Warehouse(如核心查询路由至 WH_CORE_xxx),路由规则支持按用户、按 SQL 标签配置;
● 监控平台:集成 Prometheus+Grafana,监控每个 Warehouse 的 CPU / 内存 / IO 利用率、查询 QPS / 延迟 / 超时率,设置阈值告警(如 CPU>90% 触发告警);
● 运维工具:通过 StarRocks Manager 实现 Warehouse 创建、扩缩容、数据迁移的可视化操作,运维效率提升 60%。
场景1-1: 存算分离-标签集群 物理隔离 写/物化/合并/查询
场景1-2: 存算分离-湖仓加速 user1/user2 物理隔离
场景1-3: 存算分离 单table 多用户 user1/user2 查询同一张表
场景2-1: 所有集群 统一数据湖仓 降级方案
场景2-2: 跨集群读写分离
场景2-3: 所有集群统一存算分离降级方案
场景2-4: 所有集群 多层级方案
1. 资源效率最大化:通过 Warehouse 资源隔离与动态扩缩容,CPU 利用率从 50% 提升至 75%,存储成本降低 50%;
2. 业务稳定性提升:核心业务查询超时率从 2% 降至 0.05%,满足 99.5% SLA 要求,多业务互不干扰;
3. 扩展性无上限:存储层基于 HDFS 支持 PB 级扩展,计算层支持 Warehouse 按需新增,应对业务增长;
4. 高可用保障:统一降级方案与跨集群读写分离,业务中断时间从 1h 缩短至 5min,可用性达 99.99%;
5. 运维成本降低:可视化运维工具 + 自动扩缩容,运维工作量减少 60%,数据迁移周期从 2 个月缩短至 1 周。
● 梳理业务场景,划分 Warehouse 类型(如核心、标签计算),确定资源配置;
● 选取非核心业务(如区域报表查询)试点,部署 WH_COMMON_QUERY Warehouse,验证资源隔离效果;
● 试点湖仓加速场景(装修业务),部署 WH_LAKE_ACCELERATE Warehouse,验证湖仓协同性能;
● 完善监控平台与告警规则,确保关键指标可监控、可告警。
● 部署核心业务 Warehouse(WH_CORE_xx、WH_TAG_PROCESS),迁移核心业务查询至新架构;
● 落地跨集群读写分离与统一降级方案,完成全业务场景迁移;
● 优化资源配置(如调整自动扩缩容阈值),提升资源利用率。
● 每月分析 Warehouse 资源使用情况,优化资源配置;
● 跟进 StarRocks 新版本特性,迭代架构功能(如支持更多湖格式);
● 定期演练降级方案,确保高可用能力。
风险类型 | 风险描述 | 应对策略 |
---|---|---|
资源不足风险 | 业务高峰时 Warehouse 资源不足,查询延迟升高 | 1. 配置自动扩缩容,高峰前提前扩容; 2. 预留 10% 应急资源,用于临时扩容;3. 核心业务优先级高于非核心业务 |
湖仓同步风险 | External Database 元数据同步延迟或失败 | 1. 配置元数据同步重试机制(重试 3 次,间隔 10s); 2. 同步失败时触发告警,手动修复; 3. 存储元数据变更日志,支持回滚 |
集群故障风险 | StarRocks 集群整体故障 | 1. 落地统一湖仓降级方案,确保业务不中断; 2. 定期演练故障切换流程 |
warehouse已有代码:
Warehouse 抽象类:
DefaultWarehouse:继承warehouse,实现了默认配置
IdleStatus&WarehouseStatus:记录warehouse的idle状态及sql,task,load等数量统计信息
WarehouseIdleChecker:后台进程,监控 (可能一些job/task信息会关联warehouseId)
WarehouseInfo:主要统计未完成的job数量
WarehouseInfosBuilder:WarehouseInfo的builder
LoadJobWithWarehouse:接口,被各种load类实现(broker,stream...)
WarehouseLoadInfoBuilder:记录warehouse对应的loadStatusInfo
WarehouseLoadStatusInfo:记录未完成的job数量以及上次完成job 的时间
WarehouseProcDir:warehouse持久化信息
WarehouseManager:warehouse管理类,负载管理所有warehouse。
参考
snowflake Overview of warehouses | Snowflake Documentation
阿里e-mapreduce平台 计算组使用指南_开源大数据平台 E-MapReduce(EMR)-阿里云帮助中心
关注可以发送源码哦
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。