Etiquetas

, , , ,

SharePoint utiliza varias técnicas para realizar el cacheado de objetos y así reducir las idas y vueltas entre los servidores frontales y los servidores de base de datos.  En este primero artículo hablaremos sobre el BLOB Cache que es un sistema utilizado por SharePoint para almacenar en el servidor frontal una copia de datos u objetos que son requeridos por los usuarios y sus peticiones http y por lo tanto evitar los viajes de ida y vuelta hacia el servidor de base de datos evitando la latencia y consumo de recursos de red que esto implica.

El BLOB Cache funciona en cada uno de los servidores frontales de una granja de SharePoint y crea copias de recursos utilizados por las páginas web solicitadas como archivos CSS, JavaScript e imágenes de esta forma si estos archivos no existen en la cache SharePoint va por ellos al servidor de base de datos si los mismos se encuentra almacenados en bibliotecas pero una vez cacheados los objetos en las sucesivas peticiones de los usuarios estos objetos son servidos directamente desde el servidor frontal sin tener que realizar viajes al servidor de SQL Server.  Como dije antes esto ocurre siempre que los archivos (CSS, JavaScript, imágenes, archivos multimedia, etc) estén almacenados en una biblioteca sin embargo si los archivos están por ejemplo en la carpeta _layout estos puedes ser servidos directamente desde el servidor frontal, sin embargo desplegar los archivos en la carpeta _layout impide la actualización del contenido por parte de los usuarios y por otra parte hace necesario la actualización  en cada servidor frontal. Aquí podemos ver que siempre los activos que queramos desplegar no requieran de la actualización o aprobación del usuario deberíamos desplegarlos en por ejemplo el directorio _layout y así evitar leer de la base de datos.

Una desventaja del BLOB Cache es que la primera vez que un contenido necesita ser buscado en el servidor de base de datos para cachearlo esta ida y vuelta al servidor tardara mucho más (alrededor de 5 veces más) de lo que tardaría sino estuviera habilitado el BLOB Cache, esto se debe a que esta primera vez SharePoint necesita obtener toda la información referida a la seguridad del objeto que va a cachear y así controlar el acceso al mismo.  Por esta razón no es buena idea utilizar BLOB Cache sobre objetos que se actualicen con demasiada frecuencia ya que terminaría siendo bastante contraproducente a nivel de rendimiento.

Veamos algunos detalles en cuanto al BLOB Cache:

  • Los archivos se guardan en disco pero SharePoint mantienen en RAM un índice a los archivos cacheados
  • El BLOB Cache se puede configurar para tipos de archivos en concreto
  • El BLOB Cache se configura para cada aplicación web
  • Por defecto el servidor frontal revisa cada 5 minutos si existe algún cambio en los archivos cacheados, si existen cambios descarta los archivos y los cachea en la próxima petición.
  • En algunos casos la devolución de archivos más pequeños podría tardar más que la de archivos de mayor tamaño debido a que para archivos grandes SharePoint empieza a devolver el contenido a medida que va leyendo del servidor SQL Server, esto es muy útil en el consumo de videos, sin embargo no hace los mismo para archivos pequeños.
  • Se usan 800 bytes de RAM por objeto cacheado, importante a considerar para que nuestra aplicación escale eficientemente.
  • Se puede evitar la tardanza de la primero consulta al servidor  SQL Server configurando la biblioteca con la propiedad AllowEveryoneViewItems igual a True. Las carpetas Images y Site Collection Images ya vienen configuradas de esta manera de esta forma el servidor frontal no necesita obtener toda la información referente a la seguridad de los objetos ya que son visibles para todos los usuarios.

Por defecto el BLOB Cache viene deshabilitado pero se puede habilitar a través del web config incluyendo:

<BlobCache location="<location>" path="<files to be cached>" maxSize="10" enabled="true" />

Ejemplo:

<BlobCache location="C:\BlobCache\14" path="\.(gif|jpg|jpeg|jpe|jfif|bmp|dib|tif|tiff|ico|png|wdp|hdp|css|js|asf|avi|flv|m4v|mov|mp3|mp4|mpeg|mpg|rm|rmvb|wma|wmv)$" maxSize="10" enabled="true" />

Para borrar la cache podemos ejecutar el siguiente comando de PowerShell

$webApp = Get-SPWebApplication "<http://your web application url>"
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlobCache($webApp)

Por ultimo dejo algunos enlaces a la msdn donde pueden obtener mayor información sobre la configuración y arquitectura de la BLOB Cache.

 Plan for caching and performance (SharePoint Server 2010)

Almacenamiento en memoria caché basada en disco de objetos binarios grandes