Как реализовать иерархический ограничитель скорости, защищенного потоком в Java? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать иерархический ограничитель скорости, защищенного потоком в Java? [закрыто]

Сообщение Anonymous »

Я пытаюсь реализовать иерархическую ограничитель иерархического уровня в Java для системы API. Идея состоит в том, что каждый входящий запрос должен пройти через три уровня пределов скорости :
  • Глобальный предел - общие запросы в минуту по системе.
  • - запросы на индивидуальные пользователи
  • конечная точка/предел API - запросы в минуту для конкретного маршрута API.
Все три предела должны пройти для просьбы для выполнения. Если какой -либо из них не удается, запрос должен быть заблокирован.

то, что я пробовал до сих пор:
Я написал пользовательский bucket bucket с использованием атомиклонга for tokens and tokens and tokens and tokens and tokens and ukensexeex. Каждый ограничитель работает индивидуально, и я поддерживаю ограниченные ограничения для каждого пользователя и для каждой точки, используя concurrenthashmap .
Вот грубый набросок того, как я это делаю:
public boolean allowRequest(String userId, String endpoint) {

if (!globalLimiter.tryConsume()) return false;

UserLimiter userLimiter = userLimiters.computeIfAbsent(userId, id -> new UserLimiter());
if (!userLimiter.tryConsume()) return false;

EndpointLimiter apiLimiter = apiLimiters.computeIfAbsent(endpoint, ep -> new EndpointLimiter());
if (!apiLimiter.tryConsume()) return false;

return true;
}
< /code>
Эта логика работает внутри контроллера, который обрабатывает запросы. < /p>

Проблема: < /strong> < /h3>
  • Иногда токен получает поглощенным на ограничение. Это означает, что я уже использовал токен, но не обработал запрос - по существу тратящий токены .
  • Поскольку каждый ограничен проверяется отдельно, я сталкиваюсь с в высоком сопутствующем положении - особенно с общим состоянием, подобным глобальному ограничению. makes it safe, but kills performance.
  • There's no atomic rollback of tokens if one of the deeper limiters fails.
What I’m looking Для:
  • Дизайн или подход, где все ограничители могут быть проверены атомно - либо все позволяют запросить и потреблять токены, либо ни один из них не делает.
  • . очереди/актеры для решения этого.
  • Любые примеры или лучшие практики для построения , ограничиваемых частоты частоты, в java.
/> среда: < /strong> < /h3>

java 17 < /p>
< /li>
работа на основе Spring Boot Mervic запросы) < /p>
< /li>
< /ul>

Любая помощь или идеи ценится. Если есть более разумный способ структурировать это, не теряя производительности или правильности, я хотел бы услышать это. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... er-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»