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

Scale Lab: dựng hệ thống, chạy traffic, xem nó sập Cơ bản

Thời gian đọc ước tính: 4 phút

Shop của bạn lớn dần qua từng vòng. Kéo thành phần lên bảng, nối dây giữa các box, rồi bấm ▶ Chạy.

  • 8 vòng, từ app đầu tiên tới flash sale và Redis restart giữa giờ cao điểm.
  • Qua vòng khi trả lời ≥ 99% request, phản hồi trung bình trong giới hạn và chi phí trong ngân sách. Rẻ nhất được 3 sao.
  • Sập thì sao? Box hỏng được khoanh đỏ, phần nhận xét nói vì sao. Bấm vào một nhận xét để nhảy tới box đó.
  • Nối dây: kéo từ chấm của box này sang box kia, hoặc bấm box rồi bấm 🔗 Nối tới box khác và chạm box sáng viền. Gỡ dây: bấm vào dây rồi bấm ✕, hoặc nút Gỡ trong panel của box.
  • Trên điện thoại: luồng chạy từ trên xuống; chạm thành phần để thêm, chạm box để chỉnh.

Xong 8 vòng? Thử các đề phỏng vấn nhiều vòng (thiết kế giữ nguyên qua các vòng):

Đề Độ khó Áp lực chính
URL shortener Trung bình Đọc nhiều, link viral, bot spam
Notifications Trung bình Nhà cung cấp chậm và sập, retry, gửi trùng
Bán vé concert Khó Một dòng tồn kho nóng, row lock, bot phe vé
Chat realtime Khó Polling hay WebSocket, Pub/Sub giữa gateway, reconnect storm

Hoặc tự đặt traffic và biến cố trong Sandbox. Con số trong game là giả định tròn để thấy xu hướng, xem giả định của mô hình.

Thành phần Công suất mỗi bản (S / M / L) Giá/tháng
Server 500 / 1.000 / 2.000 req/s $15 / $30 / $60
Database, Read Replica 500 / 1.000 / 2.000 query/s $15 / $30 / $60
Cache 10k / 25k / 50k ops/s, hit 90% khi ấm $20 / $40 / $80
CDN chặn 95% request file tĩnh $20 / $40 / $80
Load Balancer, Rate Limiter LB 10k / 25k / 50k; Rate Limiter 20k / 50k / 100k req/s $10 / $20 / $40
Queue / Worker Worker 100 / 200 / 400 job/s $10 / $20 / $40
WebSocket Gateway 10k / 20k / 40k kết nối $15 / $30 / $60
Pub/Sub 50k / 100k / 200k msg/s $20 / $40 / $80
  • Mỗi request động đi qua server và tạo một query: lệnh đọc tới cache (nếu có) rồi database/replica, lệnh ghi tới primary.
  • Thời gian phục vụ tăng theo độ bận ρ = tải / công suất, kiểu hàng đợi: base / (1 − ρ). Quá 100% thì phần vượt bị rớt.
  • Thêm bản sao server chỉ có tác dụng khi có Load Balancer phía trước; Load Balancer bỏ bản sao chết ra khỏi vòng.
  • Cache bật gộp request trùng thì lúc cache rỗng chỉ ~5% phần miss tăng thêm đi xuống database; số còn lại chờ kết quả của query đang chạy.
  • Rate Limiter trả 429 cho bot ở edge; request của người dùng thật đi tiếp bình thường.
  • Dòng nóng (đề bán vé): một dòng chỉ cho một transaction giữ lock, nên trừ được tối đa 1000 / thời gian giữ lock (ms) lượt mỗi giây, nhân với số dòng nếu chia tồn kho. Giữ lock: gọi thanh toán trong transaction ~500 ms, FOR UPDATE ~20 ms, UPDATE một câu ~2 ms.
  • Chat: không có gateway thì client hỏi server mỗi 2 giây (tin tới chậm trung bình 1 giây). Có từ 2 instance gateway trở lên mà thiếu Pub/Sub thì tin tới người nhận ở gateway khác bị mất. Gateway chết thì client của nó nối lại, mỗi lần nối lại là một request xác thực: không có jitter thì tất cả dồn vào một giây, có jitter thì rải ra ~20 giây.
  • Nhà cung cấp sập (đề notifications): mọi lần gửi đều lỗi. Không retry thì tin bị bỏ; có retry thì tin quay lại queue, và ~5% số lần lỗi thật ra đã tới nơi nên sẽ bị gửi lần hai nếu worker không chống trùng.

Mô hình này cố ý đơn giản để thấy đúng xu hướng (chỗ nghẽn, giá của từng lựa chọn), không dự đoán con số thật. Hệ thống thật cần đo: xem SLI, SLO và error budget.