2011-08-25 8 views
20

Estoy desarrollando una aplicación de SMS en Java. Mis clientes envían consultas por SMS que se enviarán a mi servidor en forma de solicitudes http a través de SMS Gateway. Ahora mi aplicación procesa las solicitudes y envía respuestas a los clientes nuevamente a través de SMS Gateway. Máximo solo 300 caracteres se envían como respuesta. Estoy esperando 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 del alojamiento (intermios de RAM, CPU, etc.) y también cuáles serán los principales cuellos de botella? ¿Puede el servidor dedicado de tomcat manejar un tráfico tan alto si está sintonizado correctamente? ¿Cuáles son tus sugerencias?cómo manejar más de 2000 solicitudes/seg en tomcat?

no hay interacción de base de datos (sólo estoy usando memoria de almacenamiento dinámico de Java). Ejecuté una prueba con JMeter (100 solicitudes/seg). Mi uso de la memoria del montón fue de 35 MB y el tiempo de respuesta promedio fue de 532 ms. Y también no estoy usando ninguna variable de sesión.

+0

¿Qué tipo de procesamiento necesita hacer en cada solicitud? Cualquier interacción con la base de datos? –

+0

@Mike No hay interacción de la base de datos involucrada en absoluto. Estoy usando solo la memoria Java. – ravi

+0

Ejecuté una prueba con jmeter (100 solicitudes/seg). Mi uso de la memoria del montón fue de 35 MB y el tiempo promedio de respuesta fue de 532 ms. – ravi

Respuesta

23

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.

Nos uso actual de Dell R410s (doble núcleo cuádruple, 32G RAM) para nuestros servidores Tomcat. Para un servicio REST que habla con un clúster membase en el back-end, podemos procesar fácilmente ~ 15k req/segundo en un único servidor (esto es mediante la implementación de JAX-RS de Jersey). Actualmente tenemos 4 de estos detrás de un equilibrador de carga F5. Cada una de estas solicitudes recibe servicio 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? Tienes un hilo por cada solicitud simultánea, así que si tratas de 2000 req/seg y una sola solicitud tarda 500ms en procesarse ... vas a necesitar un poco de hardware. El problema no es Tomcat, sino uno de los recursos disponibles para su servlet.

+1

empecé este hilo con respecto a su mensaje: http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs esperando que usted puede sonar en. – codecompleting

+0

¿Ajustó algo en el nivel del sistema operativo para TIME_WAIT? ¿Qué pasa con la configuración de configuración de tomcat para: connectionTimeout, keepAliveTimeout, maxKeepAliveRequests? Tener una aplicación similar con 2K solicitudes por segundo, pero Tomcat es lento después de un tiempo. – codecompleting

+0

Me gusta esta respuesta – thonnor

1

Parece que puede que tenga que poner en práctica un enfoque de clúster de equilibrio/carga. Eche un vistazo a this para un ejemplo.

6

Un único servidor Tomcat con la configuración predeterminada en el hardware modesto debe manejar con facilidad 2k peticiones/segundo, suponiendo que no tiene demasiado trabajo que hacer por la petición. Si el procesamiento de una solicitud demora más de 500 ms, es probable que deba aumentar 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 otro (s) hilo (s), se acelerarán los tiempos de respuesta y podrá mantener los 200 hilos predeterminados. Entonces solo se trata de si sus hilos de trabajo pueden mantenerse al día con las solicitudes entrantes. Eso dependerá de si su carga es constante o explosiva y cuánto retraso 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.

Cuestiones relacionadas