Pular para conteúdo

ADR 0006 — Tarefas em segundo plano com Celery + Redis

Status: Aceita · Data: 09/11/2026

Contexto

O sistema roda rotinas periódicas: consultar as OLTs, detectar ONUs pendentes, ler o sinal (RX), enviar relatórios e alertas. Rotinas em cron ou shell script costumam precisar de arquivos .lock para não rodar duas vezes ao mesmo tempo, não têm nova tentativa automática, e mudar um horário exige mexer no servidor.

Decisão

  • Celery como executor, Redis como fila e django-celery-beat como agendador.
  • Os horários ficam no banco e são editáveis em /admin/ (Periodic tasks), sem mexer em cron.
  • Consultas às OLTs rodam no worker, separadas do web. Uma OLT lenta não trava as telas.

Alternativas consideradas

  • systemd timers ou cron + management commands: simples, mas sem nova tentativa automática, sem fila e com o problema de execução duplicada.
  • Fila sobre o próprio PostgreSQL (Procrastinate, django-q2): um container a menos, mas com ecossistema menor.

Consequências

Dois containers extras (worker, beat) e o Redis. Cada tarefa deve poder rodar duas vezes sem efeito colateral (idempotente).