Sobes.tech
Junior — Middle
93

Wie kann man ein System entwerfen, das die Anzahl der Anfragen an eine Ressource innerhalb von fünf aufeinanderfolgenden Sitzungen einschränkt?

Antwort von AI

sobes.tech KI

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

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

  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()

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