Реализация базового ограничителя скорости в Java

У меня было требование о внедрении базового ограничения скорости для простого API (с максимумом 40- 50 запросов в день) в Java. Требование: IP-адрес должен быть ограничен до N в M секундах (например, 10 запросов за 60 секунд) Вот что я сделал: использовал фильтр и логика была следующая: Подход 1: использовал cache2k для сохранения IP-адреса и pojo с подсчетами и временем последнего доступа

поставить каждый ip как ключ и pojo как значение (у pojo есть такие поля, как:count, последний доступ.)

когда приходит запрос, проверьте ip в кеше,

  • если ip не получен, вставьте в кеш: ключ: значение ip:pojo с номером 1 и последним обращением в качестве текущей даты.

  • если ip получен, проверьте дату последнего доступа.

    • если разница между временем последнего доступа и текущим временем составляет> M секунд, это означает, что запросы от этого ip не поступали в течение более чем M секунд. создайте новое Pojo с номером 1 и последним доступом в качестве текущей даты и вставьте в кеш

    • если разница

      • если счетчик

      • если count = N, отфильтруйте запрос - не разрешайте запрос

Подход 2:

  • Установите время истечения срока действия кэша как M секунд:

  • Проверьте, есть ли запись в кеше или нет.

    • Если нет, введите ключ как ip и значение как count(1)
    • если да, проверьте счет,
      • если count = N, то не разрешать
      • иначе вставьте значение с обновленным счетчиком и разрешите запрос

Я не хочу слишком усложнять использование Guava для простого приложения.

Было бы здорово, если кто-то может дать предложения.

Спасибо,

0 ответов

Другие вопросы по тегам