187 lines
6.5 KiB
Markdown
187 lines
6.5 KiB
Markdown
# 第14天:RDS——托管关系型数据库
|
||
|
||
## 今天你将学到什么
|
||
|
||
今天学习 RDS(Relational Database Service),AWS 的托管数据库服务。简单说就是:AWS 帮你装好数据库、帮你备份、帮你打补丁、帮你做高可用,你只管用。
|
||
|
||
---
|
||
|
||
## 为什么不自己装数据库
|
||
|
||
你完全可以在 EC2 上自己安装 MySQL。但这意味着你要负责:
|
||
|
||
| 你要做的事 | 频率 | 难度 |
|
||
|-----------|------|------|
|
||
| 安装数据库软件 | 一次 | 中 |
|
||
| 配置参数调优 | 偶尔 | 高 |
|
||
| 定期备份 | 每天 | 中 |
|
||
| 测试备份能否恢复 | 每月 | 高 |
|
||
| 打安全补丁 | 每月 | 中 |
|
||
| 版本升级 | 每年 | 高 |
|
||
| 配置主从复制(高可用) | 一次 | 很高 |
|
||
| 主库挂了手动切换 | 紧急 | 很高 |
|
||
| 磁盘快满了扩容 | 偶尔 | 中 |
|
||
| 监控性能问题 | 持续 | 高 |
|
||
|
||
**用 RDS 的话**:以上所有事情 AWS 帮你做。你只需要关心:
|
||
- 数据库表怎么设计
|
||
- SQL 查询怎么写
|
||
- 应用怎么连接数据库
|
||
|
||
**生活类比**:自己装数据库就像自己养一头奶牛(要喂草、挤奶、看病)。用 RDS 就像订牛奶(每天送到门口,你只管喝)。
|
||
|
||
---
|
||
|
||
## RDS 支持哪些数据库
|
||
|
||
| 数据库引擎 | 特点 | 适合场景 |
|
||
|-----------|------|----------|
|
||
| MySQL | 最流行的开源数据库 | Web 应用、博客、电商 |
|
||
| PostgreSQL | 功能最强的开源数据库 | 复杂查询、地理数据、JSON 数据 |
|
||
| MariaDB | MySQL 的社区分支 | MySQL 的替代品 |
|
||
| Oracle | 老牌商业数据库 | 传统企业应用 |
|
||
| SQL Server | 微软的数据库 | .NET 应用 |
|
||
| Aurora | AWS 自研,兼容 MySQL/PostgreSQL | **性能最好,推荐新项目使用** |
|
||
|
||
**新手建议**:学习用 MySQL 或 PostgreSQL(免费、资料多)。正式项目推荐 Aurora(性能是普通 MySQL 的 5 倍)。
|
||
|
||
---
|
||
|
||
## RDS 帮你做了什么
|
||
|
||
### 自动备份
|
||
|
||
- 每天自动给数据库拍一次"快照"
|
||
- 保留 1-35 天(你设置)
|
||
- 支持**时间点恢复**:可以恢复到过去任意一秒的状态
|
||
|
||
**举个例子**:今天下午 3 点有人误删了一张重要的表。你可以把数据库恢复到下午 2:59 的状态,数据就回来了。
|
||
|
||
### 自动打补丁
|
||
|
||
- 数据库软件有安全漏洞时,AWS 自动帮你更新
|
||
- 在你指定的维护窗口执行(比如每周日凌晨 3 点)
|
||
- 不需要你操心
|
||
|
||
### 监控
|
||
|
||
- 自动收集 CPU、内存、磁盘、连接数等指标
|
||
- 可以设置告警(比如磁盘使用率超过 80% 就通知你)
|
||
|
||
---
|
||
|
||
## 高可用:Multi-AZ(多可用区部署)
|
||
|
||
这是 RDS 最重要的功能之一。
|
||
|
||
### 问题:数据库挂了怎么办?
|
||
|
||
如果你的数据库只有一台,它所在的数据中心停电了、硬盘坏了、或者发生了任何故障,你的整个应用就瘫痪了。
|
||
|
||
### 解决方案:Multi-AZ
|
||
|
||
开启 Multi-AZ 后,AWS 会自动在另一个可用区创建一个**备用数据库**:
|
||
|
||
```
|
||
你的应用
|
||
↓
|
||
数据库连接地址(DNS)
|
||
↓
|
||
┌─────────────────────────────────┐
|
||
│ 可用区 A:主数据库(处理所有读写)│
|
||
│ 可用区 B:备用数据库(实时同步) │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
**工作原理**:
|
||
1. 平时所有读写都走主数据库
|
||
2. 主数据库的每一笔写入都实时同步到备用数据库
|
||
3. 如果主数据库挂了,AWS 自动在 60-120 秒内切换到备用数据库
|
||
4. 你的应用不需要改任何代码(因为连接地址没变,DNS 自动指向新的主库)
|
||
|
||
**你的用户甚至感觉不到数据库切换了。**
|
||
|
||
---
|
||
|
||
## 只读副本(Read Replica)
|
||
|
||
### 问题:数据库读取压力太大怎么办?
|
||
|
||
很多应用是"读多写少"的——比如电商网站,浏览商品(读)的人远多于下单(写)的人。一台数据库扛不住这么多读取请求。
|
||
|
||
### 解决方案:只读副本
|
||
|
||
创建一个或多个"只读副本",专门处理读取请求:
|
||
|
||
```
|
||
你的应用
|
||
├── 写操作(下单、修改资料)→ 主数据库
|
||
└── 读操作(浏览商品、查看订单)→ 只读副本 1 / 只读副本 2
|
||
```
|
||
|
||
**特点**:
|
||
- 数据从主库异步复制到只读副本(有轻微延迟,通常几毫秒)
|
||
- 最多可以创建 5 个只读副本(Aurora 可以 15 个)
|
||
- 可以跨 Region 创建(让全球用户就近读取)
|
||
|
||
### Multi-AZ vs 只读副本
|
||
|
||
| | Multi-AZ | 只读副本 |
|
||
|--|----------|----------|
|
||
| 目的 | 高可用(防故障) | 性能扩展(分担读取压力) |
|
||
| 能否读取 | 不能(纯备份) | 能(专门用来读) |
|
||
| 数据同步 | 同步(实时) | 异步(有轻微延迟) |
|
||
| 故障切换 | 自动 | 需要手动提升为主库 |
|
||
| 跨 Region | 不支持 | 支持 |
|
||
|
||
**两者可以同时使用**:Multi-AZ 保证不挂,只读副本保证不慢。
|
||
|
||
---
|
||
|
||
## Aurora:AWS 的王牌数据库
|
||
|
||
Aurora 是 AWS 自己重新设计的数据库引擎,兼容 MySQL 和 PostgreSQL(意味着你的代码不用改),但性能和可靠性远超标准版本。
|
||
|
||
**Aurora 的优势**:
|
||
- 性能是标准 MySQL 的 **5 倍**
|
||
- 存储自动增长(10GB 到 128TB),不需要预设
|
||
- 数据自动复制 **6 份**,分布在 3 个可用区
|
||
- 即使丢失 2 份数据仍可写入,丢失 3 份仍可读取
|
||
|
||
**Aurora Serverless**:
|
||
- 自动根据负载调整计算能力
|
||
- 没有请求时可以缩到 0(不收计算费)
|
||
- 适合流量不稳定的应用、开发测试环境
|
||
|
||
---
|
||
|
||
## 安全配置
|
||
|
||
- **放在私有子网**:数据库不应该有公网 IP,只允许应用服务器访问
|
||
- **安全组**:只开放数据库端口(MySQL 3306,PostgreSQL 5432)给应用服务器
|
||
- **加密**:启用存储加密和传输加密
|
||
- **不要用 Root 密码连接**:创建专用的数据库用户,给最小权限
|
||
|
||
---
|
||
|
||
## 今天的小测验
|
||
|
||
1. 用 RDS 和自己在 EC2 上装数据库,最大的区别是什么?
|
||
2. Multi-AZ 解决什么问题?只读副本解决什么问题?
|
||
3. 为什么 Multi-AZ 的备用数据库不能用来读取数据?
|
||
4. Aurora 相比普通 MySQL RDS 有什么优势?
|
||
|
||
---
|
||
|
||
## 延伸阅读
|
||
|
||
- [RDS 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/)
|
||
- [Aurora 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/)
|
||
- [RDS 免费套餐详情](https://aws.amazon.com/rds/free/)
|
||
|
||
---
|
||
|
||
## 明天预告
|
||
|
||
明天学习 DynamoDB——AWS 的 NoSQL 数据库。它和 RDS 完全不同:没有表结构、没有 SQL、但能处理每秒数百万次请求且延迟稳定在个位数毫秒。
|