Cuando un servidor web ya no puede mantener todas las peticiones de un sitio por si solo, una buena forma de aliviar la carga en este, es utilizar un (sub)dominio adicional en un servidor aparte. En este vamos a hospedar todo el contenido estático, como:
- Archivos relacionados a la plantilla: imágenes, archivos de javascript y hojas de estilos
- Imágenes usadas para complementar el contenido, dependiendo del Gestor de contenidos este podría automatizar el proceso de subida hacia el otro servidor
- Archivos complementarios como PDF’s, MP3’s, Videos o cualquier otro archivo que no sea generado dinámicamente
La idea es contar con un segundo servidor que utilice muy pocos recursos y que responda con los encabezados (headers) apropiados para que cada cliente mantenga estos archivos en su caché local. Al hacer esto, podemos reconocer algunas ventajas:
Balanceo de carga
Obviamente la primer meta de contar con un servidor adicional para contenido estático, es quitar carga del servidor principal, encargado de generar las páginas de nuestro sitio. Este otro servidor puede ser un más sencillo que el principal, si lo configuramos para utilizar Worker o algún servidor web alternativo como Lighttp, NGnix, etc.
Para lograr este “balanceo de carga” es tan fácil como modificar el código generado para que se enlacen a los archivos en el dominio alternativo. Por ejemplo, en Foros del Web utilizamos el subdominio static.forosdelweb.com, Yahoo usa el dominio yimg.com, La familia de sitios de Stack Overflow usan sstatic.net.
Por supuesto al llegar a tener un tráfico mucho mayor se llegará a necesitar un balanceo de carga real, con un proxy en frente de los servidores web, y mover el contenido estático a un CDN profesional como Amazon S3/CloudFront o similares.
Libre de cookies
Cuando enviamos una cookie al usuario, su navegador nos la enviará junto a todas las peticiones, sean páginas o imágenes. Esto es un problema, ya que hará que las peticiones/paquetes sufran mayor fragmentación. Yahoo hizo un estudio sobre el impacto del tamaño las cookies y el incremento en el tiempo de respuesta del servidor, de alli se concluye que es mejor reducir al mínimo posible el tamaño (si usas un CMS esto es complicado), o aún mejor que los recursos que no necesiten de estas estén en un dominio aparte, libre de cookies.
Descargas paralelas
La especificación del HTTP/1.1 sugiere que cada navegador limite el número de descargas simultaneas a 2, para un mismo host. Si tenemos un dominio adicional, esto debería darnos otras 2 descargas paralelas adicionales, reduciendo el tiempo necesario para cargar el sitio. Tampoco significa que debemos agregar varios subdominios con tal de tener muchas descargas paralelas, el incremento en consultas DNS y uso del conexiones adicionales degrada la ventaja de que se hagan en paralelo.
¿Desventajas?
No puedo pensar en desventajas reales de usar un dominio para contenido estático, más que:
- Que los ingresos y el tráfico del sitio no justifiquen el gasto en un servidor adicional o en pagar los gastos de usar Amazon S3.
- Tener un servidor adicional que no soporte la carga del contenido estático, haciendo que el tiempo de carga del sitio sea mayor.
- Que el gestor de contenidos por alguna razón dificulte, o no se tenga el conocimiento para hacer que ciertos recursos se enlacen al otro dominio.
¿Alguna otra ventaja o desventaja? ¿Experiencias al respecto? Dejen nos un comentario