So Sánh Amazon S3 vs EBS vs EFS: Khi Nào Dùng Loại Lưu Trữ Nào?
Hồi mới học AWS, mình cũng bị "xoắn não" khi thấy 3 dịch vụ lưu trữ cùng tồn tại: S3, EBS, EFS. Đọc docs AWS thì toàn chữ "object storage", "block storage", "file system" — nghe rất kỹ thuật nhưng chẳng hiểu thực tế khác nhau chỗ nào. Cho đến khi dùng sai EBS cho ứng dụng cần share file giữa nhiều server, rồi trả tiền gấp đôi vì chọn sai loại — mình mới ngộ ra bài học đắt giá này.
Tổng quan: 3 loại storage của AWS và cách phân biệt nhanh
Hãy tưởng tượng ba tình huống lưu trữ quen thuộc trong cuộc sống: Amazon S3 giống như kho hàng siêu lớn — bạn ném đồ vào, gán nhãn, lấy ra bất cứ lúc nào từ bất kỳ đâu. Amazon EBS giống ổ cứng SSD gắn vào máy tính — tốc độ cao, nhưng chỉ một máy dùng được tại một thời điểm. Amazon EFS giống ổ cứng mạng NAS trong công ty — nhiều máy tính cùng truy cập một thư mục chia sẻ.
Đây là bảng tóm tắt nhanh để bạn bookmark lại:
S3: Object Storage — lưu file, ảnh, video, backup — truy cập qua HTTP — giá rẻ nhất — không giới hạn dung lượng.
EBS: Block Storage — ổ đĩa ảo gắn vào EC2 — tốc độ cao như SSD — chỉ 1 EC2 dùng cùng lúc (trừ Multi-Attach) — cần detach/attach thủ công.
EFS: File Storage — hệ thống file NFS — nhiều EC2 mount cùng lúc — tự động co giãn dung lượng — phù hợp workload shared file.
Tại sao phải chọn đúng ngay từ đầu? Vì AWS tính tiền theo từng dịch vụ với cơ chế khác nhau. Dùng EBS để lưu ảnh tĩnh thay S3 có thể đắt hơn 10–20 lần. Dùng S3 thay EFS cho ứng dụng cần POSIX file system thì ứng dụng đơn giản là không chạy được.
Use Case thực tế của từng loại
Lý thuyết xong, giờ mình đi vào các tình huống thực mà bạn sẽ gặp khi làm dự án:
- Amazon S3 — Lưu trữ static assets và backup: Một startup e-commerce cần lưu hàng triệu ảnh sản phẩm, file PDF hóa đơn, video marketing. S3 là lựa chọn duy nhất hợp lý — lưu trữ không giới hạn, giá từ ~$0.023/GB/tháng, tích hợp thẳng với CloudFront CDN để serve nhanh toàn cầu. Kết quả: giảm 80% chi phí so với lưu trên EBS.
- Amazon EBS — Ổ đĩa hệ điều hành và database: Một ứng dụng web chạy trên EC2 cần nơi lưu OS, code, và MySQL database. EBS gp3 (SSD) gắn vào EC2 cho độ trễ thấp ~1ms, IOPS ổn định, phù hợp transactional workload. Database trên EBS io2 đạt throughput cao và có snapshot để backup.
- Amazon EFS — Shared file system cho microservices: Một hệ thống render video chạy trên 10 EC2 instances, tất cả cần đọc/ghi cùng một thư mục file input/output. EFS mount vào tất cả instances qua NFS, dung lượng tự động mở rộng từ vài MB đến petabytes. Không cần quản lý partition, không lo đầy ổ.
Hướng dẫn chi tiết: Đặc điểm kỹ thuật và cách chọn đúng
Amazon S3 — Object Storage
S3 lưu dữ liệu dưới dạng "object" — mỗi object có key (tên file), value (nội dung), và metadata. Bạn không thể "mở file ra sửa từng dòng" như ổ đĩa thông thường — mỗi lần sửa là tải lại toàn bộ object. Điều này làm S3 không phù hợp cho database hay log file cần append liên tục.
Truy cập S3 qua HTTPS endpoint hoặc AWS SDK. Bật versioning để giữ lịch sử các version file. Dùng lifecycle policy để tự động chuyển file cũ sang Glacier giảm chi phí.
aws s3 cp ./image.jpg s3://my-bucket/images/image.jpg
aws s3 sync ./local-folder s3://my-bucket/backup/
Amazon EBS — Block Storage
EBS là ổ đĩa ảo gắn vào một EC2 instance duy nhất (mặc định). Có 4 loại chính: gp3 (SSD mục đích chung, phổ biến nhất), io2 (SSD IOPS cao cho database), st1 (HDD throughput cao cho big data), sc1 (HDD rẻ nhất cho cold storage).
Khi EC2 bị terminate, EBS volume không bị xóa nếu bạn bỏ tick "Delete on termination". Luôn tạo snapshot định kỳ để backup:
aws ec2 create-snapshot --volume-id vol-0abcd1234 --description "Daily backup $(date +%Y-%m-%d)"
Amazon EFS — Elastic File System
EFS dùng giao thức NFSv4.1. Để mount vào EC2 Linux:
sudo yum install -y amazon-efs-utils
sudo mkdir /mnt/efs
sudo mount -t efs fs-0123456789abcdef0:/ /mnt/efs
EFS có 2 performance mode: General Purpose (default, phù hợp 99% use case) và Max I/O (cho hàng nghìn instances đọc/ghi đồng thời). Throughput mode có thể để Elastic để AWS tự điều chỉnh theo workload.
Mẹo quan trọng: EFS đắt hơn S3 khoảng 10 lần (~$0.30/GB vs ~$0.023/GB). Đừng dùng EFS để lưu static file — chỉ dùng khi thực sự cần nhiều EC2 truy cập cùng lúc theo kiểu POSIX file system.
Những "ổ gà" phổ biến khi chọn storage AWS
Sai lầm 1: Dùng EBS để lưu ảnh/video tĩnh. Nhiều bạn mới gắn EBS lớn vào EC2 rồi cho web server phục vụ static file từ đó. Vấn đề: EBS gắn với 1 instance, khi scale horizontal thêm instance khác thì instance mới không có file. Đúng là phải dùng S3 + CloudFront.
Sai lầm 2: Dùng EFS khi không cần shared access. EFS đắt hơn EBS đáng kể nếu chỉ có 1 EC2 dùng. Nếu ứng dụng chỉ chạy trên 1 instance, hãy dùng EBS — rẻ hơn và nhanh hơn.
Sai lầm 3: Quên snapshot EBS. EBS không tự backup. Nếu volume bị lỗi mà không có snapshot, data mất hoàn toàn. Thiết lập Amazon Data Lifecycle Manager để tự động snapshot theo lịch.
FAQ — Câu hỏi thường gặp
Q: S3 có thể dùng thay EBS làm ổ đĩa cho EC2 được không?A: Không. S3 là object storage truy cập qua HTTP/SDK, không thể mount như ổ đĩa filesystem. EC2 cần block storage (EBS) để chạy OS và ứng dụng. Một số tool như s3fs cho phép mount S3 nhưng performance rất kém và không phù hợp production.
Q: EFS có chạy được trên Windows EC2 không?A: EFS chỉ hỗ trợ Linux (NFSv4). Windows EC2 dùng Amazon FSx for Windows File Server nếu cần shared file system. Đây là điểm nhiều bạn hay nhầm khi đọc tài liệu.
Q: Chi phí thực tế của 3 dịch vụ ra sao?A: Tính theo region us-east-1: S3 Standard ~$0.023/GB/tháng; EBS gp3 ~$0.08/GB/tháng; EFS Standard ~$0.30/GB/tháng. EFS đắt nhất nhưng bù lại không cần provision trước — bạn chỉ trả cho dung lượng thực sự dùng, không như EBS phải chọn size cố định từ đầu.
Góc nhìn cá nhân: Chọn đúng tool, tiết kiệm cả đống tiền
Sau thời gian làm việc với AWS, mình đúc kết được một nguyên tắc đơn giản: S3 cho mọi thứ public/static, EBS cho OS/database của từng server, EFS khi cần nhiều server chia sẻ cùng file. Ghi nhớ ba câu này là bạn đã đúng 95% các tình huống thực tế. Bài tiếp theo mình sẽ đi vào AWS RDS — tại sao bạn không nên tự cài MySQL trên EC2 nữa và database managed service giải quyết được vấn đề gì.
