Pular para conteúdo

⚖️ 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 Service do tipo LoadBalancer ou configure um Ingress com 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 web e api
  • [ ] 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_dump ou pgBackRest) com retenção definida