Cheatsheet: App chịu tải: load balancer, stateless và rate limiting
Tra cứu nhanh cho toàn khóa: nút thắt cổ chai, scale, session, load balancer, connection pool, rate limiting, hàng đợi, đọc số tải.
1. Nút thắt cổ chai: vì sao app sập khi đông người dùng
Nguyên tắc cốt lõi: hệ thống không sập vì "quá nhiều người dùng". Nó sập vì một tài nguyên cụ thể bị cạn và tài nguyên đó kéo theo cả chuỗi phía sau.
Chuỗi sập điển hình
flowchart LR
Traffic["📈<br/>Traffic tăng"] --> CPU["🔥<br/>CPU / RAM cạn"]
Traffic --> Pool["🔌<br/>Connection pool cạn"]
Traffic --> Queue["⏳<br/>Hàng đợi phình"]
CPU --> Latency["🐢<br/>Latency tăng"]
Pool --> Latency
Queue --> Latency
Latency --> Timeout["⏱️<br/>Client timeout"]
Timeout --> Retry["🔁<br/>Client retry"]
Retry --> Traffic
Điểm chết người: retry tạo vòng lặp dương. Mỗi lần timeout, client thử lại, tải tăng thêm, latency càng cao, càng nhiều timeout.
Bảng: tài nguyên nào cạn trước?
| Tài nguyên | Dấu hiệu | Nút thắt tiếp theo |
|---|---|---|
| CPU | Load average cao, latency tăng đều | Xử lý request chậm, hàng đợi đầy |
| RAM | Swap, GC pause dài | OOM kill, server restart |
| Connection pool DB | Request chờ connection | Timeout DB, request xếp hàng |
| File descriptor / socket | Lỗi "too many open files" | Không nhận connection mới |
| Băng thông | Response lớn chậm | Timeout, trải nghiệm tệ |
Cách tìm nút thắt
- Đo trước khi tối ưu. Không đoán.
- Nhìn tài nguyên nào bão hòa gần 100% đầu tiên.
- Sửa đúng tài nguyên đó, rồi đo lại để tìm nút thắt tiếp theo.
Tip: Chỉ tối ưu một nút thắt tại một thời điểm. Sửa xong nút thắt này, nút thắt khác sẽ lộ ra. Đó là bình thường, không phải thất bại.
2. Scale dọc và scale ngang
Định nghĩa
This cheatsheet is premium content. Sign in and purchase the course to view the full content. Sign in