ratelimit.jpeg

Rate limit là gì?

Giới hạn tốc độ, hạn chế số lượng yêu cầu hoặc tác vụ được phép thực hiện trong một khoảng thời gian nhất định

Mục đích:

  1. Bảo vệ hệ thống
  2. Quản lý tài nguyên
  3. Kiểm soát chi phí

Ví dụ

  1. API: Một dịch vụ API có thể đặt rate limit là 50 rpm (50 request per minute) cho một tài khoản. Nếu người dùng gửi quá 50 yêu cầu, API sẽ trả về lỗi như:
  2. Website: Một trang web thương mại điện tử có thể giới hạn người dùng tìm kiếm sản phẩm không quá 10 lần mỗi giây để tránh lạm dụng hệ thống.

Các loại rate limit

  1. Per user: Giới hạn theo từng người dùng hoặc tài khoản.
  2. Per IP address: Giới hạn dựa trên địa chỉ IP của người gửi yêu cầu.
  3. Global limit: Áp dụng giới hạn chung cho tất cả người dùng hệ thống.
  4. Time-based limit: Giới hạn theo khoảng thời gian cụ thể (phút, giờ, ngày,...).

Rate limit trong Nestjs

Nguồn tham khảo: https://docs.nestjs.com/security/rate-limiting Trong Nestjs, hỗ trợ rate limit qua lib @nestjs/throttler Lib sử dụng lại rate lite IP address và Time-based limit (đơn vị ms).

Các cách khai báo Rate limit trong nestjs

1. Global

"File: app.module.js"

@Module({
  imports: [
    ThrottlerModule.forRoot([{
      ttl: 60000,
      limit: 10,
    }]),
  ],
})
export class AppModule {}