Escalonamento
Escale suas aplicações horizontalmente com contagens manuais de réplicas ou regras de escalonamento automático baseadas no uso de recursos.
Escalonamento Manual
A forma mais simples de escalar é definir um número fixo de réplicas. Cada réplica é um contêiner idêntico rodando sua aplicação. O sh0 distribui requisições de entrada entre todas as réplicas saudáveis.
- Navegue até sua aplicação no painel.
- Abra Configurações → Escalonamento.
- Defina a Contagem de Réplicas para o número desejado.
- Clique em Aplicar. O sh0 criará ou encerrará contêineres para corresponder.
Regras de Auto-Scaling
O auto-scaling ajusta dinamicamente o número de réplicas com base no uso de recursos em tempo real. Quando o uso excede um limite, o sh0 adiciona réplicas. Quando cai, réplicas são removidas.
Limite de CPU
Defina um percentual alvo de utilização de CPU. Quando o uso médio de CPU entre todas as réplicas exceder esse limite por um período sustentado (padrão: 60 segundos), o sh0 adiciona uma nova réplica.
| Parâmetro | Padrão | Descrição |
|---|---|---|
cpu_threshold | 70% | Percentual de uso de CPU que aciona o scale-up |
scale_up_cooldown | 60s | Tempo mínimo entre eventos de scale-up |
scale_down_cooldown | 300s | Tempo mínimo entre eventos de scale-down |
Limite de Memória
Similar à CPU, você pode definir um limite de utilização de memória. Quando o uso médio de memória excede o limite, o sh0 escala para cima. Isso é especialmente útil para aplicações intensivas em memória como serviços Node.js ou Java.
Mínimo e Máximo de Réplicas
O auto-scaling opera dentro de limites que você define:
- Mínimo de Réplicas: O número mínimo de contêineres sempre em execução. Defina pelo menos 1 para alta disponibilidade, ou 2 para implantações sem tempo de inatividade.
- Máximo de Réplicas: O limite superior para escalonamento. Isso evita que o escalonamento descontrolado consuma todos os recursos do servidor.
{
"min_replicas": 2,
"max_replicas": 10,
"cpu_threshold": 70,
"memory_threshold": 80,
"scale_up_cooldown_seconds": 60,
"scale_down_cooldown_seconds": 300
}Balanceamento de Carga entre Réplicas
O sh0 usa o Caddy como proxy reverso para distribuir tráfego entre réplicas. A estratégia de balanceamento de carga é round-robin por padrão, garantindo distribuição uniforme de requisições.
Comportamentos principais:
- Health checks: Réplicas não saudáveis são automaticamente removidas do pool do balanceador de carga.
- Drenagem graciosa: Ao escalar para baixo, conexões existentes são drenadas antes do contêiner ser parado.
- Afinidade de sessão: Não habilitado por padrão. Se sua aplicação requer sticky sessions, configure nas configurações da aplicação.
- Suporte a WebSocket: Conexões WebSocket são devidamente proxiadas e mantidas entre réplicas.
Escalonamento via API
Você pode gerenciar o escalonamento programaticamente pela API REST. Isso é útil para pipelines CI/CD ou automação personalizada.
Definir contagem de réplicas:
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"replicas": 4}'Configurar auto-scaling:
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_scaling": true,
"min_replicas": 2,
"max_replicas": 8,
"cpu_threshold": 75,
"memory_threshold": 85
}'Obter status atual de escalonamento:
curl https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN"Melhores Práticas
- Torne sua aplicação stateless: Armazene sessões no Redis ou banco de dados, não em memória. Aplicações stateless escalam sem esforço.
- Defina limites de recursos: Defina limites de CPU e memória por contêiner para que uma réplica não prive as outras.
- Use health checks: Configure um endpoint de health check para que o sh0 possa detectar e substituir réplicas não saudáveis automaticamente.
- Comece com mínimo de 2 réplicas: Isso garante zero tempo de inatividade durante implantações (padrão blue-green).
- Monitore antes de escalar: Use o painel de métricas para entender seu uso base de recursos antes de definir limites de auto-scaling.
- Teste o comportamento de scale-down: Garanta que sua aplicação lida corretamente com shutdown gracioso (SIGTERM) para evitar requisições descartadas.