Auto scaling para alta disponibilidade

Seguidamente, seja nos cursos de cloud computing ou em migrações, me questionam se configurar auto scaling e usar balanceador de carga é útil para pequenos sistemas online. Aqueles que, tipicamente, rodam em um único servidor. A resposta é sim, é útil e recomendado.

Quando utilizamos, em conjunto, um serviço de monitoramento, balanceamento de carga e auto scaling corretamente, podemos chegar em um cenário no qual praticamente conseguimos garantir que o sistema estará no ar sempre. Vou exemplificar a partir do uso do CloudWatch (monitoramento), elastic load balancer – ELB (balanceamento de carga) e autoscaling da Amazon Web Services (AWS). Primeiro, configura-se o autoscaling com uma regra que diz que no mínimo tem que ter 1 instância (máquina virtual – VM) rodando, podendo-se definir também o número máximo de instâncias que podem estar em execução. Depois, cria-se um ELB que faz o roteamento do tráfego para a(s) instância(s) do grupo de autoscaling criado. Por fim, cria-se um alarme no CloudWatch que, quando este detectar que a instância que recebe o tráfego encaminhado no ELB não está respondendo, dispara um alarme, o qual chama o autoscaling para subir uma nova instância em substituição àquela não responsiva. Quando esta nova instância esta pronta, ela passa a receber o tráfego do ELB e aquela não responsiva é eliminada.

Tudo isso de forma 100% transparente para o usuário e automática. E nada precisa ser alterado, porque tráfego é sempre direcionado para o ELB. Com isso, o sistema estará sempre disponível. E se quisermos garantir que o sistema continuará no ar caso o datacenter todo caia, basta configurar que uma instância pode rodar em qualquer uma das availability zones (datacenter) de uma determinada região AWS e fazer com que o ELB enxergue todas estas zonas.

Resumo: mesmo com 1 única instância pode ser útil o uso de balanceador de carga e de autoscaling para garantir a resiliência s do sistema, serviço ou site web.