🗺️ MOC - System Design (Phỏng vấn thiết kế hệ thống)
38 dot notes tách từ ebook của Nguyễn Thế Huy. Đây là sách ôn tập kiến thức nền + kinh nghiệm cho vòng phỏng vấn System Design. Không cần đọc tuần tự - dùng từng note như thẻ tra cứu độc lập; nhưng lần đầu nên đi theo lộ trình bên dưới để xây “khung tư duy”.
Tư tưởng xuyên suốt của cả cuốn sách: Phỏng vấn System Design không có đáp án đúng tuyệt đối - điều được đánh giá là CÁCH bạn tiếp cận vấn đề và cân bằng đánh đổi (trade-off). Mọi lựa chọn (SQL vs NoSQL, strong vs eventual consistency, HA vs FT…) đều là một trade-off; nói rõ vì sao chọn mới là điểm ăn tiền.
🧭 Lộ trình học đề xuất (10 chủ đề → 8 level)
Level 0 - Cách tiếp cận phỏng vấn ⭐ đọc trước tiên
- System Design Interview - vòng phỏng vấn này là gì, khó khăn người mới, quy trình 3 bước (làm rõ yêu cầu → phác thảo → đào sâu). Bắt đầu từ đây!
Level 1 - Khái niệm nền tảng 🔥 (viên gạch đầu tiên)
Bốn thuộc tính + hai chỉ số hiệu năng mà mọi thiết kế phải cân nhắc.
- Latency - độ trễ một yêu cầu (ms)
- Throughput - khối lượng yêu cầu/giây (“sức tải”)
- Scalability - mở rộng dọc vs ngang ⭐
- Availability - % uptime, những con số “chín”
- Reliability - ổn định + toàn vẹn dữ liệu lâu dài
- High-Level Architecture - bức tranh tổng, kỹ năng phác thảo trong phỏng vấn
Level 2 - Các thành phần phổ biến 🧱 (kho linh kiện)
- Web Server và Application Server - “lễ tân” vs “đầu bếp”
- Load Balancer - phân phối tải, thuật toán, L4 vs L7 ⭐
- Cache - 4 chiến lược cập nhật (cache-aside, write-through/back, refresh-ahead) ⭐⭐
- CDN - đưa nội dung tĩnh tới gần người dùng
- Message Queue - xử lý bất đồng bộ, producer-consumer, backpressure ⭐
Level 3 - Nhất quán & Khả dụng 🔥 (phần hay được hỏi nhất)
- Consistency vs Availability - cặp “bài trùng”, đọc đầu tiên trong level này
- Consistency Models - mạnh / cuối cùng / yếu ⭐
- Replication - nhân bản: đồng bộ chặt vs lỏng
- Failover - tự động chuyển sang dự phòng
- Quorum - công thức W + R > N
- CAP Theorem - chọn CP hay AP khi mạng phân vùng ⭐⭐
Level 4 - Cơ sở dữ liệu & Lưu trữ
- SQL vs NoSQL - quyết định cơ bản đầu tiên ⭐
- Sharding - 4 chiến lược phân mảnh, shard key & hot spot
- Database Index - tối ưu truy vấn, composite index, thứ tự cột
- Chọn kiểu lưu trữ - OLTP/OLAP, graph, object storage, polyglot persistence
Level 5 - Concurrency & An toàn dữ liệu phân tán
- Idempotency - retry an toàn, idempotency key
- Pessimistic vs Optimistic Locking - khóa bi quan vs lạc quan
Level 6 - Giao tiếp & Thiết kế API
- HTTP - nền tảng web, stateless
- TCP vs UDP - tin cậy vs nhanh (“gửi là quên”)
- RPC - gọi hàm từ xa (gRPC), giao tiếp nội bộ microservices
- REST - phong cách API phổ biến nhất ⭐
Level 7 - Chịu lỗi & Phục hồi
- Fault Tolerance - chịu lỗi là gì, các loại sự cố phổ biến
- Chiến lược Resilience - redundancy, retry, graceful degradation, circuit breaker ⭐
- High Availability vs Fault Tolerance - HA (chấp nhận downtime nhỏ) vs FT (không gián đoạn)
- Chỉ số độ tin cậy - Uptime, SLA, MTTR, MTBF
Level 8 - Bảo mật & Vận hành
- Authentication - “bạn là ai?” (password, MFA, session, JWT)
- Authorization - “bạn được làm gì?” (RBAC, ABAC, OAuth2)
- Bảo mật API - API key, CORS, rate limiting, input validation
- Bảo vệ dữ liệu - mã hóa, hash+salt, XSS, CSRF, cookie security
- Monitoring - giám sát: “điều gì đang xảy ra?”
- Observability - 3 trụ cột logs/metrics/traces: “tại sao xảy ra?”
🚀 Lối vào nhanh theo vấn đề thiết kế
| Bài toán / câu hỏi | Đọc note |
|---|---|
| ”Thiết kế hệ thống cho hàng triệu user” | Scalability → Load Balancer → Sharding |
| ”Làm sao đảm bảo dữ liệu nhất quán?” | Consistency vs Availability → CAP Theorem → Quorum |
| ”Chọn SQL hay NoSQL?” | SQL vs NoSQL → Chọn kiểu lưu trữ |
| ”Tăng tốc độ, giảm tải database” | Cache → CDN |
| ”Tác vụ nặng không cần kết quả ngay” | Message Queue |
| ”Giao tiếp giữa các microservices” | RPC vs REST vs Message Queue |
| ”Chống trừ tiền/tạo đơn hai lần” | Idempotency → Pessimistic vs Optimistic Locking |
| ”Hệ thống vẫn chạy khi một phần hỏng” | Fault Tolerance → Chiến lược Resilience → Failover |
| ”Cam kết uptime bao nhiêu là đủ?” | Chỉ số độ tin cậy → High Availability vs Fault Tolerance |
| ”Bảo mật hệ thống thế nào?” | Authentication → Authorization → Bảo mật API → Bảo vệ dữ liệu |
| ”Phát hiện & debug sự cố production” | Monitoring → Observability |
| ”Real-time (video call, game)“ | TCP vs UDP (chọn UDP) |
🧠 6 câu thần chú rút gọn cả cuốn sách
- “Không có đáp án đúng tuyệt đối - quan trọng là CÁCH tiếp cận và trade-off” - System Design Interview
- “Quy trình: làm rõ yêu cầu → phác thảo tổng quan → đào sâu từng phần” - High-Level Architecture
- “Khi mạng phân vùng, chỉ chọn được C hoặc A” - CAP Theorem
- “Ưu tiên mở rộng NGANG (thêm máy) hơn mở rộng DỌC” - Scalability
- “Cái giá của sự cố còn đắt hơn cái giá của phòng ngừa” - Fault Tolerance
- “Monitoring hỏi ‘chuyện gì?’, Observability hỏi ‘tại sao?‘” - Observability
💡 Mẹo phỏng vấn xuyên suốt (áp dụng cho mọi chủ đề)
- Luôn hỏi làm rõ yêu cầu trước khi vẽ (functional & non-functional).
- Nói rõ trade-off cho mỗi lựa chọn: nhanh vs chính xác, chi phí vs độ phức tạp.
- “Nghĩ thành tiếng” - chia sẻ suy nghĩ liên tục, đừng im lặng quá lâu.
- Bắt đầu đơn giản (MVP một DB), rồi mở rộng dần khi được hỏi “nếu tăng 100 lần thì sao?“.
- Dùng thuật ngữ đúng chỗ kèm ví dụ đời thường ngắn gọn - vừa chứng tỏ kiến thức, vừa ghi điểm giao tiếp.