云数据库服务
云数据库服务选型、托管关系型数据库、云原生数据库、NoSQL托管服务、数据库迁移策略、多区域复制与容灾。
1. 云数据库服务概述
1.1 托管数据库 vs 自建数据库
| 维度 | 托管数据库 | 自建数据库 |
|---|---|---|
| 运维负担 | 低(自动备份/升级/监控) | 高(全链路自行负责) |
| 可用性 | 内置多 AZ 高可用 | 需自行搭建主从/集群 |
| 弹性 | 按需伸缩,存储自动扩展 | 容量规划,扩容复杂 |
| 成本 | 按使用付费,有溢价 | 前期投入大,长期可能更低 |
| 灵活性 | 受限于云厂商功能 | 完全控制配置与插件 |
| 迁移风险 | 厂商锁定 | 无锁定 |
1.2 云数据库服务分类
flowchart LR
S[云数据库服务]
S --> R[关系型<br/>RDS/Cloud SQL/MySQL/PostgreSQL/SQL Server/Oracle]
S --> N[NoSQL<br/>DynamoDB/MongoDB Atlas/ElastiCache/Firestore]
S --> C[云原生/新架构<br/>Aurora/PolarDB/TiDB Cloud/CockroachDB/PlanetScale]
2. 托管关系型数据库
2.1 AWS RDS
RDS 支持多种数据库引擎,提供统一的托管能力:
| 引擎 | 版本 | 最大存储 | 最大实例 |
|---|---|---|---|
| MySQL | 8.0 | 64 TB | db.r6g.16xlarge |
| PostgreSQL | 16 | 64 TB | db.r6g.16xlarge |
| MariaDB | 10.11 | 64 TB | db.r6g.16xlarge |
| Oracle | 19c | 64 TB | db.r6g.16xlarge |
| SQL Server | 2022 | 16 TB | db.r6g.16xlarge |
多 AZ 部署架构:
flowchart TD
subgraph Region[AWS Region]
subgraph AZA[AZ-A]
P[Primary R/W]
end
subgraph AZB[AZ-B]
S1[Standby 不可读]
end
RR[Read Replica<br/>异步复制,跨区域可选,可读]
end
P <-->|同步复制| S1
P --> RR
经典 Multi-AZ 部署中,Standby 只是热备,不对外提供读服务,应用仅通过主端点 访问;需要可读的备库应使用 Read Replica,或 MySQL 8.0/PostgreSQL 的 Multi-AZ DB Cluster(两个可读 Standby + 读写分离端点)。
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 自研的云原生关系数据库,核心创新在于存储计算分离:
flowchart TD
subgraph Aurora[Aurora 架构]
subgraph Compute[计算层]
W[Writer Instance]
R1[Reader 1 Instance]
R2[Reader 2 Instance]
end
subgraph Storage[Aurora Storage 6 副本/3 AZ]
P1[P1 AZ-A] P2[P2 AZ-A] P3[P3 AZ-B] P4[P4 AZ-B] P5[P5 AZ-C] P6[P6 AZ-C]
end
W --> Storage
R1 --> Storage
R2 --> Storage
end
Aurora 关键特性:
- 日志即数据库:计算节点只写 Redo Log 到存储层,存储节点自行构建数据页
- 6 副本写入:4/6 确认即写入成功,兼顾性能与可靠性
- 读副本延迟:亚毫秒级(共享存储,无需复制数据)
- 快速克隆:Copy-on-Write 克隆,秒级创建
Aurora 写入流程:
可靠性方面,官方口径是存储层面向 99.99% 以上可用性、跨 3 个 AZ 的 6 副本冗余 自动修复——不要用单一数字公式外推,实际 SLA 以当期官方文档为准。
3.2 阿里云 PolarDB
PolarDB 采用类似的存储计算分离架构:
- PolarFS:分布式文件系统,RDMA 网络低延迟
- 共享存储:一写多读,读节点直接共享存储
- 物理复制:基于 Redo Log 的物理复制,延迟 < 1ms
- Serverless:自动弹性,按 ACU 计费
3.3 TiDB Cloud
TiDB 是开源的 HTAP(混合事务/分析处理)数据库:
flowchart TD
subgraph TiDBCloud[TiDB Cloud 架构]
TDB[TiDB SQL 层<br/>解析 → 优化 → 执行 → 返回]
TKV[TiKV 行存/OLTP<br/>Raft 复制]
TF[TiFlash 列存/OLAP<br/>异步复制]
PD[PD 调度器]
end
TDB --> TKV
TDB --> TF
TKV --> PD
TF --> PD
HTAP 查询路由:
4. NoSQL 托管服务
4.1 DynamoDB
AWS DynamoDB 是全托管的键值/文档数据库:
核心概念:
| 概念 | 描述 |
|---|---|
| Table | 数据集合 |
| Item | 一条记录(最大 400KB) |
| Attribute | 字段 |
| Partition Key | 分区键(必需) |
| Sort Key | 排序键(可选) |
| GSI | 全局二级索引 |
| LSI | 本地二级索引 |
容量模式:
- 预置容量:指定 RCU/WCU,适合可预测负载
- 按需容量:自动伸缩,适合不可预测负载
DAX(DynamoDB Accelerator):内存缓存,微秒级延迟,写穿透策略。
4.2 MongoDB Atlas
全托管 MongoDB 服务,多云支持:
- 集群类型:副本集、分片集群、Serverless(实例按需启停)
- Atlas Search:内置全文搜索(基于 Lucene)
- Atlas Vector Search:向量检索,支撑 RAG 场景
- Atlas Data Federation:统一查询 S3 等外部数据源
- 自动分片:基于分片键自动数据分布
早期的 Atlas App Services(无服务器后端)与 Device Sync 已于 2025 年 9 月停止服务, 新方案不要基于它们设计。
4.3 ElastiCache / Redis 云服务
托管 Redis/Memcached 服务:
| 特性 | Redis | Memcached |
|---|---|---|
| 数据结构 | 丰富(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 | 多种 | 多种 | 全托管 |
| Debezium | MySQL/PG/Oracle | Kafka | 开源,基于日志 |
| Canal | MySQL | Kafka/自定义 | 阿里开源 |
| Cloud Canal | 多种 | 多种 | 商业化 CDC |
5.4 数据校验
迁移后必须进行数据校验:
6. 多区域复制与容灾
6.1 跨区域复制策略
| 策略 | 复制方式 | RPO | 成本 | 适用场景 |
|---|---|---|---|---|
| 同步复制 | 写入时同步 | 0 | 高 | 金融交易 |
| 异步复制 | 后台同步 | 秒级-分钟级 | 中 | 一般业务 |
| 半同步 | 至少1个从确认 | 接近0 | 中高 | 关键业务 |
6.2 Aurora Global Database
Aurora 全球数据库支持跨区域只读和灾难恢复:
flowchart LR
subgraph P[主区域 us-1]
PW[Writer]
PS[Storage 6副本]
PW --> PS
end
subgraph B[备区域 eu-1]
BR[Reader]
BS[Storage 6副本]
BR --> BS
end
PS -->|复制| BS
- 跨区域复制延迟通常 < 1 秒
- 备区域可挂载最多 16 个读实例
- 灾难恢复 RTO < 1 分钟(托管的集群切换)
6.3 DynamoDB Global Tables
DynamoDB 全球表支持多区域多活写入:
- 所有区域均可读写
- 基于最后写入者胜出(LWW)解决冲突
- 复制延迟通常 < 1 秒
- 适合全球分布的应用
6.4 容灾演练
容灾方案必须定期验证:
- 桌面演练:团队讨论故障场景与应对步骤
- 组件演练:模拟单个组件故障(数据库主从切换)
- 全量演练:模拟区域级故障,验证完整恢复流程
- 混沌工程:生产环境注入故障(Chaos Monkey、Litmus)
小结
- 初学者要点:托管数据库买的是”运维责任转移”,溢价换来自动备份/高可用/监控; RDS 多 AZ 保可用、Read Replica 扩读、Aurora 用存储计算分离同时改善两者; 选型先问访问模式——关系型、键值、缓存各有其位。
- 进阶注意:故障切换 1-5 分钟内应用会断连,连接池必须支持自动重连与 DNS 重解析; CDC 迁移的切换窗口靠”最后一公里”增量收敛,校验(行数 + checksum + 抽样)不可省; DynamoDB 按需容量单价约为预置的 2-3 倍,稳定负载切回预置可省一半。