Skip to content

iskander-faggod/RateLimiters.SlidingWindow

Repository files navigation

Этот проект, это моя попытка (достаточно успешная) сдеалть алгоритм SlidingWindow с очередью запросов на .Net

В отличие от Fixed Window Rate Limiter, который группирует запросы в сегмент на основе очень определенного временного окна, Sliding Window Rate Limiting ограничивает запросы относительно временной метки текущего запроса. Например, если у вас есть ограничитель скорости 10 запросов в минуту в фиксированном окне, вы можете столкнуться со случаем, когда ограничитель скорости разрешает 20 запросов в течение одноминутного интервала. Это может произойти, если первые 10 запросов находятся в левой части текущего окна, а следующие 10 запросов — в правой части окна, и оба имеют достаточно места в своих сегментах, чтобы их можно было пропустить. Если вы отправите те же 20 запросов через Sliding Window Rate Limiter, если все они будут отправлены в течение одной минуты, только 10 пройдут.

Как работает:

  1. Определение окна:
    • Устанавливается временное окно, например, 1 минута.
    • Определяется лимит запросов, например, 100 запросов в минуту.
  2. Скользящее окно:
    • Вместо фиксированного окна (где подсчёт запросов сбрасывается по завершении каждого интервала), Sliding Window делит окно на более мелкие временные сегменты.
    • Лимит учитывается не за последний полный интервал, а за последние N секунд/минут от текущего момента.
  3. Механизм подсчёта:
    • Запросы фиксируются с отметкой времени (таймстемп) в хранилище (например, Redis).
    • При новом запросе подсчитываются все запросы, совершённые в пределах текущего окна.
  4. Удаление старых запросов:
    • Запросы, вышедшие за пределы текущего окна, удаляются из хранилища.

Алгоритм:

  1. При каждом запросе:
    • Определить временное окно (например, последние 60 секунд).
    • Удалить запросы, которые вышли за пределы окна.
  2. Подсчитать количество запросов в пределах окна.
  3. Если запросов меньше лимита:
    • Разрешить выполнение.
    • Добавить текущий запрос в хранилище.
  4. Если запросов больше или равно лимиту:
    • Запрос отклоняется.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published