EC2 — SAA Level
Chỉ bốn chủ đề, không có bài nào thừa. Placement Groups và Hibernate là hai nội dung xuất hiện gần như chắc chắn trong đề, thường dưới dạng scenario ngắn có từ khóa rất rõ.
Private vs Public vs Elastic IP
Khóa học tập trung vào IPv4 — vẫn là chuẩn phổ biến nhất trên internet (khoảng 3,7 tỷ địa chỉ công khai). IPv6 sinh ra để giải bài toán cạn địa chỉ, hay gặp trong IoT, nhưng đề SAA hỏi rất ít.
Public IP vs Private IP
| Public IP | Private IP | |
|---|---|---|
| Phạm vi duy nhất | Duy nhất trên toàn internet | Chỉ duy nhất trong mạng riêng (VPC) |
| Truy cập từ internet | Được | Không — phải đi qua NAT + Internet Gateway |
| Định vị địa lý | Có thể tra ra vị trí | Không |
| Dải địa chỉ | Do AWS/ISP cấp | Chỉ dùng dải riêng: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
Hai máy trong cùng một mạng riêng nói chuyện với nhau bằng private IP. Máy trong hai mạng riêng khác nhau có thể trùng private IP mà không xung đột — vì chúng không nhìn thấy nhau.
Elastic IP
Vấn đề: khi bạn stop rồi start lại một EC2 instance, public IP của nó thay đổi. Private IP thì giữ nguyên. Nếu có thứ gì đó đang trỏ vào public IP cũ, nó gãy.
Elastic IP là địa chỉ IPv4 công khai cố định, bạn sở hữu chừng nào chưa xóa nó đi.
- Mỗi lúc chỉ gắn được vào một instance.
- Có thể chuyển nhanh sang instance khác để che giấu sự cố — instance hỏng thì trỏ IP sang máy dự phòng.
- Mặc định mỗi tài khoản được 5 Elastic IP (xin AWS tăng thêm được).
AWS và bài giảng đều khuyên hạn chế dùng Elastic IP — nó thường phản ánh thiết kế kém. Hai cách thay thế tốt hơn: dùng public IP ngẫu nhiên rồi gắn tên miền DNS, hoặc tốt nhất là đặt instance sau một Load Balancer và không cần public IP nào cả.
Elastic IP không dùng vẫn bị tính tiền (~$0.005/giờ). Đây là lý do phổ biến khiến hóa đơn phát sinh dù đã stop hết instance.
Bản thân instance không biết public IP của mình. Chạy ifconfig hay ip addr bên trong máy chỉ thấy private IP; public IP được Internet Gateway ánh xạ ở bên ngoài. Muốn biết public IP thì hỏi instance metadata.
Hệ thống của bạn gọi API của một ngân hàng, và phía ngân hàng chỉ chấp nhận request từ danh sách IP đã đăng ký. Nếu dùng public IP tự động thì mỗi lần stop/start là kết nối gãy và phải làm thủ tục xin whitelist lại. Đây là một trong số ít trường hợp Elastic IP thực sự hợp lý — hoặc tốt hơn, cho toàn bộ instance đi ra qua một NAT Gateway và chỉ đăng ký IP của NAT Gateway đó.
Placement Groups
Placement Group cho bạn quyền tác động vào vị trí vật lý của instance trên hạ tầng AWS. Có ba chiến lược, và đề thi ra dưới dạng "tình huống này chọn cái nào".
Cluster — dồn sát nhau
Tất cả instance nằm trong cùng một AZ, trên cùng cụm rack, sát nhau nhất có thể.
| Ưu | Nhược |
|---|---|
| Mạng cực nhanh, độ trễ cực thấp, băng thông tới 10 Gbps giữa các instance | Rack hỏng là chết cả cụm — rủi ro cao nhất trong ba loại |
Dùng khi: job big data cần chạy xong thật nhanh, ứng dụng HPC cần độ trễ mạng cực thấp và thông lượng cực cao.
Spread — trải ra xa nhau
Mỗi instance nằm trên một phần cứng vật lý khác nhau, và nhóm này trải được qua nhiều AZ.
| Ưu | Nhược |
|---|---|
| Rủi ro hỏng đồng thời thấp nhất — mỗi máy một phần cứng riêng | Giới hạn 7 instance mỗi AZ cho mỗi placement group |
Dùng khi: ứng dụng cần tính sẵn sàng tối đa, hoặc các instance quan trọng phải được cô lập hoàn toàn khỏi lỗi của nhau.
Partition — chia theo cụm
Instance được chia vào các partition, mỗi partition nằm trên một tập rack riêng. Tối đa 7 partition mỗi AZ, trải được qua nhiều AZ trong cùng region, và chứa được hàng trăm instance.
Một partition hỏng có thể ảnh hưởng nhiều instance trong partition đó, nhưng không lan sang partition khác. Instance đọc được thông tin partition của mình qua metadata — nhờ vậy phần mềm phân tán tự biết cách đặt bản sao dữ liệu cho an toàn.
Dùng khi: hệ thống phân tán lớn hiểu khái niệm partition — HDFS, HBase, Cassandra, Kafka.
Bảng so sánh — học thuộc bảng này là đủ
| Cluster | Spread | Partition | |
|---|---|---|---|
| Mục tiêu | Hiệu năng mạng | Tính sẵn sàng | Cô lập theo nhóm, quy mô lớn |
| Phạm vi AZ | Một AZ duy nhất | Nhiều AZ | Nhiều AZ |
| Giới hạn | Không giới hạn cứng, nhưng cùng một cụm rack | 7 instance / AZ | 7 partition / AZ, hàng trăm instance |
| Rủi ro | Cao — hỏng cùng lúc | Thấp nhất | Trung bình — hỏng theo partition |
| Từ khóa đề | "low latency", "high throughput", "HPC", "10 Gbps" | "maximize availability", "critical instances", "isolate failures" | "Hadoop", "Cassandra", "Kafka", "large distributed workload" |
Instance đang chạy không đổi placement group được — phải stop instance rồi mới chuyển vào hoặc ra khỏi nhóm (qua CLI/SDK). Với Cluster, nếu gặp lỗi thiếu capacity khi thêm máy, cách xử lý là stop rồi start lại toàn bộ instance trong nhóm để AWS xếp lại chỗ.
Cluster: cụm 20 node Spark chạy job ETL 2 tiếng mỗi đêm, giai đoạn shuffle dữ liệu giữa các node là nút cổ chai → dồn sát nhau giúp rút ngắn thời gian chạy rõ rệt.
Spread: 5 node ZooKeeper giữ quorum cho cụm. Hai node cùng chết một lúc là mất quorum, cả hệ thống dừng — nên mỗi node phải nằm trên phần cứng riêng.
Partition: cụm Kafka 30 broker. Mỗi partition đặt trên tập rack riêng nên mất một rack chỉ mất một phần bản sao, các bản sao còn lại vẫn phục vụ được.
Elastic Network Interfaces (ENI)
ENI là card mạng ảo trong VPC. Mọi EC2 instance đều có ít nhất một ENI (card chính), và bạn gắn thêm được card phụ.
Một ENI mang theo những gì
- Một private IPv4 chính + một hoặc nhiều private IPv4 phụ
- Một Elastic IP cho mỗi private IPv4
- Một public IPv4
- Một hoặc nhiều Security Group
- Một địa chỉ MAC
ENI tồn tại độc lập với instance. Bạn tạo ENI riêng, gắn vào máy A; khi máy A hỏng thì tháo ra gắn sang máy B. Toàn bộ IP, Elastic IP, security group và MAC address đi theo card — đây là cách làm failover nhanh mà không cần đổi cấu hình mạng.
ENI bị khóa trong một Availability Zone. Không thể tháo ENI ở AZ này gắn sang instance ở AZ khác. Nếu đề nói "chuyển sang AZ khác" thì ENI không phải đáp án.
Ứng dụng thực tế khác: tách riêng card mạng quản trị và card mạng ứng dụng, hoặc giữ một địa chỉ IP cố định "trôi" giữa các máy trong cùng AZ (floating IP).
Cặp firewall ảo chạy active/standby trong cùng một AZ: địa chỉ IP mà mọi client gọi tới nằm trên một ENI riêng, không thuộc về máy nào cố định. Khi máy active chết, script tháo ENI và gắn sang máy standby trong vài giây — client vẫn gọi đúng IP cũ, không phải đổi DNS rồi ngồi chờ TTL hết hạn. Đây là mô hình các thiết bị mạng ảo trên AWS Marketplace hay dùng.
EC2 Hibernate
Trước hết, ôn lại ba trạng thái quen thuộc:
| Hành động | Điều gì xảy ra |
|---|---|
| Stop | Dữ liệu trên EBS root volume được giữ nguyên. RAM mất. Khởi động lại phải boot OS từ đầu. |
| Terminate | EBS root volume bị xóa (theo mặc định). Mất sạch. |
| Hibernate | Giữ nguyên cả nội dung RAM. Khởi động lại nhanh hơn hẳn vì OS không phải boot lại. |
Hibernate hoạt động thế nào
Toàn bộ nội dung RAM được ghi thành file trong EBS root volume. Khi start lại, RAM được nạp ngược trở lại, tiến trình chạy tiếp đúng chỗ đang dở — hệ điều hành không hề bị tắt và bật lại.
Dùng khi: tiến trình xử lý dài cần giữ nguyên trạng thái, dịch vụ mất nhiều thời gian khởi tạo (nạp cache, dựng index), muốn máy sẵn sàng phục vụ ngay khi bật.
Điều kiện — phần đề thi thích hỏi
| Yêu cầu | Chi tiết |
|---|---|
| Root volume | Phải là EBS, phải được mã hóa, và đủ lớn để chứa toàn bộ RAM. Không dùng được Instance Store. |
| Dung lượng RAM | Phải nhỏ hơn 150 GB |
| Instance family | Các dòng C, M, R, T (nhiều thế hệ). Không hỗ trợ bare metal. |
| Purchasing option | Dùng được với On-Demand, Reserved và Spot |
| Thời gian tối đa | Không hibernate quá 60 ngày liên tục |
| Hệ điều hành | Amazon Linux, Ubuntu, RHEL, CentOS, Windows… |
RAM < 150 GB · tối đa 60 ngày · root volume EBS đã mã hóa. Đề hay ra câu "tại sao không bật được hibernate" và đáp án nằm ở một trong ba điều kiện này.
Máy đang hibernate không tính tiền compute, nhưng vẫn tính tiền EBS — và volume phải lớn hơn bình thường để chứa file RAM. Hibernate tiết kiệm thời gian khởi động, không phải tiết kiệm tiền lưu trữ.
Máy phân tích dữ liệu của team data mất 12 phút mỗi lần khởi động vì phải nạp 40 GB dataset vào RAM và dựng index. Hibernate lúc 18h, sáng hôm sau bật lên là làm việc được ngay. Trường hợp tương tự: server Java có heap lớn cần thời gian warm-up JIT, hoặc dịch vụ phải nạp một cache khổng lồ trước khi phục vụ request đầu tiên.
Vòng đời instance — nhìn một lượt
| Stop | Hibernate | Terminate | |
|---|---|---|---|
| RAM | Mất | Giữ | Mất |
| EBS root volume | Giữ | Giữ (chứa thêm file RAM) | Xóa theo mặc định |
| Private IP | Giữ | Giữ | Mất |
| Public IP (không Elastic) | Đổi khi start lại | Đổi khi start lại | Mất |
| Phí compute | Không | Không | Không |
| Phí EBS | Có | Có | Không |
| Thời gian khởi động lại | Boot đầy đủ | Nhanh — nạp lại RAM | — |
Instance Store (ổ gắn cứng vào máy vật lý) mất dữ liệu khi stop hoặc hibernate, không chỉ khi terminate. Đây là lý do hibernate không dùng được với root volume kiểu Instance Store. Chi tiết ở Section 7.
Map từ khóa & cheat sheet
| Đề nhắc đến… | Nghĩ ngay tới |
|---|---|
| "lowest network latency, high throughput, HPC" | Cluster placement group |
| "maximize high availability, critical instances" | Spread placement group (7 instance/AZ) |
| "Hadoop, Cassandra, Kafka, HDFS" | Partition placement group |
| "giữ nguyên trạng thái RAM, khởi động lại nhanh" | EC2 Hibernate |
| "dịch vụ mất nhiều thời gian khởi tạo" | EC2 Hibernate |
| "không bật được hibernate" | Kiểm tra RAM < 150 GB, root EBS đã mã hóa, không quá 60 ngày |
| "public IP đổi sau khi stop/start" | Elastic IP — nhưng ưu tiên DNS hoặc Load Balancer |
| "chuyển card mạng sang instance khác để failover" | ENI (chỉ trong cùng AZ) |
| "hóa đơn có phí IP dù đã stop instance" | Elastic IP chưa giải phóng |
Cheat sheet 45 giây
- Stop/start → public IP đổi, private IP giữ nguyên. Elastic IP để cố định, nhưng nên tránh.
- Elastic IP: 1 instance tại một thời điểm, mặc định 5 cái/tài khoản, không dùng vẫn mất tiền.
- Cluster = nhanh (1 AZ, 10 Gbps, rủi ro cao). Spread = an toàn (7 máy/AZ). Partition = quy mô lớn (7 partition/AZ, Kafka/Cassandra).
- ENI = card mạng ảo, mang theo IP + SG + MAC, khóa trong một AZ, tháo lắp được để failover.
- Hibernate giữ RAM, boot nhanh; cần root EBS mã hóa, RAM < 150 GB, tối đa 60 ngày.
- Hibernate không tính phí compute nhưng vẫn tính phí EBS.
Năm câu tự kiểm tra trước khi qua file quiz
1. Cụm 12 máy chạy job Spark cần băng thông mạng tối đa giữa các node. Placement group nào?
2. Cần 10 instance quan trọng, mỗi cái phải nằm trên phần cứng riêng, trong cùng một AZ. Có làm được bằng Spread không?
3. Instance có 256 GB RAM, bật hibernate được không?
4. Máy A hỏng, muốn giữ nguyên IP và security group để chuyển sang máy B ở AZ khác. Dùng ENI được không?
5. Sau khi stop rồi start một instance, thứ gì thay đổi?
Đáp án: (1) Cluster — ưu tiên độ trễ thấp và thông lượng cao trong một AZ. (2) Không — Spread giới hạn 7 instance mỗi AZ cho mỗi placement group; muốn 10 máy thì phải trải qua ít nhất 2 AZ. (3) Không — hibernate yêu cầu RAM dưới 150 GB. (4) Không — ENI bị khóa trong một AZ; sang AZ khác phải dùng cách khác (Elastic IP hoặc load balancer). (5) Public IP đổi; private IP, dữ liệu EBS giữ nguyên; RAM mất.