🗺️ 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

  1. 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.

  1. Latency - độ trễ một yêu cầu (ms)
  2. Throughput - khối lượng yêu cầu/giây (“sức tải”)
  3. Scalability - mở rộng dọc vs ngang ⭐
  4. Availability - % uptime, những con số “chín”
  5. Reliability - ổn định + toàn vẹn dữ liệu lâu dài
  6. 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)

  1. Web Server và Application Server - “lễ tân” vs “đầu bếp”
  2. Load Balancer - phân phối tải, thuật toán, L4 vs L7 ⭐
  3. Cache - 4 chiến lược cập nhật (cache-aside, write-through/back, refresh-ahead) ⭐⭐
  4. CDN - đưa nội dung tĩnh tới gần người dùng
  5. 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)

  1. Consistency vs Availability - cặp “bài trùng”, đọc đầu tiên trong level này
  2. Consistency Models - mạnh / cuối cùng / yếu ⭐
  3. Replication - nhân bản: đồng bộ chặt vs lỏng
  4. Failover - tự động chuyển sang dự phòng
  5. Quorum - công thức W + R > N
  6. CAP Theorem - chọn CP hay AP khi mạng phân vùng ⭐⭐

Level 4 - Cơ sở dữ liệu & Lưu trữ

  1. SQL vs NoSQL - quyết định cơ bản đầu tiên ⭐
  2. Sharding - 4 chiến lược phân mảnh, shard key & hot spot
  3. Database Index - tối ưu truy vấn, composite index, thứ tự cột
  4. 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

  1. Idempotency - retry an toàn, idempotency key
  2. Pessimistic vs Optimistic Locking - khóa bi quan vs lạc quan

Level 6 - Giao tiếp & Thiết kế API

  1. HTTP - nền tảng web, stateless
  2. TCP vs UDP - tin cậy vs nhanh (“gửi là quên”)
  3. RPC - gọi hàm từ xa (gRPC), giao tiếp nội bộ microservices
  4. REST - phong cách API phổ biến nhất ⭐

Level 7 - Chịu lỗi & Phục hồi

  1. Fault Tolerance - chịu lỗi là gì, các loại sự cố phổ biến
  2. Chiến lược Resilience - redundancy, retry, graceful degradation, circuit breaker ⭐
  3. High Availability vs Fault Tolerance - HA (chấp nhận downtime nhỏ) vs FT (không gián đoạn)
  4. Chỉ số độ tin cậy - Uptime, SLA, MTTR, MTBF

Level 8 - Bảo mật & Vận hành

  1. Authentication - “bạn là ai?” (password, MFA, session, JWT)
  2. Authorization - “bạn được làm gì?” (RBAC, ABAC, OAuth2)
  3. Bảo mật API - API key, CORS, rate limiting, input validation
  4. Bảo vệ dữ liệu - mã hóa, hash+salt, XSS, CSRF, cookie security
  5. Monitoring - giám sát: “điều gì đang xảy ra?”
  6. 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

  1. “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
  2. “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
  3. “Khi mạng phân vùng, chỉ chọn được C hoặc A” - CAP Theorem
  4. “Ưu tiên mở rộng NGANG (thêm máy) hơn mở rộng DỌC” - Scalability
  5. “Cái giá của sự cố còn đắt hơn cái giá của phòng ngừa” - Fault Tolerance
  6. “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.