java tomcat servlet-filters rate-limiting

java - Filtro de servlet: filtro limitador de velocidad muy simple que permite ráfagas



tomcat servlet-filters (2)

también puede consultar Guava RateLimiter : proporciona un buen punto de partida para los expertos en ratas más sofisticados.

Me gustaría agregar un filtro muy simple haciendo un límite de velocidad por IP pero permitiendo ráfagas, un poco como lo que permite el iptables .

No quiero instalar todo el fregadero de la cocina: todo lo que necesito es una clase de filtro que implemente esa funcionalidad.

¿Cuál sería una buena estructura de datos / algoritmo que permita hacer un simple "limitador de velocidad-pero-con-ráfagas cortas permitidas"?

Por ejemplo, me gustaría mostrar un código de error HTTP si el usuario intenta hacer más de ''x'' GET / POST por minuto, pero me gustaría habilitar que ese mismo usuario "explote" hasta ''y'' ( donde y> x) hasta que golpea la tapa de explosión.

Solo para comparar, así es como se puede configurar una limitación de velocidad similar con una ráfaga usando iptables (es solo un ejemplo, para mostrar de lo que estoy hablando, aunque en mi caso no se trata de poner un límite de velocidad) + ráfaga en paquetes TCP SYN):

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5


En el nivel de Java :

  • Encontré un limitador de velocidad basado en Esper donde creas tu propia consulta para que coincida con tu requerimiento de ráfaga.
  • Jetty tiene un filtro servlet incorporado
  • Una biblioteca Java con los bloques integrados para crear su propio mecanismo
  • Camel tiene un mecanismo de acelerador

Pero creo que es más fácil de implementar a nivel de servidor web

O con un complemento de servidor dedicado