Object and Key-Value Storage Patterns
Ý chính
Storage ở quy mô lớn thường tách thành hai câu hỏi: dữ liệu vật lý nằm ở đâu và metadata/key được tìm như thế nào. Object Storage tối ưu cho file/object lớn qua API; Distributed Key-Value Store tối ưu cho lookup theo key với latency thấp. Cả hai đều sống chết bởi partitioning, replication, lifecycle và fallback.
Hai kiểu storage cần phân biệt
| Pattern | Mental model | Điểm mạnh | Cẩn thận |
|---|---|---|---|
| Object Storage | Bucket/key → object bytes | Ảnh, video, backup, dataset, archive | Metadata index, hot prefix, lifecycle cost |
| Distributed Key-Value Store | Key → value/read model | Low-latency lookup, derived data, config | Source-of-truth, replication lag, blast radius |
Bài học từ các case
- Amazon S3 cho thấy object storage không scale bằng một storage engine duy nhất, mà bằng front-end routing, metadata index, data placement, replication, erasure coding và background repair.
- Canva cho thấy chi phí storage phải được tối ưu bằng access-pattern measurement trước khi chuyển class.
- Airbnb Mussel cho thấy derived data store cần kết hợp batch bulk load, realtime log và partition management để phục vụ read-heavy workloads.
- Cloudflare KV cho thấy cache/hot data không thay thế được fallback cho cold reads nếu storage phụ thuộc nằm trên critical path.
Câu hỏi thiết kế
- Workload là object lớn, key-value lookup, hay database transaction?
- Key/prefix có tạo hot partition không?
- Metadata/index có replicate và repair độc lập không?
- Cold read/write phụ thuộc vào source-of-truth nào?
- Data cũ có thể chuyển storage class hoặc expire không?
- Khi storage backend chết, service fail open, fail closed hay degrade một phần?