Amazon RDS (Relational Database Service)
Relational Database Service, MySQL, PostgreSQL, Aurora, Multi-AZ
Tổng quan
Amazon RDS (Relational Database Service) là dịch vụ cơ sở dữ liệu quan hệ được quản lý toàn diện (fully managed) của AWS. RDS giúp đơn giản hóa việc thiết lập, vận hành và mở rộng các cơ sở dữ liệu quan hệ trên đám mây.
Tại sao cần RDS?
| Tự quản lý (EC2 + Database) | Amazon RDS |
|---|---|
| Phải cài đặt, cấu hình phần cứng | AWS quản lý hoàn toàn |
| Tự backup, restore | Tự động backup |
| Tự patch, update | AWS tự động vá lỗi |
| Tự monitoring | CloudWatch tích hợp sẵn |
| Tự thiết lập HA/DR | Multi-AZ có sẵn |
Các Database Engine được hỗ trợ
RDS hỗ trợ 6 database engine phổ biến:
1. Amazon Aurora
- Database của AWS, tương thích MySQL và PostgreSQL
- Hiệu suất gấp 5x MySQL và 3x PostgreSQL
- Auto-scaling storage từ 10GB đến 128TB
- Giá cao hơn nhưng performance tốt nhất
Tại sao Aurora nhanh hơn 5x MySQL và 3x PostgreSQL?
Aurora nhanh hơn không phải vì thay đổi MySQL/PostgreSQL engine, mà vì AWS thiết kế lại hoàn toàn tầng storage.
Kiến trúc truyền thống vs Aurora:
Các cải tiến chính:
| Cải tiến | Tác động |
|---|---|
| Log-structured storage | Giảm 90%+ network I/O |
| Quorum-based writes (4/6) | Không đợi tất cả nodes |
| Parallel distributed I/O | Ghi đồng thời 6 nodes |
| Shared storage layer | All replicas đọc cùng 1 storage |
| Replica lag ~10-20ms | Thay vì seconds như RDS |
Ví dụ cụ thể:
- UPDATE 1 row (thay đổi 100 bytes)
- MySQL: Ghi lại page 16KB + replicate 16KB
- Aurora: Chỉ gửi log ~100 bytes, storage tự rebuild
2. MySQL
- Open-source phổ biến nhất
- Phiên bản: 5.7, 8.0
- Phù hợp: Web applications, CMS (WordPress, Drupal)
3. PostgreSQL
- Open-source với nhiều tính năng enterprise
- Hỗ trợ JSONB, full-text search
- Phù hợp: Analytics, GIS applications
4. MariaDB
- Fork của MySQL với cải tiến
- Tương thích MySQL
- Phù hợp: Thay thế MySQL với performance tốt hơn
5. Oracle
- Enterprise database mạnh mẽ
- License: BYOL (Bring Your Own License) hoặc License Included
- Phù hợp: Enterprise applications
6. Microsoft SQL Server
- Database của Microsoft
- Các edition: Express, Web, Standard, Enterprise
- Phù hợp: .NET applications, Windows environment
DB Instance Classes (Loại Instance)
Các họ Instance chính:
| Loại | Mô tả | Use Case |
|---|---|---|
| db.t3/t4g | Burstable, giá rẻ | Dev/Test, low traffic |
| db.m5/m6g | General purpose | Production workloads |
| db.r5/r6g | Memory optimized | High-memory applications |
| db.x2g | Memory intensive | Large in-memory databases |
3 Loại Instance Classes chi tiết
| Đặc điểm | Standard (M) | Memory Optimized (R/X) | Burstable (T) |
|---|---|---|---|
| CPU | Ổn định | Ổn định | Baseline + Burst |
| RAM/CPU | Cân bằng | RAM cao | Cân bằng |
| Giá | $$ | $$$ | $ |
| Free Tier | ❌ | ❌ | ✓ db.t3.micro |
Ví dụ đặt tên:
Storage Types
RDS sử dụng Amazon EBS (Elastic Block Store) - là network-attached storage, KHÔNG phải Instance Store.
Tại sao RDS dùng EBS thay vì Instance Store?
| Tiêu chí | Instance Store | EBS (RDS dùng) |
|---|---|---|
| Persistence | ❌ Mất khi stop/terminate | ✅ Data tồn tại độc lập |
| Durability | ❌ Không replicate | ✅ Tự động replicate trong AZ |
| Snapshot | ❌ Không hỗ trợ | ✅ Có thể backup |
| Resize | ❌ Cố định | ✅ Có thể mở rộng |
⚠️ Aurora KHÔNG dùng EBS mà dùng distributed storage layer riêng (6 copies/3 AZs)
Các loại EBS Storage cho RDS:
1. General Purpose SSD (gp2/gp3)
2. Provisioned IOPS SSD (io1/io2)
3. Magnetic (Standard)
Allocated Storage
Allocated Storage = Dung lượng ổ đĩa (đặt trước) cho RDS database.
| Setting | Ý nghĩa |
|---|---|
| Allocated storage | Dung lượng ban đầu (VD: 20 GB) |
| Maximum storage | Giới hạn tối đa khi auto-scaling |
| Storage autoscaling | Tự động tăng khi gần đầy |
[!NOTE] Free Tier: Allocated storage tối đa 20 GB.
Storage Auto Scaling
- Tự động mở rộng storage khi gần đầy
- Set maximum storage limit
- Không downtime khi scaling
Parameter Groups và Option Groups
Parameter Groups
Parameter Group = Tập hợp các configuration parameters cho database engine.
| Loại Parameter | Mô tả | Cần reboot? |
|---|---|---|
| Dynamic | Áp dụng ngay lập tức | ❌ |
| Static | Cần reboot để áp dụng | ✅ |
Các loại Parameter Group:
| Loại | Mô tả |
|---|---|
| Default | AWS tạo sẵn, KHÔNG thể modify |
| Custom | Bạn tạo, có thể modify (recommended) |
Ví dụ tạo Parameter Group:
Option Groups
Option Group = Tập hợp các features bổ sung cho database engine.
Một số Options phổ biến:
| Engine | Option | Mô tả |
|---|---|---|
| MySQL | MEMCACHED | In-memory caching |
| MySQL | MARIADB_AUDIT_PLUGIN | Audit logging |
| Oracle | APEX | Oracle Application Express |
| Oracle | S3_INTEGRATION | Import/Export data với S3 |
| SQL Server | SQLSERVER_BACKUP_RESTORE | Native backup to S3 |
So sánh Parameter Group vs Option Group
| Parameter Group | Option Group | |
|---|---|---|
| Là gì? | Configuration settings | Additional features/plugins |
| Ví dụ | max_connections, buffer_size | MEMCACHED, Audit Plugin |
| Tương đương | my.cnf, postgresql.conf | Plugin installation |
| Required? | ✅ Mọi RDS đều có | ❌ Optional |
| Modify default? | ❌ Phải tạo custom | ❌ Phải tạo custom |
[!TIP] Best Practice: Luôn tạo custom Parameter Group và custom Option Group (nếu cần) thay vì dùng default. Vì default không thể modify!
Thay đổi Parameter/Option Group trên RDS đang chạy
Khi thay đổi Parameter Group hoặc Option Group, RDS đang chạy sẽ bị ảnh hưởng:
| Thay đổi | Cần Reboot? | Downtime? |
|---|---|---|
| Dynamic parameter | ❌ | ❌ |
| Static parameter | ✅ | ✅ (vài phút) |
| Một số options | ❌ | ❌ |
| Một số options | ✅ | ✅ |
[!NOTE] Với Multi-AZ, reboot sẽ failover sang Standby trước → giảm downtime xuống ~30-60 giây!
RDS Endpoint
Endpoint là gì?
RDS Endpoint = DNS hostname dùng để kết nối tới database. Đây KHÔNG phải IP address.
Tại sao dùng DNS thay vì IP?
- IP có thể thay đổi khi failover, scaling, maintenance
- DNS cho phép AWS tự động update routing
- Application không cần config lại khi có thay đổi
DNS được quản lý bởi ai?
AWS quản lý hoàn toàn - Bạn KHÔNG thể xem/sửa!
| Chỗ xem | Có thể? |
|---|---|
| RDS Console | ✅ Xem endpoint |
| Route 53 Console | ❌ KHÔNG thấy |
| VPC DNS settings | ❌ KHÔNG thấy |
| nslookup/dig command | ✅ Resolve ra IP |
Thử resolve DNS:
[!NOTE] Domain
rds.amazonaws.comthuộc về AWS. Họ quản lý tất cả DNS records. Bạn chỉ "nhận" endpoint và sử dụng, không thể can thiệp.
Cách sử dụng Endpoint
Các loại Endpoint
| Deployment | Endpoints |
|---|---|
| Single-AZ | 1 (Instance endpoint) |
| Multi-AZ Instance | 1 (tự động failover) |
| Multi-AZ Cluster | 2 (Writer + Reader endpoint) |
| Read Replicas | Mỗi replica có endpoint riêng |
Multi-AZ Cluster Endpoints:
Bảo mật RDS
1. Network Security
- VPC: Đặt RDS trong private subnet
- Security Groups: Kiểm soát inbound/outbound traffic
- DB Subnet Groups: Nhóm các subnet cho RDS deployment
DB Subnet Group là gì?
DB Subnet Group là tập hợp các subnets (ít nhất 2 AZs) mà RDS sẽ sử dụng để deploy database instances.
Tại sao cần DB Subnet Group?
Yêu cầu
| Yêu cầu | Mô tả |
|---|---|
| Ít nhất 2 AZs | Phải có subnets trong ít nhất 2 Availability Zones |
| Cùng VPC | Tất cả subnets phải thuộc cùng 1 VPC |
| Private subnets | Best practice: dùng private subnets |
| CIDR không overlap | Các subnet không được overlap CIDR |
Cách tạo DB Subnet Group
AWS Console:
AWS CLI:
Ví dụ thực tế
Default Subnet Group
| Loại | Mô tả |
|---|---|
| default | AWS tự tạo với tất cả subnets trong default VPC |
| Custom | Bạn tạo với các private subnets mong muốn (recommended) |
[!TIP] Best Practice: Luôn tạo custom DB Subnet Group với private subnets only. Không dùng default subnet group cho production.
AZ và Subnet Scenarios
Khi tạo DB Subnet Group, số lượng AZs và subnets ảnh hưởng đến deployment options:
| Scenario | Multi-AZ Instance | Multi-AZ Cluster | Single-AZ |
|---|---|---|---|
| 3 AZs, 3 subnets | ✅ | ✅ | ✅ |
| 3 AZs, 2 subnets | ✅ | ❌ | ✅ |
| 2 AZs, 2 subnets | ✅ | ❌ | ✅ |
| 1 AZ, 1 subnet | ❌ | ❌ | ✅ |
[!WARNING] Nếu bạn thấy message: "For Multi-AZ DB clusters, you must select 3 subnets in 3 different Availability Zones" → Cần tạo thêm subnet ở AZ còn thiếu.
2. Encryption
At-rest Encryption:
- Sử dụng AWS KMS
- Encrypt cả storage, backups, snapshots, read replicas
- Phải enable khi tạo instance (không thể enable sau)
In-transit Encryption:
- SSL/TLS cho connections
- Download certificate từ AWS
3. Authentication
| Phương thức | Mô tả |
|---|---|
| Password Auth | Username/password truyền thống |
| IAM Auth | Dùng IAM credentials thay password |
| Kerberos | Active Directory integration (SQL Server, Oracle) |
IAM Database Authentication
Cho phép EC2/Lambda truy cập RDS/Aurora qua IAM Role thay vì password.
Databases hỗ trợ IAM Auth
| Database | IAM Auth |
|---|---|
| Aurora MySQL | ✅ |
| Aurora PostgreSQL | ✅ |
| RDS MySQL | ✅ |
| RDS PostgreSQL | ✅ |
| RDS MariaDB | ✅ |
| RDS Oracle | ❌ |
| RDS SQL Server | ❌ |
Cách sử dụng
Setup IAM Authentication
1. Enable trên RDS/Aurora:
2. Tạo Database User:
3. IAM Policy cho EC2 Role:
So sánh Authentication Methods
| Method | Use Case | Auto Rotate |
|---|---|---|
| Password | Simple, traditional | ❌ Manual |
| IAM Auth | EC2/Lambda with roles | ✅ 15 phút |
| Secrets Manager | Auto-rotate passwords | ✅ Configurable |
[!TIP] Best Practice:
- IAM Auth nếu connection < 200/giây (có limit)
- Secrets Manager nếu cần password rotation tự động
- RDS Proxy + IAM Auth cho Lambda (connection pooling)
High Availability với Multi-AZ
3 Loại Multi-AZ Deployment
1. Single-AZ (1 Instance) - Đơn giản nhất
2. Multi-AZ Instance (2 Instances) - Truyền thống
3. Multi-AZ Cluster (3 Instances) - Mới nhất
So sánh 3 loại deployment
| Tiêu chí | Single-AZ | Multi-AZ Instance | Multi-AZ Cluster |
|---|---|---|---|
| Instances | 1 | 2 | 3 |
| HA | ❌ | ✅ | ✅ |
| Đọc từ Standby | - | ❌ | ✅ |
| Failover time | - | ~60-120s | ~35s |
| Endpoints | 1 | 1 | 2 (Writer + Reader) |
| Chi phí | $ | $$ (~2x) | $$$ (~3x) |
| Use case | Dev/Test | Production | High-perf Production |
Multi-Writer trong AWS RDS?
⚠️ AWS RDS KHÔNG có Multi-Writer! Tất cả deployment đều là Single Writer.
| Database Service | Multi-Writer? |
|---|---|
| RDS MySQL/PostgreSQL | ❌ Single writer |
| RDS Multi-AZ Cluster | ❌ 1 writer + 2 readers |
| Aurora | ❌ Single writer |
| DynamoDB | ✅ Multi-writer (NoSQL) |
Replication Lag & Stale Reads
Khi đọc từ Reader, có thể gặp Stale Read (đọc data cũ):
Replication lag theo deployment:
| Deployment | Lag |
|---|---|
| Multi-AZ Instance | ~0 (Standby không đọc được) |
| Multi-AZ Cluster | ~10-20ms (semi-sync) |
| Read Replicas | Seconds → minutes |
| Aurora Replicas | ~10-20ms |
AWS có tự động xử lý không?
| AWS tự động | Bạn phải làm |
|---|---|
| ✅ Sync data (~10-20ms) | ❌ Chọn endpoint nào để đọc |
| ✅ Tạo 2 endpoints | ❌ Quyết định read nào cần consistency |
| ✅ Failover tự động | ❌ Route critical reads về Writer |
Best practice:
Tin tốt: Với Multi-AZ Cluster, lag chỉ ~10-20ms. Khi user refresh page (200-500ms), data thường đã sync xong!
Các tầng Replication
| Loại Replication | RDS (non-Aurora) | Aurora |
|---|---|---|
| Trong cùng AZ | ✅ EBS tự động | ✅ Tự động |
| Cross-AZ | 🔧 Phải bật Multi-AZ | ✅ Mặc định 3 AZs |
| Số copies | 2 (Primary + Standby) | 6 copies |
Lưu ý: EBS tự động replicate TRONG cùng AZ. Cần Multi-AZ cho cross-AZ protection.
Cách bật Multi-AZ
Trong AWS Console:
Bằng AWS CLI:
Khi nào failover xảy ra?
- AZ outage
- Primary instance failure
- Instance type change
- Software patching
- Manual failover (testing)
Failover Deep Dive
Failover mất bao lâu?
| Deployment | Failover Time |
|---|---|
| Multi-AZ Instance | 1-2 phút (60-120 giây) |
| Multi-AZ Cluster | ~35 giây |
| Aurora Multi-AZ | ~30 giây |
Tại sao failover mất 1-2 phút?
[!TIP] Nếu cần near-zero downtime, xem xét Amazon Aurora - failover chỉ ~30 giây nhờ kiến trúc shared storage layer, không cần replay logs như RDS truyền thống.
Sau Failover: Primary cũ thành gì?
Primary cũ KHÔNG tự động trở lại làm primary!
Quy trình:
- AWS tự động recover/replace instance cũ
- Instance cũ được chuyển thành Standby mới
- Data được sync lại từ Primary mới sang Standby mới
[!NOTE] Tại sao không failback tự động?
- Tránh downtime không cần thiết (failback cũng mất 1-2 phút)
- Data consistency - Primary mới có thể đã có writes mới
- Stability - nếu primary cũ unstable, failback có thể gây thêm outage
Reboot vs Reboot with Failover
Option "Reboot with failover" chỉ xuất hiện khi RDS đang ở Multi-AZ deployment:
Reboot (KHÔNG failover)
Reboot WITH Failover
Automatic vs Manual Failover
| Scenario | Ai trigger? | Bạn cần làm gì? |
|---|---|---|
| Primary chết (unplanned) | AWS tự động | ❌ Không cần làm gì |
| Reboot with failover | Bạn trigger | ✅ Chọn option |
| Reboot (không failover) | Bạn trigger | ✅ Không chọn option |
Khi nào dùng option nào?
| Scenario | Nên chọn | Lý do |
|---|---|---|
| Apply static params vào instance cụ thể | Reboot (không failover) | Param apply vào instance đang restart |
| Giảm downtime | Reboot with failover | Traffic chuyển ngay sang Standby |
| Test failover | Reboot with failover | Verify failover hoạt động |
| Đưa primary về cùng AZ với EC2 | Reboot with failover | Sau auto-failover trước đó |
[!CAUTION] Cả 2 option đều gây downtime!
- Reboot (không failover): ~5-10 phút
- Reboot with failover: ~1-2 phút
Nên thực hiện vào maintenance window!
Console:
CLI:
Cross-AZ sau Failover: Chi phí và Hiệu năng
Nếu EC2 ở AZ-1 và RDS failover sang AZ-2:
Chi phí Cross-AZ Data Transfer
| Traffic | Giá |
|---|---|
| Same AZ | FREE |
| Cross-AZ | $0.01/GB mỗi chiều ($0.02/GB round-trip) |
Ví dụ: EC2 transfer 100GB/tháng với RDS cross-AZ = 100GB × $0.02 = $2/tháng
Ảnh hưởng Hiệu năng
| Metric | Same AZ | Cross-AZ |
|---|---|---|
| Latency | ~0.1-0.5ms | ~1-2ms |
| Throughput | Cao hơn | Thấp hơn một chút |
[!NOTE] Latency tăng ~2-5x nhưng vẫn rất thấp (1-2ms). Với hầu hết application, không đáng kể.
Best Practice: Multi-AZ cho cả EC2
- EC2 ở cả 2 AZ → luôn có instance cùng AZ với RDS primary
- Load Balancer tự động route traffic đến healthy instances
- Cross-AZ traffic minimal trong điều kiện bình thường
[!TIP] Bottom line: Trong production, availability quan trọng hơn chi phí cross-AZ. Chi phí cross-AZ rất nhỏ so với downtime cost. Luôn deploy Multi-AZ cho cả EC2 lẫn RDS!
Read Replicas
[!IMPORTANT] Read Replica KHÔNG phải config option khi tạo RDS. Bạn tạo Read Replica riêng SAU KHI Primary database đã chạy.
Multi-AZ vs Read Replica - Khác nhau hoàn toàn!
| Tiêu chí | Multi-AZ | Read Replica |
|---|---|---|
| Là gì? | Config option khi tạo RDS | Instance riêng tạo sau |
| Mục đích | High Availability (HA) | Scale reads |
| Cách tạo | Chọn khi tạo DB hoặc modify | Actions → Create read replica |
Có thể dùng cả 2 cùng lúc! (Best practice cho production)
Cách tạo Read Replica
AWS Console:
AWS CLI:
Mục đích
- Scale read workloads - Phân tải các query đọc
- Disaster Recovery - Cross-region backup
Kiến trúc Read Replica:
Đặc điểm:
| Feature | Giá trị |
|---|---|
| Max replicas | 5 per source |
| Replication | Asynchronous |
| Cross-region | ✅ Có |
| Promote to Primary | ✅ Có |
| Separate endpoint | ✅ Mỗi replica có endpoint riêng |
So sánh Multi-AZ vs Read Replica:
| Tính năng | Multi-AZ | Read Replica |
|---|---|---|
| Mục đích | High Availability | Scalability |
| Replication | Synchronous | Asynchronous |
| Có thể đọc | ❌ Không | ✅ Có |
| Failover tự động | ✅ Có | ❌ Không |
| Cross-region | ❌ Không | ✅ Có |
| Chi phí network | Free (same AZ) | Có phí cross-AZ/region |
RDS Proxy
RDS Proxy là fully managed database proxy cho RDS, giúp ứng dụng chia sẻ và quản lý database connections hiệu quả hơn.
Vấn đề RDS Proxy giải quyết
Lợi ích của RDS Proxy
| Lợi ích | Mô tả |
|---|---|
| Connection Pooling | Reuse connections, giảm overhead tạo connection mới |
| Serverless friendly | Lý tưởng cho Lambda (scale nhanh, nhiều connections) |
| Faster Failover | Failover nhanh hơn ~66% so với không dùng Proxy |
| IAM Authentication | Quản lý credentials tập trung qua IAM |
| TLS/SSL | Enforce encrypted connections |
Kiến trúc
Khi nào dùng RDS Proxy?
| Use Case | Nên dùng? |
|---|---|
| Lambda + RDS | ✅ Rất nên |
| Nhiều microservices | ✅ Nên |
| Connection limits issues | ✅ Nên |
| Single app, ít connections | ❌ Không cần |
| Self-managed connection pool | ❌ Không cần |
Pricing
- Tính theo vCPU/giờ của RDS Proxy
- Thêm ~15-20% so với không dùng Proxy
- Nhưng giảm load trên RDS → có thể dùng instance nhỏ hơn
Lambda vs Traditional App (Spring)
| App Type | Có Connection Pool? | Cần RDS Proxy? |
|---|---|---|
| Spring Boot (HikariCP) | ✅ | ❌ Thường không cần |
| Node.js (long-running) | ✅ pg-pool | ❌ Thường không cần |
| Lambda | ❌ | ✅ Rất nên |
Hybrid Setup: Lambda + Spring cùng RDS
Có thể setup Lambda đi qua Proxy, còn Spring connect trực tiếp:
| App | Connect to | Endpoint |
|---|---|---|
| Lambda | RDS Proxy | my-proxy.proxy-xxx.rds.amazonaws.com |
| Spring | RDS Direct | my-db.xxx.rds.amazonaws.com |
[!TIP] Lambda + RDS = Nên dùng RDS Proxy! Spring đã có HikariCP nên có thể connect trực tiếp.
Scaling Patterns và Real-world Usage
Single Writer có đủ không?
✅ CÓ, đủ cho 95%+ ứng dụng!
| Instance | Writes/sec | Đủ cho |
|---|---|---|
| db.t3.medium | ~1,000-3,000 | Startup, MVP |
| db.r6g.large | ~5,000-10,000 | App vừa, SaaS |
| db.r6g.4xlarge | ~20,000-50,000 | Large production |
Khi nào cần multi-writer? IoT massive, real-time gaming, social media scale → Dùng DynamoDB hoặc sharding.
Single Reader có đủ không?
⚠️ Reads thường là bottleneck TRƯỚC writes!
| Instance | Reads/sec | Connections |
|---|---|---|
| db.t3.medium | ~2,000-5,000 | 50-100 |
| db.r6g.large | ~10,000-20,000 | 200-500 |
| db.r6g.4xlarge | ~50,000-100,000 | 1,000+ |
Khi nào cần Read Replicas?
- CPU > 70% liên tục
- Connection limit gần max
- Query latency tăng
Caching - Giảm 90% database reads
Pro tip: Thêm caching TRƯỚC khi thêm Read Replicas!
Scaling stages thực tế
RDS vs Self-managed trên EC2?
| Tiêu chí | RDS | Self-managed EC2 |
|---|---|---|
| Ai dùng? | 90% startups/SMB | Enterprise đặc thù |
| Setup time | Vài phút | Vài ngày-tuần |
| DBA cần? | Không | Cần team DBA |
| Maintenance | AWS lo | Tự làm tất cả |
| Multi-master? | ❌ | ✅ (Galera, Patroni) |
Khi nào self-manage?
- Cần multi-master (Galera Cluster)
- Database không hỗ trợ (CockroachDB, TiDB)
- Compliance đặc thù
- Có DBA team riêng
Bottom line: 90% dự án dùng RDS/Aurora. Chỉ self-manage khi có lý do đặc biệt!
Self-managed HA trên EC2 - Cách setup
Nếu cần self-manage, đây là các options phổ biến:
Option 1: MySQL/MariaDB Galera Cluster (Multi-master)
Option 2: PostgreSQL Patroni + etcd (Auto-failover)
Option 3: MongoDB Replica Set
So sánh chi phí
| Hạng mục | RDS Multi-AZ | Self-managed |
|---|---|---|
| Instance | ~$300/mo | ~$200/mo |
| DBA Salary | $0 | $8,000-15,000/mo |
| Downtime risk | Low (AWS SLA) | Higher |
| Total | ~$300/mo | ~$250/mo + risk + người |
Backup và Recovery
1. Automated Backups
Point-in-time Recovery (PITR):
- Restore đến bất kỳ thời điểm nào trong retention period
- Độ chính xác: đến 5 phút gần nhất
2. Manual Snapshots
Restore Process:
- Restore tạo ra database instance MỚI
- Phải update connection string trong application
- Không restore vào instance hiện tại
Maintenance và Patching
Maintenance Window
- OS patching, DB engine updates
- Multi-AZ: Update standby trước, failover, update old primary
- Single-AZ: Có downtime
Minor vs Major Version Upgrade
| Loại | Auto Upgrade | Cách thức |
|---|---|---|
| Minor (5.7.1 → 5.7.2) | ✅ Có thể enable | Trong maintenance window |
| Major (5.7 → 8.0) | ❌ Manual | Phải test kỹ trước |
Monitoring
CloudWatch Metrics:
- CPUUtilization: % CPU usage
- DatabaseConnections: Số connections
- FreeableMemory: RAM khả dụng
- ReadIOPS/WriteIOPS: I/O operations
- ReadLatency/WriteLatency: Độ trễ I/O
- FreeStorageSpace: Disk còn trống
- ReplicaLag: Độ trễ replication (replicas)
Enhanced Monitoring:
- Metrics ở OS level (processes, threads)
- Granularity: 1-60 seconds
- Lưu trong CloudWatch Logs
Performance Insights:
- Phân tích database load
- Tìm bottlenecks
- Top SQL queries
- Wait events
Pricing
Các thành phần tính phí:
| Thành phần | Mô tả |
|---|---|
| Instance hours | Theo loại instance, tính theo giờ/giây |
| Storage | $/GB/tháng |
| Provisioned IOPS | $/IOPS/tháng (nếu dùng io1/io2) |
| Backup storage | Vượt quá DB size sẽ tính phí |
| Data transfer | Outbound và cross-region |
| Multi-AZ | ~2x giá (2 instances) |
Pricing Options:
1. On-Demand
- Pay-as-you-go
- Không commitment
- Phù hợp: Dev/test, variable workloads
2. Reserved Instances
- 1 hoặc 3 năm commitment
- Tiết kiệm đến 69%
- Options: All upfront, Partial upfront, No upfront
Free Tier (12 tháng đầu):
- 750 giờ/tháng db.t2.micro hoặc db.t3.micro
- 20 GB General Purpose SSD
- 20 GB backup storage
- Chỉ áp dụng Single-AZ
Hands-on Labs
Lab 1: Tạo RDS MySQL Instance
Lab 2: Kết nối từ EC2
Lab 3: Tạo Read Replica
Lab 4: Tạo Snapshot và Restore
Best Practices
1. Security
- ✅ Đặt RDS trong private subnet
- ✅ Sử dụng Security Groups restrictive
- ✅ Enable encryption at-rest
- ✅ Dùng SSL/TLS cho connections
- ✅ Sử dụng IAM authentication khi có thể
2. Performance
- ✅ Chọn instance class phù hợp workload
- ✅ Dùng Provisioned IOPS cho high I/O
- ✅ Sử dụng Read Replicas cho read-heavy
- ✅ Monitor với CloudWatch và Performance Insights
3. Availability
- ✅ Enable Multi-AZ cho production
- ✅ Set backup retention phù hợp
- ✅ Test failover scenarios
- ✅ Có Cross-region replica cho DR
4. Cost Optimization
- ✅ Right-size instances
- ✅ Dùng Reserved Instances cho stable workloads
- ✅ Dọn dẹp old snapshots
- ✅ Tắt dev/test instances ngoài giờ
RDS vs Aurora vs Self-managed
| Tiêu chí | Self-managed (EC2) | RDS | Aurora |
|---|---|---|---|
| Quản lý | Tự quản lý hoàn toàn | AWS managed | AWS managed |
| Customization | Cao | Trung bình | Thấp |
| HA/DR | Tự setup | Multi-AZ | Built-in |
| Performance | Tùy cấu hình | Tốt | Rất tốt |
| Cost | Thấp (nếu tự làm tốt) | Trung bình | Cao |
| Phù hợp | Legacy, special needs | Hầu hết use cases | High performance needs |
Exam Tips (SAA-C03)
- Multi-AZ: Cho HA, automatic failover, KHÔNG dùng để đọc
- Read Replica: Cho scalability, CÓ THỂ đọc, manual promotion
- Encryption: Phải enable khi tạo, không thể enable sau
- Restore: Luôn tạo instance MỚI
- Aurora: Hiệu suất cao nhất, đắt nhất
- IAM Auth: Cho MySQL và PostgreSQL
- Subnet Groups: Cần ít nhất 2 AZs cho Multi-AZ
- Cross-region Read Replica: DR và low-latency reads