Servisphere

Module 12 · SAA-C03

Mẫu kiến trúc: sẵn sàng cao, khôi phục thảm hoạ, tách rời

Multi-AZ, multi-Region, 4 chiến lược DR theo RTO / RPO, kiến trúc serverless và hướng sự kiện, caching nhiều tầng.

  • DomainThiết kế chịu lỗi
  • DomainThiết kế hiệu năng cao
  • 9 sơ đồ
  • 10 tình huống
  • 16 dịch vụ

5 phút phải nhớ

  1. RPO là lượng dữ liệu tối đa chấp nhận mất (tính theo thời gian); RTO là thời gian tối đa chấp nhận để khôi phục dịch vụ.RPO 15 phút nghĩa là bản sao dữ liệu không được cũ hơn 15 phút. Đề cho RPO / RTO và ngân sách, bạn chọn chiến lược DR.
  2. Sẵn sàng cao (HA) trong một Region = trải mọi tầng qua ít nhất 2 AZ. Khôi phục thảm hoạ (DR) = có phương án ở Region khác.ALB + Auto Scaling group nhiều AZ + RDS Multi-AZ chịu được mất một AZ. Mất cả Region mới cần DR.
  3. Backup & restore: chỉ sao lưu dữ liệu (và cấu hình) sang Region khác; rẻ nhất, RTO / RPO dài nhất (cỡ vài giờ).Muốn dựng lại nhanh và không sai, hạ tầng phải viết bằng IaC (CloudFormation, CDK); sao lưu cả AMI và cấu hình.
  4. Pilot light: dữ liệu được sao chép liên tục và luôn chạy ở Region DR; máy chủ ứng dụng "tắt" (chưa triển khai hoặc 0 máy), bật khi cần.RTO cỡ hàng chục phút. Elastic Disaster Recovery chính là kiểu pilot light cho máy chủ.
  5. Warm standby: một bản thu nhỏ nhưng chạy đủ chức năng ở Region DR, nhận traffic được ngay, chỉ cần scale up.Khác pilot light: pilot light phải bật máy trước khi phục vụ, warm standby phục vụ được ngay ở công suất thấp.
  6. Multi-site active/active: chạy đủ công suất ở nhiều Region cùng lúc; RTO gần 0, đắt và phức tạp nhất.Dữ liệu bị xoá / hỏng vẫn lan sang mọi Region: vẫn cần backup theo thời điểm.
  7. Aurora Global Database: sao chép sang Region khác thường dưới 1 giây, promote Region phụ thành chính trong dưới 1 phút.RPO giây, RTO phút cho database quan hệ đa Region. DynamoDB global tables cho phép ghi ở mọi Region (bản ghi sau cùng thắng).
  8. Chuyển traffic khi có sự cố: Route 53 failover (health check), Application Recovery Controller (công tắc failover chủ động), Global Accelerator (IP tĩnh, đổi endpoint ngay).Route 53 phụ thuộc TTL của DNS; Global Accelerator không bị cache DNS. CloudFront origin failover chỉ thử origin phụ cho từng request lỗi.
  9. Tách rời bằng SQS: bên gửi bỏ việc vào hàng đợi, worker xử lý theo sức; hàng đợi hấp thụ đỉnh tải.Worker trong Auto Scaling group co giãn theo số tin nhắn chờ (ApproximateNumberOfMessagesVisible / backlog per instance).
  10. Fan-out: một sự kiện tới nhiều bên xử lý độc lập → SNS gửi tới nhiều hàng đợi SQS (hoặc EventBridge với nhiều rule).Mỗi bên có hàng đợi riêng nên bên chậm / lỗi không ảnh hưởng bên khác.
  11. Ứng dụng stateless: không giữ session trên máy; đưa session vào ElastiCache hoặc DynamoDB.Auto Scaling thêm / bớt / thay máy tự do; không cần sticky session.
  12. Cache nhiều tầng: CloudFront ở edge, ElastiCache trước database, DAX trước DynamoDB, read replica cho tải đọc.Đề hỏi giảm độ trễ đọc / giảm tải database: chọn tầng cache gần với chỗ đang nghẽn.
  13. Serverless (API Gateway + Lambda + DynamoDB + S3) tự co giãn, trả theo mức dùng, không quản máy chủ."Tải không đều, đội ít người vận hành, trả tiền theo dùng" → serverless.

Sơ đồ

Sẵn sàng cao trong một Region: mọi tầng trải 2 AZ

Sẵn sàng cao trong một Region: mọi tầng trải 2 AZVPCAZ aAZ bAuto Scaling group11122đồng bộ2Người dùngALBAppAppRDS primaryRDS standby
ALB trải hai AZ, Auto Scaling group giữ số máy tối thiểu ở cả hai AZ, RDS Multi-AZ có standby đồng bộ. Mất một AZ, hệ thống vẫn chạy.

Từng bước

  1. ALB chia tải cho máy ở cả hai AZ và bỏ qua máy không khoẻ.
  2. RDS ghi đồng bộ sang standby ở AZ kia; AZ a hỏng thì standby được nâng lên tự động, Auto Scaling bù máy ở AZ b.

DR kiểu backup & restore

DR kiểu backup & restoreRegion chínhRegion DR11copy2dựng3khôi phục3Ứng dụngRDSAWS BackupvaultBackup vaultbản saoCloudFormationdựng lại khi cầnỨng dụng (mới)chưa tồn tại
Region DR chỉ chứa bản sao lưu. Khi có thảm hoạ, dựng lại hạ tầng bằng CloudFormation rồi khôi phục dữ liệu: rẻ nhất nhưng chậm nhất.

Từng bước

  1. AWS Backup sao lưu EC2, RDS… theo lịch: tần suất sao lưu quyết định RPO.
  2. Bản sao lưu được copy sang Region DR.
  3. Thảm hoạ: chạy CloudFormation dựng hạ tầng rồi khôi phục dữ liệu; RTO tính bằng giờ.

DR kiểu pilot light

DR kiểu pilot lightRegion chínhRegion DR11Global Database2khi failover3Route 53Appđủ công suấtAuroraprimaryApp0 máy (tắt)AuroraRegion phụ (chạy)
Ở Region DR, dữ liệu luôn chạy và được sao chép liên tục; app server đã có cấu hình nhưng không chạy. Failover: bật app server, promote database, chuyển DNS.

Từng bước

  1. Bình thường mọi traffic tới Region chính.
  2. Dữ liệu sao chép liên tục sang Region DR (RPO giây).
  3. Failover: tăng Auto Scaling từ 0, promote Aurora ở Region DR, chuyển DNS. RTO cỡ hàng chục phút.

DR kiểu warm standby

DR kiểu warm standbyRegion chínhRegion DRprimary1112secondary322Route 53failoverALBApp10 máyAurora primaryALBApp2 máy, chạy sẵnAurora phụ
Region DR có bản thu nhỏ chạy đủ chức năng. Route 53 failover chuyển traffic ngay khi health check hỏng, sau đó Auto Scaling tăng lên đủ công suất.

Từng bước

  1. Region chính phục vụ toàn bộ traffic.
  2. Region DR chạy sẵn một bản nhỏ, dữ liệu sao chép liên tục.
  3. Health check hỏng: Route 53 chuyển sang Region DR; bản nhỏ phục vụ ngay, Auto Scaling tăng dần. RTO vài phút.

Multi-site active/active với DynamoDB global tables

Multi-site active/active với DynamoDB global tablesap-northeast-1eu-west-111122đọc / ghi2đọc / ghi2sao chép3Người dùngchâu Á, châu ÂuRoute 53latencyAPILambdaAPILambdaGlobal tableGlobal table
Cả hai Region cùng phục vụ. Route 53 latency routing đưa người dùng tới Region gần nhất; DynamoDB global tables cho ghi ở cả hai nơi.

Từng bước

  1. Route 53 trả Region có độ trễ thấp nhất với từng người dùng.
  2. Mỗi Region tự xử lý và ghi vào bản global table của mình.
  3. DynamoDB sao chép hai chiều; một Region hỏng thì Route 53 bỏ Region đó, RTO gần 0.

Tách rời bằng SQS: worker co giãn theo hàng đợi

Tách rời bằng SQS: worker co giãn theo hàng đợiAuto Scaling group (worker)1122223scale34KháchWebSQSđơn hàngWorkerWorkerCloudWatch alarmbacklog / máyDLQtin lỗiDynamoDB
Web nhận đơn và trả lời ngay; việc nặng nằm trong hàng đợi. Worker Auto Scaling theo số tin nhắn chờ trên mỗi máy, tin lỗi nhiều lần sang dead-letter queue.

Từng bước

  1. Web bỏ đơn vào hàng đợi và trả lời khách ngay.
  2. Worker lấy tin, xử lý, xoá tin khi xong.
  3. Số tin chờ trên mỗi worker tăng thì Auto Scaling thêm worker.
  4. Tin lỗi quá số lần cho phép chuyển sang dead-letter queue để xem lại.

Fan-out: SNS tới nhiều hàng đợi SQS

Fan-out: SNS tới nhiều hàng đợi SQS1222333Dịch vụ đơn hàngSNS topicorder-createdSQS emailSQS khoSQS phân tíchGửi emailCập nhật khoGhi phân tích
Một sự kiện "đơn mới" được SNS đẩy tới ba hàng đợi. Mỗi dịch vụ có hàng đợi riêng nên chậm hay lỗi cũng không ảnh hưởng dịch vụ khác.

Từng bước

  1. Dịch vụ đơn hàng chỉ phát một sự kiện, không cần biết ai nghe.
  2. SNS gửi bản sao vào từng hàng đợi đã đăng ký.
  3. Mỗi bên xử lý theo tốc độ riêng, lỗi thì thử lại trong hàng đợi của mình.

Cache nhiều tầng và session ngoài máy chủ

Cache nhiều tầng và session ngoài máy chủ112thử trước2nếu trượt33Người dùngCloudFrontcache ở edgeALBApp (stateless)ElastiCachecache + sessionRDS primaryRead replica
CloudFront cache ở edge; ElastiCache giữ kết quả truy vấn hay dùng và session; database chỉ nhận phần còn lại, read replica gánh thêm tải đọc.

Từng bước

  1. Nội dung cache được thì CloudFront trả ngay ở edge; phần còn lại mới về ALB.
  2. App tìm trong ElastiCache trước (cache-aside); session cũng ở đây nên app không giữ trạng thái.
  3. Cache trượt mới truy vấn database rồi ghi lại vào cache; read replica gánh thêm tải đọc.

Ứng dụng web serverless

Ứng dụng web serverless1tĩnh1API222Người dùngCloudFrontS3HTML, JSAPI Gateway/api/*LambdaDynamoDB
Giao diện tĩnh trên S3 qua CloudFront; API Gateway gọi Lambda; dữ liệu trong DynamoDB. Mọi thành phần tự co giãn và trả theo mức dùng.

Từng bước

  1. Trang tĩnh được cache ở edge, lấy từ S3 riêng tư.
  2. Gọi API: API Gateway kích hoạt Lambda, Lambda đọc ghi DynamoDB. Không có máy chủ nào chạy khi không có request.

So sánh nhanh

4 chiến lược khôi phục thảm hoạ

Chiến lượcỞ Region DR có gìRPO / RTO thường gặpChi phíDịch vụ hay dùng
Backup & restoreChỉ bản sao lưuVài giờThấp nhấtAWS Backup (copy sang Region khác), snapshot, S3 CRR, CloudFormation
Pilot lightDữ liệu chạy và sao chép liên tục; app server tắtHàng chục phútThấpAurora Global Database, RDS read replica khác Region, Elastic Disaster Recovery
Warm standbyBản thu nhỏ chạy đủ chức năngVài phútTrung bìnhNhư pilot light + Auto Scaling, Route 53 failover
Multi-site active/activeBản đầy đủ, cùng phục vụGần như 0Cao nhấtDynamoDB global tables, Aurora Global Database, Route 53 / Global Accelerator

Nhân bản database: chịu lỗi hay mở rộng đọc?

RDS Multi-AZ (instance)Read replicaAurora Global DatabaseDynamoDB global tables
Mục đíchChịu lỗi trong RegionMở rộng đọc (và DR nếu khác Region)DR đa Region, đọc gần người dùngGhi / đọc ở nhiều Region
Sao chépĐồng bộBất đồng bộBất đồng bộ, thường dưới 1 giâyBất đồng bộ
Bản phụ phục vụ đọcKhông (standby)CóCóCó, cả ghi
Chuyển đổiTự động failoverPromote bằng tayPromote Region phụ (dưới 1 phút)Không cần: Region nào cũng ghi được

Tách rời: chọn cách truyền việc

SQSSNSEventBridgeKinesis Data Streams
KiểuHàng đợi (một bên xử lý mỗi tin)Pub/sub đẩy tới nhiều bênBus sự kiện, lọc theo nội dungLuồng có thứ tự, đọc lại được
Hợp vớiHấp thụ đỉnh tải, worker co giãnFan-out, thông báoTích hợp dịch vụ AWS / SaaS, ruleDữ liệu thời gian thực khối lượng lớn
Giữ tinTới 14 ngàyKhông giữCó thể lưu trữ và phát lại (archive)24 giờ – 365 ngày

Cache ở đâu

TầngDịch vụGiảm cái gì
Edge (gần người dùng)CloudFrontĐộ trễ và tải về origin cho nội dung tĩnh / API cache được
Ứng dụngElastiCache (Redis OSS / Valkey / Memcached)Truy vấn database lặp lại, lưu session
Trước DynamoDBDAXĐộ trễ đọc xuống micro giây
DatabaseRead replicaTải đọc trên bản chính

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

1Ứng dụng web chạy trên một EC2 ở một AZ; cần chịu được mất một AZ với chi phí hợp lý.

Xem đáp án

Đúng: ALB + Auto Scaling group trải ít nhất 2 AZ, database RDS Multi-AZ
Mỗi tầng có mặt ở hai AZ; AZ hỏng thì ALB chỉ gửi tới máy khoẻ, RDS tự failover.

Sai: Chuyển sang instance lớn hơn
Vẫn là một máy, một AZ.

Sai: Dựng bản sao ở Region khác
Quá mức cho yêu cầu mất một AZ, đắt hơn.

2Hệ thống nội bộ chấp nhận RPO 24 giờ và RTO 8 giờ khi mất cả Region; muốn chi phí DR thấp nhất.

Xem đáp án

Đúng: Backup & restore: AWS Backup sao chép bản sao lưu sang Region khác, hạ tầng viết bằng CloudFormation
RPO / RTO tính bằng giờ thì backup & restore là đủ và rẻ nhất.

Sai: Warm standby
Chạy liên tục một bản thu nhỏ: đắt hơn mức cần.

3Cần RPO vài giây và RTO khoảng 30 phút cho ứng dụng dùng Aurora MySQL khi mất Region; chi phí thấp nhất có thể.

Xem đáp án

Đúng: Pilot light: Aurora Global Database sang Region DR; app server dựng sẵn bằng IaC nhưng không chạy, bật lên khi failover
Dữ liệu sao chép liên tục (RPO giây), phần còn lại chỉ phải bật lên (RTO hàng chục phút).

Sai: Backup & restore với snapshot hằng ngày
RPO tới một ngày.

Sai: Multi-site active/active
Đáp ứng được nhưng tốn kém hơn nhiều.

4Ứng dụng phải phục vụ lại trong vài phút khi mất Region, chấp nhận chạy công suất thấp lúc đầu.

Xem đáp án

Đúng: Warm standby: bản thu nhỏ chạy sẵn ở Region DR, Route 53 failover, Auto Scaling tăng công suất sau khi chuyển
Nhận traffic ngay, chỉ cần scale up.

Sai: Pilot light
App server đang tắt, phải bật và cấu hình trước khi phục vụ được.

5Ứng dụng toàn cầu cần RTO gần như 0 và người dùng ở châu Á, châu Âu đều được phục vụ từ Region gần nhất; dữ liệu phải ghi được ở mọi nơi.

Xem đáp án

Đúng: Multi-site active/active với DynamoDB global tables và Route 53 latency routing
Mọi Region đều đọc / ghi; Region hỏng thì Route 53 bỏ Region đó.

Sai: Aurora Global Database với ghi ở Region chính
Chỉ một Region nhận ghi (các Region khác chỉ đọc hoặc chuyển tiếp ghi).

6Đơn hàng dồn dập vào giờ khuyến mãi làm hệ thống xử lý phía sau quá tải và mất đơn.

Xem đáp án

Đúng: Đặt SQS giữa web và worker; worker Auto Scaling theo số tin nhắn chờ
Hàng đợi giữ đơn an toàn, worker xử lý theo sức và co giãn theo backlog.

Sai: Tăng kích thước instance của worker
Vẫn có giới hạn, và tốn tiền lúc thấp điểm.

7Mỗi đơn hàng mới cần đồng thời gửi email, cập nhật kho và ghi phân tích; một bên lỗi không được làm hỏng bên khác.

Xem đáp án

Đúng: SNS topic gửi tới ba hàng đợi SQS, mỗi bên một hàng đợi
Fan-out: mỗi bên nhận bản riêng, xử lý và thử lại độc lập.

Sai: Một hàng đợi SQS cho cả ba bên
Mỗi tin nhắn chỉ một consumer xử lý.

8Người dùng bị đăng xuất mỗi khi Auto Scaling thay máy.

Xem đáp án

Đúng: Lưu session vào ElastiCache (hoặc DynamoDB), giữ máy ứng dụng stateless
Máy nào cũng đọc được session; thêm / bớt máy không ảnh hưởng người dùng.

Sai: Bật sticky session trên ALB
Máy bị thay vẫn mất session; tải cũng lệch giữa các máy.

9Database quan hệ quá tải vì cùng một số truy vấn đọc lặp lại liên tục.

Xem đáp án

Đúng: ElastiCache trước database (cache-aside), thêm read replica nếu cần
Truy vấn lặp lại được trả từ bộ nhớ; database chỉ còn tải ghi và truy vấn hiếm.

Sai: Thêm IOPS cho ổ đĩa
Không giải quyết việc lặp truy vấn.

10API có lượng gọi rất thất thường, đội nhỏ không muốn quản máy chủ.

Xem đáp án

Đúng: API Gateway + Lambda + DynamoDB
Tự co giãn tới 0, trả theo request.

Sai: EC2 Auto Scaling với instance lớn chạy thường trực
Trả tiền cả lúc không có ai gọi, phải quản OS.

Chọn nhanh

Bạn cần chịu được gì, nhanh tới đâu?

Khi cầnDùng
Mất một AZMulti-AZ: ALB + Auto Scaling nhiều AZ, RDS Multi-AZ · xem sơ đồ
Mất Region, RPO / RTO tính bằng giờ, rẻ nhấtBackup & restore (AWS Backup copy sang Region khác + IaC) · xem sơ đồ
Mất Region, RPO giây, RTO hàng chục phútPilot light · xem sơ đồ
Mất Region, RTO vài phútWarm standby · xem sơ đồ
RTO gần 0, phục vụ toàn cầuMulti-site active/active · xem sơ đồ
Đỉnh tải làm phía sau quá tảiSQS + worker co giãn theo hàng đợi · xem sơ đồ
Một sự kiện, nhiều bên xử lýSNS → nhiều SQS (fan-out) hoặc EventBridge · xem sơ đồ
Đọc chậm, database quá tảiCloudFront / ElastiCache / DAX / read replica · xem sơ đồ
Tải thất thường, không muốn quản máy chủServerless: API Gateway + Lambda + DynamoDB · xem sơ đồ
Failover DNS chủ động, an toàn khi sự cốApplication Recovery Controller + Route 53

Bẫy hay gặp

  • Nhầm HA với DR: Multi-AZ không bảo vệ khi mất cả Region.
  • Chọn RDS read replica để chịu lỗi tự động trong Region: đó là Multi-AZ; read replica để mở rộng đọc và phải promote bằng tay.
  • Nhầm pilot light và warm standby: pilot light phải bật app server trước khi phục vụ, warm standby phục vụ được ngay.
  • Làm backup & restore mà không có IaC: dựng lại bằng tay thì không kịp RTO.
  • Tin rằng active/active hoặc sao chép liên tục thay được backup: dữ liệu bị xoá / hỏng cũng được sao chép đi.
  • Không kiểm thử DR định kỳ: kế hoạch chưa từng chạy thì không biết có đạt RTO không.
  • Dùng sticky session thay cho việc đưa session ra ngoài máy.
  • Một hàng đợi SQS cho nhiều bên cần cùng nhận một sự kiện: cần fan-out bằng SNS / EventBridge.
  • Co giãn worker theo CPU trong khi việc thật nằm ở độ dài hàng đợi.
  • Quên rằng failover bằng DNS phụ thuộc TTL: cần độ trễ chuyển đổi thấp, không phụ thuộc cache DNS thì dùng Global Accelerator.
  • Quên quota dịch vụ ở Region DR: đến lúc scale up mới phát hiện không đủ giới hạn.

Dịch vụ trong module

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

  • Pilot light không phục vụ được request khi chưa bật thêm tài nguyên; warm standby phục vụ ngay ở công suất thấp, chỉ cần scale up. kiểm ngày 2026-10-16 ↗
  • Aurora Global Database sao chép sang Region phụ với độ trễ thường dưới 1 giây và promote Region phụ trong dưới 1 phút. kiểm ngày 2026-10-16 ↗
  • DynamoDB global tables cho đọc và ghi ở mọi Region, giải quyết ghi đồng thời theo nguyên tắc bản ghi sau cùng thắng (last writer wins). kiểm ngày 2026-10-16 ↗
  • AWS Elastic Disaster Recovery sao chép liên tục ở mức block và dùng chiến lược pilot light. kiểm ngày 2026-10-16 ↗
  • CloudFront origin failover chuyển từng request lỗi sang origin phụ; các request sau vẫn tới origin chính. kiểm ngày 2026-10-16 ↗
  • AWS Backup sao chép bản sao lưu sang Region và tài khoản khác; không tự khôi phục theo lịch. kiểm ngày 2026-10-16 ↗
Luyện câu hỏi module này →