⚖️ Load Balance e Redundância
Este guia cobre as estratégias para garantir alta disponibilidade e distribuição de carga nos diferentes componentes do e-SUS AF.
1. Camada Web (Frontend)
O container web (Nginx) é stateless e pode ser escalado horizontalmente sem restrições. O ponto de entrada deve ser um Load Balancer ou Ingress Controller que distribua as requisições entre as réplicas.
- Docker Compose: Utilize um proxy reverso como Nginx ou Traefik na frente do serviço
web. - Kubernetes: Exponha o Deployment via
Servicedo tipoLoadBalancerou configure umIngresscom as anotações do seu Ingress Controller (ex: NGINX Ingress, Traefik).
# Exemplo de Ingress básico
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: esusaf-ingress
spec:
rules:
- host: esusaf.meudominio.gov.br
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: esusaf-web
port:
number: 80
2. Camada de API (Backend)
A API é stateless com uma exceção crítica: os tokens JWT são assinados com chaves assimétricas (ES512). Todas as réplicas devem compartilhar o mesmo par de chaves.
2.1 Compartilhamento de Chaves entre Réplicas
| Ambiente | Solução Recomendada |
|---|---|
| Docker Compose | Volume do tipo bind mount ou NFS montado em /app/chaves em todas as instâncias |
| Kubernetes | PersistentVolumeClaim com accessMode: ReadOnlyMany montado em /app/chaves |
# Exemplo de PVC no Kubernetes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jwt-keys-pvc
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 10Mi
Consulte Preparação do Ambiente para instruções de geração das chaves.
2.2 Escalonamento
# Kubernetes - escalar API para 3 réplicas
kubectl scale deployment/api --replicas=3
# Verificar distribuição
kubectl get pods -l app=api
3. Banco de Dados (PostgreSQL)
O PostgreSQL deve ser configurado com Streaming Replication para leitura e Patroni (ou o serviço gerenciado de sua nuvem) para failover automático.
| Modo | Ferramenta | Descrição |
|---|---|---|
| Alta Disponibilidade | Patroni | Orquestração de failover automático com eleição de líder |
| Leitura Escalada | pgBouncer + réplicas | Pool de conexões com roteamento para réplicas de leitura |
| Backup Contínuo | pgBackRest / pg_basebackup | WAL archiving para recuperação pontual (PITR) |
4. Cache (Redis)
O e-SUS AF suporta dois modos de operação para o Redis, configuráveis via variáveis de ambiente:
| Modo | Variável | Indicado para |
|---|---|---|
| Standalone | REDIS_CLUSTER_ENABLED=false |
Ambientes de desenvolvimento/homologação |
| Cluster Mode | REDIS_CLUSTER_ENABLED=true |
Produção com alta disponibilidade |
Em Cluster Mode, informe os nós via REDIS_CLUSTER_NODES (ex: host1:6379,host2:6379,host3:6379).
Para HA em modo standalone, o Redis Sentinel é a alternativa recomendada.
5. Checklist de Redundância
- [ ] Load Balancer / Ingress configurado para
webeapi - [ ] Volume compartilhado (PVC ou NFS) para chaves JWT montado em todas as réplicas da API
- [ ] Redis em Cluster Mode ou com Sentinel ativo
- [ ] PostgreSQL com Streaming Replication e Patroni (ou serviço gerenciado)
- [ ] Backup agendado (
pg_dumpou pgBackRest) com retenção definida