从 Spanner 到 StarRocks:把云账单砍掉 80%

同样的数据,放在不同的系统里,成本可以相差数倍。这是我们的用户完成 Google Spanner 到 StarRocks 迁移后的真实结果,分析成本直接降低了 70%--80%。

这一差距主要是因为 Spanner 是为事务设计的,计费模型也围绕事务场景构建。当分析负载逐渐堆积在上面时,不仅查询慢,资源利用率低,成本更是不断攀升。而 StarRocks 面向实时分析场景,从架构、性能到成本都更适合承载分析查询业务。

本文将介绍如何实现 Google Spanner 到 StarRocks 的数据迁移同步,让数据库架构更合理,同时有效控制成本。

Google Spanner 的局限

Google Spanner 是一款全球分布式关系型数据库,在强一致性、跨区域事务和高可用性方面有着成熟的应用。对于金融交易、订单系统、多区域数据一致性等核心业务场景,Spanner 都是非常可靠的选择。

但当分析查询开始大量集中到 Spanner 上时,它的局限性也逐渐显现。

在技术层面,Spanner 的设计目标是 OLTP。它采用行式存储,并围绕分布式事务做了大量优化,这些能力在事务写入场景中非常高效,但在大规模扫描、宽表聚合或复杂 Join 等分析型操作上并没有优势。在报表类 SQL 场景中,常常需要等待几十秒,甚至可能出现超时。

成本问题则更突出。Spanner 按处理单元(Processing Unit)持续计费,1 个节点约 6.2 元/小时。即使没有查询,计算资源仍然产生费用。在分析高峰期,为了避免查询变慢甚至影响线上事务,通常需要提前扩容节点。而在低峰期,这些扩容节点大多处于闲置状态,但费用却在不断累积。

举个例子,假设数据规模在 2TB 左右,部署 3 个节点用于分析负载,仅基础成本每月就接近 17000 元(计算约 13000 元,存储约 4000 元)。一旦分析查询增多,节点数通常需要扩展到 5--6 个,每月成本很容易超过 27000 元。

核心问题在于,Spanner 并不是为分析而设计的系统。 把分析负载运行在上面,既跑不快,成本又高。

为什么同步数据到 StarRocks

为了提高分析性能,控制成本,很多团队开始选择把数据同步到 StarRocks。StarRocks 是面向实时分析的云原生高性能 OLAP 数据库,在这一场景下可以帮助团队极大地降本增效:

  • 查询性能:StarRocks 采用列式存储与向量化执行引擎,在聚合分析、宽表扫描场景下性能表现突出,与 Spanner 相比,同类分析查询通常有数十倍的提升。
  • 分析成本 :StarRocks 支持存储计算分离架构,冷数据可以落到对象存储(如 GCS 或 S3)。计算节点可以按需使用,避免为闲置容量持续付费。整体成本相比 Spanner 可以降低约70%-80%

通过把数据从 Spanner 同步到 StarRocks,将事务层与分析层解耦,Spanner 继续承载核心交易业务,StarRocks 专注分析查询,性能更强,也更省钱。

数据同步方案选型

明确目标之后,关键问题在于如何将 Spanner 中的数据同步到 StarRocks。

常见方案其实并不少,但实现方式和复杂度差异很大。

定时导出 + 导入

这是最直接的一种方式,通过定时任务做数据导出,比如将 Spanner 数据周期性导出到对象存储(如 GCS),再导入到 StarRocks。

这种方式实现简单,但数据延迟较高,更适合离线分析或一次性迁移。

Dataflow 方案

借助 Dataflow 订阅 Spanner Change Streams,并将处理结果写入 StarRocks。

这种方式技术上可行,但开发周期长,而且 Dataflow 本身也在 GCP 计费,并不能达到降本的目的。

自建 CDC 链路

也可以基于 Google Spanner 的 Change Streams,自己实现一套 CDC(Change Data Capture)链路。通常做法是从 Spanner 拉取变更日志,解析成标准事件,再通过自建程序写入 StarRocks。

这种方式灵活性高,但也意味着你需要从头搭建一套系统,处理数据顺序、事务一致性、断点续传等各种问题。

上面这些方案都有一个共同点:需要团队自己开发,落地成本和运维成本都较高

如果希望开箱即用、减少自研投入,也可以考虑产品化的数据同步平台,比如 CloudCanal。

CloudCanal 最近支持了 Spanner 源端的数据迁移同步能力,是目前少数原生支持 Google Spanner 作为数据源的数据同步平台。在 CloudCanal,全量迁移和 CDC 增量同步集成在同一个数据链路里,系统内置类型映射与数据处理能力,全程可视化操作、可观测、可管理,完全不需要写代码。

整体数据链路如下:

在常规业务写入量下,同步延迟通常可以稳定在 3 秒内,满足绝大多数分析场景对数据实时性的要求。

实操演示

接下来,我们将演示如何在几分钟内,搭建出一条 Spanner 到 StarRocks 的实时链路。

步骤 1:安装 CloudCanal

进入 CloudCanal 官网,点击 免费社区版

参考 全新安装(Docker),安装 CloudCanal 私有部署版本。

安装完成后,用默认账号(test@clougence.com / clougence2021)登录控制台。

步骤 2:添加数据源

点击 数据源管理 > 新增数据源,填写以下信息,分别添加 Google Spanner 和 StarRocks。

添加 Google Spanner

  • 部署类型:谷歌云
  • 数据库类型:Spanner
  • 网络地址:填写连接 Spanner 实例的 IP 和 host
  • 认证方式:选择合适的认证方式

修改以下额外参数:

  • spannerProjectId:修改为 Google Cloud 项目 ID
  • spannerInstanceId:修改为 Spanner 实例 ID
  • spannerDatabaseId:修改为 Spanner 数据库 ID
  • customParams:修改为 Spanner 连接自定义 JDBC 参数

添加 StarRocks

  • 部署类型:自建
  • 数据库类型:StarRocks
  • Client 地址:填写连接 StarRocks 实例的 IP 和 host
  • 认证方式:选择合适的认证方式

修改以下额外参数:

  • privateHttpHost:修改为 FE/BE 节点的 IP 和 host

步骤 3:创建链路

点击 同步任务 > 创建任务,进入任务创建流程。

选择源端和目标端数据源,点击 测试连接

在功能配置页面,任务类型 选择 增量同步 ,并勾选 全量初始化

在表 & action 过滤页面,勾选要迁移的表。

在数据处理页面,勾选要迁移的列。

在创建确认页面,点击 创建任务

CloudCanal 将自动开始运行任务,在任务列表可查看进度。

总结

把分析负载从 Spanner 放到 StarRocks,解决的不只是一个成本问题,更是让两个系统各自负责自己更擅长的部分。Spanner 继续承担事务处理,StarRocks 专注分析查询,而 CloudCanal 作为中间的数据链路,负责把数据持续、稳定地连接起来。

当事务与分析不再混跑,架构会更清晰,资源使用也更合理,成本自然随之下降。

如果你也在寻找 Spanner 数据迁移同步的方案,或希望验证方案可行性,欢迎尝试 CloudCanal 免费社区版。

相关推荐
m0_588758482 小时前
CSS如何修复Safari下边框圆角溢出问题_利用background-clip属性修正
jvm·数据库·python
m0_734949792 小时前
uni-app怎么做横向滚动导航 uni-app滚动菜单Tab实现教程【代码】
jvm·数据库·python
2301_775148152 小时前
SQL如何检查字符串是否存在:INSTR与LOCATE函数使用
jvm·数据库·python
maqr_1102 小时前
c++如何计算整个文件夹内所有文件的总MD5指纹汇总校验【详解】
jvm·数据库·python
2201_761040592 小时前
mysql如何监控数据库的慢查询峰值_设置慢查询阈值告警
jvm·数据库·python
Greyson12 小时前
c++ grpc拦截器 c++如何实现grpc的客户端和服务端interceptor
jvm·数据库·python
SilentSamsara2 小时前
etcd 运维:数据一致性、备份恢复与性能调优
运维·服务器·数据库·kubernetes·kubectl·k8s·etcd
m0_515098422 小时前
如何增加RAC节点_addnode.sh脚本执行与实例扩展全流程
jvm·数据库·python
LiAo_1996_Y2 小时前
SQL中如何获取所有列的数据:SELECT -星号用法与性能影响
jvm·数据库·python