前置知识: 云计算

云数据库服务

9 minAdvanced2026/6/14

云数据库服务选型、托管关系型数据库、云原生数据库、NoSQL托管服务、数据库迁移策略、多区域复制与容灾。

1. 云数据库服务概述

1.1 托管数据库 vs 自建数据库

维度托管数据库自建数据库
运维负担低(自动备份/升级/监控)高(全链路自行负责)
可用性内置多 AZ 高可用需自行搭建主从/集群
弹性按需伸缩,存储自动扩展容量规划,扩容复杂
成本按使用付费,有溢价前期投入大,长期可能更低
灵活性受限于云厂商功能完全控制配置与插件
迁移风险厂商锁定无锁定

1.2 云数据库服务分

┌──────────────────────────────────────────────────────────┐
│                    云数据库服务                            │
├──────────────┬───────────────┬───────────────────────────┤
│  关系型       │   NoSQL       │   云原生/新架构            │
├──────────────┼───────────────┼───────────────────────────┤
│ RDS/Cloud SQL│ DynamoDB      │ Aurora                    │
│ MySQL        │ MongoDB Atlas │ PolarDB                   │
│ PostgreSQL   │ ElastiCache   │ TiDB Cloud               │
│ SQL Server   │ DynamoDB      │ CockroachDB Cloud         │
│ Oracle       │ Firestore     │ PlanetScale               │
└──────────────┴───────────────┴───────────────────────────┘

2. 托管关系型数据库

2.1 AWS RDS

RDS 支持多种数据库引擎,提供统一的托管能力:

引擎版本最大存储最大实例
MySQL8.064 TBdb.r6g.16xlarge
PostgreSQL1664 TBdb.r6g.16xlarge
MariaDB10.1164 TBdb.r6g.16xlarge
Oracle19c64 TBdb.r6g.16xlarge
SQL Server202216 TBdb.r6g.16xlarge

多 AZ 部署架构

┌──────────────────────────────────────────────┐
│                  AWS Region                   │
│  ┌──────────────┐    ┌──────────────┐       │
│  │    AZ-A      │    │    AZ-B      │       │
│  │  ┌────────┐  │    │  ┌────────┐  │       │
│  │  │ Primary│◄─┼────┼─►│ Standby│  │       │
│  │  │ (R/W)  │  │同步│  │ (R)    │  │       │
│  │  └────────┘  │复制│  └────────┘  │       │
│  └──────────────┘    └──────────────┘       │
│         │                                     │
│    ┌────▼─────┐                              │
│    │Read Replica│ (异步复制,跨区域可选)        │
│    └──────────┘                              │
└──────────────────────────────────────────────┘

2.2 阿里云 RDS

与 AWS RDS 似,但针对国内场景优化:

  • X-Engine:阿里自研存储引擎,压缩率高达 10:1
  • SQL 审计:内置 SQL 审计与性能洞察
  • CloudDBA:智能诊断与优化建议
  • 多租户隔离:资源组级别的 CPU/内存隔离

2.3 高可用与故障切换

RDS 多 AZ 故障切换流程:

1. 主实例故障检测(30-60秒)
2. DNS 切换到备用实例
3. 备用实例提升为主实例
4. 自动创建新的备用实例
5. 应用通过新 DNS 端点重连

总故障切换时间通常在 1-5 分钟

3. 云原生数据库

3.1 Amazon Aurora

Aurora 是 AWS 自研的云原生关系数据库,核心创新在于存储计算分离

┌─────────────────────────────────────────────────────┐
│                    Aurora 架构                        │
│                                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │ Writer   │  │ Reader 1 │  │ Reader 2 │  ← 计算层 │
│  │ Instance │  │ Instance │  │ Instance │          │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘          │
│       │              │              │                │
│  ┌────▼──────────────▼──────────────▼──────────┐    │
│  │         Aurora Storage (6 副本/3 AZ)         │    │
│  │  ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐      │    │
│  │  │P1 │ │P2 │ │P3 │ │P4 │ │P5 │ │P6 │      │    │
│  │  └───┘ └───┘ └───┘ └───┘ └───┘ └───┘      │    │
│  │  AZ-A   AZ-A   AZ-B   AZ-B   AZ-C   AZ-C  │    │
│  └─────────────────────────────────────────────┘    │
│                                    ← 存储层          │
└─────────────────────────────────────────────────────┘

Aurora 关键特性

  • 日志即数据库:计算节点只写 Redo Log 到存储层,存储节点自行构建数据页
  • 6 副本写入:4/6 确认即写入成功,兼顾性能与可靠性
  • 读副本延迟:亚毫秒级(共享存储,无需复制数据)
  • 快速克隆:Copy-on-Write 克隆,秒级创建

Aurora 写入流程:

写入延迟=max(4 个最快副本确认时间)\text{写入延迟} = \max(\text{4 个最快副本确认时间}) 数据可靠性=1P(6 副本中 ≥3 副本同时故障)1107\text{数据可靠性} = 1 - P(\text{6 副本中 ≥3 副本同时故障}) \approx 1 - 10^{-7}

3.2 阿里云 PolarDB

PolarDB 采用似的存储计算分离架构:

  • PolarFS:分布式文件系统,RDMA 网络低延迟
  • 共享存储:一写多读,读节点直接共享存储
  • 物理复制:基于 Redo Log 的物理复制,延迟 < 1ms
  • Serverless:自动弹性,按 ACU 计费

3.3 TiDB Cloud

TiDB 是开源的 HTAP(混合事务/分析处理)数据库:

┌─────────────────────────────────────────────┐
│              TiDB Cloud 架构                 │
│                                              │
│  ┌──────────────────────────────────────┐   │
│  │        TiDB (SQL 层)                 │   │
│  │   解析 → 优化 → 执行 → 返回          │   │
│  └──────────┬───────────┬───────────────┘   │
│             │           │                    │
│  ┌──────────▼──┐  ┌─────▼──────────┐       │
│  │   TiKV      │  │   TiFlash      │       │
│  │ (行存/OLTP) │  │ (列存/OLAP)    │       │
│  │  Raft 复制  │  │  异步复制      │       │
│  └─────────────┘  └────────────────┘       │
│             │                                │
│  ┌──────────▼──────────────────────────┐    │
│  │         PD (调度器)                  │    │
│  └─────────────────────────────────────┘    │
└─────────────────────────────────────────────┘

HTAP 查询路由:

查询类型={OLTPTiKV(行存)OLAPTiFlash(列存)\text{查询类型} = \begin{cases} \text{OLTP} \Rightarrow \text{TiKV(行存)} \\ \text{OLAP} \Rightarrow \text{TiFlash(列存)} \end{cases}

4. NoSQL 托管服务

4.1 DynamoDB

AWS DynamoDB 是全托管的键值/文档数据库:

核心概念

概念描述
Table数据集合
Item一条记录(最大 400KB)
Attribute字段
Partition Key分区键(必需)
Sort Key排序键(可选)
GSI全局二级索引
LSI本地二级索引

容量模式

  • 预置容量:指定 RCU/WCU,适合可预测负载
  • 按需容量:自动伸缩,适合不可预测负载
RCU={1强一致读 4KB2最终一致读 4KB\text{RCU} = \begin{cases} 1 & \text{强一致读 } \leq 4\text{KB} \\ 2 & \text{最终一致读 } \leq 4\text{KB} \end{cases} WCU=1 per 1KB write\text{WCU} = 1 \text{ per } 1\text{KB write}

DAX(DynamoDB Accelerator):内存缓存,微秒级延迟,写穿透策略。

4.2 MongoDB Atlas

全托管 MongoDB 服务,多云支持:

  • 集群类型:副本集、分片集群、Serverless
  • Atlas Search:内置全文搜索(基于 Lucene)
  • Atlas Data Lake:查询 S3 数据
  • Atlas App Services:无服务器后端
  • 自动分片:基于分片键自动数据分布

4.3 ElastiCache / Redis 云服务

托管 Redis/Memcached 服务:

特性RedisMemcached
数据结构丰富(String/List/Set/Hash/ZSet)简单 KV
持久化RDB + AOF
集群Redis Cluster客户端分片
复制主从复制
适用场景缓存 + 数据存储纯缓存

5. 数据库迁移策略

5.1 迁移方法论

评估 → 规划 → 迁移 → 验证 → 切换 → 优化
 │       │       │       │       │       │
 ▼       ▼       ▼       ▼       ▼       ▼
源端分析  迁移方案  全量+增量  数据校验  灰度切换  性能调优
兼容性    回滚计划  CDC同步   功能测试  流量切换  成本优化

5.2 同构迁移 vs 异构迁移

同构迁移(MySQL → RDS MySQL):

  • 使用原生工具(mysqldump、DTS)
  • 兼容性高,风险低
  • 主要关注版本差异和字符集

异构迁移(Oracle → PostgreSQL):

  • Schema 转换(数据型、存储过程、SQL 方言)
  • 使用 AWS SCT / 阿里云 ADAM 评估兼容性
  • 应用代码适配工作量可能很大

5.3 最小停机迁移(CDC)

基于变更数据捕获(CDC)的迁移流程:

1. 全量导出源库数据 → 导入目标库
2. 启动 CDC 捕获增量变更
3. 持续同步增量数据到目标库
4. 验证数据一致性
5. 短暂停机(秒级),同步最后增量
6. 切换应用到目标库

CDC 工具:

工具源端目标端特点
AWS DMS多种多种全托管
DebeziumMySQL/PG/OracleKafka开源,基于日志
CanalMySQLKafka/自定义阿里开源
Cloud Canal多种多种商业化 CDC

5.4 数据校验

迁移后必须进行数据校验:

校验方法={行数对比快速验证Checksum 对比精确验证业务抽样验证语义验证\text{校验方法} = \begin{cases} \text{行数对比} & \text{快速验证} \\ \text{Checksum 对比} & \text{精确验证} \\ \text{业务抽样验证} & \text{语义验证} \end{cases}

6. 多区域复制与容灾

6.1 跨区域复制策略

策略复制方式RPO成本适用场景
同步复制写入时同步0金融交易
异步复制后台同步秒级-分钟级一般业务
半同步至少1个从确认接近0中高关键业务

6.2 Aurora Global Database

Aurora 全球数据库支持跨区域只读和灾难恢复:

┌─────────────────┐     ┌─────────────────┐
│   主区域 (us-1)  │     │  备区域 (eu-1)   │
│  ┌──────────┐   │     │  ┌──────────┐   │
│  │  Writer   │   │     │  │  Reader   │   │
│  └────┬─────┘   │     │  └────┬─────┘   │
│       │         │     │       │         │
│  ┌────▼─────┐   │     │  ┌────▼─────┐   │
│  │ Storage  │───┼────►│  │ Storage  │   │
│  │ (6副本)  │   │复制 │  │ (6副本)  │   │
│  └──────────┘   │     │  └──────────┘   │
└─────────────────┘     └─────────────────┘
  • 跨区域复制延迟通常 < 1 秒
  • 备区域可挂载最多 16 个读实例
  • 灾难恢复 RTO < 1 分钟(托管的集群切换)

6.3 DynamoDB Global Tables

DynamoDB 全球表支持多区域多活写入:

  • 所有区域均可读写
  • 基于最后写入者胜出(LWW)解决冲突
  • 复制延迟通常 < 1 秒
  • 适合全球分布的应用

6.4 容灾演练

容灾方案必须定期验证:

  • 桌面演练:团队讨论故障场景与应对步骤
  • 组件演练:模拟单个组件故障(数据库主从切换)
  • 全量演练:模拟区域级故障,验证完整恢复流程
  • 混沌工程:生产环境注入故障(Chaos Monkey、Litmus)