Fazendo autoscaling de aplicações no Windows Azure

Olá pessoal,

Durante o evento Build 2013, anunciamos algumas novidades no Windows Azure. Uma das novidades que me chamou bastante atenção foi o autoscaling, crescer ou diminuir o ambiente automaticamente, sem intervenções manuais, diretamente na plataforma.

Atualmente o autoscaling funciona com Cloud Services, Virtual Machines e Web Sites, ele funciona monitorando a CPU ou a quantidade de mensagens em uma fila do storage (somente para Cloud Services e Virtual Machines).

Abaixo vou mostrar como fazer o autoscaling para Cloud Services, em posts futuros mostro como fazer para Virtual Machines e Web Sites.

O primeiro passo é abrir os detalhes do cloud service e navegar até a guia Escala, conforme abaixo:

image 

O autoscaling ocorre individualmente para cada role do seu cloud service:

image

Para habilitar o autoscaling, deve-se escolher entre a opção CPU ou Fila, a melhor opção depende da sua aplicação.  No meu cenário, vou habilitar autoscaling via CPU para minha Web Role:

image

Durante o processo, vc pode fazer algumas configurações:

  • Intervalo de Instância: Indica a quantidade mínima e máxima de instâncias que sua aplicação pode ter. Para a quantidade mínima, recomendo pelo menos 2 instâncias para poder ser cumprido o SLA da plataforma;
  • CPU de Destino: No exemplo acima deixa a configuração padrão. Indica os valores médios de CPU da última hora que a sua aplicação irá trabalhar. Se a média de CPU ficar abaixo do valor mínimo configurado, serão retiradas instâncias, se a média de CPU fica acima do valor máximo configurado, novas instâncias serão adicionadas no ambiente.
  • Aumentar Em: Indica a quantidade de instâncias que serão adicionadas quando for necessário aumentar o ambiente;
  • Aumentar Tempo de Espera: É o tempo que o Windows Azure espera o ambiente estabilizar antes de tomar alguma outra ação de aumentar o ambiente novamente;
  • Reduzir Em: Indica a quantidade de instâncias que serão removidas quando for necessário diminuir o tamanho do ambiente;
  • Reduzir Tempo de Espera: Similar ao Aumentar Tempo de Espera, é o tempo que o Windows Azure espera o ambiente estabilizar antes de tomar alguma outra ação de reduzir o ambiente novamente;

É interessante que vc pode tomar algumas medidas mais agressivas ou conservadoras com o seu ambiente, por exemplo, no caso acima estou sendo mais agressivo no crescimento do meu ambiente (subindo 2 instância de cada vez) e mais conservador quando for necessário reduzir o ambiente (removendo 1 instância por vez). Um ponto de atenção é a configuração da CPU de Destino, valores mínimos e máximos muito próximos dos extremos (0% – 100%) podem dificultar o autoscaling, ele só ocorreria quando a aplicação está praticamente ociosa (existindo muito desperdício de recursos), ou quando a aplicação está com muito acesso (o que pode ser tarde). Já valores mínimos e máximos muito próximos um dos outros pode (50% – 51%) fazer com que o autoscaling ocorra à todo tempo.

Agora, para habilitar o autoscaling na minha worker role, vou realizar a seguinte configuração:

image

A principal diferença da configuração é a indicação da conta de armazenamento e do nome da fila existente nesta conta. Além disso, é necessário indicar a quantidade de mensagens que cada computador deve processar (destino por computador). A quantidade de instâncias será calculada pela divisão da quantidade de mensagens na fila pela quantidade de mensagens por computador, quanto maior o número configurado menor será a quantidade de instâncias, quanto menor o número maior a quantidade de instâncias.

RG