Cómo administrar la expiración de contenido de blob
Actualizado: marzo de 2011
El valor del almacenamiento en caché de los blobs en la red de entrega de contenido (CDN) de Windows Azure se aprecia cuando el contenido se entrega desde la memoria caché perimetral de la red CDN, de modo que el contenido solicitado una sola vez durante el período de vida del blob no disfruta de las mejoras de rendimiento del almacenamiento en caché perimetral. Los blobs que más se benefician del almacenamiento en caché son aquellos a los que se tiene acceso con frecuencia durante su período de vida.
El período de vida especifica que el blob debería estar almacenado en caché durante ese tiempo en la red CDN antes de actualizarse a través del servicio de blob. Una vez que el período de vida ha transcurrido, la red CDN intenta actualizar una sola vez el blob desde el servicio de blob.
Tiene dos opciones para controlar la frecuencia con la que se actualiza el contenido de blob almacenado en caché:
-
Puede establecer explícitamente la propiedad x-ms-blob-cache-control en una solicitud Put Blob, Put Block List o Set Blob Properties, o bien usar la biblioteca administrada de Windows Azure para establecer la propiedad BlobProperties.CacheControl. Al establecer esta propiedad, se establece el valor del encabezado Cache-Control para el blob. El valor del encabezado o la propiedad debería especificar el valor correcto, expresado en segundos. Por ejemplo, para establecer el período de almacenamiento en caché máximo en un año, puede especificar el encabezado de la solicitud como
x-ms-blob-cache-control: public, max-age=31556926. Para obtener información detallada sobre cómo establecer los encabezados de almacenamiento en caché, vea la especificación HTTP/1.1 (puede estar en inglés). -
Puede confiar en la heurística predeterminada de la red de caché en lugar de establecer un valor de almacenamiento en caché explícitamente. De forma predeterminada, la red CDN deduce el grado de actualización de la hora de la última modificación del blob en caché, que es la hora de la última modificación del blob en el momento en el que se almacenó en caché. Cuanto más largo sea el período durante el cual no se haya modificado el contenido del blob en el origen, más tiempo almacenará en caché la red CDN el blob sin comprobar en el origen las actualizaciones de contenido. La hipótesis es que es probable que un blob no modificado durante algún tiempo siga sin modificarse durante un intervalo mayor que un blob que se ha modificado más recientemente.
Actualmente, el grado de actualización de un blob se calcula como el 20% del intervalo entre la hora actual y la hora de la última modificación, hasta un intervalo máximo de 72 horas. Por ejemplo, un blob cuya hora de última modificación sea hace 30 minutos se considera actualizado durante seis minutos en la memoria caché de la red CDN. Una vez que el blob lleve almacenado en caché seis minutos, la red CDN, la próxima vez que se solicite el blob almacenado en caché, comprobará el blob en el origen, con una solicitud condicional para volver a almacenar en caché el blob si se ha modificado desde la última vez que se almacenó en caché.
Si el 20% del intervalo entre la hora actual y la hora de la última modificación es mayor que el intervalo máximo de 72 horas, una vez transcurridas 72 horas, la red CDN comprobará el blob en el origen con una solicitud condicional la próxima vez que se tenga acceso al blob. Por ejemplo, si la hora de la última modificación de un blob es hace 30 días, la red CDN marcará el blob para una comprobación de actualización en el siguiente acceso después de 72 horas y no después de 6 días (que sería el intervalo del 20% si no hubiese un valor máximo).
Observe que la heurística predeterminada solo se aplica en el caso en que el período de almacenamiento en caché no se ha especificado mediante la propiedad x-ms-blob-cache-control o la propiedad BlobProperties.CacheControl explícitamente.
Nota |
|---|
| El cálculo del grado de actualización que se describe aquí no proporciona ninguna garantía acerca de cuándo se actualizará un blob dado. El cálculo del grado de actualización y el intervalo máximo descritos aquí pueden estar sujetos a cambios futuros en Windows Azure. |
Cualquier contenido que desee almacenar en caché a través de la red CDN debe estar almacenado en su cuenta de almacenamiento de Windows Azure como un blob públicamente accesible. Para obtener información más detallada sobre el servicio de blob de Windows Azure, vea Blob Service Concepts.
Existen distintas maneras de trabajar con el contenido en el servicio de blob:
-
Se puede usar la API administrada proporcionada por Windows Azure Managed Library Reference.
-
Se puede usar la herramienta de GUI gratuita basada en web myAzureStorage.
-
Se puede usar una herramienta de administración de almacenamiento de otro fabricante.
-
Se puede usar la API REST de los servicios de almacenamiento de Windows Azure.
El siguiente ejemplo de código es una aplicación de consola que utiliza la biblioteca administrada de Windows Azure para crear un contenedor, establecer sus permisos para el acceso público y crear un blob dentro del contenedor. También especifica explícitamente un intervalo de actualización deseado; para ello, establece el encabezado Cache-Control en el blob. Este paso es opcional. También puede confiar en la heurística predeterminada que se describe en Información general de la red de entrega de contenido (CDN) de Windows Azure.
Suponiendo que ha habilitado la red de entrega de contenido tal como se ha explicado, la red CDN almacenará en caché el blob creado. Asegúrese de especificar las credenciales de la cuenta utilizando su propia cuenta de almacenamiento y clave de acceso:
using System;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
namespace BlobsInCDN
{
class Program
{
static void Main(string[] args)
{
//Specify storage credentials.
StorageCredentialsAccountAndKey credentials = new StorageCredentialsAccountAndKey("storagesample",
"m4AHAkXjfhlt2rE2BN/hcUR4U2lkGdCmj2/1ISutZKl+OqlrZN98Mhzq/U2AHYJT992tLmrkFW+mQgw9loIVCg==");
//Create a reference to your storage account, passing in your credentials.
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
//Create a new client object, which will provide access to Blob service resources.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//Create a new container.
CloudBlobContainer container = blobClient.GetContainerReference("cdncontent");
container.CreateIfNotExist();
//Specify that the container is publicly accessible.
BlobContainerPermissions containerAccess = new BlobContainerPermissions();
containerAccess.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(containerAccess);
//Create a new blob and write some text to it.
CloudBlob blob = blobClient.GetBlobReference("cdncontent/testblob.txt");
blob.UploadText("This is a test blob.");
//Set the Cache-Control header on the blob to specify your desired refresh interval.
blob.SetCacheControl("public, max-age=31536000");
}
}
public static class BlobExtensions
{
//A convenience method to set the Cache-Control header.
public static void SetCacheControl(this CloudBlob blob, string value)
{
blob.Properties.CacheControl = value;
blob.SetProperties();
}
}
}
Compruebe que su blob está disponible a través de la dirección URL específica de la red CDN. En el caso del blob mostrado anteriormente, la dirección URL sería similar a la siguiente:
http://az1234.vo.msecnd.net/cdncontent/testblob.txt
Si lo desea, puede utilizar una herramienta como wget o Fiddler para examinar los detalles de la solicitud y respuesta.
Vea también
Nota