InternetMaster
@InternetMaster
Интернет

Как ограничить максимальное количество обращений в секунду?

Есть код на quart (асинхронная альтернатива flask), нужно чтобы с одного user_id (или если его нет, то ip) можно было ограничить максимальное количество запросов в секунду или минуту.

Сразу попёрли мысли на счет noSQL, например redis, но нормальной пищи для размышлений не нашел в интернете.

Может, есть варианты это делать в оперативной памяти, или лучше в noSQL? Если есть, дайте ссылки на подобные материалы в информационно-телекоммуникационной сети "Интернет".
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@Zolg
https://pypi.org/project/quart-rate-limiter/

Умеет и в памяти и в redis'е
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сразу скажу я с питоном ни как

У себя в контроллере делал так.
Статический словарь, с операциями чистки. и простая проверка на входе.
ipv4 да и 6 вы просто заберете всех без проблем
Ответ написан
Комментировать
@rPman
У тебя же асинхронный код в одном процессе и даже в одном потоке, храни в памяти обычный мап - количество обращений в секунду и либо каждую новую секунду массив обнулять либо, более правильно, хранить рядом в fifo массиве последний список запросов (время+user_id), удаляя с каждым следующим запросом из головы записи старее секунды, соответственно вычитая из мапа user_id:количество значение, а при добавлении записи в голову соответственно количество увеличивать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы