Servisphere

Module 5 · SAA-C03

Cơ sở dữ liệu

RDS, Aurora, DynamoDB, ElastiCache và các database chuyên dụng: chọn theo kiểu dữ liệu, tính sẵn sàng và hiệu năng.

  • DomainThiết kế chịu lỗi
  • DomainThiết kế hiệu năng cao
  • DomainTối ưu chi phí
  • 10 sơ đồ
  • 10 tình huống
  • 12 dịch vụ

5 phút phải nhớ

  1. RDS Multi-AZ: standby đồng bộ ở AZ khác, tự failover qua cùng tên DNS; standby (kiểu một instance) không phục vụ đọc.Đề hỏi "tăng độ sẵn sàng" → Multi-AZ; "giảm tải đọc" → read replica. Hai thứ khác nhau.
  2. Read replica sao chép bất đồng bộ, đọc được, cùng hoặc khác Region, nâng lên thành DB độc lập được (RDS MySQL tối đa 15 replica).Báo cáo nặng làm chậm DB chính → read replica; DR khác Region → cross-Region read replica rồi promote.
  3. Backup tự động của RDS giữ 0–35 ngày (0 là tắt) và phục hồi được về một thời điểm; snapshot thủ công giữ tới khi bạn xoá.Cần giữ quá 35 ngày → snapshot thủ công hoặc AWS Backup.
  4. Aurora: ổ dùng chung có bản sao ở 3 AZ, tự lớn (tới 256 TiB tuỳ phiên bản), tối đa 15 Aurora Replica, độ trễ sao chép thường dưới 100 ms.Failover Aurora nhanh vì replica đọc cùng ổ; dùng writer endpoint để ghi, reader endpoint để chia đọc.
  5. Aurora Global Database: 1 Region ghi + tối đa 10 Region phụ chỉ đọc, sao chép thường dưới 1 giây.DR khác Region với RPO / RTO thấp, hoặc đọc độ trễ thấp cho người dùng toàn cầu.
  6. Aurora Serverless v2 co giãn theo nhu cầu; RDS Proxy gom kết nối cho Lambda / ứng dụng mở nhiều kết nối.Lambda làm cạn connection của RDS → RDS Proxy (còn giúp failover nhanh hơn, dùng IAM / Secrets Manager).
  7. DynamoDB: NoSQL key-value, độ trễ mili giây ở mọi quy mô; item tối đa 400 KB; on-demand (trả theo request) hoặc provisioned (RCU / WCU, có auto scaling).Lưu lượng khó đoán → on-demand; ổn định, muốn rẻ → provisioned + auto scaling.
  8. 1 RCU = 1 lần đọc nhất quán mạnh (hoặc 2 lần đọc eventually consistent) mỗi giây cho item ≤ 4 KB; 1 WCU = 1 lần ghi mỗi giây cho item ≤ 1 KB; transaction tốn gấp đôi.Đề tính dung lượng: làm tròn kích thước item lên bội 4 KB (đọc) hoặc 1 KB (ghi).
  9. Khoá DynamoDB: partition key (+ sort key). GSI: khoá khác hẳn, tạo bất cứ lúc nào, chỉ eventually consistent. LSI: cùng partition key, sort key khác, phải tạo khi tạo bảng, tối đa 5.Cần truy vấn theo thuộc tính khác → GSI; tránh Scan.
  10. DynamoDB Streams + Lambda cho xử lý theo thay đổi; Global Tables cho multi-Region active-active; PITR phục hồi tới từng giây trong 35 ngày; TTL tự xoá item hết hạn.Gửi email khi có đơn mới → Streams + Lambda; người dùng nhiều châu lục cùng ghi → Global Tables.
  11. Cache: DAX cho DynamoDB (micro giây, gần như không sửa code); ElastiCache cho mọi nguồn (Valkey / Redis OSS: replication, backup, cấu trúc dữ liệu phong phú; Memcached: đơn giản, đa luồng, không replication).Đọc lặp lại nhiều từ RDS → ElastiCache (cache-aside); bảng xếp hạng → sorted set của Valkey / Redis.
  12. Database chuyên dụng: DocumentDB (MongoDB), Neptune (đồ thị), Keyspaces (Cassandra), Timestream (chuỗi thời gian), Redshift (kho dữ liệu, OLAP), MemoryDB (Redis bền vững làm DB chính).Đề thường nêu mô hình dữ liệu → chọn theo mô hình: quan hệ bạn bè → Neptune; IoT theo thời gian → Timestream.
  13. Mã hoá RDS phải bật lúc tạo; DB chưa mã hoá thì snapshot → copy snapshot có mã hoá → khôi phục.Read replica có cùng trạng thái mã hoá với nguồn.

Sơ đồ

RDS Multi-AZ và read replica

RDS Multi-AZ và read replicaRegionAZ aAZ bAZ cđọc / ghi1đồng bộ1bất đồng bộ2chỉ đọc2Ứng dụngCông cụ báo cáoPrimaryStandbykhông đọc đượcRead replica
Ghi vào primary; standby ở AZ khác nhận dữ liệu đồng bộ và chỉ dùng khi failover. Read replica nhận bất đồng bộ và phục vụ đọc (báo cáo).

Từng bước

  1. Mỗi lần ghi được chép đồng bộ sang standby ở AZ khác.
  2. Read replica nhận bất đồng bộ, công cụ báo cáo đọc từ đây để không làm chậm primary.
  3. Primary hoặc AZ a hỏng: RDS chuyển tên DNS sang standby, ứng dụng kết nối lại vào cùng endpoint.

Aurora: writer, reader và ổ dùng chung

Aurora: writer, reader và ổ dùng chungAurora clusterwriter endpoint1reader endpoint2122Ứng dụngWriterAZ aReplicaAZ bReplicaAZ cỔ clusterbản sao ở 3 AZ
Mọi instance đọc ghi cùng một ổ cluster có bản sao ở 3 AZ. Ghi qua writer endpoint, đọc qua reader endpoint (chia đều các replica). Writer hỏng thì một replica được nâng lên.

Từng bước

  1. Ghi đi qua writer endpoint, dữ liệu nằm ở ổ cluster chung.
  2. Đọc qua reader endpoint, chia cho các Aurora Replica (trễ thường dưới 100 ms).

Aurora Global Database

Aurora Global Databaseus-east-1 (chính)eu-west-1 (phụ)ghi1< 1 giây1đọc tại chỗ2Người dùng MỹNgười dùng EUCụm chínhđọc / ghiCụm phụchỉ đọc
Một Region ghi, các Region phụ chỉ đọc nhận dữ liệu thường dưới 1 giây qua hạ tầng riêng. Khi Region chính hỏng, nâng một Region phụ lên.

Từng bước

  1. Ghi ở Region chính, sao chép ở tầng lưu trữ sang Region phụ, thường dưới 1 giây.
  2. Người dùng châu Âu đọc ở Region gần; Region chính hỏng thì failover sang cụm phụ.

RDS Proxy gom kết nối cho Lambda

RDS Proxy gom kết nối cho LambdaVPC1nhiều kết nối1ít kết nối2lấy mật khẩu2API GatewayLambda× 1.000 đồng thờiRDS Proxypool kết nốiRDSSecrets Manager
Hàng nghìn lần chạy Lambda mở kết nối tới Proxy; Proxy dùng lại một pool nhỏ kết nối tới database và lấy thông tin đăng nhập từ Secrets Manager.

Từng bước

  1. Mỗi môi trường Lambda mở kết nối tới Proxy thay vì tới database.
  2. Proxy dùng lại pool kết nối nhỏ, lấy thông tin đăng nhập từ Secrets Manager; failover nhanh hơn.

Cache-aside với ElastiCache

Cache-aside với ElastiCacheỨng dụngElastiCacheRDS1. GET product:422. Trượt (miss)3. SELECT … WHERE id = 424. Dữ liệu5. SET product:42, TTL 300 giây6. Lần sau: GET → trúng (hit)
Đọc cache trước; trượt thì đọc database rồi ghi vào cache với TTL. Ghi dữ liệu mới thì xoá (hoặc cập nhật) khoá trong cache.

DAX trước DynamoDB

DAX trước DynamoDBVPCGetItem / Query1trượt cache, ghi xuyên2Ứng dụngDAX clientDAX cluster1 primary + replicaDynamoDB
Ứng dụng đổi sang client DAX (cùng API). Đọc trúng cache trả về mức micro giây; ghi đi xuyên qua DAX xuống DynamoDB.

Từng bước

  1. Đọc lặp lại trả từ bộ nhớ của DAX (micro giây).
  2. Trượt cache hoặc ghi: DAX gọi DynamoDB rồi cập nhật cache.

Khoá DynamoDB, GSI và LSI

Khoá DynamoDB, GSI và LSItạo cùng bảng1sao chép bất đồng bộ2Query1Query2Bảng OrdersPK customerId · SK orderDateLSIPK customerId · SK totalGSIPK status · SK orderDateĐơn của khách theo giá trịMọi đơn đang giao
Bảng Orders khoá theo customerId + orderDate. LSI giữ partition key, đổi sort key (phải tạo cùng bảng). GSI dùng khoá khác hẳn (status) và thêm sau được.

Từng bước

  1. LSI: cùng khách, sắp theo thuộc tính khác; đọc nhất quán mạnh được.
  2. GSI: truy vấn theo thuộc tính khác hẳn mà không phải Scan; chỉ eventually consistent.

DynamoDB Streams kích hoạt xử lý

DynamoDB Streams kích hoạt xử lýPutItem11kéo lô222Ứng dụng đặt hàngBảng OrdersStreamNEW_IMAGELambdaSESemail xác nhậnOpenSearchtìm kiếm
Mỗi thay đổi item thành một bản ghi trong stream (giữ 24 giờ). Lambda đọc theo lô để gửi thông báo, cập nhật chỉ mục tìm kiếm, ghi thống kê.

Từng bước

  1. Ứng dụng chỉ ghi bảng; DynamoDB đưa thay đổi vào stream.
  2. Lambda đọc stream theo lô, gửi email và cập nhật chỉ mục tìm kiếm.

DynamoDB Global Tables: ghi ở nhiều Region

DynamoDB Global Tables: ghi ở nhiều Regionus-east-1eu-west-1ap-southeast-111122Bản saoBản saoBản saoMỹChâu ÂuChâu Á
Mỗi Region có một bản sao đọc ghi được; thay đổi được sao chép sang các Region còn lại. Người dùng đọc ghi ở Region gần nhất.

Từng bước

  1. Mỗi nơi đọc ghi vào bản sao ở Region gần (active-active).
  2. Thay đổi được sao chép sang các bản sao còn lại.

Chọn database theo mô hình dữ liệu

Chọn database theo mô hình dữ liệuỨng dụngAurora / RDSquan hệ, giao dịchDynamoDBkey-valueElastiCachecacheNeptuneđồ thịDocumentDBMongoDBTimestreamchuỗi thời gianRedshiftkho dữ liệu
Không có database nào hợp mọi việc: đề thường mô tả dữ liệu và cách truy vấn, đáp án là dịch vụ chuyên cho mô hình đó.

So sánh nhanh

Multi-AZ và read replica

Multi-AZ (DB instance)Read replica
Mục đíchSẵn sàng cao, failoverChia tải đọc, DR
Sao chépĐồng bộBất đồng bộ
Đọc đượcKhông (standby)Có
Phạm viKhác AZ, cùng RegionCùng AZ, khác AZ hoặc khác Region
Khi primary hỏngTự chuyển, giữ nguyên endpointPhải promote, endpoint mới

RDS và Aurora

RDSAurora
EngineMySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2Tương thích MySQL, PostgreSQL
Lưu trữEBS gắn vào instance, cấp dung lượng trước (có autoscaling)Ổ cluster dùng chung, bản sao ở 3 AZ, tự lớn
Replica đọcTối đa 15 (MySQL), bất đồng bộTối đa 15, thường dưới 100 ms, là đích failover
Nhiều RegionCross-Region read replicaGlobal Database (tối đa 10 Region phụ, dưới 1 giây)

DynamoDB: GSI và LSI

GSILSI
Partition keyKhác bảng gốcGiống bảng gốc
TạoBất cứ lúc nàoChỉ khi tạo bảng
Giới hạn20 mỗi bảng (mặc định, xin tăng được)5 mỗi bảng
Đọc nhất quán mạnhKhôngCó
Dung lượngRCU / WCU riêngDùng chung bảng; item collection tối đa 10 GB

Chọn cache

DAXElastiCache (Valkey / Redis OSS)ElastiCache (Memcached)
Dùng vớiChỉ DynamoDBMọi nguồnMọi nguồn
Sửa codeGần như không (SDK tương thích API DynamoDB)Có (cache-aside, write-through)Có
Replication / failoverCó (1 primary + tối đa 10 replica)CóKhông
Backup, cấu trúc dữ liệu—Có backup; sorted set, list, pub/sub…Không backup (node-based); chỉ key-value đơn giản, đa luồng

Database theo mô hình dữ liệu

Nhu cầuDịch vụ
Quan hệ, giao dịch (OLTP)RDS, Aurora
Key-value / document quy mô lớn, độ trễ ổn địnhDynamoDB
Tương thích MongoDBDocumentDB
Đồ thị (mạng xã hội, gợi ý, chống gian lận)Neptune
Tương thích CassandraKeyspaces
Chuỗi thời gian (IoT, metric)Timestream
Kho dữ liệu, phân tích (OLAP)Redshift
Cache trong bộ nhớElastiCache
Redis bền vững làm database chínhMemoryDB

Tình huống đề hay gặp

1Database RDS MySQL phải tự chuyển sang máy khác khi AZ gặp sự cố, ứng dụng không phải đổi chuỗi kết nối.

Xem đáp án

Đúng: Bật Multi-AZ
Standby đồng bộ; khi lỗi, RDS tự trỏ cùng tên DNS sang standby.

Sai: Tạo read replica ở AZ khác
Replica bất đồng bộ, phải promote thủ công và endpoint đổi.

2Truy vấn báo cáo cuối tháng làm chậm database đơn hàng (RDS PostgreSQL).

Xem đáp án

Đúng: Tạo read replica, cho công cụ báo cáo đọc từ replica
Tách tải đọc nặng khỏi primary.

Sai: Bật Multi-AZ
Standby không phục vụ đọc.

Sai: Tăng cỡ instance
Tốn tiền cả tháng cho tải vài ngày.

3Ứng dụng toàn cầu trên Aurora cần DR khác Region với RPO khoảng 1 giây và đọc độ trễ thấp ở châu Âu.

Xem đáp án

Đúng: Aurora Global Database với cụm phụ ở châu Âu
Sao chép thường dưới 1 giây; cụm phụ phục vụ đọc tại chỗ và có thể được nâng lên khi Region chính hỏng.

Sai: Snapshot hằng ngày copy sang Region khác
RPO tới 24 giờ.

4Hàng nghìn hàm Lambda đồng thời làm RDS báo lỗi "too many connections".

Xem đáp án

Đúng: Đặt RDS Proxy giữa Lambda và RDS
Proxy giữ pool kết nối dùng chung, hỗ trợ IAM / Secrets Manager và failover nhanh hơn.

Sai: Tăng max_connections và cỡ instance
Chỉ đẩy giới hạn lên, không giải quyết việc mở / đóng kết nối liên tục.

5Trang sản phẩm đọc cùng dữ liệu từ RDS hàng nghìn lần mỗi giây; muốn giảm tải DB và độ trễ.

Xem đáp án

Đúng: ElastiCache (Valkey / Redis OSS) với cache-aside và TTL
Đọc từ bộ nhớ mức micro giây, DB chỉ nhận lần đọc trượt cache.

Sai: DAX
DAX chỉ dùng cho DynamoDB.

6Bảng DynamoDB bị đọc lặp lại cùng item rất nhiều, cần độ trễ micro giây mà không viết lại logic cache.

Xem đáp án

Đúng: DynamoDB Accelerator (DAX)
Cache ghi xuyên tương thích API DynamoDB, đổi client là dùng được.

Sai: ElastiCache
Phải tự viết logic cache và đồng bộ dữ liệu.

7Ứng dụng mới, lưu lượng không đoán được (lúc 0, lúc tăng vọt), muốn không phải lập kế hoạch dung lượng.

Xem đáp án

Đúng: DynamoDB on-demand
Trả theo request, tự đáp ứng tải.

Sai: DynamoDB provisioned không auto scaling
Bị throttle khi tăng vọt, lãng phí lúc vắng.

8Bảng DynamoDB khoá theo customerId; giờ cần tìm đơn theo trạng thái (status) mà không Scan.

Xem đáp án

Đúng: Tạo GSI với partition key status
GSI có khoá khác, thêm được sau khi bảng đã có.

Sai: Tạo LSI trên status
LSI phải tạo khi tạo bảng và vẫn cùng partition key customerId.

Sai: Scan với filter
Đọc cả bảng, tốn RCU.

9Mỗi khi có đơn hàng mới trong DynamoDB cần gửi email xác nhận, không thay đổi code ghi đơn.

Xem đáp án

Đúng: Bật DynamoDB Streams và cho Lambda xử lý stream
Mỗi thay đổi item thành một bản ghi stream, Lambda tự kéo theo lô.

Sai: Lambda chạy theo lịch quét bảng
Trễ và tốn RCU cho Scan.

10Ứng dụng mạng xã hội cần truy vấn "bạn của bạn có cùng sở thích" nhanh.

Xem đáp án

Đúng: Amazon Neptune
Database đồ thị, duyệt quan hệ nhiều bước hiệu quả.

Sai: RDS với nhiều JOIN
JOIN nhiều tầng chậm dần khi dữ liệu lớn.

Chọn nhanh

Chọn database và cách mở rộng thế nào?

Khi cầnDùng
Quan hệ, cần sẵn sàng cao trong một RegionRDS Multi-AZ hoặc Aurora · xem sơ đồ
Giảm tải đọc cho RDS / AuroraRead replica / Aurora Replica + reader endpoint · xem sơ đồ
DR khác Region, RPO khoảng 1 giâyAurora Global Database · xem sơ đồ
Lambda mở quá nhiều kết nốiRDS Proxy · xem sơ đồ
Cache cho dữ liệu đọc nhiều từ RDSElastiCache (cache-aside) · xem sơ đồ
Cache micro giây cho DynamoDBDAX · xem sơ đồ
Key-value quy mô lớn, độ trễ ổn địnhDynamoDB (chọn khoá tốt, GSI cho truy vấn khác) · xem sơ đồ
Xử lý khi dữ liệu DynamoDB thay đổiDynamoDB Streams + Lambda · xem sơ đồ
Ghi ở nhiều Region cùng lúcDynamoDB Global Tables · xem sơ đồ
Đồ thị, document, chuỗi thời gian, kho dữ liệuNeptune, DocumentDB, Timestream, Redshift · xem sơ đồ
Chuyển database on-prem lên AWS ít downtimeDMS (+ Schema Conversion khi đổi engine)

Bẫy hay gặp

  • Dùng Multi-AZ standby để chia tải đọc (Multi-AZ một instance không đọc được).
  • Dùng read replica làm giải pháp HA tự động trong cùng Region: replica phải promote, endpoint đổi.
  • Nghĩ backup tự động RDS giữ được quá 35 ngày.
  • Dùng DAX cho RDS hoặc ElastiCache cho DynamoDB khi đề nhấn "không sửa code".
  • Chọn Memcached khi cần replication, backup hay sorted set.
  • Tạo LSI sau khi bảng đã tồn tại (không được) hoặc đòi đọc nhất quán mạnh trên GSI.
  • Chọn partition key ít giá trị (ví dụ status) cho bảng lớn: hot partition, bị throttle.
  • Dùng Scan cho truy vấn thường xuyên thay vì Query + GSI.
  • Lưu item lớn hơn 400 KB trong DynamoDB: đưa file lên S3, lưu đường dẫn.
  • Tưởng có thể bật mã hoá cho RDS đang chạy chưa mã hoá: phải qua snapshot.
  • Dùng Redshift cho OLTP hoặc RDS cho phân tích hàng tỷ dòng.
  • Dùng RDS cho tải cần ghi từ nhiều Region cùng lúc: đó là DynamoDB Global Tables.

Dịch vụ trong module

Số liệu dễ thay đổi (đã kiểm với tài liệu AWS)

  • RDS sao chép tới read replica bất đồng bộ; read replica có thể ở Region khác và được promote thành DB độc lập; RDS không tự co giãn số read replica. kiểm ngày 2026-10-16 ↗
  • RDS for MySQL: tối đa 15 read replica cho mỗi DB instance nguồn trong cùng Region. kiểm ngày 2026-10-16 ↗
  • Backup tự động RDS giữ 0–35 ngày (0 là tắt); mặc định 7 ngày khi tạo bằng console, 1 ngày khi tạo bằng API / CLI. kiểm ngày 2026-10-16 ↗
  • Ổ cluster Aurora có bản sao ở 3 AZ, tự lớn tới 256 TiB tuỳ phiên bản engine. kiểm ngày 2026-10-16 ↗
  • Aurora tối đa 15 Aurora Replica; độ trễ sao chép thường dưới 100 ms; replica là đích failover. kiểm ngày 2026-10-16 ↗
  • Aurora Global Database: 1 Region chính và tối đa 10 Region phụ; sao chép thường dưới 1 giây. kiểm ngày 2026-10-16 ↗
  • DynamoDB: item tối đa 400 KB; 1 RCU = 1 đọc mạnh hoặc 2 đọc eventually consistent mỗi giây cho item ≤ 4 KB; 1 WCU = 1 ghi mỗi giây cho item ≤ 1 KB; transaction gấp đôi. kiểm ngày 2026-10-16 ↗
  • DynamoDB: tối đa 5 LSI và mặc định 20 GSI mỗi bảng. kiểm ngày 2026-10-16 ↗
  • DynamoDB PITR phục hồi tới từng giây trong tối đa 35 ngày (đặt được 1–35 ngày). kiểm ngày 2026-10-16 ↗
  • DAX: 1 node primary và 0–10 read replica mỗi cluster. kiểm ngày 2026-10-16 ↗
  • ElastiCache Memcached đa luồng, không replication / failover; Valkey và Redis OSS có replication, failover, pub/sub, sorted set, backup. kiểm ngày 2026-10-16 ↗
Luyện câu hỏi module này →