Как стать автором
Обновить

Комментарии 18

Это не статья, а сообщение в стиле: "смотри, что я запилил". Было бы не плохо описать детали реализации и примеры использования, а не тупо кинуть ссылки на гитхаб

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

в статье есть примеры внешних ограничений, если вам этого недостаточно, описал примеры

А бэкенд-программист пишется через дефис. В русском языке нельзя просто взять и поставить два существительных рядом, как в английском. Зело, люто негодую, когда забывают про дефисы. Считаю своим долгом в комментариях к каждой статье упоминать о них. Жар-птица, Иван-дурак, бизнес-требования, бэкенд-разработчик!

Бэк-енд-программист
PS простите

поправил. сложно пилить хобби проекты по вечерам и выходным

ExecutorService cleanHistoryExecutor = Executors.newSingleThreadExecutor();

Я конечно не сварщик. И в джаве не разбираюсь, но реализация требует 1 поток на каждый лимитер?

хорошая идея, можно добавить такую оптимизицию на будущее

Реализация у вас тоже забагованная. Баги есть и в логике работы и в реализации этой логики.

Мультипоточный конкурентный код это сложно и совсем не очевидно.

ждем ваших PR или issues на гитхабе) тесты не забудьте)

Оверкилл. Он довольно сложен и нормально его заиспользовать не очень тривиально. Сейчас уже есть попроще варианты.

Что-то такое лучше подойдет https://developer.redis.com/develop/java/spring/rate-limiting/fixed-window/reactive

Ну я не джава сварщик, просто про эту штуку знаю.

поход по сети, чтобы узнать лимит - невозможен.
в некоторых случаях (это основной критерий, почему делал свою либу) это критично

например, вы хотите купить 1 млн долларов по цене 60.80
пока вы ходили по сети (условно 15мс), цена изменилась - 60.70
как результат - прибыль уменьшается или даже убытки появляются

Hystrix в maintenance mode давно, он мертв

и как по вашему с помощью hystrix или аналогов, узнать прямо сейчас можно ли выполнять запрос и при этом: 1) не быть забанненым, если привысить лимит 2) не ходить никуда по сети, чтобы сохранить latency

https://github.com/spring-projects/spring-retry ?

Resilience4j?

Сам не юзал, просто то, что на слуху.

spring-retry это немного для другого - чтобы клиент автоматически мог переотправить запрос, если он упадет.

resilience4j-ratelimiter - уже ближе, но они используют другой алгоритм (как я понимаю), поэтому нельзя накидать (например, покупка валюты по очень интересной цене) запросов (без бана) выше среднего и ждать


моя же либа - ограничить запросы (на клиенте) к серверу, чтобы не быть забаненным или не нарушить его работу, основывается на алгоритме sliding window

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории