Olá pessoal,
Algumas pessoas me perguntam como melhorar o desempenho de uma aplicação rodando no Microsoft Azure. Existem várias possibilidades de otimização, uma delas é o uso de cache, fazendo com que a aplicação diminua a latência no acesso aos dados e consequentemente tenha um melhor tempo de resposta ao usuário.
O primeiro passo no uso do cache é a criação de uma instância do serviço de cache (no momento que este post foi escrito o serviço estava em preview). Para isso, selecione o botão New, em seguida Data Services, Cache, Quick Create e forneça o endpoint que o cache será acessado, a região que o serviço ficará localizado e o seu tamanho, que pode variar entre 128MB até 150GB.
Image may be NSFW.
Clik here to view.
Depois do cache criado, o processo de criação pode levar alguns minutos para ser concluído, o próximo passo é utilizar o cache. Em um projeto ASP.NET no Visual Studio, vc pode adicionar referências aos componentes de cache via NuGet, pesquisando por Windows Azure Cache.
Image may be NSFW.
Clik here to view.
Além de instalar todas as referências, o NuGet também faz algumas modificações no arquivo web.config, facilitando bastante o uso do cache. Vc deve informar o endpoint do serviço de cache, no formato <Nome>.cache.windows.net, substituindo o conteúdo [Cache role name or Service Endpoint] do elemento autoDiscover. Vc encontra o endereço do endpoint no dashboard do serviço de cache:
Image may be NSFW.
Clik here to view.
O próximo passo é fornecer a chave de acesso para autenticação do cache. Para isso, descomente a sessão secutiryProperties do web.config e forneça a chave de acesso, substituindo o texto [Authentication Key]. A chave de acesso pode ser encontrada através da opção Manage Keys do portal de gerenciamento:
Image may be NSFW.
Clik here to view.
Finalmente, o próximo passo é utilizar o cache no código da sua aplicação. O primeiro passo é criar um objeto da classe DataCache, disponível no namespace Microsoft.ApplicationServer.Caching. Se o construtor padrão for utilizado uma conexão com o cache padrão será criada.
O cache possui vários métodos para interagir com o seu conteúdo, mas um padrão bastante comum utilizado é o Cache-Aside, onde ser verifica se o conteúdo já existe no cache, se não existir deve-se buscar o conteúdo no repositório de dados, em seguida adicionar o conteúdo no cache e depois retornar, conforme diagrama abaixo:
Image may be NSFW.
Clik here to view.
Criei um projeto padrão ASP.NET MVC no Visual Studio 2013 e modifiquei o método About do controller HomeController para utilizar o cache. No método GetAboutMessageFromRepository, faço um Thread.Sleep de 10 segundos para simular a demora de uma consulta complexa em um banco de dados:
public ActionResult About()
{
ViewBag.Message = GetAboutMessage();
return View();
}
private static string GetAboutMessage()
{
const string AboutMessage = "AboutMessage";
DataCache cache = new DataCache();
object aboutMessage = cache.Get(AboutMessage);
if (aboutMessage == null)
{
aboutMessage = GetAboutMessageFromRepository();
cache.Add(AboutMessage, aboutMessage);
}
return aboutMessage.ToString();
}
private static string GetAboutMessageFromRepository()
{
Thread.Sleep(10000);
return "Your application description page.";
}
Nos próximos posts pretendo detalhar um pouco a classe DataCache, com seus principais métodos, como controlar a expiração de conteúdo e também como utilizar o cache integrado com o ASP.NET para controlar sessão e o output cache das páginas.
Abs.,
RG
Image may be NSFW.Clik here to view.