Compartir a través de


Configuración del almacenamiento en caché de salida de IIS 7

por Tali Smith

Internet Information Services (IIS) incluye una función de caché de salida que puede almacenar en caché el contenido dinámico de PHP (o la salida de su Microsoft® ASP.NET o ASP clásico, u otras páginas dinámicas) en la memoria. Esto puede producir enormes mejoras de rendimiento, ya que el script usado para generar la salida dinámica no necesita ejecutarse para cada solicitud. La memoria caché puede variar la salida almacenada en caché en función de los valores de cadena de consulta, así como los encabezados HTTP enviados desde el cliente al servidor. La memoria caché también se integra con el controlador en modo kernel Http.sys, lo que mejora el rendimiento.

Cuándo usar el almacenamiento en caché de salida

Los contenidos web pueden dividirse en dos categorías principales: contenidos estáticos y contenidos dinámicos.

  • El contenido estático no cambia de solicitud a solicitud. El contenido que se devuelve al explorador web siempre es el mismo. Algunos ejemplos de contenido estático incluyen archivos HTML, JPG o GIF.
  • El contenido dinámico es la salida que cambia con cada solicitud. Algunos ejemplos son ASP.NET o contenido PHP.

Entre estas dos categorías hay contenido semi-dinámico. Imagine una página de ASP.NET dinámica que ejecuta una consulta de base de datos. No hay ninguna razón para ejecutar esta consulta en cada solicitud si las tablas de base de datos subyacentes cambian con poca frecuencia.

IIS almacena automáticamente en caché el contenido estático (como páginas HTML, imágenes y hojas de estilos), ya que estos tipos de contenido no cambian de solicitud a solicitud. IIS también detecta cambios en los archivos al realizar actualizaciones e IIS vacía la memoria caché según sea necesario.

La característica de almacenamiento en caché de salida de IIS tiene como destino contenido semi-dinámico. Permite almacenar en caché las respuestas estáticas para las solicitudes dinámicas y aumentar la escalabilidad.

Tenga en cuenta que no todas las páginas dinámicas pueden aprovechar la memoria caché de salida. Las páginas altamente personalizadas (como las transacciones de comercio electrónico o carro de la compra) no son buenos candidatos porque es probable que la salida dinámica no se solicite repetidamente y la memoria usada para almacenar en caché el contenido se desperdiciaría. El contenido que se genera como resultado de una solicitud de tipo POST a un formulario HTML tampoco se puede almacenar en caché.

Los mejores candidatos para la caché de salida son páginas que generan datos dinámicamente, pero no es probable que cambien de solicitud a solicitud en función de la dirección URL o la información de encabezado. Por ejemplo, las aplicaciones de tipo galería de fotos que cambian dinámicamente el tamaño de las imágenes para mostrar en una página web son excelentes candidatas para la caché de salida, ya que el almacenamiento en caché de los datos guarda el servidor de tener que volver a procesar el cambio de tamaño de la imagen para cada solicitud. Otro buen ejemplo de un tipo de aplicación que puede aprovechar la característica de caché de salida es una aplicación de tics de stock.

Seleccionar una directiva de caché

IIS admite dos tipos de directivas de caché:

  • varyByQuerystring, en el que la dirección URL es la misma, pero el valor de la cadena de consulta varía.
  • varybyHeaders, que puede variar la memoria caché en función de los encabezados HTTP que se envían desde el cliente al servidor.

Invalidar la caché

Con el contenido dinámico, los datos pueden cambiar con frecuencia y debe vaciar la memoria caché, lo que permite recuperar y volver a almacenar en caché nuevos datos. Tenga en cuenta que, aunque los datos cambien cada segundo, puede ser útil almacenarlos en caché; un sitio puede recibir cientos de solicitudes por segundo o más, y el almacenamiento en caché puede reducir los viajes a la base de datos para recuperar datos, ahorrando trabajo extra al servidor Web y al servidor de la base de datos.

IIS admite dos maneras de invalidar el contenido dinámico:

  • Usar un período de tiempo de espera simple: la propiedad de configuración es CacheForTimePeriod.
  • Detectar un cambio en el recurso subyacente: la propiedad de configuración es CacheUntilChange. Use este tipo de esquema de invalidación solo cuando desee que la memoria caché se vacíe cuando cambie el recurso subyacente.

Configurar el valor de la caché

Incluso si habilita el almacenamiento en caché de salida, IIS no almacena inmediatamente en caché una solicitud. Debe solicitarse varias veces antes de que IIS considere que una solicitud es "digna de la memoria caché". La disponibilidad de la memoria caché se puede configurar a través de la sección ServerRuntime que se describe en el artículo Clase ServerRuntimeSection.

Dos propiedades determinan la valía de la memoria caché:

  • frequentHitTimePeriod
  • frequentHitThreshold

Una solicitud solo se almacena en caché si más que las solicitudes <frequentHitThreshold> de una dirección URL que se puede almacenar en caché llegan dentro de <frequentHitTimePeriod>. La configuración predeterminada de frequentHitTimePeriod es de 10 segundos. La configuración predeterminada de frequentHitThreshold es 2 visitas.

Configuración del almacenamiento en caché de salida mediante el administrador de IIS

La memoria caché es bastante fácil de configurar mediante la característica de interfaz de usuario en la nueva herramienta de administración de IIS.

  1. En el menú Inicio, haga clic en Herramientas administrativas y luego en Administrador de Internet Information Services (IIS).

  2. En la vista de árbol del lado izquierdo, busque la aplicación.

  3. Seleccione el elemento de menú Almacenamiento en caché de salida.

  4. En la columna derecha, haga clic en Agregar en el menú Acción. Puede agregar la regla de almacenamiento en caché de salida aquí.

  5. En el campo Extensión de nombre de archivo, por ejemplo, escriba .phpy luego seleccione Almacenamiento en caché en modo de usuario.

  6. Haga clic en Avanzadas y luego active la casilla Variable(s) de cadena de consulta.

  7. Escriba las variables adecuadas en el cuadro de texto Variable(s) de cadena de consulta.

    Captura de pantalla del cuadro de diálogo Agregar regla de caché, la página Almacenamiento en caché de salida y la regla de caché de salida avanzada Configuración.

    Figura 1: Ejemplo de almacenamiento en caché de salida

Configuración del almacenamiento en caché de salida a través del archivo Web.config

También puede configurar la característica de almacenamiento en caché en el archivo Web.config local, que se encuentra en el directorio de contenido. A continuación se muestra un ejemplo de la configuración necesaria para una página de ShowStockPrice.asp con un parámetro varyByQueryString de * (lo que significa almacenar en caché todas las variaciones únicas de los parámetros de cadena de consulta) y un tiempo de espera de 1 segundo.

<configuration> 
     <location path="showStockPrice.asp">     
       <system.webserver>        
         <caching>         
           <profiles>
             <add varybyquerystring="*"location="Any"
               duration="00:00:01" policy="CacheForTimePeriod"            
               extension=".asp">
           </profiles>
         </caching>
       </system.webserver>
     </location>
</configuration>

Si desea almacenar en caché estos datos en el kernel para un rendimiento aún más rápido, solo tiene que cambiar el atributo de directiva a kernelCachePolicy.

Nota:

Microsoft ASP.NET ya incluye una característica de caché de salida; La característica de caché de salida de IIS funciona en paralelo con la memoria caché de ASP.NET y funciona para todos los tipos de aplicaciones.

Comprobar contadores de rendimiento

Para ver el rendimiento en la caché de salida, puede ver los contadores de caché de salida en el monitor de confiabilidad y rendimiento.

  1. En el menú Inicio, haga clic en Herramientas administrativas y luego haga clic en Monitor de confiabilidad y rendimiento. (En Windows Vista® o Windows® 7, las herramientas administrativas se encuentran en el Panel de control).
  2. Seleccione Monitor de rendimiento en la vista de árbol de la derecha y luego haga clic + en la barra de herramientas.
  3. Vaya al contador Caché del servicio web y luego haga clic en él para abrirlo.
  4. Agregue el contador Total de URI almacenados en caché.

Si ejecuta una prueba de rendimiento, puede ver que el número de URI almacenados en caché aumenta con el número si solicita elementos.

Uso del almacenamiento en caché en modo kernel

La caché de salida de IIS admite dos directivas de caché:

  • Directiva de caché de salida en modo usuario, que utiliza una caché que reside en un proceso trabajador de IIS.
  • Directiva de caché en modo kernel, que usa una caché que reside en Http.sys, un controlador en modo kernel.

El almacenamiento en caché del contenido en modo kernel le permite acelerar el rendimiento del sitio web. Puede encontrar un ejemplo de uso del almacenamiento en caché en modo kernel en el artículo Almacenamiento en caché de salida de IIS.

Tenga en cuenta que hay dos diferencias significativas entre el modo de usuario y la caché de salida del modo kernel.

  • La caché de salida en modo kernel no admite módulos y características que deben ejecutarse en modo de usuario, como la autenticación o la autorización. Por ejemplo, si se habilitan esquemas de autenticación como la autenticación básica o la autenticación de Windows®, la directiva de caché no funciona. El contenido se sirve pero no se almacena en caché. Puede encontrar más detalles sobre por qué es posible que las respuestas no se almacenen en caché en modo kernel en este artículo de Knowledge Base.
  • La caché de salida en modo kernel admite el atributo varyByHeaders, pero no varyByQuerystring.

Solución de problemas de almacenamiento en caché

El almacenamiento en búfer de eventos de solicitud con error (FREB) es la mejor manera de averiguar si la solicitud se almacena en caché o no; También puede averiguar por qué una solicitud no se almacena en caché. Por ejemplo, el evento HTTPSYS_CACHEABLE en un registro FREB puede avisarle que una solicitud no se almacena en caché porque la caché en modo kernel no está habilitada.

El siguiente comando se puede usar para averiguar qué contenido se almacena en caché en modo kernel:

netsh http show cachestate

Puede establecer la caché de salida para almacenar en caché solo la página predeterminada (la página solicitada con más frecuencia):

  1. Cree un archivo llamado default.aspx en el directorio %systemdrive%\inetpub\wwwroot\< de su aplicación> y agregue el siguiente código:

    <%=DateTime.Now%>
    
  2. En el menú Inicio, haga clic en Herramientas administrativas y luego en Administrador de Internet Information Services (IIS).

  3. Use la vista de árbol en el lado izquierdo para ir a la aplicación.

  4. Haga clic en Vista de contenido en la parte inferior de la página.

  5. Seleccione el documento predeterminado (por ejemplo, página Default.aspx).

  6. En el menú Acciones de la derecha, haga clic en Cambiar a la vista de características. Todas las opciones que configure ahora solo se aplican al documento predeterminado.

  7. Abra la configuración Reglas de almacenamiento en caché de salida.

  8. Agregue .aspx como extensión de archivo.

  9. Seleccione Almacenamiento en caché en modo kernel, seleccione En intervalos de tiempo, habilite Supervisar archivos almacenados en caché y luego escriba un intervalo de tiempo, como 00:00:30.

  10. Vaya a http://localhost//<your application> con Windows® Internet Explorer®. Al actualizar constantemente la página (presione Ctrl+F5 para asegurarse de que no está usando la caché del explorador), verá que el tiempo no cambia durante 30 segundos.

Nota:

Este artículo se basa en la información del artículo "Almacenamiento en caché de salida de IIS 7 para contenido dinámico: acelerar las aplicaciones ASP y PHP" de Bill Staples, publicado el 2 de mayo de 2007.

Consulte también