Skip to content

zamafigl/mini-async-job-platform

Repository files navigation

Mini Async Job Platform

Небольшой проект, в котором реализована асинхронная обработка задач через очередь.

Основная идея — разделить приём задач (API) и их выполнение (worker), чтобы система не блокировалась и могла масштабироваться.


Как это работает

  1. API принимает задачу
  2. Сохраняет её в PostgreSQL
  3. Кладёт job_id в Redis (очередь)
  4. Worker забирает задачу
  5. Обрабатывает и обновляет статус + результат

Стек

  • FastAPI
  • PostgreSQL
  • Redis
  • SQLAlchemy
  • Docker Compose

Запуск

docker compose up --build

После запуска:


Примеры

Успешная задача

curl -X POST http://127.0.0.1:8002/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "type": "text_analysis",
    "payload": {
      "text": "hello world hello fastapi redis"
    },
    "priority": 1
  }'

Падающая задача (для проверки retry)

curl -X POST http://127.0.0.1:8002/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "type": "text_analysis",
    "payload": {},
    "priority": 1,
    "max_retries": 3
  }'

Проверка статуса

curl http://127.0.0.1:8002/jobs/{job_id}

Статусы задач

  • pending
  • queued
  • processing
  • done
  • failed

Retry логика

Если задача падает:

  • увеличивается retries
  • если retries < max_retries → задача снова отправляется в очередь
  • если достигнут лимит → failed

Приоритеты задач

Очередь реализована через Redis Sorted Set.

  • чем меньше значение priority, тем выше приоритет
  • worker всегда берёт задачу с наивысшим приоритетом

Масштабирование

docker compose up --scale worker=3

Несколько worker’ов обрабатывают задачи параллельно.


Логи

docker compose logs -f worker

Что я сделал

  • реализовал очередь через Redis
  • разделил API и worker
  • добавил retry механизм
  • сделал приоритетную очередь
  • настроил Docker Compose
  • реализовал масштабирование worker’ов
  • дебажил реальные проблемы (порты, контейнеры, подключения)

Что можно улучшить

  • мониторинг (Prometheus / Grafana)
  • CI/CD
  • аутентификация
  • rate limiting
  • Kubernetes

About

Async job processing platform with FastAPI, PostgreSQL and Redis. Supports retries, priority queue and horizontal scaling with workers.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages