Субстрат исполнения фоновых задач: как трафик разведён по нагрузке и какие процессы его разгребают. Полезная нагрузка очереди живёт в redis-durable; путь задачи внутри очереди (heartbeat, ретраи, очистка) — на жизненном цикле.
Группируем по характеру задачи: разводим то, что мешает друг другу — быстрое от тяжёлого, массовую рассылку от транзакционной почты (чтобы кампания не задержала приглашение или сброс пароля), агентов (упираются в лимит LLM-провайдера) отдельно от живого трафика.
agent_max_concurrency отдельно от чата
Лейн agents держит собственный потолок одновременных
LLM-вызовов, чтобы фон не выедал лимит провайдера у живого чата.
command
(saq с настройками своего лейна). Три worker-сервиса
с разным параллелизмом; API — отдельный сервис.
agent_max_concurrency| Очередь | Лейн | Потребитель | Характер задач |
|---|---|---|---|
| Harvester sync | background | Harvester | full · incremental · partial-resync · dlq-retry · reconcile · health |
| Email · транзакционное | interactive | invite · reset (тестовое письмо — inline, мимо очереди) | |
| Email · массовая рассылка | background | 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 поста) |
job_id —
повторный вызов не плодит дубль; механика на
единственности задачи.
pub/sub — сигнал push-уведомлений:
новая строка в ленте веером расходится по api-репликам, колокольчик
обновляется мгновенно. Канал эфемерный
(redis-cache),
истина — в Postgres; опрос остаётся фоновым добором.