Khóa học System Design: lộ trình 21 bài từ nền tảng đến thực chiến
Bạn đã viết được một ứng dụng, nhưng khi tải tăng, database chậm hoặc một service chết giữa giao dịch, cách tổ chức cả hệ thống trở thành vấn đề. Lộ trình System Design của Mọt Dev đi từ hiểu yêu cầu đến bảo vệ quyết định kiến trúc, với 21 bài đọc được biên soạn từ khóa học 21 buổi.
Bạn sẽ làm được gì sau lộ trình này?
Làm rõ yêu cầu, ước lượng tải và tìm điểm nghẽn bằng số liệu.
Chọn database, cache và kênh giao tiếp theo access pattern và mức bảo đảm cần có.
Giải thích consistency, retry, idempotency và recovery khi có lỗi từng phần.
Vẽ và trình bày sáu bài thực hành: URL Shortener, News Feed, chat, giao đồ ăn, ví điện tử và Flash Sale.
Cách học để chuyển kiến thức thành kỹ năng
Nên có kiến thức căn bản về lập trình backend, HTTP và cơ sở dữ liệu. Đọc theo thứ tự nếu mới học; nếu đang chuẩn bị phỏng vấn, đọc bài 15 để nắm khung rồi quay lại các nền tảng còn thiếu. Mỗi bài gồm giải thích, ví dụ cụ thể, thuật ngữ và bài tập kèm gợi ý kiểm tra.
Sau khi đọc, hãy tự vẽ lại luồng ghi và đọc mà không nhìn bài. Chọn một lỗi như timeout, message trùng hoặc mất node, rồi chỉ ra trạng thái còn lại và cách phục hồi. Cuối cùng thay một ràng buộc — tải gấp 10 lần hoặc ngân sách giảm một nửa — và giải thích quyết định nào cần đổi.
Phần 1 — Tư duy thiết kế
Bài 1: System Design là gì? Cách đánh giá một thiết kế
Học cách đi từ vấn đề đến kiến trúc, phân biệt architecture với design và bảo vệ lựa chọn bằng yêu cầu, số liệu và đánh đổi.
Bài 2: Làm rõ yêu cầu: từ chức năng đến mục tiêu đo được
Đặt câu hỏi về người dùng, thao tác, tải, độ trễ và tính đúng đắn trước khi chọn database hay vẽ sơ đồ kiến trúc.
Bài 3: Ước lượng capacity và phân tích trade-off
Tính QPS, storage, băng thông và hot set với đúng đơn vị; dùng separation để giảm xung đột giữa các yêu cầu.
Phần 2 — Nguyên lý và nền tảng
Bài 4: Scalability: mở rộng hệ thống từ đúng điểm nghẽn
Phân biệt scale dọc, scale ngang, stateless và separation; hiểu vì sao thêm app server có thể không tăng throughput.
Bài 5: Performance và availability: đo đúng, tối ưu đúng
Dùng p95, p99, profiling và Little’s Law để tìm bottleneck; tính availability của chuỗi phụ thuộc với đúng điều kiện.
Bài 6: Đường đi của request: DNS, CDN, Load Balancer và Gateway
Phân biệt phân giải DNS với chuyển tiếp HTTP; lần theo cache hit, cache miss, reverse proxy, cân bằng tải và kiểm tra quyền.
Bài 7: Chọn database từ access pattern: ACID, index, B+Tree và LSM
Hiểu index, WAL, MVCC và storage engine; chọn SQL, NoSQL, search hoặc object storage bằng truy vấn và bất biến dữ liệu.
Bài 8: Scale dữ liệu: replication, partition và sharding
Chọn partition key theo truy vấn, phân biệt replica với shard, hiểu consistent hashing và giới hạn của hot key.
Phần 3 — Các thành phần của hệ phân tán
Bài 9: Caching và Redis: chiến lược ghi, rate limit và các bẫy thường gặp
Thiết kế cache-aside, write-through, write-behind; xử lý stampede, hot key, token bucket và các cấu trúc dữ liệu Redis.
Bài 10: Giao tiếp giữa service: HTTP, gRPC, queue và realtime
Chọn kênh bằng delivery guarantee, compatibility và failure mode; thiết kế idempotency, DLQ, backpressure, WebSocket và SSE.
Bài 11: Nhất quán trong hệ phân tán: CAP, Raft và đồng hồ logic
Đọc CAP theo tình huống partition, phân biệt atomic commit với consistency, hiểu quorum và giới hạn của timestamp phân tán.
Bài 12: Saga, Outbox và resilience: giữ dữ liệu đúng khi service lỗi
Phân biệt 2PC, Saga, Outbox và Event Sourcing; thiết kế compensation, dedup, retry budget, circuit breaker và load shedding.
Bài 13: Microservices hay Modular Monolith? Chọn ranh giới và tính chi phí
Chọn cấu trúc theo ownership, nhu cầu triển khai và tải; dùng C4, ADR và phân rã từng bước để kiểm soát chi phí kiến trúc.
Bài 14: Cấu trúc dữ liệu và concurrency qua bài toán một triệu heartbeat
So Redis Sorted Set với Timing Wheel, xử lý timeout cũ sau heartbeat mới, lock, fencing token và giới hạn của ring buffer.
Phần 4 — Phỏng vấn và sáu bài thực hành
Bài 15: Framework phỏng vấn System Design trong 40 phút
Luyện bốn bước làm rõ yêu cầu, ước lượng, HLD và deep dive; trình bày đường đọc, đường ghi, đánh đổi và recovery có nhãn rõ ràng.
Bài 16: Thiết kế URL Shortener: sinh mã, cache và ánh xạ 1-1
Thiết kế hai luồng tạo mã và redirect; phân biệt uniqueness với khó đoán, xử lý collision, concurrent create và analytics.
Bài 17: Thiết kế News Feed: push, pull và mô hình hybrid
Giải bài toán fan-out theo follower và active user; thiết kế hybrid feed, merge, cursor, quyền xem và rebuild khi projection mất.
Bài 18: Thiết kế ứng dụng chat: WebSocket, ordering và reconnect
Định tuyến tới gateway, lưu lịch sử theo conversation, chống trùng, đọc bù sau reconnect và phân biệt sent, delivered, seen.
Bài 19: Thiết kế giao đồ ăn: geo query, vị trí và dispatch an toàn
Tách vị trí nóng với lịch sử, tìm ô lân cận qua geohash, xử lý freshness và lease khi tài xế nhận đơn dưới mạng chập chờn.
Bài 20: Thiết kế ví điện tử: ledger, idempotency và đối soát
Giữ bất biến dữ liệu bằng transaction, ledger cân bằng, unique idempotency key và state machine khi làm việc với đối tác.
Bài 21: Thiết kế Flash Sale: chịu tải đột biến và không oversell
Điều tiết admission bằng CDN, rate limit và waiting room; giữ tồn bằng transaction, reservation có trạng thái và hoàn giữ chỗ idempotent.
Cách hiểu các số liệu và ví dụ
Các case là mô hình luyện thiết kế, không phải công bố kiến trúc nội bộ của các thương hiệu được dùng làm ví dụ. Số liệu đều có giả định; phép tính nhẩm dùng KB = 1.000 byte, có thể làm tròn ngày thành 100.000 giây và năm thành 400 ngày. Tải đỉnh, dung lượng dự phòng và capacity production cần đo lại.
Bài toán heartbeat của một triệu thiết bị ở bài 14 được dùng lại cho active user của feed và presence của chat. Đây là cơ hội luyện nhận ra cùng một nguyên lý trong nhiều bài toán. Hoàn tất lộ trình bằng mock interview 40 phút và rubric ở bài 21.
Site Admin
Engineer and writer. Building things with TypeScript and distributed systems.
Bình luận (0)
Bạn cần đăng nhập bằng Google để bình luận.
Hãy là người bình luận đầu tiên.