Функциональные структуры данных для поддержки управления потоком - PullRequest
0 голосов
/ 27 февраля 2019

Я хотел бы найти функциональную структуру данных, которая может выполнять «Управление потоком».

Пример: для любого IP-адреса, посещающего мой веб-сайт, если IP-адрес посещал> = N раз с момента M минут назад,IP-адрес ограничен посещением в течение Z минут.

Существует ли какое-либо решение, которое не требует таймера (для периодического удаления записей о посещениях) или большого хранилища данных (чтобы запомнить все посещения со всех IP-адресов)?

Может использовать JAVA или Scala для построения структуры данных.

1 Ответ

0 голосов
/ 27 февраля 2019

Простые ответы: Да , Нет и Да .

Да , вы можете сделать это безтаймер, вам нужны только одни часы.Когда приходит запрос, вы смотрите на часы и на основании исторических данных решаете, отклонить ли запрос в соответствии с вашим алгоритмом.

Нет , вы не сможете сделать это без записидо N записей посещений для каждого IP.Вам нужно знать время каждого запроса, чтобы узнать, сколько их произошло за последние М минут.Существуют различные способы сжатия этого, но вы не можете реализовать свой алгоритм без записи каждого посещения.

Да , вы можете использовать Java или Scala для создания соответствующих структур данных на основе вашего алгоритма.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...