реализация базового ограничителя скорости в Java - PullRequest
0 голосов
/ 11 ноября 2018

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

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

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

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

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

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

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

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

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

Подход 2:

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

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

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

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

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

Спасибо

...