2010-09-09 27 views
12

En las versiones anteriores de tomcat (como 3.2) puede encontrar la recomendación para servir contenido estático en un servidor web Apache y dejar el contenido dinámico al tomcat. En las nuevas versiones de los documentos tomcat no puede encontrar ninguna referencia a esta práctica, incluso en el tutorial de configuración mod_jk. Así que me pregunto.¿Sirve contenido estático en un servidor web y el contenido dinámico en tomcat sigue siendo una buena práctica de rendimiento?

¿Sigue siendo cierto que Tomcat no es lo suficientemente bueno para servir contenido estático? Si cambio mi esquema de implementación a un contenido estático y dinámico separado, ¿tendré una mejora en el rendimiento?

Respuesta

2

No debe considerar la velocidad cuando elige entre Apache httpd y Tomcat.

¿Qué es JK (o AJP)?

AJP es un protocolo de conexión. Es una versión optimizada del protocolo HTTP para permitir que un servidor web independiente como Apache pueda hablar con Tomcat. Históricamente, Apache ha sido mucho más rápido que Tomcat al brindar contenido estático. La idea es dejar que Apache sirva el contenido estático cuando sea posible, pero delegar la solicitud a Tomcat para el contenido relacionado con Tomcat.

Y

velocidad. Apache es más rápido en servir contenido estático que Tomcat. Pero a menos que tenga un sitio con mucho tráfico, este punto es inútil. Pero en algunos casos, Tomcat puede ser más rápido que Apache httpd. Así que compara tu sitio. Tomcat puede funcionar a velocidades httpd cuando se usa el conector adecuado (APR con sendFile habilitado). La velocidad no debe ser considerada un factor al elegir entre httpd Apache y Tomcat


Recursos:

9

En cuanto a la velocidad pura, sugiero leer el Myth or truth: One should always use Apache httpd in front of Apache Tomcat to improve performance? publicación de blog. Permítanme citarlo parcialmente:

La respuesta corta es que este es un mito de . La respuesta más larga es que de vuelta en los días de Tomcat 3 había alguna verdad a esto dependiendo de circunstancias . Sin embargo, para las versiones de Tomcat en uso en la actualidad (5.5.x y 6.0.x), no es necesario utilizar httpd por razones puramente de rendimiento . Tomcat ahora admite el conector nativo/APR que usa la misma biblioteca nativa (Apache Portable Runtime-APR) como httpd para la E/S de bajo nivel y por lo tanto puede lograr un rendimiento similar a httpd. Al momento de servir el contenido estático existe muy ligeramente más sobrecarga cuando utilizando Tomcat en comparación con httpd pero los diferencias son tan pequeñas que son poco probable que sea perceptible en sistemas de producción.

...

El performance testing realiza por Christopher Schultz, un habitual en la lista de correo de los usuarios de Tomcat, utiliza una gama más amplia de tamaño de los archivos y proporciona - en mi opinión - mejores resultados. Los resultados de sus pruebas se muestran en el gráfico a continuación.

alt text

Estos resultados son mucho más acorde con lo que se espera, aunque no algunos puntos interesantes a tener en cuenta:

  • Apache httpd y Coyote ABR/espectáculo nativa rendimiento similar niveles.
  • Coyote NIO no se queda atrás con respecto a httpd y Coyote APR/native.
  • Parece haber un límite en la utilidad de sendfile. Puede ser una limitación de hardware de , pero vale la pena prestar atención adicional a . He agregado esto a mi lista de cosas por hacer.
  • Para archivos de tamaño pequeño (menos de ~ 10KiB) el almacenamiento en memoria caché de archivos estáticos en Tomcat proporciona un importante aumento de rendimiento .

...

Mientras que el rendimiento bruto para el contenido estático puede no ser una buena razón para uso httpd, hay una serie de buenas razones por las es posible que desee utilizar httpd con Tomcat. El motivo más frecuente es proporcionar equilibrio de carga a dos o más instancias de Tomcat. httpd no es la única opción para lo que esta - equilibradores de carga de hardware u otros proxies inversos se puede utilizar - pero es una opción popular entre los administradores del sistema como muchos de ellos son ya están familiarizados con httpd. Voy a escribir más sobre el uso de httpd como un balanceador de carga en un artículo futuro.

...

Bien vale la pena leer.

Dicho esto, usando un servidor web en frente de Tomcat para servir contenido estático obviamente liberará más potencia para el contenido dinámico y por lo tanto es mi opción favorita.

0

Quizás un encabezado de control de caché con un valor máximo de edad se pueda agregar mediante un filtro de servlet en Tomcat para todo el contenido "/ static/*". Por lo tanto, si los mismos clientes vuelven con frecuencia (Intranet), Tomcat podría ser suficiente ya que el contenido estático estará en el caché de los navegadores y rara vez se le pedirá al servidor en comparación con el contenido dinámico.

Además, el control de caché para contenido estático puede ser una buena idea para un ancho de banda de red extendido.

(Es solo mi propia experiencia tratando de besar)

Cuestiones relacionadas