Previsão: nublado

Cinco razões para você começar a trabalhar com o Windows Azure

Joseph Fultz

 

Joseph FultzOnde quer que vá, você ouve falarem sobre a nuvem, que ela é uma etapa importante na evolução da Web e mudará a maneira como você desenvolve, implanta e gerencia aplicativos. Mas nem todos já descobriram como a nuvem realmente se aplica a eles. Isso é verdade, principalmente para aqueles que têm infraestruturas médias a grandes e consumo de uso relativamente uniforme, onde o custo capitalizado é benéfico em comparação com o custo operacional da nuvem. No entanto, se sua infraestrutura estiver do lado pequeno, ou se você tiver um modelo de consumo dinâmico, a nuvem, o Windows Azure, será a solução óbvia. Além disso, para departamentos de processo pesado, onde manter um ambiente de desenvolvimento é como enviar um projeto de lei para o Capitólio, o Windows Azure poderá fornecer uma excelente plataforma para prototipagem.

Foi pensando nisso que decidi indicar algumas coisas sobre o Windows Azure que, espero, possam incitar você a colocar a revista de lado e colocar um pouco do Windows Azure em ação.

Excelente integração de ferramentas

Para o desenvolvimento do Windows Azure, as ferramentas e a integração com o Visual Studio têm sido muito boas e estão evoluindo rapidamente para se tornarem excelentes. Você pode encontrar o conjunto de ferramentas mais recente no Windows Azure Developer Center em bit.ly/xh1CAE.

Conforme mostra a Figura 1, você pode selecionar o tipo das funções e o idioma desejado para um novo projeto. Independentemente do que escolher, você poderá tirar proveito imediatamente da integração das ferramentas. Em minha experiência, os três recursos que serão mais úteis são os emuladores de desenvolvimento, a depuração do tempo de execução e a implantação integrada.

Creating a New Project
Figura 1 Criando um novo projeto

O ambiente de desenvolvimento do Windows Azure consiste em dois emuladores que permitem executar e depurar facilmente seus aplicativos em seu computador de desenvolvimento antes da implantação (consulte a Figura 2). O Windows Azure Compute Emulator é o que permite executar seu serviço localmente para teste e depuração. Com o Storage Emulator, você pode testar o armazenamento localmente.

The Windows Azure Compute Emulator and Storage Emulator Running
Figura 2 O Windows Azure Compute Emulator e Storage Emulator em execução

Na hora certa, a implantação para o ambiente de preparo ou de produção estará apenas a um clique de distância. As ferramentas cuidam do empacotamento, da movimentação e da implantação da funções em sua solução, e o andamento é relatado de volta por meio do Visual Studio, conforme mostrado na Figura 3.

Deployment Progress for Windows Azure as Reported Back Through Visual Studio
Figura 3 Andamento da implantação do Windows Azure conforme relatado de volta pelo Visual Studio

No início, um grande problema do Windows Azure era que você podia desenvolver um código que funcionava com perfeição localmente, mas não funcionava ou tinha um péssimo desempenho depois de implantado. Felizmente, a introdução do IntelliTrace e da criação de perfil ajudaram a diminuir esses problemas. Você pode habilitar esses recursos ao publicar sua solução, conforme mostrado na Figura 4.

IntelliTrace and Profiling Settings in Windows Azure
Figura 4 Configurações do IntelliTrace e da criação de perfil no Windows Azure

Para depurar erros difíceis de reproduzir, principalmente aqueles que parecem aparecer apenas no ambiente de produção, não há nada melhor que o IntelliTrace. Essencialmente, o IntelliTrace registra a execução de seu aplicativo, que pode ser reproduzida mais tarde. Por exemplo, depois de implantar as funções com o IntelliTrace habilitado, você pode exibir os logs do IntelliTrace e analisar exatamente o que aconteceu e em que momento (consulte a Figura 5).

Debugging Windows Azure with IntelliTrace in Visual Studio
Figura 5 Depurando o Windows Azure com o IntelliTrace no Visual Studio

Depois de seguir o thread, você pode acompanhar qualquer código existente para ver o que estava sendo alterado durante a execução. Quando seu site estiver sem nenhum bug (ou com o mínimo possível de bugs) e você estiver pronto para tentar identificar os problemas de desempenho, você poderá desativar o IntelliTrace e ativar a criação de perfil. Como vimos na Figura 4, você pode selecionar o tipo de criação de perfil a ser feito. Por exemplo, se você estiver querendo saber qual é o tempo de chamada em métodos individuais, poderá selecionar Instrumentation. Esse método coleta dados detalhados de tempo, que são úteis para análises focalizadas e para analisar problemas de desempenho de entrada e saída. Também é útil para coletar informações detalhadas de tempo sobre uma seção de seu código e para compreender o impacto das operações de entrada e saída no desempenho do aplicativo. Em seguida, você pode analisar o site para executar a base de código até que esteja satisfeito e, quando estiver, você selecionará a opção “View Profiling Report” para ver uma instância no Gerenciador de Servidores. O Visual Studio buscará as informações e criará um relatório, como o mostrado na Figura 6.

A Profiling Report
Figura 6 Um relatório de criação de perfil

O relatório mostra o uso de CPU ao longo tempo e o “Hot Path”, que, sozinho, pode ajudar você a focalizar seus esforços. No entanto, se desejar se aprofundar um pouco mais, um link direto na seção Hot Path permitirá ver o tempo individual de cada função. A página principal também exibe um bom gráfico que indica as funções que fazem a maior parte do trabalho individual. Claramente, ter o IntelliTrace e a criação de perfil disponíveis diretamente no Visual Studio é um grande benefício, não apenas para a produtividade, mas também para a qualidade do produto.

Observe que, se você estiver trabalhando no JavaScript, PHP ou Java, você não será negligenciado, precisando escrever seu próprio acesso para a plataforma Windows Azure. A Microsoft fornece SDKs e recursos para todos eles no bit.ly/uGqPNh.

Desempenho e escala

Se tiver prestado pelo menos um pouco de atenção nos últimos anos, você saberá que uma das principais promessas da nuvem é a habilidade de dimensionar sob demanda. Para VMs (máquinas virtuais) de computação, você sempre pode pagar mais por uma função maior e obter mais recursos. No entanto, no Microsoft SQL Azure, as otimizações são um pouco mais... bem... manuais.

É muito bom saber que a implantação na nuvem dá a você a capacidade de dimensionar o farm, mas uma pergunta mais imediata com frequência é “De qual tamanho de função eu preciso?” A resposta é que isso depende do tráfego e do que você está fazendo. Você pode usar uma estimativa bem-estruturada com base em sua experiência passada e em especificações de tamanhos de funções, conforme mostrado na Figura 7.

Figura 7 Especificações de tamanho de máquinas virtuais

Tamanho da máquina virtual Núcleos de CPU Memória Espaço em disco para recursos de armazenamento local na Web e funções de trabalho Espaço em disco para recursos de armazenamento local em uma Função VM Largura de banda alocada (Mbps)
Extrapequena Compartilhados 768 MB

19.480 MB

(6.144 MB reservados para arquivos do sistema)

20 GB 5
Pequena 1 1,75 GB

229.400 MB

(6.144 MB reservados para arquivos do sistema)

165 GB 100
Média 2 3,5 GB

500.760 MB

(6.144 MB reservados para arquivos do sistema)

340 GB 200
Grande 4 7 GB

1.023.000 MB

(6.144 MB reservados para arquivos do sistema)

850 GB 400
Extragrande 8 14 GB 2.087.960 MB (6.144 MB reservados para arquivos do sistema) 1890 GB 800

Uma dessas configurações deve atender às suas necessidades, principalmente quando combinadas com o restante das instâncias de função no farm. Observe que todos os atributos aumentam, inclusive a largura de banda de rede disponível, que, com frequência, é considerada como secundária. Observe também que você não precisa realmente fazer uma estimativa. Em vez disso, você pode ativar a criação de perfil, conforme discutido anteriormente, e coletar métricas reais entre as instâncias para avaliar o desempenho. Com base nos resultados da criação de perfil, você pode ajustar o tamanho da VM e coletar as informações de criação de perfil novamente até encontrar o ajuste ideal. Para condições críticas, você faz a melhor opção de ajuste ou localiza uma solução alternativa. Por exemplo, se o site atender a uma grande quantidade de conteúdo e não for muito dinâmico, você deverá escolher uma das especificações de função mais altas ou mudar para o Windows Azure Content Delivery Network.

A seguir, algumas novidades mistas: O SQL Azure nem sempre fornece o desempenho que você pode obter com sua própria instância privada. No entanto, você terá desempenho consistente. Há algumas coisas que você pode fazer para obter os melhores desempenho e comportamento em tempo de execução possíveis:

  1. Tenha certeza de que o SQL Azure está no mesmo datacenter que sua computação.
  2. Otimize suas consultas e estruturas de dados para adequar suas consultas.
  3. Não corte caminhos na lógica de repetição. Tenha certeza de que a lógica de repetição está presente no código e está testada.
  4. Repita a etapa 2.

Ao longo dos anos, um dos maiores erros que vi as pessoas fazerem foi o de otimizar um site apenas aumentando o tamanho do hardware, sem fazer mais nada. Algumas vezes, isso ajuda um pouco, mas assim que ocorre um pico de carga, o problema volta com sintomas ainda piores, porque a potência adicional tem o efeito de colocar mais coisas em conflito mais rapidamente sem resolver ou mitigar realmente o problema real. Portanto, quando sugiro repetir a etapa 2, estou falando sério. Você não pode apenas jogar mais hardware no problema e esperar que ele não seja um problema de deadlock. A ferramenta SQL Azure Profiler pode ajudar nesse esforço. Sugiro começar com a otimização em sua instância local antes de implantar na nuvem e, em seguida, usar o SQL Azure Profiler para ajudar a identificar e fazer todos os ajustes necessários uma vez na nuvem.

Como uma observação final, uma estratégia para aumentar a escala ou o tamanho de um banco de dados do SQL Azure é a federação, normalmente chamada de “fragmentação de dados”, que é uma técnica de particionamento horizontal de dados entre vários servidores físicos para fornecer expansão do aplicativo. Isso reduz os tempos de consulta individuais, mas adiciona a complexidade de dispersão das consultas para instâncias de destino e a coleta dos resultados assim que estejam concluídos. Por exemplo, você terá o benefício de executar as operações CRUD (Create, Read, Update, Delete) e conjuntos de dados menores e em paralelo. O preço a ser pago será precisar intermediar o acesso entre os fragmentos. Dito isso, alguns dos maiores sites empregam fragmentação, pré-busca e cache para gerenciar consultas, e você usa esses sites todos os dias sem muita reclamação sobre desempenho.

Infraestrutura gerenciável

No início, não era sempre fácil saber o que estava acontecendo em uma implantação do Windows Azure, mas esses dias acabaram. A Microsoft, além de fornecer um portal de gerenciamento em constante evolução, também fornece um pacote de gerenciamento para o System Center Operations Manager (SCOM) que leva o gerenciamento de toda a sua infraestrutura para um único local.

O Windows Azure grava todos os dados de diagnóstico em um contêiner de armazenamento. Você pode consumir os logs diretamente e gerar relatórios ou tomar ações personalizadas. No entanto, você também pode usar o SCOM para monitorar aplicativos do Windows Azure. Os responsáveis pelo gerenciamento da infraestrutura de uma empresa são inclinados a serem conservadores e desejam ferramentas com todos os recursos para monitoramento. O uso de uma solução familiar, como o SCOM, ajudará a resolver as reservas que a equipe de gerenciamento da infraestrutura possa ter sobre a implantação de uma solução na nuvem. O SCOM permite que você monitore a integridade de todas as implantações do Windows Azure e permite fazer buscas detalhadas em Serviços Hospedados, Funções e Instâncias de função. Integrados no pacote estão alertas para serviços e desempenho, mas o benefício principal é que você pode criar suas próprias regras e alertas relacionadas às suas implantações e aos dados que estão sendo coletados. Uma sutileza adicional é que as regras de grooming dos logs são internas. Como sempre, se não forem limpos ao longo do tempo, os logs poderão crescer até se tornarem impossíveis de serem gerenciados. Para ajudar com isso, o pacote de gerenciamento é fornecido com regras predefinidas:

• .NET Trace Grooming

• Performance Counter Grooming

• Event Log Grooming

Essas regras podem ser habilitadas para ter certeza de que você não perca o controle do uso de seu espaço, mas você precisará balancear isso em relação ao número de transações para executar as tarefas. É possível baixar o System Center Monitoring Pack para aplicativos Windows Azure no bit.ly/o5MW4a.

Você já está escrevendo o código

Com frequência, quando aparece uma nova tecnologia, você precisa passar por uma quantidade razoável de treinamento e experiência para se tornar proficiente: considere mudar do Windows Forms para o Windows Presentation Foundation/Silverlight, escolher se deve usar o ASP.NET ou o SharePoint ou até algo mais fundamental, como decidir entre desenvolvimento procedural e orientado a objetos. A mesma coisa acontece com a nuvem, principalmente com as ferramentas disponíveis: Se você já estiver escrevendo sites e serviços, poderá continuar a tirar o máximo de suas habilidades e investimentos no .NET e mudar direto para a nuvem.

Isso não significa que não há algumas práticas recomendadas a serem aprendidas, mas não muito mais do que você já está fazendo para ser perfeito em seu design e desenvolvimento. E, quando estiver pronto, a plataforma fornece muitos recursos adicionais que podem ser aprendidos e utilizados para tornar sua solução segura e robusta e para ter o melhor desempenho sem precisar escrever recursos ou estruturas próprias.

Esse é o futuro

Comece agora. Esse é meu conselho. Visite o azure.com, obtenha as ferramentas e comece. Use o Windows Azure em seus projetos para criar um protótipo. Use-o em seus projetos para fornecer recursos difíceis de requisitar de outra forma. Use-o para qualquer coisa que desejar, mas use-o. A nuvem é o futuro em que todos viveremos e será tão onipresente quanto a água ou a eletricidade. As tecnologias de nuvem estão evoluindo para expandir a computação além do convencional, para um modelo que fornecerá potência de computação onde ela for necessária, quando for necessária e da maneira necessária. Isso é algo do qual você deseja fazer parte.

Joseph Fultz é arquiteto de software da Hewlett-Packard Co. e trabalha no grupo de TI global do HP.com. Anteriormente, era arquiteto de software na Microsoft, trabalhando com seus clientes empresariais e ISVs de camada superior, definindo soluções de arquitetura e design.

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Bruno Terkaly