Sobes.tech
Back to questions
Junior — Middle
69

Каким образом можно спроектировать систему, которая ограничивает число запросов к ресурсу в рамках пяти последовательных сессий?

Answer from AI

sobes.tech AI

Для ограничения числа запросов к ресурсу в рамках пяти последовательных сессий можно реализовать механизм, который отслеживает количество запросов в каждой сессии и суммирует их за последние пять сессий.

Пример подхода:

  1. Хранить счетчик запросов для каждой сессии.
  2. Хранить историю последних пяти сессий с их счетчиками.
  3. При новом запросе проверять сумму запросов за последние пять сессий.
  4. Если сумма превышает лимит — блокировать запрос.

В Python можно использовать очередь фиксированной длины (например, collections.deque с maxlen=5) для хранения количества запросов каждой сессии. При завершении сессии добавлять счетчик в очередь, при новом запросе суммировать значения в очереди.

Пример кода:

from collections import deque

class RateLimiter:
    def __init__(self, max_requests_per_5_sessions):
        self.max_requests = max_requests_per_5_sessions
        self.session_requests = 0
        self.last_5_sessions = deque(maxlen=5)

    def new_request(self):
        # Проверяем сумму запросов за последние 5 сессий
        total = sum(self.last_5_sessions) + self.session_requests + 1
        if total > self.max_requests:
            return False  # Превышен лимит
        self.session_requests += 1
        return True

    def end_session(self):
        self.last_5_sessions.append(self.session_requests)
        self.session_requests = 0

# Использование
limiter = RateLimiter(max_requests_per_5_sessions=100)

# В течение сессии
if limiter.new_request():
    print("Запрос разрешен")
else:
    print("Лимит превышен")

# По окончании сессии
limiter.end_session()

Такой подход позволяет контролировать общее число запросов за последние пять сессий.