🗺️ 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”ScalabilityLoad BalancerSharding
”Làm sao đảm bảo dữ liệu nhất quán?”Consistency vs AvailabilityCAP TheoremQuorum
”Chọn SQL hay NoSQL?”SQL vs NoSQLChọn kiểu lưu trữ
”Tăng tốc độ, giảm tải database”CacheCDN
”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”IdempotencyPessimistic vs Optimistic Locking
”Hệ thống vẫn chạy khi một phần hỏng”Fault ToleranceChiến lược ResilienceFailover
”Cam kết uptime bao nhiêu là đủ?”Chỉ số độ tin cậyHigh Availability vs Fault Tolerance
”Bảo mật hệ thống thế nào?”AuthenticationAuthorizationBảo mật APIBảo vệ dữ liệu
”Phát hiện & debug sự cố production”MonitoringObservability
”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.