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(defaultcheckout) eCELERY_PROGRESS_QUEUE(defaultprogress) - Registrar as duas filas em
predefined_queues(URLs SQS via env vars) - Adicionar as entradas
"onion-checkout"e"onion-progress"no dictQUEUES
apps/webhooks/tasks.py
- Trocar a fila de
save_checkout_ibftde"default"para"onion-checkout"
apps/engagements/tasks.py
- Trocar a fila de
save_progress_lesson,save_progress_audio,save_progress_meditationesave_progress_livede"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
-Qdo 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
- Subir os workers consumindo de todas as filas
- Simular o pico de progresso (muitas
save_progress_*concorrentes) - Confirmar que as
save_checkout_ibftsão processadas sem atraso - Confirmar que as tasks de progresso caem na fila
onion-progress(console do SQS ou management do RabbitMQ) - Confirmar que a fila default
onionnão é mais inundada no pico
Documentação
Nenhuma mudança de documentação necessária.