Este projeto é um template mínimo para APIs HTTP que precisam executar tarefas pesadas (ex: processamento de vídeo, áudio, dados grandes) sem travar o servidor.
Quando uma tarefa demora muito para processar, executar ela diretamente dentro da API bloqueia o servidor e prejudica o atendimento dos usuários.
Solução:
- A API apenas recebe o pedido e dispara a tarefa para um worker separado (processo/serviço).
- O worker executa a tarefa pesada de forma isolada, em background.
- A API permite consultar o status da tarefa.
- Quando a tarefa termina, a API permite baixar o resultado.
- O cliente chama
POST /submit/{some_kind_of_id}
para enviar a tarefa. - A API dispara o processamento pesado no Celery (worker separado).
- O cliente consulta
GET /status/{job_id}
para saber se o processamento terminou. - Quando o status for
SUCCESS
, o cliente pode chamarGET /download/{job_id}
para obter o resultado (ainda a implementar neste template).
- FastAPI (API HTTP assíncrona)
- Celery (gerenciamento e execução de tarefas assíncronas)
- Redis (broker e backend para Celery)
- Docker + Docker Compose (containerização e orquestração simples)
- Instale Docker e Docker Compose.
- Clone o repositório ou copie os arquivos de código fonte diretamente conforme o necessário.
- Execute:
docker-compose up --build
- A API estará disponível em
http://localhost:8000
. - Endpoints principais:
POST /submit/{some_kind_of_id}
: inicia o processamento.GET /status/{job_id}
: verifica o status da tarefa.GET /download/{job_id}
: baixa o resultado (placeholder no template).
- Para parar:
docker-compose down
- O serviço API roda o FastAPI e apenas dispara tarefas no Celery via Redis.
- O worker Celery fica escutando tarefas e processa-as separadamente, evitando travar a API.
- O Redis é usado como fila e para armazenar estado/resultados das tarefas.
- O endpoint
/health
serve para monitoramento simples da API.
- Escalar múltiplos workers para processar tarefas em paralelo é possível criando vários containers worker.
- O download do resultado ainda precisa ser implementado para casos reais e isso deve ser pensado conforme o caso em questão.
- Para produção, configure autenticação, segurança e monitoramento.
Este template serve como inspiração para projetos que precisam desacoplar processamento pesado da API HTTP, mantendo a responsividade e escalabilidade.