Publicação

Windows Azure: Entendendo o conceito de "Storage"

foto de
Fabrício Sanchez CONTEÚDO EM DESTAQUE

Este é o terceiro artigo da série sobre Windows Azure. No primeiro artigo da série, apresentamos uma visão geral da plataforma. No segundo, apresentamos o conceito de compute e hoje você será apresentado ao ambiente de armazenamento ( #Storage ) do Windows Azure. Você pode encontrar os primeiros artigos da série seguindo este link .

Introdução

Storage em português brasileiro pode ser traduzido como “armazenamento”.

Quando se fala em storage no ambiente on-premisses , nos vem a cabeça imediatamente a imagem de um (ou conjunto de) dispositivo(s) com diversos discos rígidos de alta performance dedicados exclusivamente para este fim (armazenar dados). Estas estruturas dedicadas de armazenamento são de fundamental importância em um ambiente de datacenter pois elas garantem (ou pelo menos deveriam) a acessibilidade das informações aos sistemas e, em nível mais alto, para os usuários finais.

O modelo de armazenamento mencionado anteriormente é, de forma geral, o mais aceito entre as empresas. Esta ampla adoção se dá basicamente por dois aspectos principais:
  1. Há bem pouco tempo não existia uma forma mais eficiente para se armazenar grandes massas de dados das empresas (ao mencionar dados, me refiro a todo tipo de informação passível de armazenamento através de um computador).
  2. Nos dias atuais, mesmo com o advento de novos modelos para realizar esta tarefa (como o de nuvem pública, por exemplo) a ideia de persistir os dados em seus domínios é mais atrativa para as empresas de forma geral. Porque? Este modelo passa a ideia de que os dados estão “seguros”.
Que os dados são o maior bem que as empresas possuem e que portanto, em função disso, devem estar armazenados de forma segura, isso ninguém discute. Neste ponto, uma pergunta se mostra pertinente: Qual a relação custo/benefício em se manter dados on-premisses ? A seguir apresento alguns pontos a serem considerados antes de respondermos à esta pergunta.
  1. Dispositivos dedicados a realização de storage em geral possuem um alto custo. Na casa dos milhares de reais.
  2. Para manter a “boa saúde” dos dispositivos de armazenamento, é de fundamental importância que o ambiente físico onde estes encontram-se inseridos esteja bem estruturado: cabeamento adequado, energia elétrica constante, temperatura ambiente adequada, etc. Manter esta infraestrutura possui um custo muito alto.
  3. Para garantir a segurança e a alta disponibilidade das informações, é preciso que existam softwares dedicados para realizar operações como: espelhamento, balanceamento de carga, etc. Mais elementos de alto custo adicionados ao cenário.
  4. A manutenção do sistema de armazenamento, demanda monitoramento e a implementação de diversas rotinas de forma constante. Surge então a necessidade de um ou mais profissionais para realizar este gerenciamento. Mais um alto custo para o processo.
Existem ainda outros elementos que poderiam ser mencionados neste contexto, entretanto, estes são os principais. Diante disso, uma nova pergunta deve obrigatóriamente ser realizada: após todos estes investimentos, meus dados estarão 100% seguros e disponíveis? Infelizmente a resposta é “não”. Por melhor que seja a infraestrutura de sua empresa, ela não é tão resiliente quanto necessária.

Neste texto, apresento uma alternativa interessante em relação ao armazenamento de informações que disponibiliza melhor custo/benefício, alta-disponibilidade (99,95%) e alto nível de segurança. Este novo modelo é baseado em cloud computing (nuvem pública) através da plataforma da Microsoft para este fim – o Windows Azure.

Windows Azure Storage

Windows Azure oferece um ambiente completo para armazenamento de todos os tipos de informações: dados relacionais, imagens, vídeos, áudios, PDF's, etc. Neste texto iremos explorar os conceitos relacionados a este ambiente para que, ao final, você possa estar apto a identificar as vantagens do mesmo e aplicar a seu modelo de negócio.

A beleza do modelo de computação em nuvem encontra-se no fato de o usuário poder utilizar um ambiente robusto para dados e aplicações sem se preocupar com aspectos técnicos de nível mais baixo (entenda-se administração e manutenção de hardware , etc.). O modelo de armazenamento do Windows Azure segue esta premissa e portanto, ao receber seus dados, a plataforma cuidará de torná-los altamente disponíveis e seguros.

A Figura 1 apresenta uma visão geral do esquema de armazenamento proporcionado pelo Windows Azure.
Figura 1 . O modelo de armazenamento disponibilizado pelo Windows Azure

Como é possível observar na Figura 1, Windows Azure realiza o armazenamento das informações através de três mecanismos primários: Blobs , Tables e Queues . Cada um destes mecanismos possui características próprias que devem ser observadas  cuidadosamente ao projetar a aplicação que será executada na plataforma. A seguir descrevemos cara um destes mecanismos.

Blobs

Para organizar o armazenamento de arquivos (de todos os tipos) em nossos computadores, a técnica mais comumente utilizada é: agrupar estes arquivos em diretórios, certo?! Assim, se você deseja agrupar todos os artigos que você encontra web a fora para facilitar seus estudos, o que você provavelmente fará é: criará uma pasta "Artigos" e em seguida, os enviará para seu interior.

Windows Azure segue a mesma ideia (lembrando que estamos falando de um ambiente de nuvem no modelo PaaS e portanto, com suas possíveis limitações). Se forçarmos uma equivalência entre as abordagens, podemos dizer que um container no Windows Azure equivale a um diretório no sistema de arquivos tradicional de um computador pessoal. Assim, um container "Imagens" contém o blob que poderá hospedar em seu interior arquivos nos formatos de imagens, por exemplo.

O exemplo do parágrafo anterior (um container "Imagens") é pertinente para tornar a ideia de como os blobs funcionam mais clara pois, sistemas de forma geral gerenciam imagens. No Windows Azure o gerenciamento de imagens por parte do sistema poderia ser realizado de duas formas: através de bancos de dados relacionais, através de armazenamento local ou através de blobs . Evidentemente que a melhor escolha dentre as três abordagens para realizar operações desta natureza é o blob, já que este possui performance superior e foi projetado especificamente para o trabalho com estes arquivos.

Figura 2 . O modelo de armazenamento dos blobs
  1. Para que uma aplicação possa gozar dos benefícios proporcionados pelos blobs , é preciso que uma conta de armazenamento seja criada e esteja ativa (veremos o passo-a-passo de como criar e configurar uma conta de armazenamento em um artigo futuro nesta mesma série).
  2. Após ter a conta criada (na Figura 2 representada pela primeira coluna da esquerda), o ambiente está pronto para a criação de quantos containers forem necessários (lembrando que um container pode ser comparado a um diretório tradicional). Na Figura 2 temos os containers estruturados na segunda colunda da esquerda para direita.
  3. Os containers agrupam os arquivos através dos blobs . Os arquivos de fato (entenda-se fisicamente) encontram-se hospedados nos blobs, assim, cada blob pode hospedar diversos arquivos em diversos formatos (terceira coluna na Figura 2).
A quarta coluna apresentada pela Figura 2 ilustra uma das metodologias utilizadas internamente pelo Windows Azure para armazenar fisicamente um arquivo através de um blob - os blocks . Quando a plataforma utiliza esta metodologia , o arquivo é dividido em n blocos de mesmo tamanho. Muito embora este modelo seja performático ele possui uma limitação básica: o acesso ao arquivo não pode ser realizado de forma não linear. Se for preciso o acesso não linear há determinado arquivo, a abordagem a ser utilizada pelo Windows Azure deve ser " page ". A diferença básica de pages para blocks é que pages são blocos únicos de acesso não linear.

Tables

Outro modelo de armazenamento de dados disponível no Windows Azure é o chamado " Azure Tables ". A ideia básica deste modelo consiste em se proporcionar um ambiente estruturado na forma de tabelas que agrupam objetos sem estrutura definida (algo muito semelhante ao que se faz com NoSQL ). A ideia é que estas estruturas distintas encontrem-se armazenadas em tabelas onde, cada linha corresponde a um novo objeto e cada coluna corresponda as propriedades deste objeto.

É importante observar que, muito embora o Windows Azure utilize o nome tables para este recurso, em sua essência ele em nada tem a ver com o modelo relacional de dados já conhecido dos bancos de dados relacionais. Diferentemente, a ideia com Azure Tables é a de persistir entidades (estados de objetos) que estão contidas em tabelas. Assim, uma tabela pode conter n entidades sendo que, cada entidade agrupa suas instâncias que, por sua vez, possui seus atributos intrínsecos, conforme ilustrado pela Figura 3.

Figura 3 . O modelo de armazenamento proporcionado pelo Azure Tables

Alguns aspectos importantes em relação ao Azure Tables é:
  • Informações adicionais : cada tabela do Azure Tables pode conter tamanho máximo de 1 MB e cada entidade não poderá conter mais que 252 propriedades (além das três primárias que mencionaremos a seguir).
  • Chave primária : muito embora o modelo de Tables seja conceitualmente diferente do modelo relacional de dados (principalmente no que tange a possibilidade de se relacionar entidades) as entidades de uma tabela no Azure Tables possuem chave primária entretanto, a composição dessa chave primária é realizada através da união de duas propriedades chave, as quais descrevo a seguir:
    • PartitionKey : primeiro elemento a compor a chave primária da entidade, esta propriedade deve obrigatoriamente carregar um valor é utlilizada para gerenciar a distribuição dos dados ao longo de muitas instâncias de armazenamento. Seu tipo é string.
    • RowKey : também do tipo string , esta propriedade é o segundo componente da chave primária da entidade. Este elemento tem a função de definir um código identificador para o elemento.
  • TimeStamp : elemento utilizado para armazenar a última modificação na instância. Propriedade do tipo DateTime .
  • Tipos de propriedades suportados : Windows Azure Tables suportam alguns tipos de dados nativamente para a implementação de propriedades. São eles: Binário ( Binary ), Boleano ( Bool ), Data e Tempo ( DateTime ), Ponto Flutuante ( Double ), Identificador (GUID), Interiro ( Int ), Longo ( Long ) e Texto ( String ).

Queues

Queue (em português "Fila") é outro dos recursos de armazenamento disponibilizados pela plataforma Azure.
As filas possuem a capacidade de armazenar mensagens em formato de texto ( string ). A ideia aqui é disponibilizar um modelo de armazenamento seguindo o padrão FIFO ( First In, First Out - O primeiro que entra é o primeiro que sai). Cada elemento da fila tem a capacidade de armazenar uma mensagem em formato texto. Se após a utilização da mensagem, o sistema consumidor não mais precisar utilizá-la, este deve destruí-la. Caso não o faça, o elemento com a mensagem volta para o fim da fila para ser processada novamente.

Filas são amplamente utilizadas no Windows Azure para implementar o baixo acoplamento. De forma geral, os sistemas utilizam as filas para trocar mensagens entre os diferentes modelos de computação possíveis, assim, é possível que uma aplicação que executa determinado módulo em uma worker role possa trocar mensagens com outro módulo que executa em uma web role , por exemplo.

Figura 4 . O modelo de armazenamento baseado em fila

Em artigos futuros nesta mesma série, apresentarei a utilização prática de filas com Windows Azure.

Aspectos finais

Algunas aspectos importantes em relação ao modelo de armazenamento proporcionado pelo Windows Azure são:
  • Qualquer linguagem pode realizar o acesso aos recursos de armazenamento do Windows Azure, já que a plataforma os disponibiliza via REST.
  • Se você utilizar a plataforma .NET para construir a aplicação que será executada na nuvem, você poderá utilizar um pacote de desenvolvimento que encapsula o modelo REST, a saber Windows Azure SDK .
  • Windows Azure ainda oferece recursos para desenvolvimento de aplicações para nuvem para as seguintes linguagens:
Por hoje é só. Até o próximo!

Comentários