Giáo trình Bản đồ tư duy

Giáo trình tổng quan

System design là môn "tổng hợp" — vận dụng mọi kiến thức đã học (Networking, Database, OOP, OS) vào việc thiết kế hệ thống quy mô lớn. Trang này cho bạn bản đồ tư duy về các nguyên lý cốt lõi, building block phổ biến, và khung tư duy phỏng vấn.

1. System Design là gì?

System design là quá trình định nghĩa kiến trúc, component, interface và data flow của một hệ thống phần mềm để đáp ứng một tập requirement (functional + non-functional). Khác lập trình algorithm (DSA) — system design quan tâm:

"Có 2 loại hệ thống: hệ thống chưa gặp scale, và hệ thống đang vỡ vì scale."

2. Các metric cốt lõi

2.1. Latency vs Throughput

MetricĐịnh nghĩaĐơn vị
LatencyThời gian xử lý 1 requestms (mili-giây)
ThroughputSố request xử lý/giâyQPS / RPS / TPS
BandwidthLưu lượng dataMbps / Gbps

Latency và throughput không cùng nhau. Tăng concurrency → throughput tăng nhưng latency có thể tăng theo (queuing).

2.2. Phần trăm latency — P50, P95, P99

Latency trung bình (mean) là metric tệ vì bị skew bởi outlier. Dùng percentile:

Mục tiêu thực tế: P99 < 500ms cho web app, < 100ms cho API quan trọng.

2.3. Availability — "9 con số"

AvailabilityDowntime/nămDowntime/tháng
99% (2 nines)3.65 ngày7.2 giờ
99.9% (3 nines)8.76 giờ43.8 phút
99.99% (4 nines)52.6 phút4.32 phút
99.999% (5 nines)5.26 phút25.9 giây

Mỗi "9" thêm — chi phí tăng 10×. Cân nhắc thực tế.

3. Bốn nguyên lý cốt lõi

┌────────────────────────────────────────────────────┐ │ FOUR PRINCIPLES OF SYSTEM DESIGN │ ├────────────────────────────────────────────────────┤ │ │ │ 1. SCALABILITY │ │ Khi load tăng 10×, hệ vẫn hoạt động trơn tru │ │ │ │ 2. RELIABILITY (FAULT TOLERANCE) │ │ 1 component chết, hệ vẫn chạy │ │ │ │ 3. AVAILABILITY │ │ Tỉ lệ thời gian hệ hoạt động │ │ │ │ 4. PERFORMANCE │ │ Latency đáp ứng SLA │ │ │ └────────────────────────────────────────────────────┘

4 nguyên lý này thường đối nghịch nhau. Ví dụ: Sync replication tăng reliability, giảm performance. Microservice tăng scalability nhưng giảm reliability tổng (nhiều hop, nhiều SPOF tiềm tàng).

4. Building Blocks phổ biến

┌────────────────────────────────────────────────────────────┐ │ SYSTEM DESIGN BUILDING BLOCKS │ └────────────────────────────────────────────────────────────┘ ┌─ EDGE LAYER ───────────────────────────────────────┐ │ CDN · WAF · DDoS protection │ │ Edge cache (CloudFlare, AWS CloudFront) │ └────────────────────────────────────────────────────┘ │ ▼ ┌─ ENTRY LAYER ──────────────────────────────────────┐ │ Load Balancer (L4/L7) │ │ API Gateway · Reverse Proxy (nginx) │ │ Rate Limiting · Auth │ └────────────────────────────────────────────────────┘ │ ▼ ┌─ APPLICATION LAYER ────────────────────────────────┐ │ Stateless app servers (horizontal scale) │ │ Microservices · Service Mesh │ │ Worker processes (background jobs) │ └────────────────────────────────────────────────────┘ │ ┌───────────┼───────────┐ ▼ ▼ ▼ ┌─ CACHE ──┐ ┌─ MESSAGING ──┐ ┌─ DATA ─────────┐ │ Redis │ │ Kafka, SQS │ │ Postgres / MySQL│ │ Memcached│ │ RabbitMQ │ │ MongoDB │ │ CDN cache│ │ NATS │ │ Cassandra │ └──────────┘ └───────────────┘ │ Redis │ │ Elasticsearch │ │ S3 (object) │ └─────────────────┘ ┌─ OBSERVABILITY ────────────────────────────────────┐ │ Logs (ELK, Loki) │ │ Metrics (Prometheus, Grafana) │ │ Traces (Jaeger, Honeycomb, OpenTelemetry) │ └────────────────────────────────────────────────────┘

System design = ghép các building block này theo requirement cụ thể.

5. Back-of-the-envelope math

Kỹ năng quan trọng: ước lượng nhanh capacity. Ví dụ Twitter:

Số liệu này dẫn đến:

5.1. Bảng số quan trọng nên thuộc lòng

OperationLatency
L1 cache1 ns
L2 cache4 ns
RAM access100 ns
SSD random read50–150 µs
HDD seek10 ms
Network LAN (cùng DC)0.5 ms
Network cross-DC (cùng region)1–5 ms
Network cross-region (US ↔ EU)50–100 ms
Network cross-globe (US ↔ APAC)100–300 ms

6. CAP & PACELC — recap

Đã học ở Database (Ch9). Recap:

System design phải nói rõ chọn gì cho từng operation:

7. Khung tư duy phỏng vấn

  1. Clarify requirements — functional (cần làm gì) + non-functional (scale, latency, reliability). Hỏi rất nhiều ở bước này.
  2. Capacity estimation — DAU, QPS read/write, storage/năm, bandwidth.
  3. System interface (API) — endpoint chính, request/response shape.
  4. Data model — schema cho top entity, ước lượng size.
  5. High-level architecture — vẽ box và arrow. Bắt đầu đơn giản (1 server + 1 DB), scale dần.
  6. Detailed design — sharding strategy, cache layer, queue, replication.
  7. Identify bottleneck — đâu là bottleneck đầu tiên khi load tăng 10×?
  8. Discuss trade-offs — mỗi quyết định có cost. Phải nói rõ.
Mẹo phỏng vấn Đừng tránh "đơn giản". Bắt đầu bằng kiến trúc đơn giản nhất chạy được (1 app + 1 DB), rồi incremental scale theo từng bottleneck. Senior phỏng vấn quan tâm bạn biết khi nào cần phức tạp hơn nhiều với "tôi biết Kafka".

8. Anti-patterns System Design

9. Lộ trình học đề xuất

  1. Tuần 1: Ch1+2. Capacity math + LB. Tự tính capacity cho 1 idea app (TODO scale, blog scale).
  2. Tuần 2: Ch3. Caching. Setup Redis + cache-aside cho 1 endpoint, đo latency before/after.
  3. Tuần 3: Ch4+5. Data scaling + queue. Setup local Kafka + producer/consumer.
  4. Tuần 4: Ch6+7. Microservice + edge. Đọc Stripe, Discord, Cloudflare engineering blog.
  5. Tuần 5: Ch8. Case studies. Mỗi ngày 1 case study mock interview.

Sẵn sàng chưa? Bắt đầu từ Chương 1 — Scalability Fundamentals.