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.
Giả định của mô hình
Phần tiêu đề “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,UPDATEmộ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.