Back to questions
Junior — Middle
69
Каким образом можно спроектировать систему, которая ограничивает число запросов к ресурсу в рамках пяти последовательных сессий?
Answer from AI
sobes.tech AI
Для ограничения числа запросов к ресурсу в рамках пяти последовательных сессий можно реализовать механизм, который отслеживает количество запросов в каждой сессии и суммирует их за последние пять сессий.
Пример подхода:
- Хранить счетчик запросов для каждой сессии.
- Хранить историю последних пяти сессий с их счетчиками.
- При новом запросе проверять сумму запросов за последние пять сессий.
- Если сумма превышает лимит — блокировать запрос.
В 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()
Такой подход позволяет контролировать общее число запросов за последние пять сессий.