Como gerenciar a expiração de conteúdo do blob
Atualizado: março de 2011
O valor de armazenar em cache blobs no Windows Azure CDN é percebido quando o conteúdo é entregue a partir do cache de borda CDN; portanto, o conteúdo solicitado apenas uma vez durante o tempo de vida útil do blob não apresentará melhorias de desempenho com o cache de borda. Os blobs que mais se beneficiam do armazenamento em cache são aqueles acessados com frequência no seu tempo de vida útil.
O tempo de vida útil especifica que o blob deve ser armazenado em cache por esse período no CDN antes de ser atualizado pelo serviço de Blob. O CDN tenta atualizar o blob do serviço de Blob somente após decorrido o tempo de vida útil.
Você tem duas opções para controlar a frequência de atualização do conteúdo de blob armazenado em cache:
-
Você pode definir explicitamente a propriedade x-ms-blob-cache-control em uma solicitação Put Blob, Put Block List, or Set Blob Properties ou utilizar a biblioteca gerenciada do Windows Azure para definir a propriedade BlobProperties.CacheControl. A definição desta propriedade estabelece o valor do cabeçalho Cache-Control para o blob. O valor do cabeçalho ou a propriedade deve especificar o valor apropriado em segundos. Por exemplo, para definir o período máximo de cache como um ano, você pode especificar o cabeçalho de solicitação como
x-ms-blob-cache-control: public, max-age=31556926. Para obter detalhes sobre como definir cabeçalhos de cache, consulte a Especificação de HTTP/1.1. -
Você pode contar com a heurística padrão da rede de cache, em vez de definir um valor de cache explicitamente. Por padrão, o CDN determina a atualização, inferindo de uma taxa baseada na hora da última modificação do blob armazenado em cache, que corresponde à hora da última modificação do blob no momento em que ele foi armazenado em cache. Quanto mais tempo o conteúdo do blob permanecer na origem sem modificação, maior será o tempo de armazenamento do blob em cache no CDN sem verificação de atualizações de conteúdo na origem. Supõe-se que um blob que não tenha sido modificado por um certo período tenha grande probabilidade de permanecer inalterado por um intervalo mais longo do que um blob modificado mais recentemente.
No momento, a atualização de um blob é calculada como 20% do intervalo entre o momento presente e a hora da última modificação, até um intervalo máximo de 72 horas. Por exemplo, um blob cuja hora da última modificação foi 30 minutos atrás será considerado atualizado por seis minutos no cache do CDN. Depois que o blob for armazenado em cache por seis minutos, na próxima solicitação do blob armazenado em cache, o CDN verificará o blob na origem com uma solicitação condicional de rearmazenar em cache o blob se ele tiver sido modificado desde que seu último armazenamento em cache.
Se 20% do intervalo entre a hora presente e a hora da última modificação for maior que o intervalo máximo de 72 horas, após decorridas 72 horas, o CDN verificará o blob na origem com uma solicitação condicional da próxima vez que o blob for acessado. Por exemplo, se a hora da última modificação de um blob for 30 dias atrás, o CDN marcará o blob para uma verificação de atualização no próximo acesso após 72 horas, e não depois de 6 dias (como um intervalo de 20% sugeriria se não existisse um valor máximo).
Observe que as heurísticas padrão só se aplicam quando o período de cache não foi especificado explicitamente usando a propriedade x-ms-blob-cache-control ou a propriedade BlobProperties.CacheControl.
Observação: |
|---|
| O cálculo de atualização descrito aqui não fornece uma garantia quanto ao momento em que determinado blob armazenado em cache será atualizado. O cálculo de atualização e o intervalo máximo descritos aqui podem estar sujeitos a alterações futuras pelo Windows Azure. |
Qualquer conteúdo que você queira armazenar em cache pelo CDN deverá ser armazenado em sua conta de armazenamento do Windows Azure como um blob publicamente acessível. Para obter mais detalhes sobre o serviço de Blob do Windows Azure, consulte Blob Service Concepts.
Há alguns modos diferentes para trabalhar com conteúdo no serviço de Blob:
-
Usando a API gerenciada fornecida pelo Windows Azure Managed Library Reference.
-
Usando a ferramenta GUI gratuita baseada na web myAzureStorage.
-
Usando uma ferramenta de gerenciamento de armazenamento de terceiros.
-
Usando o REST API de serviços de armazenamento do Windows Azure.
O exemplo de código a seguir é um aplicativo de console que usa a biblioteca gerenciada do Windows Azure para criar um contêiner, definir suas permissões para o acesso público e criar um blob dentro do contêiner. ele também especifica explicitamente um intervalo de atualização desejado, definindo o cabeçalho Cache-Control no blob. Esta etapa é opcional – Você também pode contar com a heurística padrão descrita em Visão geral do Windows Azure CDN.
Supondo que você habilitou o CDN conforme mostrado acima, o blob que é criado será armazenado em cache pelo CDN. Especifique suas credenciais de conta usando sua própria conta de armazenamento e tecla de acesso:
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();
}
}
}
Teste se seu blob está disponível pela URL específica de CDN. Para o blob mostrado acima, a URL seria semelhante ao seguinte:
http://az1234.vo.msecnd.net/cdncontent/testblob.txt
Se desejar, você poderá usar uma ferramenta como o wget ou o Fiddler para examinar os detalhes da solicitação e resposta.
Observação: