📌 Что такое Laravel Horizon и зачем он нужен
По сути, Horizon — это расширение фреймворка Laravel, которое заменяет работу php artisan queue:work на гораздо более гибкую систему с визуальным дашбордом, продвинутыми метриками и масштабируемыми воркерами. Он нужен там, где:
- важно видеть в реальном времени состояние очередей;
- нужно балансировать нагрузку между задачами;
- критична быстрая диагностика ошибок и зависших процессов.
🔍 Основные возможности
📊 Мониторинг в реальном времени
Horizon показывает:
- активные задачи;
- статистику по времени выполнения;
- частоту ошибок;
- метрики throughput (jobs per minute).
Это работает прямо в дашборде по пути /horizon в браузере.
⚙️ Автоматическое масштабирование (Auto-scaling)
Horizon умеет автоматически увеличивать или уменьшать число рабочих процессов в зависимости от нагрузки. Например, если очередь notifications переполнена, он выделит больше воркеров для её обработки.
📈 Расширенная аналитика
Встроенные графики и статистика позволяют выявлять узкие места и планировать оптимизацию.
🧠 Технические преимущества
🚀 Автоскейлинг воркеров
Horizon поддерживает несколько стратегий балансировки:
auto— динамическое масштабирование;simple— равномерное распределение;false— стандартный подход Laravel.
В конфигурации можно задавать минимальное и максимальное число процессов:
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default', 'notifications'],
'balance' => 'auto',
'autoScalingStrategy' => 'time',
'minProcesses' => 1,
'maxProcesses' => 10,
],
⚡ Производительность и использование памяти
Horizon позволяет задавать лимиты памяти на уровне воркеров и супервизоров, что снижает риск утечек или зависаний при долгой работе.
⚙️ Интеграция с Redis
Horizon оптимизирован под Redis — это его основное требование. Он использует Redis для хранения состояния очередей и статистики обработки задач.
Важно: Redis должен быть настроен на
noeviction, чтобы задачи не удалялись при нехватке памяти.
📦 Установка и быстрая настройка
Установка Horizon очень проста:
composer require laravel/horizon
php artisan horizon:install
php artisan migrate
php artisan horizon
После этого дашборд доступен на /horizon, а конфигурация хранится в config/horizon.php.
🛠 Конфигурация под разные окружения
Horizon поддерживает разные настройки для local, staging и production. Например:
'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['emails', 'notifications'],
'balance' => 'auto',
'processes' => 10,
'tries' => 3,
],
],
],
🔔 Уведомления и алерты
Horizon может отправлять уведомления при:
- частых ошибках;
- зависших воркерах;
- превышении порога неудачных заданий.
Поддерживаются email и Slack-уведомления:
Horizon::routeMailNotificationsTo('admin@yourapp.com');
Horizon::routeSlackNotificationsTo('https://hooks.slack.com/services/...');
🔄 Работа с неудачными заданиями
Horizon предоставляет удобный интерфейс для просмотра и повторного запуска неудачных задач. Можно использовать:
php artisan queue:retry all
📦 Продакшен-развертывание
Для стабильной работы в проде обычно используют Supervisor:
[program:horizon]
command=php /path/to/your/project/artisan horizon
autostart=true
autorestart=true
stdout_logfile=/path/to/logs/horizon.log
🐳 Docker и Laravel Sail
Если проект работает в контейнерах, Horizon просто запускается как отдельный сервис:
horizon:
command: php artisan horizon
depends_on:
- redis
restart: always
🆚 Horizon vs queue:work
| Возможность | queue:work |
Laravel Horizon | |
|---|---|---|---|
| UI-мониторинг | ❌ | ✅ | |
| Статистика и графики | ❌ | ✅ | |
| Авто-балансировка воркеров | ❌ | ✅ | |
| Управление ошибками | ❌ | ✅ | |
| Фильтрация и теги у задач | ❌ | ✅ |
🧠 Типичные сценарии использования
- массовые рассылки email;
- обработка медиафайлов;
- импорт-экспорт больших данных;
- интеграции с внешними API.
⚠️ Ограничения и лучшие практики
- Horizon работает только с Redis; для других драйверов очередей нужны другие решения.
- Для крупномасштабных систем стоит настроить кластер Redis и внешние метрики (Prometheus, Grafana).
- Следи за конфигурацией
tries,timeoutи мониторь зависшие воркеры.
📌 Заключение
Laravel Horizon — это не просто дашборд для очередей. Это инструмент, который даёт полный контроль над фоновыми задачами: от автоскейлинга и мониторинга до удобного интерфейса для анализа и диагностики. Он особенно полезен в средних и крупных Laravel-проектах с интенсивной фоновой нагрузкой.