
1. Chống lỗi – Node Sets (Fault Tolerance – Node Sets)
1.1. Mục tiêu: Tăng độ bền dữ liệu, chịu mất node/AZ/region.
1.2. Phân phối: Qua nhiều node, nhiều khu vực địa lý (region).
1.3. Chính sách: Replication, mức độ fault tolerance tùy loại dữ liệu.
1.4. Chiến lược phổ biến
1.4.1. Node Set Replication: Copy block/parity block sang nhiều node (cùng/khác AZ).
1.4.2. Geo-redundant Storage (GRS): Replicate tự động sang region khác.
1.4.3. Cross-zone Parity Layout: Chia parity block sang các node ở AZ khác nhau.
1.4.4. Object encode thành 12 block, lưu ở 4 AZ (mỗi AZ 3 block) → Mất 1 AZ vẫn khôi phục được.
2. Cân bằng tải (Load Balancing)
2.1. Mục tiêu: Phân tán request, tránh dồn vào một server
2.2. Kỹ thuật
2.2.1. Consistent Hashing: Phân tán object đều qua các node
2.2.2. CDN: Cache file phổ biến, tăng tốc truy cập toàn cầu.
2.2.3. Layer trung gian (Queue/Redis): Tối ưu ghi dữ liệu theo batch.
3. Các giải pháp hiện có (Existing Solutions
3.1. AWS S3: Tiêu chuẩn công nghiệp, hệ sinh thái AWS.
3.2. Azure Blob Storage: Mạnh cho Microsoft stack.
3.3. Google Cloud Storage: Tích hợp tốt BigQuery, AI.
3.4. MinIO, Ceph: Triển khai nội bộ (on-premises), chạy trên Kubernetes.
3.5. Tính năng chung quan trọng: Versioning, encryption, lifecycle management
4. Tài liệu tham khảo
4.1. AWS S3 Documentation. https://docs.aws.amazon.com/s3/
4.2. Azure Blob Storage Overview. https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction
4.3. https://cloud.google.com/storage/docs/overview
4.4. MinIO Documentation. https://min.io/docs/minio/linux/index.html
5. Ví dụ thực tế & Trải nghiệm cá nhân
5.1. Dự án E-learning Platform
5.1.1. S3 (video, audio, PDF) + Elastic Transcoder → Tối ưu đa định dạng, scale tốt.
5.2. Web Traffic Analytics Caching Solution
5.2.1. Cache dữ liệu từ API (Google/Adobe Analytics) vào S3 → ETL nội bộ → Nhanh hơn, tiết kiệm chi phí.
5.3. Dự án nội bộ dùng MinIO
5.3.1. MinIO trên Kubernetes cho CI/CD → Tương thích S3 API, dễ tích hợp, giảm chi phí dev/test.
6. Giới thiệu (Introduction)
6.1. Định nghĩa: viết tắt của Binary Large Object Storage – là một giải pháp lưu trữ dữ liệu phi cấu trúc, rất lớn, rất linh hoạt, và có khả năng mở rộng cực cao.
6.2. Vấn đề giải quyết:
6.2.1. Lưu trữ file lớn (ảnh, video, PDF, log) - Khó khăn khi dùng DB.
6.3. Ví dụ thực tế quy mô lớn: Facebook, Dropbox, Instagram.
7. So sánh với Databases
7.1. DB: dữ liệu có cấu trúc
7.1.1. Database: Tốt cho dữ liệu có cấu trúc (thông tin người dùng, đơn hàng).
7.2. Blob Storage: Tối ưu cho dữ liệu lớn, nhị phân, phi cấu trúc.
7.3. Hạn chế của Database với file lớn
7.3.1. Hiệu suất đọc/ghi chậm, ảnh hưởng toàn hệ thống.
7.3.2. Chi phí lưu trữ cao hơn.
8. File vs Object Storage
8.1. File System
8.1.1. Hoạt động tốt ở quy mô nhỏ.
8.1.2. Vấn đề ở quy mô lớn (triệu/tỷ file): Phân quyền, index, hiệu năng mở rộng.
8.2. Object Storage
8.2.1. Mỗi file là một object: ID riêng, metadata.
8.2.2. Namespace phẳng (Flat Namespace): Truy cập qua key, không có cây thư mục phức tạp.
9. Khả năng mở rộng (Scalability)
9.1. Đặc điểm chính: Horizontal scaling (thêm node không đổi kiến trúc)
9.2. Kiến trúc phân tách
9.2.1. Metadata Server: Quản lý key, định tuyến.
9.2.2. Storage Node: Lưu nội dung file (thường immutable).
9.3. Khả năng: Scale đến hàng Petabyte.
9.4. Chi tiết kiến trúc
9.4.1. Mô hình phân tán: Metadata Layer & Storage Layer.
9.4.2. Kỹ thuật phổ biến
9.4.2.1. Sharding (chia object theo hash/vùng).
9.4.2.2. Consistent Hashing (giảm di chuyển dữ liệu khi thêm/xóa node).
10. Chống lỗi (Fault Tolerance – Parity)
10.1. Mục tiêu: Lưu trữ an toàn, khôi phục dữ liệu khi mất node.
10.2. Kỹ thuật: Parity block / Erasure Coding (RAID nâng cao).
10.3. Ưu điểm so với replication: Tiết kiệm chi phí lưu trữ (không cần copy x3).
10.4. Chi tiết Parity Block
10.4.1. Định nghĩa: Dữ liệu bổ sung tính toán từ gốc để khôi phục.
10.4.2. Cấp độ
10.4.2.1. Simple Parity (XOR - RAID 5)
10.4.2.2. Advanced Parity / Erasure Coding (S3, Azure Blob, Ceph).
10.5. Chi tiết Erasure Coding (Reed-Solomon)
10.5.1. Cơ chế: Dữ liệu chia thành `k` block, thêm `m` parity block. Khôi phục từ `k` bất kỳ trong `k+m` block.
10.5.2. Ví dụ: 6 data block + 3 parity block → Mất 3 block bất kỳ vẫn khôi phục được.
10.5.3. Ưu điểm: Hiệu quả dung lượng cao, chịu lỗi tốt hơn.