Filas dedicadas para checkout e progresso

TLDR: Separa as tasks de checkout (ibft) e de progresso em filas dedicadas, com ordem de prioridade entre elas, para impedir o afogamento da fila durante os picos.

Contexto

Nos horários de pico, as tasks save_progress_* (enviadas a cada 5s por usuário ativo) inundam a fila default onion, atrasando tasks críticas como save_checkout_ibft (ativação/desativação de usuário) e o envio de e-mails. Todas as tasks competem na mesma fila, sem isolamento nem controle de prioridade.

Objetivos

  • Isolar as tasks de checkout (ibft) com a prioridade mais alta — a ativação de usuário nunca deve ser atrasada pelo pico de progresso
  • Isolar as tasks de progresso numa fila de baixa prioridade, com workers independentes e escaláveis
  • Manter a fila default enxuta para as tasks gerais do sistema
  • Sem mudanças na lógica das tasks — apenas roteamento de fila

Fora de escopo

— (não registrado na spec original)

Mudanças

config/celery_settings.py

  • Adicionar as env vars CELERY_CHECKOUT_QUEUE (default checkout) e CELERY_PROGRESS_QUEUE (default progress)
  • Registrar as duas filas em predefined_queues (URLs SQS via env vars)
  • Adicionar as entradas "onion-checkout" e "onion-progress" no dict QUEUES

apps/webhooks/tasks.py

  • Trocar a fila de save_checkout_ibft de "default" para "onion-checkout"

apps/engagements/tasks.py

  • Trocar a fila de save_progress_lesson, save_progress_audio, save_progress_meditation e save_progress_live de "default" para "onion-progress"

.infra/ (workers k8s)

  • Adicionar deployment de worker para a fila onion-checkout — 1 ou 2 réplicas, alta prioridade
  • Adicionar deployment de worker para a fila onion-progress — mais réplicas para absorver o pico
  • Ordem de prioridade na flag -Q do worker: onion-checkout > onion > onion-progress

Resumo das filas

Fila Tasks Prioridade
onion-checkout save_checkout_ibft 1 (mais alta)
onion e-mails, tasks gerais 2
onion-progress save_progress_* (lesson, audio, meditation, live) 3 (mais baixa)
onion-habits tasks de hábitos inalterada

Como verificar

  1. Subir os workers consumindo de todas as filas
  2. Simular o pico de progresso (muitas save_progress_* concorrentes)
  3. Confirmar que as save_checkout_ibft são processadas sem atraso
  4. Confirmar que as tasks de progresso caem na fila onion-progress (console do SQS ou management do RabbitMQ)
  5. Confirmar que a fila default onion não é mais inundada no pico

Documentação

Nenhuma mudança de documentação necessária.