Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Windows Azure: usando o Local Storage


Armazenamento de informações é algo bastante comum na maioria das aplicações.O Windows Azure fornece algumas formas de armazenamento de dados(Tables, Queues e Blobs, conhecidos como Azure Storage Services, que abordaremos mais pra frente) e um Local Storage que veremos agora.

Windows Azure Local Storage

Local Storage é uma área de armazenamento temporária. É um local de armazenamento temporário no filesystem.É muito importante que não armazenemos informações que sejam/necessite ser permanentes no Local Storage, pois elas não serão mantidas permanentemente.

Configurando Local Storage no Windows Azure

Cada role instance pode ter diversos Local Storages configurados. O tamanho limite depende do tamanho da máquina virtual associada a cada role.O tamanho mínimo para um Local Storage que seja definido é de 1MB.O Local Storage é configurado no arquivo de definição do serviço (um próximo post falará sobre o service model). Há duas maneiras de fazer isso: uma delas é pela interface integrada ao Visual Studio e a outra é através de arquivo .csdef.Veremos as duas maneiras para fazermos isso pois ambas são bastante simples.

Definindo Local Storage via XML

Para definir o Local Storage através do arquivo ServiceDefinition.csdef basta incluirmos o código abaixo dentro de webrole:

<localresources>  <localstorage name="LocalFiles" cleanonrolerecycle="false" sizeinmb="10" /></localresources>

É um código bastante simples. Definimos neste exemplo que teremos uma Local Storage, chamado LocalFiles. Que possui um tamanho de 10MB. O outro atributo, cleanOnRoleRecycle diz respeito a limpar o storage quando o role é reciclado, e isso pode ocorrer em caso de uma falha, um upgrade ou ainda quando você mesmo faça um recicle do role.Se quiséssemos definir mais de um stora bastaria adicionar uma outra linha com a definição, veja:

<localresources>  <localstorage name="LocalFiles" cleanonrolerecycle="false" sizeinmb="10" />  <localstorage name="LocalTextFiles" cleanonrolerecycle="false" sizeinmb="5" /></localresources>

Bem simples, não?

Definindo Local Storage via interface Visual Studio

Para realizarmos esta definição diretamente dentro do Visual Studio basta um duplo click sobre o role no projeto Azure, uma tela como a seguinte será aberta:Windows Azure Local Storage Visual Studio

Nesta aba podemos configurar os Local Storage que queremos. Podemos adicionar ou remover, e estas alterações serão refletidas no xml do arquivo ServiceDefinition.csdef.Definindo Windows Azure Local Storage Visual Studio

Acessando o Local Storage no Windows Azure

Acessar o Local Storage do Windows Azure é bastante simples. Precisamos apenas obter uma referência para o Storage e depois podemos utilizar normalmente as classes do System.IO, vejamos um simples exemplo abaixo:

public ActionResult Index(){
var storage = RoleEnvironment.GetLocalResource("LocalFiles");
var file = storage.RootPath + "fileText.txt";
if(!System.IO.File.Exists(file))    {        System.IO.File.WriteAllText(file, "Olá Azure Local Storage!" + DateTime.Now.Ticks);
    }
    ViewBag.FileContent = System.IO.File.ReadAllText(file);
return View();
    }

O único código diferente nesta listagem está na linha 3 onde chamamos o método GetLocalResource da classe RoleEnvironment informando o nome do Local Storage que definimos.Depois disso tudo que fazemos é verificar se um arquivo existe, e caso não exista criamos e depois exebimos seu conteúdo na View.Executei a aplicação em mais de um role, e como podemos ver abaixo apenas 2 arquivos são criados, um para cada role, e o load balancer decide qual role iremos acessar em cada request.Se ficarmos atualizando a página veremos os 2 valores dos arquivos se alternando.Acessando Windows Azure Local Storage

Acessando Windows Azure Local Storage2

Resumo

O Local Storage do Windows Azure pode ser um recurso muito útil para manter acesso rápido a alguns recurso, uma forma interessante de fazer um cache local por exemplo.Atenção! O Local Storage só pode ser acessado por uma única instância do Role, ou seja, cada role terá acesso ao seu Local Storage, não podendo compartilhar estas informações cross roles, desta forma não mantenha uma informação que precisa ser disponibilizada de forma compartilhada.Espero que tenham gostado.

Abraços, Vinicius Quaiato.

Voltar

Fork me on GitHub