O caso
Uma VM, e a campanha do Dia dos Pais derrubou a loja. Quatro VMs, e uma delas parou às 10h.
Na semana do Dia dos Pais, o Isaac colocou os cafés em promoção na página inicial. Os pedidos chegaram em minutos, a única VM ficou sem memória, e o site saiu do ar por quarenta minutos.
Na semana seguinte, ele montou quatro VMs iguais. Às 10h de uma terça-feira, uma delas parou de responder. Só soube quando um cliente reclamou.
Este post parte de Máquinas Virtuais e de Compute Engine. A VM já sabemos criar; o que falta é fazer várias delas trabalharem como uma só.
O problema
Uma VM é um ponto único de falha
Uma VM sozinha tem dois limites. Quando o tráfego sobe, ela não dá conta, e quem precisa mexer nela é a equipe, à mão. Quando ela para, a loja para junto.
Criar mais VMs resolve a capacidade, mas abre outra pergunta: quem escolhe qual VM atende cada cliente, e quem percebe que uma delas está doente?
A solução
Um grupo de VMs iguais
Um grupo gerenciado de instâncias (managed instance group, ou MIG) é um conjunto de VMs criadas a partir do mesmo modelo de instância (instance template). O modelo guarda a receita: tipo de máquina, imagem, disco e script de inicialização. Quando o grupo precisa de mais uma VM, ela nasce idêntica às outras.
Com o grupo, você descreve o resultado, e não cada máquina. Por exemplo: "quero entre duas e dez VMs do site, e quero mais quando a CPU média passar de 70%". O Google Cloud acrescenta ou remove VMs para cumprir isso. Esse é o autoscaling.
Recuperação
O grupo troca a VM que adoeceu
O grupo pode verificar cada VM com um health check de aplicação: uma requisição periódica a uma página ou a uma porta da aplicação. Se a resposta não vier como esperado várias vezes seguidas, o grupo apaga a VM e cria outra a partir do modelo. Esse processo é o autohealing.
Existe um detalhe importante: a VM nova demora para subir, e uma verificação feita cedo demais daria um falso alarme. Por isso o autohealing tem um atraso inicial (initial delay), em que as falhas são ignoradas enquanto a máquina ainda inicializa.
Quanto à abrangência, o grupo pode ser zonal (todas as VMs numa única zona) ou regional (VMs distribuídas em várias zonas de uma região). Se a zona inteira cair, o grupo regional continua com as VMs das outras zonas.
Atualização
Trocar a versão sem derrubar a loja
Quando o site ganha uma nova versão, não faz sentido parar o grupo para trocar as VMs de uma vez. O grupo oferece duas formas de atualizar:
- Atualização gradual (rolling update): as VMs são trocadas em lotes. Você define quantas podem ficar fora ao mesmo tempo, e o grupo espera cada lote ficar saudável antes de seguir.
- Atualização canary: uma parte pequena das VMs recebe a versão nova, e o restante continua na antiga. Se o comportamento for bom, o grupo inteiro passa a usar a versão nova. Se não for, você só precisa reverter a parte que mudou.
Para pedir uma porcentagem de VMs no canary, o grupo precisa ter pelo menos dez instâncias. Com um grupo menor, a escolha é em número de VMs.
Quem recebe o pedido
O balanceador de carga
O grupo cuida das VMs, mas alguém precisa receber o pedido do cliente e entregá-lo a uma VM saudável. Esse papel é do balanceador de carga (load balancer). No Google Cloud, o balanceador global tem um único endereço IP (anycast), que atende pedidos do mundo inteiro e os encaminha para os backends com o melhor caminho.
Um backend service reúne os grupos de VMs que recebem o tráfego. Cada backend tem um health check próprio. Quando uma VM deixa de responder ao check, o balanceador para de mandar pedidos para ela. Ele não apaga a VM: quem faz isso é o grupo.
Não confunda
Health check do balanceador × autohealing do grupo
Health check do balanceador
“Para quem o pedido vai?”
- Exemplo
- A VM não responde, e o balanceador manda os pedidos para as outras.
- Foco
- Tirar o tráfego da VM doente, sem apagá-la.
Autohealing do grupo
“A VM doente é substituída?”
- Exemplo
- A VM não responde por vários checks seguidos, e o grupo cria outra no lugar.
- Foco
- Recriar a VM a partir do modelo de instância.
Na prática, os dois trabalham juntos: o balanceador protege o cliente enquanto o grupo resolve o problema.
Na prática
Qual escolher
Site da loja em um dia de pico
Grupo gerenciado com autoscaling e balanceador na frente. A capacidade acompanha os pedidos.
Versão nova do site
Atualização canary: uma parte das VMs recebe a versão nova, e a equipe observa antes de liberar o resto.
Loja que não pode ficar fora do ar
Grupo regional, distribuído em várias zonas, com health check de aplicação para o autohealing.
Uma VM para um teste rápido
Nenhum grupo. Um grupo para uma VM só é complicação sem ganho.
Termos-chave
Cinco termos para fixar
Toque no cartão para ver a definição.
Teste rápido
Três perguntas, estilo prova
01
Uma das VMs do site responde com erro, mas o grupo ainda a considera saudável. O que deve acontecer para ela ser trocada automaticamente?
02
A loja precisa continuar no ar se uma zona inteira ficar indisponível. Que tipo de grupo escolher?
03
Você quer testar a versão nova do site em apenas uma parte das VMs antes de liberá-la para o grupo inteiro. Qual atualização usar?
Escala e balanceamento aparecem em qualquer nuvem: grupos de VMs com autoscaling e balanceadores existem na AWS, no Azure e na Oracle Cloud, com outros nomes. A ideia é a mesma: a máquina que falha sai da rota, e a capacidade acompanha a demanda.