Skip to content
Draft · Trang này mới là dàn ý, chưa viết đầy đủ. Xem mọi trang nháp

Case study: rate limiter ​

Giới hạn số request mỗi người dùng, IP hoặc API key được gửi trong một khoảng thời gian.

Dàn ý ​

  1. Yêu cầu: giới hạn theo ai (user, IP, API key, gói cước), theo API nào; trả 429 Too Many Requests kèm Retry-After và các header RateLimit-*.
  2. Thuật toán: fixed window, sliding window log, sliding window counter, token bucket, leaky bucket; độ chính xác, bộ nhớ, khả năng cho phép bùng nổ ngắn (burst).
  3. Đặt ở đâu: API gateway / Nginx (limit_req), middleware trong app, hay service riêng.
  4. Nhiều instance: đếm chung trên Redis (INCR + EXPIRE, sorted set cho sliding window), Lua script để kiểm tra và tăng nguyên tử (Redis).
  5. Redis lỗi thì sao: fail open (cho qua) hay fail closed (chặn); kết hợp giới hạn cục bộ trong từng instance.
  6. Nhiều tầng: theo IP để chống lạm dụng, theo user theo gói cước, giới hạn toàn hệ thống để bảo vệ database.
  7. Node.js: express-rate-limit, rate-limiter-flexible.