Skip to content

生产部署:API Instances、Refresh Worker、Cube Store 应该怎么搭

从开发环境进入生产时,Cube 的部署模型要发生一次明显升级。

先看生产组件分层图

Cube 生产部署组件分层图
图片来源:Cube 官方 Blog。生产部署时最重要的不是“把 Cube 跑起来”,而是把查询入口、后台刷新和预聚合存储拆开。

1. 官方生产组件模型

Cube 部署文档给出的典型生产组件包括:

  • 一个或多个 API Instances
  • 一个 Refresh Worker
  • 一个 Cube Store cluster

这已经足够构成对生产环境的基本认知。

2. 为什么开发模式不能直接等于生产模式

开发模式的目标是:

  • 快速修改模型;
  • 快速调试查询;
  • 本地验证结果。

生产模式的目标则是:

  • 稳定服务并发请求;
  • 独立处理刷新任务;
  • 保持缓存与预聚合最新;
  • 支撑更高吞吐量与更低延迟。

所以生产环境一定要把“前台查数”和“后台刷新”拆开。

3. API Instances:线上查询入口

API Instances 负责:

  • 接收来自 BI、应用、Agent 的请求;
  • 查询 Cube Store 或直接查询原始数据源;
  • 水平扩展以支撑更高 QPS。

生产建议

  • 放在负载均衡后面;
  • 至少准备两实例以避免单点;
  • 让每个实例都能访问相同的数据模型文件。

4. Refresh Worker:线上保鲜机制

Refresh Worker 负责:

  • 构建和刷新 pre-aggregations;
  • 更新 refresh keys;
  • 后台失效内存缓存。

生产建议

  • 单独部署,不要和 API 实例绑死在一起;
  • 视预聚合规模调高并发或扩成多集群;
  • 多租户很多时要关注刷新压力。

官方刷新文档也提到,如果租户很多、预聚合很多,可能需要多集群拆分刷新压力。

5. Cube Store:别把它看成可选边缘件

只要你的场景满足以下任一条件,就应该认真考虑 Cube Store:

  • 并发高;
  • 查询频繁;
  • 数据量大;
  • 追求亚秒级体验;
  • 想显著降低上游数仓成本。

结构回顾

  • Router:接收查询、做元数据管理与计划分发;
  • Workers:并行执行子查询;
  • Blob Storage:存放列式预聚合数据。

官方建议

部署文档明确表示:

  • Cube Store 虽可单实例运行;
  • 但这通常 不适合生产
  • 对高并发和高吞吐,建议使用集群方式。

再看一张与性能相关的图

Cube Store 生产性能示意图
这张图适合补充说明:当预聚合规模和并发上来后,Cube Store 就从“可选优化”变成“生产主线组件”。

6. 生产环境中最容易忽略的问题

1)模型文件如何分发

所有 API Instances 与 Refresh Worker 都需要访问语义模型文件。

2)预聚合存储位置

如果你使用 Cube Store,通常还要设计对象存储或相应存储后端。

3)监控

至少要关注:

  • 查询延迟;
  • 预聚合构建时长;
  • 刷新失败率;
  • Worker 压力;
  • 命中率与回源比例。

4)发布流程

语义模型本身是代码资产,应该进入:

  • Git
  • Code Review
  • CI/CD
  • 环境发布流程

7. 一个适合中文教程的部署分层方式

阶段 1:本地 PoC

  • 单实例 Cube
  • 单数据源
  • 无 Cube Store 或最简单模式

阶段 2:团队内试点

  • 多 API Instances
  • 独立 Refresh Worker
  • 开始使用 pre-aggregations

阶段 3:正式生产

  • Cube Store cluster
  • 对象存储
  • 完整监控
  • 多环境 / 多租户治理
  • 灰度发布与回滚策略

8. 什么情况下应该考虑多集群

官方文档在多租户与部署章节里都提示:

  • 大规模多租户;
  • 超过 100 租户量级;
  • 刷新负载很重;
  • 预聚合很多;

都可能需要多集群架构,而不是一套单集群打天下。

9. 教程落地建议

如果你后续继续扩展这套中文教程,建议新增三篇:

  1. Docker Compose 最小生产部署;
  2. Cube Store 集群与对象存储;
  3. 多租户生产部署模式。

一句话总结

Cube 的生产部署核心在于把查询入口、后台刷新和预聚合存储拆分成可独立扩展的组件:API Instances 负责前台请求,Refresh Worker 负责保鲜,Cube Store 负责高性能预聚合查询。

本站基于官方文档与官方代码仓库整理,为第三方非官方中文教程,与 Cube Dev, Inc. 无隶属、授权或背书关系;Cube、Cube Core 及相关标识归其各自权利人所有。