← Cache & Workers

Очереди и воркеры

cache-workers · workzone

Субстрат исполнения фоновых задач: как трафик разведён по нагрузке и какие процессы его разгребают. Полезная нагрузка очереди живёт в redis-durable; путь задачи внутри очереди (heartbeat, ретраи, очистка) — на жизненном цикле.

Три лейна по нагрузке

Группируем по характеру задачи: разводим то, что мешает друг другу — быстрое от тяжёлого, массовую рассылку от транзакционной почты (чтобы кампания не задержала приглашение или сброс пароля), агентов (упираются в лимит LLM-провайдера) отдельно от живого трафика.

interactive
быстрые · низкая задержка
  • Email — invite · reset
  • Notifications — письма · вебхуки
background
тяжёлые и объёмные · высокий параллелизм
  • Harvester — sync
  • KS — эмбеддинг · доводка · бэкап
  • Email — массовая рассылка
agents
свой потолок LLM-вызовов
  • Agent Engine — прогоны
  • agent_max_concurrency отдельно от чата

Лейн agents держит собственный потолок одновременных LLM-вызовов, чтобы фон не выедал лимит провайдера у живого чата.

Воркер-топология один образ · несколько сервисов · API масштабируется отдельно
Тот же образ, другая команда
Воркер — тот же образ, что backend, с другой command (saq с настройками своего лейна). Три worker-сервиса с разным параллелизмом; API — отдельный сервис.
  • Изоляция нагрузки: тяжёлый прогон не тормозит запросы, падение одного сервиса не роняет другой.
  • Старт с 3, не с 1 и не с 5: собирать слипшиеся лейны обратно дороже, чем дробить дальше.
  • Дробление — по факту: SAQ умеет именованные очереди, развести лейн на под-очереди тривиально.
api
FastAPI · обслуживает запросы · масштабируется сам по себе
worker · interactive
низкая задержка · умеренный параллелизм
worker · background
высокий параллелизм · тяжёлые задачи
worker · agents
потолок agent_max_concurrency

Реестр очередей

Очередь Лейн Потребитель Характер задач
Harvester sync background Harvester full · incremental · partial-resync · dlq-retry · reconcile · health
Email · транзакционное interactive Email invite · reset (тестовое письмо — inline, мимо очереди)
Email · массовая рассылка background Email bulk-кампании — объёмом, не весом; отделены, чтобы не теснить транзакционные письма
KS фоновые прогоны background Knowledge Store ингест · реэмбеддинг · доводка графа · бэкап — ограниченный параллелизм (online-поиск зовёт рантайм напрямую, мимо очереди)
Agent runs agents Agent Engine прогоны под потолком одновременных LLM-вызовов
Notifications · внешняя доставка interactive Notifications email + webhook-POST (in-app пишется синхронно в Postgres, мимо брокера)
Slack-бот · входящее interactive Slack событие DM → Query Engine → постбэк в тред (приём ack<3с, дедуп по event_id)
Telegram-бот · входящее interactive Telegram апдейт DM → Query Engine → ответ сообщением (приём по webhook, дедуп по update_id)
Mattermost-бот · входящее interactive Mattermost пост DM → Query Engine → ответ в тред (без webhook — ставит WebSocket-слушатель планировщика, дедуп по id поста)