Windows Azure - Entendendo o conceito "compute"
Este é o segundo artigo da série sobre Windows Azure. Iniciei a série há alguns dias com dois objetivos fundamentais: desmitificar a plataforma Azure e, através da apresentação de seus recursos, apresentar o valor agregado da plataforma para desenvolvedores e empresas que pensam em migrar seus ambientes. No primeiro artigo da série apresentei uma visão geral da ferramenta, disponibilizando uma rápida descrição sobre cada uma das features da plataforma Azure. Se você está chegando agora na série, recomendo fortemente a leitura do texto anterior a este. Hoje, discutiremos em maior profundidade o conceito de compute ou computing (como preferir) do Windows Azure. Ao final, você deverá estar apto a:
- Entender as diferenças entre os modelos de compute disponibilizados pela plataforma.
- Identificar o modelo de computação mais adequado para cada cenário.
- Ter a ideia de como funciona a escala horizontal proporcionada pelo Windows Azure.
Windows Azure e a ideia de compute
Em português brasileiro compute significa "computar" (faz sentido, não?!). Considerando o fato de que estamos nos referindo há um ambiente de computação em nuvem, em termos práticos, esta palavra pode assumir diversas conotações. Neste texto ampliaremos a escala do zoom acerca de compute na plataforma Azure. Falar em compute no contexto do Windows Azure é o mesmo que dizer "ambiente de execução", isto é, compute se refere as formas ou mecanismos disponibilizados pela plataforma e que possibilitam a execução das aplicações neste ambiente. Em termos de ambiente de execução, Windows Azure disponibiliza três modelos para realizar a "computação" das aplicações, a saber:- Web Roles
- Worker Roles
- Virtual Machine Roles (VM Roles)
Instâncias
O termo "instância" no contexto do Windows Azure significa "servidor virtual". Conforme mencionado no primeiro artigo da série, a plataforma Azure está distribuída ao longo de 8 datacenters ao redor do mundo e seus recursos são alocados de forma dinâmica utilizando o conceito de virtualização. Você pode encontrar um bom texto sobre virtualização seguindo este link . O Windows Azure disponibiliza através de uma infraestrutura resiliente e virtualizada o conceito de elasticidade. Assim, sua aplicação pode crescer conforme a demanda sem se preocupar com aspectos estruturais. O termo "elasticidade" significa que sua aplicação pode demandar quantas instâncias de servidores forem necessárias. O Windows Azure estará lá para disponibilizá-las. A Figura 1 apresenta um esquema gráfico representando as instâncias que acabamos de descrever. Figura 1 . Uma tarefa alocando quatro instâncias de servidores Existem diferentes configurações de instâncias disponíveis no Windows Azure. Você pode visualizar estas configurações e seus respectivos valores de computação no site oficial do produto, disponível neste link . A alocação do número de instâncias por Role pode ser realizada através do portal de administração do Windows Azure, através do arquivo de configuração das aplicações (falaremos destes arquivos futuramente nesta série) na realização do processo de deploy ou ainda, pelo código de sua aplicação (se esta possuir inteligência suficiente para realizar o auto scalling ). Não há limites quanto ao número de instâncias a serem utilizadas em uma Role e os recursos alocados podem ser desalocados a qualquer momento. Você deve estar ciente apenas de que, a cada nova instância alocada, um novo recurso será cobrado. Observação : para que o uptime de 99,95% seja garantido pela plataforma Azure (e para que sua aplicação entre em SLA), é preciso que a aplicação demande no mínimo duas instâncias de processamento. Esta requisição faz todo sentido pois, é o cenário mais simples onde pode haver redundância e balanceamento de carga.Web Roles
Agora que nos é familiar o conceito de instâncias, estamos aptos discutir os aspectos técnicos relacionados aos ambientes de execução do Windows Azure. Como o próprio nome sugere, uma Web Role é um ambiente dedicado a execução de aplicações web. Uma Web Role possui a característica marcante de possuir instância(s) pré-configurada(s) com o Internet Information Services (IIS). Qualquer aplicação web que seja hospedada no Windows Azure, necessariamente utiliza uma Web Role e pode ser executada sob IIS (aplicações .NET e PHP as são). A Figura 2 apresenta o esquema básico de funcionamento das Web Roles (internamente). Figura 2 . A estrutura básica de uma Web Role (fonte: http://blogs.southworks.net ) A Figura 2 apresenta o esquema gráfico de uma Web Role. Vamos aos principais aspectos:- IIS Web UI : é um template de site pré-configurado que consegue ler e escrever em qualquer dos serviços de armazenamento do Windows Azure (Blobs, Tables e Queues).
- Sincronizador : mantém consistentes os dados trocados entre o IIS Web UI e os serviços de armazenamento.
- IIS API : API interna ao IIS que possibilita gerenciar os sites hospedados. Através desta API é possível criar novos sites, removê-los, modificá-los, movê-los, etc. Esta API já encontra-se embarcada no IIS pré-configurado das Web Roles .
- Local Storage : toda instância de computação no Windows Azure possui um ambiente de armazenamento local. Este espaço é disponibilizado para que as aplicações possam buscar informações/recursos de forma mais rápida (já que este espaço encontra-se na mesma instância). Uma observação importante em relação ao armazenamento local é: no Windows Azure as instâncias são " stateless " isto significa que, em algum momento, a máquina virtual que executa a aplicação pode ser reciclada (entenda-se "destruída" e recriada) e, neste caso, um nova máquina assumirá a responsabilidade de execução (este processo é automatizado pelo Windows Azure e você nem saberá que aconteceu). Dado este cenário, recomenda-se utilizar o armazenamento local com cuidado pois, os dados serão perdidos de tempos em tempos.