Pregunta

En Tomcat 6 tengo un servlet que ejecuta openbluedragon, todo se compila y funciona rápidamente, con la excepción de las imágenes, que realmente se retrasan significativamente.¿Alguna sugerencia de optimización para el servicio de imágenes?

Aquí está mi servidor.xml:

    <Service name="Catalina">

      <Connector port="8009" protocol="AJP/1.3" />
      <Connector port="8080" maxThreads="100" protocol="HTTP/1.1" connectionTimeout="20000" />
      <Engine name="Standalone" defaultHost="hostname.whatever" jvmRoute="ajp13">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      <Host name="hostname.whatever"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        ...context
      </Host>

    </Engine>
  </Service>
¿Fue útil?

Solución

Otra opción es usar Apache como interfaz, conectando Tomcat con mod_jk.De esta manera puedes dejar que Apache proporcione contenido estático (p. ej.imágenes, css, javascript) y dejar que tomcat genere el contenido dinámico.Puede que me cueste un poco separar el contenido estático de los dinámicos, pero a mí me funciona muy bien.

En Unix, tener Apache como interfaz es una buena opción porque al estar vinculado al puerto 80, a menudo te ves obligado a ejecutarlo como root.Apache sabe cómo eliminar los permisos de root después de vincular un puerto, Tomcat no.No desea que un servidor público se ejecute como root.

(Esto es similar a la respuesta del proxy inverso, pero no implica un proxy sino mod_jk)

Otros consejos

¿Estás publicando el mismo conjunto de imágenes una y otra vez?En ese caso, agregar un filtro de servlet que agregue un encabezado Expires razonable podría ahorrarle a Tomcat mucho trabajo.No aumentará la velocidad de la imagen servida, solo reducirá la cantidad de solicitudes que debe manejar.Hay muchos ejemplos de esto en la web.

Si tiene la opción, puede agregar un proxy inverso antes de su solicitud.En el trabajo tengo un servidor web Apache que recibe todas las conexiones HTTP entrantes.Según la URL, reenvía la solicitud a otro servidor o muestra el contenido por sí mismo.He utilizado este enfoque para acelerar la entrega de contenido estático para un sitio Trac.Las directivas ProxyPass y ProxyPassReverse son un buen lugar para comenzar a buscar si desea seguir este camino.

Como ejemplo simple, si tiene un directorio virtual llamado /images, Apache podría atender cualquier solicitud de algo en ese directorio y reenviar todo lo demás a su instancia de Tomcat.La sintaxis es bastante completa.Si existe algún método para identificar el contenido estático, este es un enfoque que funcionará.

Apache no es la única opción aquí.Creo que todos los servidores web modernos incluyen una funcionalidad similar.Si comenzara hoy, probablemente miraría LigHTTPd, solo porque hace menos.

Incluso puede haber servidores proxy inversos de almacenamiento en caché que resuelvan esto automáticamente.Aunque no estoy familiarizado con ninguno de ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top