Bài toán kiến trúc
Thiết kế một web app có public entry point, application private và database không public. Hãy bắt đầu từ request path, không bắt đầu bằng danh sách service.
Cách đọc VPC
VPC là boundary logic. Subnet gắn với một AZ. Route table quyết định packet đi đâu; security group/NACL quyết định traffic có được phép ở các lớp khác nhau. “Public subnet” chỉ có ý nghĩa khi route tới Internet Gateway và addressing cho phép.
Flow tham chiếu: Internet → ALB (public, 2 AZ) → App (private, 2 AZ) → Database (private); app outbound update đi qua NAT. Vẽ source, destination, next hop và control cho từng request.
Bài tập thiết kế
Viết failure mode khi một AZ hoặc NAT Gateway lỗi, rồi ghi trade-off giữa NAT tập trung và NAT mỗi AZ. Một kiến trúc đạt yêu cầu phải nói được security boundary, availability và cost trade-off; không chỉ ghi “dùng VPC”.
Bài giảng chuyên sâu
Case study: checkout hai AZ
Một request đi từ Internet vào ALB ở public subnet, vào target private rồi truy cập database private. Hãy viết từng hop theo mẫu source → destination → route → security control → expected evidence. Public subnet không phải do tên; nó cần route tới Internet Gateway và địa chỉ phù hợp. Private app có default route tới NAT để tải package, nhưng NAT chỉ cho outbound do connection khởi tạo từ private side.
Điểm thiết kế quan trọng là failure domain: NAT tập trung có thể rẻ hơn nhưng tạo dependency liên-AZ và một điểm lỗi; NAT mỗi AZ tăng chi phí nhưng giữ outbound path độc lập. Database không cần public IP vì request từ app được cho phép bằng security group và route nội bộ. Khi review, loại phương án đặt database public hoặc dùng IGW như firewall.
Bài tập: vẽ sequence Internet → ALB → app → DB và app → NAT → Internet. Ghi expected state khi NACL chặn ephemeral return port, khi route table thiếu default route và khi một AZ mất. Recovery phải nói rõ route/control nào thay đổi và evidence nào chứng minh traffic đã đi đúng.