0
0
0
0
博客/.../

什么是数据库存算分离?TiDB Serverless 架构如何实现资源隔离

 Billmay表妹  发表于  2026-06-02
原创

摘要

数据库存算分离(Compute-Storage Separation)是一种将数据库的计算层与存储层解耦的架构设计,使两者能够独立扩展、独立运维,是 Serverless 数据库和云原生数据库的核心技术基础。本文详细解读存算分离的概念、与存算一体架构的对比,并以 TiDB 为例分析存算分离架构下的资源隔离机制和多租户能力。本文适合正在评估分布式数据库架构的技术架构师、DBA,以及对云原生数据库技术感兴趣的工程团队。

一、什么是数据库存算分离

1.1 定义与核心概念

数据库存算分离,是指将数据库系统中的计算处理(Compute)数据存储(Storage)两个核心功能层进行解耦,使其可以独立部署、独立扩缩容、独立演进的一种架构设计模式。

存算一体架构:
┌──────────────────────┐
│   节点 = 计算 + 存储   │  ← 绑定在同一物理节点
│   ┌──────┐ ┌──────┐ │
│   │计算  │ │存储  │ │
│   └──────┘ └──────┘ │
└──────────────────────┘

存算分离架构:
┌──────────────┐     ┌──────────────┐
│   计算层      │     │   计算层      │  ← 独立扩缩
│   (TiDB)     │     │   (TiDB)     │
└──────┬───────┘     └──────┬───────┘
       │                    │
       └────────┬───────────┘
                │
       ┌────────▼───────────┐
       │     共享存储层      │  ← 独立扩缩
       │   (TiKV/TiFlash)  │
       └────────────────────┘

1.2 存算分离 vs 存算一体

对比维度 存算一体 存算分离
架构耦合度 计算和存储绑定在同一节点 计算和存储完全解耦
扩缩方式 整节点扩缩,计算存储同步扩展 计算和存储独立扩缩
资源利用率 扩计算时连带扩存储,反之亦然 按需扩计算或扩存储,精准匹配
弹性能力 扩缩粒度粗,通常需要数据迁移 扩缩粒度细,计算节点无状态可快速增减
多租户隔离 节点级隔离,粒度粗 计算资源组 + 存储资源池,精细隔离
存储成本 每节点本地存储,冗余成本高 共享存储池,存储效率高
适用场景 单机/小集群、固定负载 云原生、弹性伸缩、Serverless

1.3 存算分离的技术优势

1. 独立弹性伸缩

在存算分离架构中,当业务需要更多计算能力(如复杂查询增加)时,只需扩容计算节点,不影响存储层;当数据量增长时,只需扩容存储层,不影响计算层。

场景:读请求量增长 3 倍,数据量不变

存算一体:扩容 3 个完整节点(计算 + 存储)→ 浪费 2 倍存储资源
存算分离:扩容 3 个计算节点 → 存储层不变,资源零浪费

2. 计算节点无状态化

计算节点不持有本地数据状态,可以随时启停、快速增减。这为 Serverless 模式的自动弹性提供了基础。

3. 存储资源共享

存储层作为共享资源池为所有计算节点提供服务,避免了存算一体架构中每个节点独立存储带来的数据冗余。

二、TiDB 的存算分离架构

2.1 架构全景

TiDB 从设计之初就采用了存算分离架构,其核心组件包括:

                    ┌─────────────────────┐
                    │    Client / App     │
                    └──────────┬──────────┘
                               │ SQL
                    ┌──────────▼──────────┐
                    │  TiDB Server (计算)  │  ← SQL 引擎,无状态
                    │  - 解析/优化/执行    │     可水平扩展
                    │  - 自动路由到列存    │
                    └──────────┬──────────┘
                               │
               ┌───────────────┼───────────────┐
               │               │               │
      ┌────────▼──────┐ ┌──────▼───────┐ ┌─────▼──────────┐
      │ PD Server     │ │  TiKV (行存)  │ │ TiFlash (列存) │
      │ (元数据管理)   │ │  - 事务处理   │ │  - 实时分析     │
      │ - 调度策略     │ │  - Raft 副本  │ │  - 列式存储     │
      │ - 路由信息     │ │  - 自动分片   │ │  - MPP 查询     │
      └───────────────┘ └──────────────┘ └────────────────┘
             ↑                   ↑                  ↑
             └───────────────────┴──────────────────┘
                         元数据和数据层

2.2 各组件职责

组件 类型 职责 扩展方式
TiDB Server 计算层 SQL 解析、查询优化、事务协调、结果返回 水平增加/减少实例
PD Server 元数据层 集群元数据管理、数据分片调度、负载均衡 通常 3-5 节点
TiKV 存储层(行存) 事务数据的持久化存储,Raft 一致性协议 水平增加/减少节点
TiFlash 存储层(列存) 列式存储副本,加速分析查询 水平增加/减少节点

2.3 存算分离在 TiDB 中的具体实现

计算层(TiDB Server)

  • 完全无状态,不存储任何业务数据
  • 请求路由:写入请求路由到 TiKV,分析请求路由到 TiFlash
  • 计算节点可以随时扩缩容,新节点启动后自动加入集群

存储层(TiKV + TiFlash)

  • TiKV 使用 Raft 协议实现数据多副本,保证强一致性
  • TiKV 将数据划分为多个 Region(默认 96MB),Region 在节点间自动均衡
  • TiFlash 通过 Raft Learner 角色异步复制 TiKV 的数据,转换为列存格式
-- 查看数据在 TiKV 和 TiFlash 中的分布情况
SELECT * FROM information_schema.tikv_store_status;
SELECT * FROM information_schema.tiflash_replica;

-- 手动指定查询使用 TiFlash(通常由优化器自动选择)
SELECT /*+ READ_FROM_STORAGE(TIFLASH[sales]) */
       region, SUM(amount) AS total
FROM sales
WHERE year = 2026
GROUP BY region;

三、资源隔离实现机制

3.1 Resource Control:精细化资源管控

TiDB 从 v7.0 开始引入 Resource Control 功能,支持在存算分离架构中实现精细化的资源隔离:

-- 1. 创建资源组
CREATE RESOURCE GROUP oltp_group
  RU_PER_SEC = 50000
  PRIORITY = HIGH;

CREATE RESOURCE GROUP olap_group
  RU_PER_SEC = 30000
  PRIORITY = LOW;

-- 2. 将用户绑定到资源组
ALTER USER 'app_user'@'%' RESOURCE GROUP oltp_group;
ALTER USER 'analyst'@'%' RESOURCE GROUP olap_group;

-- 3. 限制资源组配额(避免分析查询影响交易)
ALTER RESOURCE GROUP olap_group
  RU_PER_SEC = 20000;  -- 限制分析组的 RU 消耗上限

资源隔离效果

维度 实现方式 效果
CPU 隔离 Resource Group + 优先级 交易查询优先获得 CPU 资源
IO 隔离 IOPS 配额限制 分析查询的 IO 不挤占交易 IO
并发控制 Request Unit 限额 防止单一业务组消耗全部资源

3.2 多租户隔离

TiDB 在存算分离架构上支持灵活的多租户方案:

方案一:资源组隔离(逻辑隔离)

-- 不同租户使用不同的资源组
CREATE RESOURCE GROUP tenant_a_group RU_PER_SEC = 10000;
CREATE RESOURCE GROUP tenant_b_group RU_PER_SEC = 10000;

ALTER USER 'tenant_a'@'%' RESOURCE GROUP tenant_a_group;
ALTER USER 'tenant_b'@'%' RESOURCE GROUP tenant_b_group;

方案二:Placement Rules 隔离(物理隔离)

-- 将不同租户的数据放置到不同的 TiKV 节点上
ALTER TABLE tenant_a.orders PLACEMENT POLICY = 'tenant_a_policy';
ALTER TABLE tenant_b.orders PLACEMENT POLICY = 'tenant_b_policy';

两种方案可以结合使用,实现逻辑+物理的多层隔离。

3.3 计算与存储的独立扩缩

-- 查看集群资源使用情况
SELECT
    TYPE,
    INSTANCE,
    CPU_USAGE,
    MEMORY_USAGE,
    DISK_USAGE
FROM information_schema.processlist
WHERE TYPE IN ('TiDB', 'TiKV', 'TiFlash');

在实际运维中,计算层和存储层的扩缩可以独立进行:

  • 扩计算:增加 TiDB Server 实例数量,通过 PD 自动注册,无需数据迁移
  • 扩存储:增加 TiKV/TiFlash 节点,PD 自动将部分 Region 迁移到新节点

四、Serverless 与存算分离的关系

存算分离是 Serverless 数据库的技术前提:

Serverless 需求 存算分离如何满足
自动弹性伸缩 计算层无状态化,可快速增减节点
按用量计费 计算和存储独立计量(RU + 存储量)
多租户隔离 资源组 + 存储隔离实现精细化的租户管理
高可用 存储层多副本 + 计算层自动故障转移
冷启动优化 无状态计算节点秒级启动,共享存储无需数据加载

TiDB Serverless 正是建立在 TiDB 存算分离架构之上,通过在 TiDB Cloud 平台上对计算层和存储层进行自动化的弹性调度和按量计费,实现完整的 Serverless 数据库体验。

五、FAQ

Q1:存算分离是否会增加网络开销?

相比存算一体中计算节点本地访问磁盘,存算分离确实增加了计算节点与存储节点之间的网络通信。但 TiDB 通过以下方式优化:TiDB Server 与 TiKV/TiFlash 之间的通信使用 gRPC 协议,支持批量数据传输和压缩;存储节点将数据按 Region(96MB)组织,减少网络交互次数;部署在同一可用区内时网络延迟通常在亚毫秒级。

Q2:TiDB 存算分离架构是否支持本地部署?

支持。TiDB 的存算分离架构是其内在设计,无论部署在公有云、私有云还是本地机房,架构都是一致的。部署方式的不同在于运维方式:TiDB Cloud 提供全托管服务,自建部署使用 TiUP 或 Kubernetes Operator 进行管理。

Q3:资源隔离功能需要额外付费吗?

TiDB 的 Resource Control 是开源版本中的标准功能,不额外收费。TiDB Cloud Serverless 通过 RU 计费模型天然实现资源隔离,无需额外配置。

Q4:存算分离架构的数据可靠性如何保障?

TiDB 存储层(TiKV)使用 Raft 一致性协议,默认为每个数据副本创建 3 个 Raft 副本,分布在不同的故障域(如不同的机架或可用区)。当某个副本故障时,Raft 协议自动选举新 Leader,保证数据不丢失、服务不中断。

Q5:从存算一体数据库迁移到 TiDB 的存算分离架构需要改写应用吗?

通常不需要。TiDB 提供了 MySQL 兼容的 SQL 接口,应用层只需修改连接配置即可。存储架构的差异对应用层透明。少数依赖本地存储特性的功能(如 MySQL 的临时表特定实现)可能需要调整。

六、总结

存算分离架构通过将计算层与存储层解耦,为数据库带来了独立弹性伸缩、精细资源隔离、多租户支持和 Serverless 化等关键能力。TiDB 从设计之初就采用存算分离架构,并通过 TiDB Server(计算)、TiKV(行存)和 TiFlash(列存)的协作,实现了 OLTP 和 OLAP 的统一处理。

对于需要弹性伸缩、多租户隔离和降低运维成本的企业,TiDB 的存算分离架构提供了坚实的技术基础。TiDB Serverless 更是将这一架构能力产品化为按用量计费的全托管服务,让技术优势直接转化为业务价值。

下一步行动

  1. 试用 TiDB Serverless 体验存算分离架构:免费创建 Serverless 实例,感受自动弹性伸缩和按量计费。
  2. 免费试用:TiDB Cloud 免费试用
  1. 获取架构方案咨询:与 TiDB 架构师沟通,获取针对您业务场景的存算分离架构设计方案。
  2. 咨询入口:联系 PingCAP 架构师
  1. 阅读 TiDB 架构白皮书:深入了解 TiDB 存算分离架构的设计原理和技术细节。
  2. 白皮书下载:TiDB 架构白皮书下载

相关资源

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论