Как ограничить квоту в майке для каждого клиента - PullRequest
0 голосов
/ 27 января 2011

Я уже построил API веб-сервиса на основе джерси.Теперь я хочу ограничить квоты для каждого клиента.Например: - один клиент может сделать менее 10000 запросов за один день.- один клиент может сделать только менее 10 запросов в секунду.и так далее.

Должен ли я хранить эту информацию в таблице базы данных?Но если я сделаю это, это будет стоить много времени для обработки этих запросов, потому что я должен обновить таблицу.

Я с нетерпением жду других эффективных способов решения этой проблемы.Поскольку я впервые делаю такую ​​работу, надеюсь, кто-нибудь может дать мне совет по этим проблемам.Спасибо ~!

1 Ответ

1 голос
/ 26 марта 2011

Без информации о том, как вы определяете клиента, сложно ответить на этот вопрос. Однако одним из методов будет фильтрация всех входящих запросов с использованием ContainerRequestFilter

Затем на этом уровне вы можете определить, что такое клиент, и записать все обращения этого клиента к вашему приложению в Джерси. Возможно, путем увеличения значения в DataStructure или значения в базе данных. Затем выполнение задания cron сбрасывает эти данные каждые 24 часа.

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

Без дополнительной информации я не могу дать больше информации

...