2010-08-07 11 views
5

Deseo obtener más información sobre la escala de la carga de trabajo que puede manejar una aplicación web Java de un servidor implementada en una sola instancia de Tomcat. En particular, imaginemos que estoy desarrollando una aplicación Wiki que tiene un patrón de uso similar a Wikipedia. ¿Cuántas simultánea solicitudes puede mi servidor de manejar de forma fiable antes de salir de la memoria o mostrar signos de exceso de estrés si puedo implementar en un equipo con la siguiente configuración:Escalabilidad de un único servidor para ejecutar una aplicación web Java

  • 4-Core de gama alta de Intel Xeon CPU
  • 8 GB de RAM
  • 2 discos duros en RAID-1 (no SSD, no hay almacenamientos de estado sólido basado PCIe)
  • RedHat o Centos Linux (64-bit)
  • Java 6 (64-bit)
  • MySQL 5.1/InnoDB

Supongamos también que la base de datos MySQL está instalada en la misma máquina que Tomcat y que todos los datos de Wiki están almacenados dentro de la base de datos. Por otra parte, vamos a suponer que la aplicación Java se construye en la parte superior de la pila siguiente:

  • SpringMVC para el front-end
  • Hibernate/JPA para la persistencia
  • primavera de DI y Seguridad, etc.

Si no ha utilizado la configuración exacta, pero tiene experiencia en la evaluación de la escalabilidad de una arquitectura similar, estaría muy interesado en saber acerca de eso también.

Gracias de antemano.

EDIT: Creo que no he articulado mi pregunta correctamente. Marcaré la respuesta con la mayor cantidad de votos como la mejor respuesta y reescribiré mi pregunta en el área wiki de la comunidad. En resumen, solo quería aprender sobre sus experiencias en la escala de carga de trabajo que su aplicación Java ha sido capaz de manejar en un servidor físico, así como en algunas descripciones relacionadas con el tipo y la arquitectura de la aplicación en sí.

+0

'¿Cuántas solicitudes simultáneas puede mi mango servidor fiable antes de salir de la memoria o mostrar signos de exceso de estrés si desplegarlo en un equipo con la siguiente configuración 'Responder a esta pregunta significa comparar la aplicación (o la versión simplificada pero representativa). No hay una única respuesta genérica IMO. –

+0

Se eliminó la etiqueta 'spring' ya que no es particularmente relevante para la pregunta. – skaffman

Respuesta

3

Usted tendrá que utilizar grupo de herramientas:

  1. Loadtesting Herramienta - JMeter puede ser utilizado.
  2. Herramienta de supervisión: esta herramienta se usará para controlar varios números de carga de recursos. Hay Lot pagado y también gratuitos. Jprofiler, visualvm, etc.
  3. Herramienta de recopilación y elaboración de informes. (No se utiliza ninguna herramienta)

Con las herramientas anteriores puede encontrar un valor óptimo. Me acercaría a él de la siguiente manera.

  1. sabrá cuál debe ser la proporción de páginas a las que se accede. ¿Qué son los procesos en segundo plano y su frecuencia?
  2. Configure mi JMeter según corresponda (para ratios), y supervise el rendimiento para la carga aplicada (la página time to serve ... se puede hacer en JMeter), supervise otros recursos utilizando la herramienta Monitor. También verifique el recuento de la proporción de errores.(NOTA: debe decidir qué proporción de errores no es aceptable.)
  3. Seguir aumentando Cargue paso a paso y siga escribiendo varios números de interés hasta que el servidor falle por completo.

Usted puede decidir en el valor óptimo en función de muchos criterios, baja tasa de error, el tiempo máximo que sirve etc. JMeter es compatible con muchas maneras de aplicar la carga.

+1

Con esta configuración, el objetivo debe ser identificar los cuellos de botella primarios y los escenarios/actividades que los causan. Con esta información podrá decidir qué factores o qué inversiones de tiempo le permitirán obtener el mejor rendimiento en trabajo/dinero. Cada vez que he analizado un producto relativamente inmaduro, he encontrado algunas cosas básicas que podrían mejorar el rendimiento de manera espectacular (usuarios concurrentes/latencia/rendimiento/...). –

+0

Estoy totalmente de acuerdo para detectar los cuellos de botella y solucionarlos a medida que se realizan estas pruebas de carga. También ajuste de parámetros como conexiones de Tomcat, conexiones de bases de datos, algoritmos de caché, configuraciones de sus aplicaciones, etc. Todos estos definitivamente lograrán un mejor rendimiento que el actual. – YoK

-1

Tomcat no permite la propagación en varias máquinas. Si realmente le preocupa la escalabilidad, debe considerar qué hacer cuando su aplicación supere una sola máquina.

+5

Tomcat admite clustering básico y replicación de sesión. Además, también es posible agrupar Tomcat usando Terracotta. – Behrang

3

Para ser sincero, es casi imposible de decir. Probablemente haya alrededor de 3 formas (de la parte superior de mi cabeza para construir un sistema así) y cada una tendría características de rendimiento bastante diferentes. Lo mejor es apostar y construir.

Primero trate de hacerse una idea de los volúmenes estimados que tendrá y las limitaciones de latencia que deberá cumplir.

Cree una arquitectura básica e implemente un fino corte de extremo a extremo a través del sistema (idealmente el caso de uso más común). Use una herramienta de prueba de carga como (Grinder o Apache JMeter) para inyectar carga y comenzar a medir el rendimiento. Si el rendimiento es aceptable, sea conservador, su implementación simple probablemente incluya menos funcionalidad y sea más rápido que el sistema completo, continúe construyendo el sistema y las pruebas para asegurarse de no introducir un cuello de botella de rendimiento importante. Si no viene con un diseño diferente.

Si su código es razonable, el cuello de botella probablemente sea la base de datos y en algún lugar de la región 100s de db ops por segundo. Si eso es insuficiente, entonces puede que necesite pensar en el almacenamiento en caché.

0

La Wikipedia en inglés tiene 14 GB de datos. Una memoria caché de 8 GB tendría una relación de aciertos/fallas muy alta, y creo que la lectura de discos duros estaría dentro de su capacidad. Por lo tanto, es muy probable que la aplicación esté vinculada a la red.

La Wikipedia en inglés tiene aproximadamente 3000 páginas vistas por segundo. Es posible que tomcat pueda manejar la carga mediante un ajuste cuidadoso, y la red tiene suficiente capacidad para procesar el tráfico.

¿Así que todo el sitio de wikipedia se puede alojar en una máquina moderada? Probablemente no. Solo una idea.

-

http://stats.wikimedia.org/EN/TablesWikipediaEN.htm

http://stats.wikimedia.org/EN/TablesPageViewsMonthly.htm

Cuestiones relacionadas