Bạn sẽ thiết kế giới hạn tốc độ (rate limiting) cho một API công khai thế nào?
Gợi ý trả lời
Bắt đầu bằng câu hỏi làm rõ: giới hạn theo ai (IP, API key, người dùng), mức nào, chặn cứng hay giảm tốc, hệ thống chạy một hay nhiều máy chủ.
Các thuật toán thường gặp:
- Fixed window: đếm theo khung phút, đơn giản nhưng dồn request ở mép khung.
- Sliding window: mượt hơn, tốn bộ nhớ hơn.
- Token bucket: cho phép bùng nổ ngắn, phổ biến nhất cho API.
Với nhiều máy chủ, bộ đếm cần nằm ở chỗ dùng chung như Redis với thao tác nguyên tử. Trả về mã 429 Too Many Requests kèm header Retry-After, và ghi log để phát hiện lạm dụng.
Ở mức senior, nói thêm về đánh đổi: độ chính xác so với chi phí, xử lý khi Redis lỗi (cho qua hay chặn hết), và giới hạn khác nhau cho từng gói khách hàng.