У меня есть 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();