rate limiter (sliding window)

от автора

Наверняка многие бекенд программисты сталкивались с задачей ограничением запросов к некоторому источнику данных. Существует множество решений этой проблемы:
1) хранить историю во внешнем источнике данных, как redis. Для вычисления возможности отправить запрос, нужно каждый раз ходить в этот источник данных, что может быть непозволительно в некоторых сферах (так как существенно увеличивается время обработки запроса)
2) не париться с limiter и анализировать ответ от внешнего источника данных и на основе его ответов, принимать решение когда и сколько запросов можно отправить (но такие ответы есть не у каждого сервиса и существует вероятность, что будут отправлены лишние запросы, что может привести к бану)
3) хранить историю запросов локально, но использовать алгоритм leaked bucket, но это не позволяет накидать несколько запросов и ждать
4) хранить историю запросов локально, но использовать алгоритм sliding window, можно накидать запросов и ждать какое-то известное время

О реализации sliding window для java пойдет речь в этой статье

Пример сервиса, где нужно не превышать некоторый лимит по запросам

Цели стояли такие:
— не ходить по сети куда-то во внешний сервис, чтобы узнать можно ли отправить запрос или нет (так как увеличивает время обработки запроса)
— хотелось бы иметь библитеку (а не создавать велосипед каждый раз)
— можно было использовать, как в spring проектах, так и в других фреймворказ и JVM языках

Сразу хочу отметить
1) готовой библиотеки с реализацией алгоритма sliding-window для java/kotlin — не нашел
2) моя библиотека не полностью закончена (в статусе beta), но уже можно использовать в своих проектах

Хорошая статья о sliding window

Моя библиотека
— примеры использования
— сама библиотека

Если есть какие-то советы по улучшению библиотеки, лучше сразу создавайте issues или PR.

Ставьте звезды) так буду понимать, что библиотека интересна и стоит дальше развивать

PS первая статья на хабре


ссылка на оригинал статьи https://habr.com/ru/post/685306/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *