¿cómo manejar más de 2000 solicitudes / seg en tomcat?

Estoy desarrollando una aplicación SMS en Java. Mis clientes envían consultas a través de SMS que se reenviarán a mi servidor en forma de solicitudes http a través de SMS Gateway. Ahora mi aplicación procesa las solicitudes y vuelve a enviar las respuestas a los clientes a través de SMS Gateway. Como máximo solo se envían 300 caracteres como respuesta. Estoy esperando un tráfico muy alto (2000 solicitudes / seg). Quería alojar mi aplicación en alguna empresa de alojamiento web (considerando mochahost). ¿Qué factores debo considerar antes de alojar (interms de RAM, CPU, etc.) y también cuáles serán los principales cuellos de botella? ¿Puede el servidor tomcat dedicado manejar un tráfico tan alto si se ajusta correctamente? ¿Cuáles son tus sugerencias?

No hay interacción con la base de datos (solo estoy usando la memoria de almacenamiento dynamic de Java). Realicé una prueba con JMeter (100 peticiones / seg). El uso de la memoria del montón fue de 35 MB y el tiempo de respuesta promedio fue de 532 ms. Además, no estoy usando ninguna variable de sesión.

Es difícil responder a su pregunta sin saber lo que está haciendo en su servlet. Pero la respuesta corta es que realmente no tiene nada que ver con Tomcat.

Actualmente usamos Dell R410s (doble quad core, 32G ram) para nuestros servidores Tomcat. Para un servicio REST que habla con un clúster de membase en el back-end, podemos procesar fácilmente ~ 15k req / second en un solo servidor (esto está usando la implementación de Jersey JAX-RS). Actualmente tenemos 4 de estos detrás de un equilibrador de carga F5. Cada una de estas solicitudes se atiende en aproximadamente 10 ms en promedio.

Lo que realmente se reduce a esto es la concurrencia; ¿Cuánto tiempo le toma a su servlet hacer lo que tiene que hacer con una solicitud? Tiene un hilo para cada solicitud concurrente, así que si intenta 2000 req / s y una sola solicitud tarda 500 ms en procesarse … necesitará un poco de hardware. El problema no es Tomcat, sino uno de los recursos disponibles para su servlet.

Un solo servidor Tomcat con configuraciones predeterminadas en hardware modesto debería manejar fácilmente 2k solicitudes / segundo, asumiendo que no tiene mucho trabajo por hacer por solicitud. Si el procesamiento de una solicitud demora más de 500 ms, es probable que deba boost el número de subprocesos en el grupo de subprocesos, y puede comenzar a superar los límites. Alternativamente, si puede descargar parte de ese trabajo a otros subprocesos, acelerará los tiempos de respuesta y podría mantener los 200 subprocesos predeterminados. Entonces es solo una cuestión de si sus hilos de trabajo pueden mantenerse al día con las solicitudes entrantes. Eso dependería de si su carga es constante o ráfaga y de cuánta demora puede aceptar en el procesamiento. Esto ni siquiera aborda HA, DR y cuál es su tiempo de inactividad aceptable. Es todo un gran acto de equilibrio, y hay demasiadas variables para dar una respuesta abreviada.

Parece que es posible que tenga que implementar un enfoque de equilibrio de carga / clúster. Echa un vistazo a esto para un ejemplo.