Queue mode в n8n: Redis, workers, webhooks и масштабирование без хаоса ¶
Обновлено: 2026-05-29
Queue mode нужен не “чтобы n8n был быстрее” сам по себе, а чтобы разделить роли: один процесс обслуживает UI и API, Redis хранит очередь запусков, workers выполняют workflows, а webhook-процессы могут принимать внешние события отдельно. Это полезно, когда один контейнер уже не справляется с параллельными executions или когда падение тяжёлого workflow не должно уносить за собой весь интерфейс.
Не включайте queue mode ради галочки
Если у вас 5 простых workflow и редкие webhooks, queue mode добавит Redis, workers, логи и новые точки отказа. Сначала наведите порядок в executions, retries, API limits и PostgreSQL. Queue mode нужен там, где уже понятна нагрузка.
Архитектура ¶
Browser / API client
↓
Main n8n process: UI, API, scheduler, workflow management
↓
Redis queue
↓
Worker processes: execute workflows
↓
PostgreSQL: workflows, credentials metadata, executions
Production webhooks → webhook process или main process → Redis → workers
Все процессы должны использовать один и тот же PostgreSQL, Redis, N8N_ENCRYPTION_KEY и базовые настройки URL. Если worker запущен с другим encryption key, он может не прочитать credentials.
Когда queue mode действительно помогает ¶
| Симптом | Queue mode поможет? | Почему |
|---|---|---|
| UI тормозит во время тяжёлых workflows | да | executions уходят в workers |
| Много webhooks одновременно | да, если настроены webhook processors и workers | приём и выполнение можно разделить |
| Внешний API даёт 429 | не сам по себе | нужны rate limits, Wait, retry и DLQ |
| Workflow написан неэффективно | частично | workers не исправят плохой цикл или огромный item |
| База забита executions | нет | нужны pruning и PostgreSQL maintenance |
Минимальные env-переменные ¶
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
DB_TYPE=postgresdb
N8N_ENCRYPTION_KEY=long-random-secret
Для Redis с TLS, паролем или cluster-настройками добавляйте соответствующие переменные. Важно не хранить пароль Redis в compose-файле, если репозиторий видят другие люди.
Main, worker и webhook process ¶
Main process должен быть публично доступен только там, где нужен UI/API и тестовые endpoints. Worker не должен торчать наружу: он читает задачи из Redis и работает с PostgreSQL. Webhook process имеет смысл, когда поток production webhooks большой и вы хотите отдельно масштабировать приём внешних HTTP-запросов.
Не ставьте “10 workers на всякий случай”. Если каждый worker одновременно стучится в CRM, Telegram или Google Sheets, вы быстрее упрётесь в rate limits. Начните с 1–2 workers, посмотрите длительность executions, очередь Redis и ошибки внешних API.
Как понять, что очередь застряла ¶
- В UI execution висит слишком долго, а worker в логах молчит.
- Redis жив, но jobs не разбираются.
- Workers постоянно перезапускаются из-за памяти.
- Webhook отвечает, но действие внутри workflow не выполняется.
- После деплоя часть процессов использует старые env.
Проверяйте не только Redis. Часто причина в том, что worker не видит PostgreSQL, не может расшифровать credential или стартовал с другой версией образа n8n.
Порядок запуска ¶
- Сначала переведите n8n на PostgreSQL и убедитесь, что бэкап восстанавливается.
- Добавьте Redis в ту же закрытую Docker-сеть.
- Запустите main n8n с
EXECUTIONS_MODE=queue. - Запустите один worker и выполните простой manual workflow.
- Проверьте production webhook.
- Добавьте второй worker только после логов и метрик.
Что логировать ¶
| Метрика/сигнал | Зачем |
|---|---|
| длина очереди Redis | видно, успевают ли workers |
| длительность executions | показывает тяжёлые workflow |
| 429/5xx внешних API | помогает отличить проблему n8n от лимита сервиса |
| перезапуски workers | часто указывают на память или ошибочный Code node |
| размер таблиц executions | показывает, когда пора pruning |
Типовые ошибки ¶
| Симптом | Причина | Решение |
|---|---|---|
| worker не берёт jobs | не тот Redis host/port или сеть | проверить env и доступ из контейнера worker |
| credentials не работают в worker | разный N8N_ENCRYPTION_KEY | синхронизировать ключ во всех процессах |
| webhooks отвечают 404 | неактивный workflow, неправильный URL, proxy | проверить activation и WEBHOOK_URL |
| очередь растёт | мало workers или внешние API тормозят | смотреть длительность, лимиты, добавить backoff |
| Redis память забита | stalled jobs, большие payload, нет лимитов | разобрать jobs, уменьшить payload, настроить Redis |
Операционный runbook для self-hosted ¶
Для темы «Queue mode в n8n» важно разделять настройку и эксплуатацию. Настройка отвечает на вопрос “запустилось ли”, эксплуатация — “сможем ли мы восстановиться, обновиться и расследовать инцидент без потери credentials и execution history”.
Перед изменениями проверьте бэкап базы, значение N8N_ENCRYPTION_KEY, состояние volume, логи web-процесса и worker-процесса. Главный риск — сделать неидемпотентную запись, поймать lock/timeout или незаметно нарушить схему данных.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | запись из базы или SQL-операция с уникальным ключом, timestamp и результатом транзакции | позволяет повторить проблему без доступа к production-секретам |
| Контроль | query_duration, conflict_count, transaction_failures, row_count_delta, lock_wait | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | сделать неидемпотентную запись, поймать lock/timeout или незаметно нарушить схему данных | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «Queue mode в n8n» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
docker compose ps
docker compose logs --tail=200 n8n
docker compose logs --tail=200 n8n-worker
printenv | grep -E 'N8N_|WEBHOOK_|DB_|QUEUE_'
# перед изменениями: backup базы + проверка N8N_ENCRYPTION_KEY
Критерий готовности ¶
- есть свежий backup базы и проверено значение N8N_ENCRYPTION_KEY
- web, worker, queue и database используют согласованные переменные окружения
- после изменения проверены логи, healthcheck и запуск критичных workflow
- записан rollback-план с командами и ответственным
Связанные материалы ¶
Официальные источники ¶
Production-чеклист для queue mode
Используйте этот блок как быстрый контроль перед публикацией workflow или изменением существующей автоматизации. Он не заменяет staging, но помогает поймать самые частые отказы заранее.
- Перед запуском: проверить Redis, workers, concurrency, retry policy и лимиты памяти.
- Минимальный тест: запустить пачку execution и убедиться, что очередь обрабатывается без пропусков.
- Типовой отказ: workers падают под нагрузкой, а main process продолжает принимать webhooks.
- Что логировать: входной payload без секретов, статус внешнего API, branch ошибки, execution id и владельца процесса.
Критерий готовности: сценарий проходит успешный путь, ошибочный путь и повтор события без дублей, потери данных и неконтролируемого падения execution.