Rate limiting giới hạn số request mà một client có thể thực hiện trong một cửa sổ thời gian — bảo vệ hệ thống khỏi lạm dụng, quá tải, và đảm bảo sử dụng công bằng. Đây là một thành phần system design phổ biến, với nhiều thuật toán và cân nhắc.
Tại sao rate limiting
✓ BẢO VỆ khỏi lạm dụng → ngăn tấn công (brute force, scraping, DoS), sử dụng quá mức
✓ NGĂN QUÁ TẢI → bảo vệ hệ thống khỏi bị quá tải (ổn định)
✓ SỬ DỤNG CÔNG BẰNG → đảm bảo không client nào độc chiếm tài nguyên; giới hạn theo tier (free vs paid)
✓ Kiểm soát COST; bảo vệ service downstream
→ một yêu cầu phổ biến cho API và service.
Các thuật toán rate limiting
FIXED WINDOW → đếm request mỗi cửa sổ thời gian cố định (vd 100/phút); đơn giản
✗ cho phép bùng nổ ở ranh giới cửa sổ (lên tới 2x ở các mép)
SLIDING WINDOW → cửa sổ thời gian trượt → mượt hơn, không bùng nổ ở ranh giới (chính xác hơn)
TOKEN BUCKET → token nạp lại theo một tốc độ; mỗi request lấy một token → cho phép BÙNG NỔ lên tới
kích thước bucket trong khi giới hạn tốc độ trung bình (phổ biến, linh hoạt)
LEAKY BUCKET → request được xử lý theo tốc độ đều đặn (làm mượt đầu ra)
