Фоновые задачи и воркеры в backend: outbox publisher, планировщики, потребители Kafka.
Transactional Outbox Worker
- Назначение: читать записи из таблицы
outbox_events(status = PENDING) и публиковать их в Kafka, затем помечать как PUBLISHED. - Реализация: отдельный процесс или поток в составе сервиса; периодический опрос (например, через APScheduler) или непрерывный цикл с паузой.
- Надежность: при сбое публикации — retry с backoff; при необходимости dead-letter и ручной разбор.
- Масштабирование: один активный воркер на БД/таблицу outbox во избежание дублирования публикаций (или партиционирование по партициям outbox).
Планировщики (APScheduler и аналоги)
- Используются для периодических задач: опрос outbox, очистка старых данных, health checks зависимостей.
- Настройка: интервалы и расписание в конфигурации; в Kubernetes учитывать единственный активный экземпляр (leader election при необходимости).
Потребители Kafka
- Отдельные сервисы или воркеры внутри сервиса подписываются на топики (consumer group).
- Обработка идемпотентна (см. Idempotency); при ошибке — логирование и при необходимости отправка в DLQ с последующим разбором.
- Масштабирование: увеличение числа партиций и инстансов consumer’а в группе.
Связанные страницы
- Event-Driven Patterns — Transactional Outbox
- Idempotency — идемпотентность обработки событий
- Backend Overview — обзор стека