Tài liệu chuyên sâu về System Design dành cho Backend Engineer, Senior Backend Engineer, Tech Lead, Solution Architect và Software Architect.

Mục tiêu: xây dựng tư duy thiết kế hệ thống — không phải bộ sưu tập lời giải phỏng vấn.


Triết lý của tài liệu

Mọi quyết định kiến trúc trong tài liệu này đều đi theo chuỗi tư duy:

Business Requirement
        ↓
Functional Requirement
        ↓
Non-functional Requirement
        ↓
Scale Estimation
        ↓
Constraint
        ↓
Bottleneck
        ↓
Architecture Pattern
        ↓
Distributed Systems
        ↓
Trade-off
        ↓
Production
        ↓
Evolution

Mọi kết luận kỹ thuật phải trả lời được 5 câu hỏi:

  1. Tại sao?
  2. Nếu không làm như vậy thì sao?
  3. Trade-off là gì?
  4. Có lựa chọn nào khác không?
  5. Chi phí vận hành là gì?

Không có “kiến trúc tối ưu”. Chỉ có kiến trúc phù hợp với bài toán, quy mô, ngân sách và đội ngũ tại một thời điểm.


Mục lục

Chương mở đầu

Phần 1 — Foundations (hoàn chỉnh)

Phần 2 — Scalability (hoàn chỉnh)

Phần 3 — Availability & Reliability (hoàn chỉnh)

Phần 4 — Distributed Systems (hoàn chỉnh)

Phần 5 — Data Layer (hoàn chỉnh)

Phần 6 — Communication (hoàn chỉnh)

Phần 7 — Caching (hoàn chỉnh)

Phần 8 — Data Partitioning (hoàn chỉnh)

Phần 9 — Search (hoàn chỉnh)

Phần 10 — Observability (hoàn chỉnh)

Phần 11 — Security (hoàn chỉnh)

Phần 12 — System Design Evolution (hoàn chỉnh — chương quan trọng nhất)

Hành trình tiến hóa của một hệ thống E-commerce qua 10 giai đoạn, từ 0 đến hàng chục triệu người dùng:

Phần 13 — Production Failure Cases (hoàn chỉnh)

21 tình huống sự cố production, mỗi tình huống phân tích: triệu chứng → root cause → metric → dashboard → alert → điều tra → khắc phục → phòng tránh.

Phần 14 — Case Studies (hoàn chỉnh)


Cách đọc tài liệu này

Nếu bạn là Backend Engineer (2–4 năm kinh nghiệm): đọc tuần tự 00 → Phần 1 → Phần 12. Phần 12 là nơi mọi khái niệm được đặt vào bối cảnh thực tế.

Nếu bạn là Senior/Tech Lead: đọc 00 để thống nhất framework tư duy, sau đó đi thẳng vào Phần 4 (Distributed Systems) và Phần 13 (Failure Cases) — đây là hai phần phân tách một Senior với một Architect.

Nếu bạn là Architect: dùng Phần 12 và 13 làm tài liệu training cho team, dùng template trong 00 làm chuẩn cho Architecture Decision Record (ADR) nội bộ.

Nguyên tắc quan trọng nhất khi đọc: đừng ghi nhớ giải pháp. Hãy ghi nhớ câu hỏi dẫn đến giải pháp. Giải pháp thay đổi theo thời gian; câu hỏi thì không.


Template phân tích bắt buộc

Mỗi chủ đề trong tài liệu tuân theo template 9 phần:

#PhầnCâu hỏi trung tâm
1Problem StatementBài toán kinh doanh là gì? Ràng buộc là gì?
2Tại sao giải pháp này tồn tạiNó giải quyết vấn đề business/technical/scale/reliability nào?
3First PrinciplesBản chất là gì? Bỏ đi thì sao? Giả định nào đang được đặt ra?
4Internal ArchitectureComponent, Data Flow, Control Flow, Deployment Flow, Failure Flow
5Trade-offĐược gì, mất gì, chi phí, rủi ro
6Production ConsiderationsMonitoring, Deployment, DR, Security, Cost
7Best PracticesCách dùng đúng trong production
8Anti-patternsCách dùng sai và vì sao nguy hiểm
9Khi nào KHÔNG nên dùngBối cảnh mà giải pháp này là lãng phí

Diagram trong tài liệu dùng Mermaid — render trực tiếp trên GitHub, VS Code (extension Markdown Preview Mermaid), Obsidian.