Простые ответы: Да , Нет и Да .
Да , вы можете сделать это безтаймер, вам нужны только одни часы.Когда приходит запрос, вы смотрите на часы и на основании исторических данных решаете, отклонить ли запрос в соответствии с вашим алгоритмом.
Нет , вы не сможете сделать это без записидо N записей посещений для каждого IP.Вам нужно знать время каждого запроса, чтобы узнать, сколько их произошло за последние М минут.Существуют различные способы сжатия этого, но вы не можете реализовать свой алгоритм без записи каждого посещения.
Да , вы можете использовать Java или Scala для создания соответствующих структур данных на основе вашего алгоритма.
Однако можно уменьшить объем хранилища данных, если вы измените свой тест.Например, вы можете разделить время на окна длины M и посчитать запросы в каждом окне.Если количество запросов в текущем и предыдущем окнах превышает N, вы отклоняете запрос.Это не дает точно таких же результатов, но достигает общей цели по ограничению скорости запросов от чрезмерно активных клиентов при сохранении только двух значений для каждого IP-адреса.