java - jsp caracteres especiales
¿Cómo manejar 2000+ solicitudes/seg en Tomcat? (3)
Es difícil responder a tu pregunta sin saber lo que estás haciendo en tu servlet. Pero la respuesta corta es que realmente no tiene nada que ver con Tomcat.
Actualmente utilizamos Dell R410s (dual 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 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, por lo 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.
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 con alguna empresa de webhosting (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 dinámico 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. Y tampoco estoy usando ninguna variable de sesión.
Parece que es posible que tenga que implementar un enfoque de equilibrio de carga / clúster. Eche un vistazo a this para ver un ejemplo.
Un solo servidor Tomcat con la configuración predeterminada en un 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 requiere más de 500 ms, es probable que deba aumentar la cantidad de subprocesos en el grupo de subprocesos, y podría 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 los subprocesos 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. Todo es un gran acto de equilibrio, y hay demasiadas variables para simplemente dar una respuesta de corte y secado.