Mais Patterns para o Azure

Se o Azure não nos dá um coordenador de transações e a Tabela do Azure só suporta isolamento do tipo snapshot dentro de uma mesma partição, não existe como garantir consistência entre tabelas, certo? Não.

É possível assegurar consistência usando algoritmos similares ao que o banco de dados faz de graça para nós. O Banco realiza isto usando o famoso arquivo de Log, que é usado para o caso de desfazimento (ou retry) de uma operação. No caso do Azure, teremos que simular este processamento.

O artigo Tabelas do Windows Azure mostra um exemplo de tratamento na sessão Consistência entre Tabelas. Não é o melhor dos exemplos, mas é um exemplo factível: para deletar uma associação pai filho, colocamos a ordem de deleção numa fila. O processo que lê a fila deve então marcar a entidade pai para não ser mais lida e, em seguida, trata de matar as entidades filhas. Por fim, deleta de vez a entidade pai e remove o pedido da fila. Se houver uma falha na máquina em que este processo está rodando, a mensagem volta a ficar visível, e quando o processo de deleção voltar ao ar ele continuará a deleção de onde parou. Como vocês podem ver, aqui a fila faz o papel do arquivo de log no Banco de Dados.

(quem quiser saber como funciona internamente um banco de dados, compre e leia o livro Transaction Processing: Concepts and Techniques – o livro é caro e longo mas, em minha opinião, é um dos melhores livros no assunto. IMPORTANTE: é um livro para quem quer saber como FAZER um Banco de Dados)

Vale a pena uma leitura com calma deste artigo e do artigo sobre blobs também. Para quem preferir as versões doc em inglês, você pode encontrá-los aqui e aqui.

Outra dica: a Microsoft Research está com um excelente site sobre melhores práticas com o Azure, mostrando inclusive gráficos com tempos de acesso em estruturas de dados e outras medições. No exemplo abaixo você vê alguns dos diagramas sobre leitura de Tabelas Azure contidos neste site.

image

Um must para quem quer desenvolver aplicações para Azure.

Abraços