System Design Primer: giáo trình thiết kế hệ thống lớn miễn phí trên GitHub
Tóm tắt
System Design Primer tổng hợp khái niệm thiết kế hệ thống lớn (CAP, cache, sharding, queue…), bài tập có lời giải và thẻ Anki. Học theo khung bốn bước: use case và ràng buộc, tổng quan, thành phần lõi, mở rộng và đánh đổi.
Viết code tốt chưa đủ để lên senior: đến một lúc bạn phải trả lời các câu hỏi như "hệ thống này chịu 10 triệu người dùng thế nào", "cache đặt ở đâu", "chọn SQL hay NoSQL". Phỏng vấn system design ở các công ty công nghệ cũng xoay quanh những câu hỏi đó. System Design Primer là một trong những repo được gắn sao nhiều nhất GitHub: một giáo trình miễn phí, có cấu trúc, tổng hợp các khái niệm thiết kế hệ thống lớn, bài tập có lời giải, và thẻ ôn tập Anki.

Repo có gì?
| Phần | Nội dung |
|---|---|
| Chỉ mục chủ đề | Hiệu năng và khả năng mở rộng, độ trễ và thông lượng, định lý CAP, các mẫu nhất quán và sẵn sàng, DNS, CDN, load balancer, reverse proxy, cơ sở dữ liệu (replication, sharding, SQL và NoSQL), cache, xử lý bất đồng bộ (queue), giao thức (HTTP, TCP, UDP, RPC, REST), bảo mật |
| Câu hỏi phỏng vấn có lời giải | Thiết kế Pastebin, timeline Twitter, web crawler, Mint.com, mạng xã hội, key-value cache, xếp hạng bán chạy Amazon, hệ thống trên AWS mở rộng tới hàng triệu người dùng; kèm sơ đồ và code mẫu |
| Thiết kế hướng đối tượng | Hash map, LRU cache, tổng đài, bộ bài, bãi đỗ xe, chat server |
| Phụ lục | Bảng luỹ thừa của 2, các con số độ trễ mọi lập trình viên nên biết, liên kết tới bài viết kiến trúc của các công ty lớn |
| Thẻ Anki | Bộ thẻ ôn tập theo phương pháp lặp lại ngắt quãng |
Cách học hiệu quả
- Đọc lướt toàn bộ chỉ mục để biết có những khái niệm gì; README gợi ý lộ trình theo thời gian bạn có (ngắn, trung bình, dài).
- Học sâu từng chủ đề theo thứ tự: mở rộng → cơ sở dữ liệu → cache → bất đồng bộ. Mỗi phần có liên kết tới nguồn đọc thêm.
- Ước lượng nhanh: tập tính toán sơ bộ (back-of-the-envelope) bằng bảng độ trễ và luỹ thừa của 2, ví dụ dung lượng lưu trữ cho một năm dữ liệu.
- Tự giải bài tập trước khi xem lời giải, rồi so sánh.
- Ôn bằng Anki mỗi ngày vài phút để không quên.
Khung trả lời câu hỏi system design
Repo đề xuất bốn bước, dùng được cả trong phỏng vấn lẫn khi viết tài liệu thiết kế thật:
- Làm rõ use case, ràng buộc và giả định: ai dùng, bao nhiêu người, tỷ lệ đọc/ghi, dữ liệu lớn cỡ nào.
- Thiết kế tổng quan: các thành phần chính và cách chúng kết nối.
- Thiết kế các thành phần lõi: API, mô hình dữ liệu, thuật toán.
- Mở rộng thiết kế: tìm điểm nghẽn, thêm load balancer, cache, sharding, nhân bản, và nói rõ đánh đổi.
Lưu ý
- Repo dạy khái niệm nền tảng; một số ví dụ công nghệ đã cũ. Bổ sung bằng tài liệu kiến trúc hiện đại (managed service, serverless, hệ thống dùng LLM).
- Đừng học thuộc lời giải: người phỏng vấn đánh giá cách bạn lập luận và cân nhắc đánh đổi, không phải đáp án đúng duy nhất.
- Nội dung cấp phép Creative Commons Attribution 4.0; khi dùng lại để đào tạo nội bộ, ghi nguồn.
Áp dụng thế nào?
- Dev: Dành 30 phút mỗi ngày theo lộ trình trong README; áp dụng khung bốn bước khi viết tài liệu thiết kế cho tính năng thật.
- Tech Lead: Dùng các bài tập làm nội dung cho buổi học nội bộ hoặc bộ câu hỏi phỏng vấn; khung bốn bước làm mẫu cho tài liệu design review.
- PM: Đọc phần khái niệm (CAP, cache, queue, đánh đổi nhất quán và sẵn sàng) để trao đổi với team kỹ thuật hiệu quả hơn khi bàn về yêu cầu phi chức năng.
Nguồn & tham khảo
- donnemartin/system-design-primer — donnemartin (GitHub)