HTTP-запрос Throttle на основе доступной памяти - PullRequest
0 голосов
/ 31 августа 2018

У меня есть REST API, который, как ожидается, получит большую полезную нагрузку в качестве тела запроса. API вызывает метод блокировки, который обрабатывает каждый запрос в течение 2 секунд, а затем возвращает 200 OK. Я хочу ввести регулирование на основе доступной памяти так, чтобы API возвращал 429 Too Many Request, когда доступная память падает ниже порога.

Когда пороговое условие выполнено, я хочу сразу отклонить последующие запросы, даже до загрузки больших объемов запросов в память моего приложения. Это также даст мне некоторую защиту от атак типа «отказ в обслуживании».

В среде Java EE, Tomcat, если я использую Filter для проверки доступной памяти, я понимаю, что полный запрос уже загружен в память. Тогда лучше добавить метод check in ServletRequestListener.requestInitialized, чтобы я мог отклонить запрос даже до того, как приложение его получит?

P.S. Я использую приведенную ниже формулу для вычисления доступной памяти на основе этого сообщения SO :

long presumableFreeMemory =
            Runtime.getRuntime().maxMemory()
            - Runtime.getRuntime().totalMemory()
            + Runtime.getRuntime().freeMemory();
...