# Escalar e Auto-Escalar uma Aplicação Node.js

Source: https://support.kapsulehost.com/pt-pt/site-scaling-and-autoscale

O auto-scaling aumenta e diminui o número de instâncias em execução da sua aplicação Node.js à medida que a carga de CPU varia, para que os períodos de maior movimento tenham mais capacidade e os períodos de calma custem menos. Este guia aborda o separador do KPanel, todas as definições, o que é faturado e como tornar uma aplicação segura para escalar.

## Onde Fica a Escalabilidade no KPanel

1. Inicie sessão no [KPanel](https://kpanel.kapsulehost.com).
2. Clique em **Websites** na barra lateral esquerda e depois clique no site.
3. No menu esquerdo do site, abra **Desempenho** e depois **Escalabilidade**.

O endereço direto é `/websites/<site-id>/autoscale`. O endereço antigo `/websites/<site-id>/scaling` continua a funcionar e leva-o ao mesmo sítio.

![Definições de auto-scaling para uma aplicação Node.js no KPanel](https://support.kapsulehost.com/help/screenshots/site-scaling-and-autoscale.a7af79de.webp)

> **Note:** Este separador só aparece em sites Node.js. Não estará presente no menu de um site WordPress, WooCommerce, estático, PHP, Python ou Ruby, porque o mecanismo escala um cluster de processos Node.js.

## Um Único Separador, Uma Única Configuração

O KPanel costumava ter dois separadores aqui, **Escalabilidade** e **Escalabilidade automática**, sobre um único conjunto de definições. Eram duas vistas da mesma configuração, o que só servia para gerar confusão, pelo que agora existe um único separador **Escalabilidade**: estado em tempo real, as definições, eventos recentes de escalabilidade e o painel de utilização e custo do período de faturação atual, tudo num só sítio.

## Como Funciona

A sua aplicação é executada como um cluster de processos. O auto-scaling monitoriza a CPU média entre as instâncias em execução e adiciona ou remove instâncias de acordo com os limiares que definir.

O modo cluster é obrigatório. Se a sua aplicação ainda não estiver a ser executada em modo cluster, ativar o auto-scaling muda-a automaticamente, o que implica um breve reinício. A página informa quando isso acontece.

## Interpretar o Estado em Tempo Real

O cartão de estado mostra três elementos:

- **Instâncias**: quantas estão em execução neste momento.
- **CPU Média**: a média de CPU entre essas instâncias.
- **Cluster**: se a aplicação está em modo cluster. Se indicar não, ativar o auto-scaling irá alterá-lo.

Se a aplicação não estiver em execução de todo, o cartão indica isso mesmo em vez de mostrar zeros.

O separador também mostra **Último dimensionamento**, a hora do evento de escalabilidade mais recente, ou **nunca**.

## As Definições

| Definição | Intervalo | O que faz |
|---|---|---|
| Instâncias mínimas | 1 a 16 | O mínimo. Nunca escala abaixo deste valor |
| Instâncias máximas | 1 a 16 | O máximo. Nunca escala acima deste valor |
| Escalar para cima em CPU % | 5 a 99 | CPU média acima deste valor adiciona uma instância |
| Escalar para baixo em CPU % | 1 a 95 | CPU média abaixo deste valor remove uma |
| Intervalo (seg) | 30 a 3600 | Espera mínima entre ações de escalabilidade |

O interruptor principal é o botão no cabeçalho do cartão de definições. Quando o auto-scaling está desligado, as definições ficam esbatidas e a sua aplicação mantém o número de instâncias atual.

Valores iniciais sensatos:

- **Instâncias mínimas: 1 ou 2.** Duas se não puder tolerar que o reinício de uma única instância coloque a aplicação offline.
- **Instâncias máximas** no valor que está disposto a pagar no pico, não no limite máximo.
- **Escalar para cima por volta dos 70 por cento.** Suficientemente alto para não estar a pagar por folga que nunca utiliza, suficientemente baixo para haver tempo de adicionar capacidade antes de os pedidos começarem a ficar em fila de espera.
- **Escalar para baixo por volta dos 30 por cento.** Deixe uma margem ampla entre os dois limiares.
- **Intervalo de alguns minutos.** Esta é a definição mais subestimada.

> **Warning:** Definir os dois limiares de CPU próximos um do outro provoca oscilação: o cluster escala para cima, desce imediatamente abaixo do limiar de redução porque a carga está agora distribuída por mais instâncias, escala para baixo, sobe novamente, e repete-se. Mantenha uma margem ampla e use um intervalo generoso. A oscilação custa dinheiro e desestabiliza a aplicação.

## Eventos de Escalabilidade

O separador lista os eventos de escalabilidade recentes, do mais recente para o mais antigo, mostrando cada um a direção, o número de instâncias antes e depois, a leitura de CPU que o desencadeou e a hora.

Este é o registo a consultar quando a aplicação se comportou mal. Uma série de eventos de subida e descida em poucos minutos significa que os seus limiares estão demasiado próximos ou o intervalo é demasiado curto. Uma única subida que nunca mais desceu significa que a carga se manteve alta, o que é uma questão de capacidade e não de configuração. Nenhum evento quando esperava alguns significa que ou a CPU nunca ultrapassou um limiar, ou o auto-scaling está desligado.

## Quanto Custa o Auto-Scaling

As instâncias acima da alocação base do seu plano são medidas e faturadas ao segundo. O separador mostra, para o período atual:

- **Tempo de instância utilizado**, em horas e minutos, com os segundos de instância em bruto por baixo.
- **Gasto até agora** neste período.
- **Previsão para o fim do mês**, extrapolada a partir da utilização até agora.
- **Acompanhamento**, quantas janelas de utilização foram faturadas do total registado.
- **Progresso do período**, dias decorridos face aos dias do mês.

A taxa por segundo é apresentada no topo do mesmo painel, para que o valor pelo qual é faturado esteja sempre visível junto à utilização a que se aplica.

> **Tip:** A previsão é o número a vigiar. É extrapolada a partir do que já utilizou até agora, por isso uma semana invulgarmente movimentada no início do mês irá exagerá-la. Verifique-a passados alguns dias, e depois novamente a meio do mês, antes de tirar conclusões. Se estiver mais alta do que deseja, reduza o número máximo de instâncias em vez de aumentar o limiar de subida: o limite máximo é um teto rígido, um limiar é apenas uma indicação.

Reduzir para o mínimo para a escalabilidade para a medição. Se desligar completamente o auto-scaling, a aplicação mantém o número de instâncias que tiver nesse momento, por isso reduza primeiro para o mínimo se o custo for a razão para desligar.

## Tornar uma Aplicação Segura para Escalar

A página apresenta um aviso, e é a coisa mais importante nela: a sua aplicação Node.js tem de ser segura para cluster para escalar de forma limpa entre instâncias.

Na prática isso significa:

**Nenhum estado de sessão em memória.** Se a sessão de um utilizador autenticado viver na memória de uma instância, ele é desligado sempre que um pedido chegar a uma instância diferente. Mova as sessões para um repositório partilhado.

**Nenhuma cache em memória de que dependa para a correção dos dados.** Cada instância tem a sua própria. Uma cache que tem de ser consistente tem de ser partilhada.

**Nenhuma escrita no sistema de ficheiros local que espere voltar a ler.** Os carregamentos escritos em disco local por uma instância são invisíveis para as outras. Escreva para armazenamento partilhado.

**Nenhum trabalho agendado sem proteção.** Se um temporizador for executado dentro da aplicação, todas as instâncias o executam, pelo que uma tarefa noturna com quatro instâncias é executada quatro vezes. Mova o trabalho agendado para uma tarefa cron, ou proteja-o com um bloqueio. Consulte [Tarefas Cron](https://support.kapsulehost.com/pt-pt/cron-jobs).

**Nenhuma suposição de que o número de instâncias é estável.** Qualquer coisa que divida o trabalho pelo índice da instância falha no momento em que o número muda.

Se algum destes casos se aplicar à sua aplicação, corrija-os antes de ativar o auto-scaling. Uma aplicação que não é segura para cluster falha de formas intermitentes e difíceis de reproduzir, porque dependem de qual instância serviu qual pedido.

## Resolução de Problemas

**O interruptor não ativa.** A ativação requer a permissão de escrita do site. Com uma função apenas de leitura, os controlos estão desativados.

**A aplicação reiniciou quando ativei o auto-scaling.** Esperado. A mudança para o modo cluster requer um reinício, e acontece uma única vez.

**Os utilizadores estão a ser desligados aleatoriamente.** Sintoma clássico de falta de segurança para cluster. As sessões estão em memória e os pedidos estão a chegar a instâncias diferentes.

**As instâncias escalaram para cima e nunca desceram.** Ou a carga se manteve acima do limiar de redução, ou algo está a manter a CPU alta independentemente do tráfego. Verifique a lista de eventos e veja o que a aplicação está de facto a fazer.

**Uma tarefa agendada foi executada várias vezes.** Todas as instâncias a executaram. Mova-a para uma tarefa cron ou adicione um bloqueio.

**Nada escala.** Confirme que o interruptor está ligado, que a aplicação está em execução e que o modo cluster está ativado. Depois verifique se a CPU de facto ultrapassou o seu limiar de subida na lista de eventos.

**O custo é mais alto do que o esperado.** Veja a lista de eventos à procura de oscilação, e depois reduza o número máximo de instâncias.

## Páginas Relacionadas

- [Desempenho do Site e APM](https://support.kapsulehost.com/pt-pt/site-performance) para ver se a CPU é genuinamente o gargalo.
- [Monitorização do Tempo de Atividade do Site](https://support.kapsulehost.com/pt-pt/site-uptime-monitoring) para confirmar se a escalabilidade está de facto a melhorar a disponibilidade.
- [Tarefas Cron](https://support.kapsulehost.com/pt-pt/cron-jobs) para trabalho agendado que tem de ser executado exatamente uma vez.
- [Redimensionar um Servidor Cloud](https://support.kapsulehost.com/pt-pt/cloud-servers-resize) se precisar de uma máquina maior em vez de mais instâncias.
