第 31 章

云数据库对比

云数据库对比:RDS vs Aurora vs PolarDB

云数据库彻底改变了运维方式:自动备份、一键扩容、多可用区 HA、按需计费。但不同云厂商的产品在架构、性能、成本和生态上差异显著,选型错误代价极高。

云数据库全景

产品 厂商 架构特点 MySQL 兼容 最大存储
RDS for MySQL AWS 传统主从,共享存储(EBS) 完全兼容 64 TB
Aurora MySQL AWS 存储计算分离,6 副本存储 兼容(有差异) 128 TB
PolarDB for MySQL 阿里云 存储计算分离,共享分布式存储 高度兼容 100 TB
Cloud SQL GCP 传统主从,区域存储 完全兼容 64 TB
Azure Database 微软 传统主从 + Flexible Server 完全兼容 16 TB
TDSQL / CynosDB 腾讯云 存储计算分离 高度兼容 100 TB

Amazon RDS for MySQL

AWSRDS for MySQL

托管的传统 MySQL,底层基于 EBS 存储。最大优势是完全兼容原生 MySQL,迁移无缝;最大局限是性能受单机 EBS IOPS 瓶颈限制。

关键特性

特性 说明
多可用区(Multi-AZ) 同步复制到备用实例,故障自动切换(60-120 秒)
只读副本 异步复制,最多 5 个,可跨区域(Cross-Region Read Replica)
存储类型 gp2 / gp3(通用)/ io1 / io2(高 IOPS,最高 256K IOPS)
自动备份 每日快照 + Binlog,点恢复(PITR)精度 5 分钟
参数组 通过 Parameter Group 修改大多数 MySQL 参数
加密 静态加密(AES-256)+ 传输加密(TLS)+ KMS 托管密钥

适用场景与限制

✅ 适合:
- 现有 MySQL 应用上云,需要完全兼容
- 中小规模,IOPS 需求 < 64K
- 开发/测试环境(db.t3.micro 极便宜)

❌ 限制:
- 不能修改 super_read_only 等底层参数
- 不支持 MyISAM 表(全量备份期间会锁表)
- 存储扩容只能向上,不能缩减

Amazon Aurora MySQL

AWSAurora MySQL

AWS 自研的云原生数据库,存储层重新设计:数据在 3 个可用区的 6 个副本中存储,写入只需 4/6 副本确认即可返回,读取只需 3/6 副本。InnoDB Redo Log 直接写存储层,绕过了 double-write buffer。


Aurora 架构
┌─────────────────────────────────────┐
│  Writer Instance    Reader Instance │
│  (compute)          (compute)       │
└──────────┬──────────────────────────┘
           │ 日志写入 (非数据页)
┌──────────▼──────────────────────────┐
│   Aurora 分布式存储层                │
│   AZ-1: [copy1][copy2]              │
│   AZ-2: [copy3][copy4]              │
│   AZ-3: [copy5][copy6]  (6 副本)   │
└─────────────────────────────────────┘
写入仲裁: 4/6  读取仲裁: 3/6

Aurora vs RDS 性能对比

指标 RDS MySQL Aurora MySQL
写入 TPS(官方声称) 基准 5x(实际 1.5-3x)
故障切换时间 60-120 秒 10-30 秒
只读副本延迟 毫秒-秒级 通常 <100ms
最大存储 64 TB 128 TB(自动扩展)
价格(同规格) 1x 约 1.2-1.5x

Aurora Serverless v2

# 配置 Aurora Serverless v2 扩缩容范围
aws rds modify-db-cluster \
  --db-cluster-identifier my-cluster \
  --serverless-v2-scaling-configuration MinCapacity=0.5,MaxCapacity=128

-- 1 ACU ≈ 2 GB RAM,0.5 ACU 是最小单位
-- 可在数秒内从 0.5 ACU 扩展到 128 ACU
-- 适合:流量波动大的 SaaS / 开发测试环境

Aurora 的隐藏限制

注意这些 Aurora 与原生 MySQL 的差异:

• 不支持 MyISAM(静默转换为 InnoDB,可能出 bug)

• AUTO_INCREMENT 在故障切换后可能不连续(GAP 更大)

• 某些 FULLTEXT 索引行为不同

• 不支持 XA 事务(Aurora MySQL 2.x)

• 存储引擎层不开放,无法安装插件

阿里云 PolarDB for MySQL

阿里云PolarDB for MySQL

阿里云自研,架构与 Aurora 类似,一写多读,底层使用 PolarFS 分布式存储。在中国公有云市场占有率第一,深度集成阿里云生态(DMS、DTS、MaxCompute)。

特性 PolarDB Aurora
只读节点数 最多 15 个 最多 15 个
只读延迟 <1ms(物理复制) <100ms(物理复制)
最大规格 88 核 710 GB 128 核 1 TB(r6g.16xlarge)
Global Database 支持(多Region) 支持(Aurora Global DB)
HTAP 支持(IMC 列式内存引擎) 不支持(需 Redshift)
价格(中国区) 较低 较高

PolarDB HTAP 特性

-- 开启 In-Memory Column Store (IMC),无需修改 SQL
-- 优化器自动决定是否使用列式引擎
SET polar_enable_imci = ON;

-- 指定 HINT 强制使用 IMCI(分析查询)
SELECT /*+ IMCI */ department, SUM(salary)
FROM employees
GROUP BY department;
-- 在只读节点执行,不影响主库写入性能

Google Cloud Spanner

Cloud Spanner 是 Google 的全球分布式数据库,提供真正的全球强一致性(TrueTime API),但与 MySQL 兼容性有限(通过 MySQL 接口层访问),价格昂贵。适合需要全球多区域写入的应用。

# Cloud Spanner 定价示例(us-central1 单区域)
Processing units: $0.09/100 PU/hour
Storage:          $0.30/GB/month

# 1000 PU (最小建议生产配置) ≈ $720/月 起步
# 适合:跨国金融/游戏/SaaS,不适合成本敏感的国内业务

深度对比:Aurora vs PolarDB

维度 Aurora MySQL PolarDB for MySQL 胜出
写性能(OLTP) 相当 平局
只读副本延迟 <100ms <1ms PolarDB
最大规格 1 TB RAM 710 GB RAM Aurora
HTAP 支持 不支持 支持 IMCI PolarDB
全球部署 Aurora Global DB PolarDB Global DB 平局
中国合规 AWS 中国区限制多 完整支持 PolarDB
MySQL 兼容性 差异较多 高度兼容 PolarDB
生态成熟度 全球最丰富 国内最丰富 看场景
价格(中国区) 较高 较低 PolarDB

上云迁移方案

自建 MySQL → 云数据库迁移步骤


阶段 1: 全量迁移
  mysqldump / Xtrabackup → 云数据库初始化

阶段 2: 增量同步(实时 CDC)
  源库 Binlog → DTS/DMS/Debezium → 目标云库

阶段 3: 数据校验
  pt-table-checksum / 云厂商校验工具

阶段 4: 业务切流
  修改应用连接串 → 灰度切换 → 全量切换

阶段 5: 清理
  下线源库,保留观察期(建议 7 天)

# AWS DMS(Database Migration Service)迁移配置示例
aws dms create-replication-task \
  --replication-task-identifier mysql-to-aurora \
  --source-endpoint-arn arn:aws:dms:... \
  --target-endpoint-arn arn:aws:dms:... \
  --migration-type full-load-and-cdc \
  --table-mappings file://table-mappings.json \
  --replication-task-settings file://task-settings.json

成本优化

AWS 费用优化技巧

# 1. 使用 Reserved Instances(预留实例)节省 30-60%
aws rds purchase-reserved-db-instances-offering \
  --reserved-db-instances-offering-id ... \
  --db-instance-count 1 \
  --reserved-db-instance-id my-reserved-instance

# 2. 使用 gp3 替代 gp2(同 IOPS 费用更低)
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --storage-type gp3 \
  --iops 3000 \
  --storage-throughput 125

# 3. Aurora Serverless v2 适合低流量环境
# 最小 0.5 ACU ≈ 按 $0.12/ACU-hour 计费

# 4. 停止非生产实例
aws rds stop-db-instance --db-instance-identifier dev-db
# 注意:停止后最多 7 天自动重启

选型指南

场景 推荐产品 原因
国内 OLTP + 低延迟只读 PolarDB for MySQL <1ms 只读延迟,价格合理,高度兼容
AWS 生态 + 海外业务 Aurora MySQL 生态最成熟,全球可用区
流量极不稳定的 SaaS Aurora Serverless v2 秒级弹性伸缩,按用量付费
国内 OLAP + HTAP PolarDB + IMCI 无需额外 ETL,列式引擎加速分析
全球强一致写入 Cloud Spanner 唯一真正全球分布式 ACID
成本极敏感 / 开发测试 RDS MySQL t3.micro 最低 $13/月,完全兼容
现有 MySQL 迁移,不改代码 RDS MySQL 完全兼容,无需任何代码修改

实践建议:对于国内出海 SaaS 产品,推荐主库使用 PolarDB(国内区域)+ Aurora(海外区域),通过 Global Database 功能实现跨地域读写分离,兼顾国内低延迟和海外可用性。

本章评分
4.6  / 5  (3 评分)

💬 留言讨论