Escalar automaticamente uma aplicação no Azure

Fala pessoal, tudo bem com vocês?
Continuando com a nossa série, hoje vou mostrar como fazer o escalonamento automático (auto scaling) de um Azure Website (webapp). Após esse artigo, nossa estrutura ficará assim:

Nossa estrutura já conta com certificado digital , blob storage para armazenamento (), CDN para entrega de conteúdo estático (), Azure Redis Cache ()  para otimização do banco de dados e hoje vamos mostrar como fazer um escalonamento automático das instancias para suportar altas cargas de trabalho. Se você quiser conhecer o início dessa série, basta clicar aqui ()

Antes de começarmos, precisamos entender a diferença entre escalonamento vertical (scale up) e escalonamento horizontal (scale out).

Scale Up
Escalonamento vertical é uma operação de aumentar o tamanho da estrutura, supondo que você tenha uma estrutura com 2GB de memória e 100 ACU e queira aumentar para 7GB de memória e 400 ACU. Para isso você faz uma escala vertical, porém ao fazer isso tem um downtime da aplicação enquanto o Azure aloca mais recursos.

Scale Out
Escalonamento horizontal é uma operação equivalente a criação de múltiplas cópias de seu webapp e o load balance faz a distribuição automática sob demanda. Quando falamos de webapp (PaaS) não é necessário configurar nenhum load balance separado, pois isso já é fornecido pelo serviço.

Abaixo uma imagem que ilustra essa explicação:

CONFIGURAÇÃO SCALE OUT

Vamos acessar nosso aplicativo dentro do portal do Azure e na opção “Escalar Horizontalmente” lá temos duas opções, vamos clicar em “Dimensionamento automático Personalizado” (escala manual você manualmente mantém uma contagem fixa do número de instancias)

Após clicar na opção, irá aparecer a tela de configuração. Nessa tela vamos criar um nome e adicionar uma regra de escala:

Lá temos diversos critérios que podemos adicionar como regra para escalar automaticamente nossa estrutura. Podemos colocar a média de tempo de uso de cpu, memória etc. Ou podemos colocar um tempo mínimo usando um recurso, a configuração desses itens nunca será igual para todas suas aplicações, então colete os dados e monte uma estratégia customizada.

No caso deste artigo, utilizaremos e média de tempo de uso da CPU:

Quando a utilização da CPU for maior que 75% durante 10 minutos a contagem de instâncias aumentará em 1 e terá que aguardar pelo menos 10 minutos antes de subir outra instância:

Feito isso vamos clicar em adicionar e teremos concluído a regra de subida. Agora vamos configurar os limites mínimos e máximo que queremos para nossa estrutura. No meu caso vou adicionar o mínimo de 2 instâncias rodando e o máximo de 10.

Ou seja, sempre terei 2 instâncias prontas e rondando e o máximo a ser provisionado serão 10 instâncias simultâneas, isso significa que mesmo que o processador continue com utilização de 75% o máximo de instâncias não terei mais instâncias provisionadas.

Obs. Existe um limite para cada sku de aplicativo no Azure, consulte os valores máximos permitidos na documentação

Agora vamos novamente clicar em “adicionar uma regra” e agora vamos fazer uma regra para diminuir nossa estrutura:

No meu caso configurei para que se o processador ficar menor que 50% de sua utilização durante 10 minutos, pode diminuir em uma instância por vez, se eu tiver provisionado 10 instâncias ele vai diminuir para 9 depois de 15 minutos (10 minutos de duração + 5 minutos de intervalo)

Pronto!

Nossa estrutura foi configurada e podemos ver no Azure Monitor em Dimensionamento automático o nosso farm com 2 instâncias:

PROVISIONAMENTO AUTOMÁTICO

Após a configuração, toda vez que o média de CPU for maior que 75% ele provisionará uma nova instância. Configurei no JMeter 10 mil conexões no meu aplicativo para forçar o consumo de CPU:

Após essa quantidade de acessos o processador aumentou a utilização para 90%

E com base nas minhas regras ele adicionou uma nova instância e aumentou para 3 a quantidade total, que pode ser conferido no item contagem de instâncias:

Quando o processador voltar a diminuir ele excluirá a nova instância e manterá o padrão em duas de acordo com a nossa configuração e eu só pagarei por duas instâncias e o tempo que utilizei essa terceira.

Nos vemos nos próximos posts
Até mais😉

About Jackson Martins 28 Articles
Ninguém é tão sábio que não possa aprender, nem tão burro que não possa ensinar

Be the first to comment

Leave a Reply

Your email address will not be published.


*