Загрузка...

Laravel Horizon — мониторинг, автоматическое масштабирование и контроль фоновых задач

Мониторинг, балансировка и полный контроль над фоновыми задачами
laravel horizon

📌 Что такое 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-проектах с интенсивной фоновой нагрузкой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *