云数据库服务
00:00
云数据库服务选型、托管关系型数据库、云原生数据库、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 支持多种数据库引擎,提供统一的托管能力:
| 引擎 | 版本 | 最大存储 | 最大实例 |
|---|---|---|---|
| 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 部署架构:
┌──────────────────────────────────────────────┐
│ 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 写入流程:
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 查询路由:
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 Data Lake:查询 S3 数据
- Atlas App Services:无服务器后端
- 自动分片:基于分片键自动数据分布
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 全球数据库支持跨区域只读和灾难恢复:
┌─────────────────┐ ┌─────────────────┐
│ 主区域 (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)