Fixed window rate limiting Node.js

Nội dung bài viết

Video học lập trình mỗi ngày

Thuật toán fixed window là gì?

Fixed window là một thuật toán được sử dụng để hạn chế số lần gọi một hàm hoặc thủ tục trong một khoảng thời gian cố định. Điều này có thể được sử dụng để tránh tình trạng quá tải hệ thống hoặc giảm bớt số lần gọi hàm hoặc thủ tục không cần thiết.

Để sử dụng thuật toán Fixed window, bạn có thể thiết lập một biến đếm để lưu trữ số lần gọi hàm hoặc thủ tục, và một biến thời gian để lưu trữ thời gian hiện tại. Sau đó, bạn có thể so sánh số lần gọi và thời gian hiện tại với giá trị cố định đã đặt trước đó (ví dụ, số lần gọi tối đa trong một phút hoặc một giờ). Nếu số lần gọi và thời gian hiện tại không vượt quá giá trị cố định, bạn có thể cho phép gọi hàm hoặc thủ tục tiếp tục. Và sau đây là cách triển khai

Fixed window rate limiting Node.js

Để xây dựng thuật toán Fixed Window trong Node.js, bạn có thể làm như sau.

Khai báo hai biến count và thời gian cố định:

let count = 0;
const windowSize = 60; // Window size in seconds

Khai báo một hàm để kiểm tra xem có cho phép gọi hàm hay không:

function checkLimit() {
  const currentTime = Date.now();
  if (count >= windowSize) {
    // If the number of calls exceeds the window size, reset the count and check the time elapsed
    if (currentTime - startTime < windowSize * 1000) {
      return false; // If the time elapsed is less than the window size, return false
    } else {
      startTime = currentTime;
      count = 1;
      return true;
    }
  } else {
    // If the number of calls is less than the window size, increment the count
    count++;
    return true;
  }
}

Sử dụng hàm trên để kiểm tra xem có cho phép gọi hàm hay không trước khi gọi hàm:

if (checkLimit()) {
  // Call the function
  foo();
} else {
  console.log('Error: Rate limit exceeded');
}

Trong ví dụ trên, chúng ta đã xây dựng một cửa sổ cố định với kích thước là 60 giây. Nếu số lần gọi hàm trong vòng 60 giây vượt quá giá trị cố định, hàm sẽ không được gọi và sẽ in ra một thông báo lỗi. Nếu không, hàm sẽ được gọi.

Có thể bạn đã bị missing