Algunas respuestas sólidas aquí. Creo que más hardware es el camino a seguir. Tener demasiados clientes o tráfico es generalmente un buen problema.
Sin embargo, si debe restringir absolutamente a los clientes, existen algunas opciones.
Las soluciones más escalables que he visto giran en torno a un sistema de caché distribuido, como Memcached, y el uso de enteros para mantener los conteos.
Calcule la velocidad a la que su sistema puede manejar el tráfico. Ya sea en general, o por cliente. Luego ponga una cuenta en memcached que represente esa tasa. Cada vez que recibe una solicitud, disminuya el valor. Periódicamente incremente el contador para permitir más tráfico.
Por ejemplo, si puede manejar 10 solicitudes/segundo, ponga un conteo de 50 en cada 5 segundos, hasta un máximo de 50. De esa manera no lo estará recargando todo el tiempo, pero también puede manejar un poco de estallido limitado a una ventana. Deberá experimentar para encontrar una buena frecuencia de actualización. La clave para este contador puede ser una clave global o basada en la identificación del usuario si necesita restringirlo de esa manera.
Lo bueno de este sistema es que funciona en todo un clúster Y el mecanismo que rellena los contadores no necesita estar en uno de sus servidores actuales. Puedes dedicarle un proceso separado. Los servidores cargados solo necesitan verificarlo y disminuirlo.
Dicho todo esto, primero investigaría otras opciones. Estrangular a sus clientes suele ser una buena manera de molestarlos. Probablemente NO sea la mejor idea. :)
Tirar más hardware en él. –
Siempre que todas las solicitudes sean válidas, entonces estoy de acuerdo con Anon, le tiro más hardware (más fácil) u optimizo su servlet de Java. Si las solicitudes son de tipo spam, puedes bloquearlas en una capa inferior usando algo como iptables o un bloque de nivel apache – Nick
Su pregunta es válida. Siempre puede haber más solicitudes de las que el hardware puede manejar. Un servidor necesita una forma de limitar las solicitudes y ahora bajar el sistema durante cargas excesivas. –