Laravel Queues + n8n: як розвантажити сервер від важких задач
Клієнт оформив замовлення, натиснув «Оплатити» — і застиг на 12 секунд. Сервер у цей час генерує PDF-інвойс, шле лист, оновлює залишки в OpenCart і пінгує CRM. Кожна з цих операцій виконується синхронно, у тому ж HTTP-запиті. Поки вони не завершаться, користувач дивиться на спінер, а PHP-воркер зайнятий і не обслуговує інших.
Це не проблема навантаження — це проблема архітектури. І вона прямо б'є по конверсії: за нашими спостереженнями, кожна додаткова секунда очікування на чекауті коштує продажів.
Проблема: важкі задачі в request-циклі
Генерація документів, виклики зовнішніх API (LiqPay, Monobank, Nova Poshta), масові розсилки, обробка зображень — усе це довгі операції. Коли вони висять усередині запиту, ви платите тричі: повільний відгук для клієнта, зайняті PHP-FPM воркери та ризик таймауту, якщо зовнішній сервіс пригальмував.
Рішення: черги Laravel + оркестрація n8n
Laravel Queues виносять важку роботу з request-циклу у фонові процеси. Користувач отримує миттєву відповідь, а задачі виконуються асинхронно через Redis-драйвер. n8n бере на себе верхній рівень оркестрації: ловить події, маршрутизує їх між сервісами і дає наочну картину того, що відбувається без копання в логах.
Як ми це налаштовуємо
- Драйвер черги. Переводимо
QUEUE_CONNECTIONна Redis — він тримає тисячі задач у пам'яті без навантаження на основну БД. - Винесення задач у Jobs. Кожну важку операцію загортаємо в окремий Job-клас:
GenerateInvoice,SyncStockOpenCart,NotifyCrm. Контролер лише диспетчить —dispatch(new GenerateInvoice($order))— і одразу повертає відповідь. - Supervisor для воркерів. Запускаємо
php artisan queue:workпід Supervisor, щоб процеси автоматично піднімалися після збоїв. Laravel Horizon додає метрики, контроль throughput і теги для пошуку проблемних задач. - Місток до n8n. Job після виконання шле вебхук у n8n. Далі n8n розгалужує сценарій: оновлює Google Sheets, шле менеджеру в Telegram, ставить задачу в CRM. Бізнес-логіку інтеграцій ви міняєте в n8n мишкою, не чіпаючи код Laravel.
- Надійність. Налаштовуємо retry з backoff і
failed_jobs: якщо зовнішній API недоступний, задача повторюється, а не губиться. Жодне замовлення не випадає з конвеєра.
Результат у цифрах
Чекаут перестає чекати на фонову роботу: відповідь сервера падає з секунд до десятків мілісекунд. PHP-воркери звільняються й тримають більший пік без докупівлі заліза. А ви отримуєте прозорий контроль над усіма інтеграціями в одному місці.
Маєте важкі задачі, що гальмують сайт або сервер? Ми проєктуємо чергову архітектуру на Laravel і оркестрацію n8n під ваші процеси — від інвойсів до синхронізації складу. Обговоримо ваш кейс →