Bỏ qua để đến nội dung
Knowledge Hub

Playground: học bằng cách ra quyết định Cơ bản

Đọc về race condition khác hẳn việc tự tay chọn sai rồi thấy 40 đơn bán vượt kho. Mỗi bài ở đây là một tình huống nhỏ: bạn ra quyết định, hệ thống phản ứng ngay.

Đang tải diagram…

Scale Lab là game system design trên canvas: kéo server, load balancer, cache, CDN, queue lên bảng, nối dây, bấm Chạy và xem traffic chảy qua thiết kế. Mỗi vòng tải tăng, có vòng có biến cố (server chết…). Sập thì box hỏng bị khoanh đỏ và có giải thích. Có 8 vòng Learn, 4 đề phỏng vấn nhiều vòng (URL shortener, Notifications, Bán vé concert, Chat realtime), và Sandbox để tự đặt traffic, bot và biến cố.

Bốn kiểu chơi: Tình huống (chọn cách xử lý qua nhiều bước), Thiết kế (kéo thả kiến trúc), Sắp xếp (đúng thứ tự) và Ghép cặp (giải pháp ↔ vấn đề).

Bài Kiểu Bạn luyện Thời gian
Flash sale bán vượt kho Tình huống Lost update, giữ lock khi gọi payment, retry tạo đơn trùng ~5 phút
Query chậm dần Tình huống pg_stat_statements, đọc EXPLAIN, composite index, keyset pagination ~6 phút
Migration khoá cả bảng Tình huống Lock queue, lock_timeout, DDL nào rewrite bảng, NOT VALID ~6 phút
Lộ dữ liệu giữa tenant Tình huống Quên lọc tenant_id, RLS bị owner / BYPASSRLS bỏ qua, SET theo session rò qua connection pool ~7 phút
Chọn lock/isolation Ghép cặp Atomic UPDATE, FOR UPDATE, SKIP LOCKED, SERIALIZABLE, advisory lock… ~6 phút
Chọn loại index Ghép cặp B-tree, composite, partial, expression, covering, GIN, BRIN ~6 phút
Tạo index online Sắp xếp CREATE INDEX CONCURRENTLY, index INVALID, xác nhận plan ~3 phút
Đổi tên cột không downtime Sắp xếp Expand–contract khi rolling deploy ~3 phút
Bài Kiểu Bạn luyện Thời gian
Dựng URL shortener Thiết kế CDN, cache, replica, capacity trong ngân sách ~5–10 phút
Checkout bất đồng bộ Thiết kế Outbox, broker, idempotency, retry/DLQ, bẫy dual write và 2PC ~10 phút
Upload ảnh & video Thiết kế Presigned URL, multipart, object storage, transcode worker, CDN signed cookie ~10 phút
Sao đăng bài Tình huống Fan-out khi ghi hay khi đọc, write amplification, ngưỡng hybrid cho tài khoản lớn ~6 phút
Bù trừ saga Sắp xếp Thanh toán lỗi giữa saga: lưu trạng thái, dừng bước tiếp, bù trừ theo thứ tự ngược, báo khách ~3 phút
Thanh toán timeout Tình huống Kết quả không rõ sau timeout, giữ nguyên idempotency key, webhook đến muộn, đối soát và bút toán điều chỉnh ~7 phút
Chọn HTTP status code Ghép cặp 400 hay 422, 401/403/404, 409, 412, 429, 503, 202 theo RFC 9110 ~5 phút
Chọn Cache-Control Ghép cặp no-store hay no-cache, private, s-maxage, immutable, stale-while-revalidate theo RFC 9111 ~5 phút
Chọn design pattern Ghép cặp Strategy, Adapter, Decorator, Observer, Factory, Facade ~5 phút
Bài Kiểu Bạn luyện Thời gian
Kafka consumer lag tăng mãi Tình huống Hot partition, rebalance storm, poison message, scale partition ~6 phút
Tương thích schema Ghép cặp Thay đổi Avro/Protobuf: backward, forward, full hay phá vỡ, và bên nào deploy trước ~5 phút
Cache stampede Tình huống Hot key hết hạn, singleflight, invalidation race, negative cache ~6 phút
Bài Kiểu Bạn luyện Thời gian
Sự cố 3 giờ sáng Tình huống Mitigate trước, giao tiếp, root cause có bằng chứng, postmortem ~6 phút
Retry storm Tình huống Retry nhân tải qua từng tầng, backoff + jitter, retry budget, deadline ~6 phút
Rò rỉ bộ nhớ Node.js Tình huống OOMKilled, heap snapshot an toàn, Map không giới hạn, --max-old-space-size ~6 phút
CPU throttling Tình huống p99 tăng vọt khi CPU mới 40%: CFS quota, throttled period, threadpool burst, limit và request ~6 phút
Probe restart dây chuyền Tình huống Liveness gọi database, CrashLoopBackOff, thiết kế probe đúng ~5 phút
Thứ tự ứng cứu sự cố Sắp xếp Các bước từ lúc nhận page tới postmortem ~3 phút
Graceful shutdown Sắp xếp Pod bị terminate: preStop, SIGTERM, drain, SIGKILL ~3 phút
Canary & feature flag Sắp xếp Ship tắt sẵn, tiêu chí dừng theo SLO, ramp theo cohort, gỡ flag ~3 phút
Bài Kiểu Bạn luyện Thời gian
JWT bị lộ Tình huống Thu hồi token, blast radius, secret yếu, thiết kế lại ~6 phút
Luồng OAuth PKCE Sắp xếp Authorization Code + PKCE, state/nonce, đổi token, kiểm tra phía API ~4 phút
API lộ dữ liệu Tình huống BOLA/IDOR, mass assignment, blast radius từ access log, authz ở tầng dữ liệu ~6 phút
Log, metric hay trace? Ghép cặp Chọn đúng tín hiệu, SLO burn-rate alert, bẫy cardinality ~5 phút
  • Kéo thả bằng chuột hoặc ngón tay. Không tiện kéo thì chạm để chọn, rồi chạm vào chỗ muốn đặt. Bàn phím: Enter để chọn và đặt.
  • Màu chỉ số: xanh là đạt, cam là sát ngưỡng, đỏ là hỏng. Vạch đậm trên thanh là mục tiêu.
  • Tiến độ được nhớ ngay trên trình duyệt của bạn. Không cần tài khoản, không gửi đi đâu.

Con số trong game là mô hình đơn giản hoá để thấy xu hướng, không phải benchmark. Mỗi bài đều dẫn tới bài viết có số đo thật và nguồn chính thức.