Асинхронная очередь задач

ℹ️ О системе очереди задач

INFRAX использует мощную систему асинхронной очереди задач для выполнения длительных операций в фоновом режиме. Это позволяет не блокировать интерфейс пользователя и обеспечивает надежное выполнение задач с автоматическими повторными попытками при ошибках.

Обзор системы

Система асинхронной очереди задач в INFRAX — это центральный механизм для выполнения всех фоновых операций в системе. Она обрабатывает как пользовательские задачи (например, установка агентов, сканирование сети), так и системные задачи (мониторинг, проверка доступности узлов).

Основные возможности

  • Асинхронное выполнение — задачи выполняются в фоновом режиме, не блокируя интерфейс
  • Приоритизация — поддержка приоритетов для управления порядком выполнения задач
  • Автоматические повторы — при ошибках система автоматически повторяет выполнение задачи
  • Многопоточность — параллельное выполнение нескольких задач одновременно (до 40 потоков)
  • Отказоустойчивость — задачи не теряются даже при перезапуске системы
  • История выполнения — полный журнал всех задач с подробными логами
  • Прерывание задач — возможность отмены выполняющихся задач
✅ Преимущества асинхронной обработки

Благодаря асинхронной очереди, пользователи могут запускать длительные операции (например, сканирование большой сети) и сразу продолжать работу с системой. Задача будет выполнена в фоне, а пользователь получит уведомление о завершении.

Архитектура

Система очереди задач построена на основе специального фонового сервиса, который постоянно работает на сервере и обрабатывает задачи из очереди.

Компоненты системы

1. Таблица задач

Все задачи хранятся в таблице базы данных, что обеспечивает их сохранность даже при перезапуске системы. Каждая задача содержит:

  • Уникальный идентификатор
  • Тип задачи
  • Время добавления в очередь
  • Время следующей попытки выполнения
  • Количество попыток выполнения
  • Приоритет
  • Данные задачи (параметры выполнения)
  • Флаг прерывания

2. Обработчик задач (Consumer Service)

Фоновый сервис, который:

  • Непрерывно опрашивает таблицу задач
  • Выбирает задачи, готовые к выполнению
  • Распределяет задачи между рабочими потоками
  • Обрабатывает результаты выполнения
  • Управляет повторными попытками

3. Обработчики типов задач (Task Handlers)

Для каждого типа задачи существует свой обработчик, который содержит конкретную логику выполнения. Обработчики регистрируются в системе и вызываются автоматически при обработке соответствующего типа задачи.

Настройки сервиса очереди

Параметр Значение Описание
Количество потоков 40 Максимальное количество параллельно выполняемых задач
Задержка между попытками 30 секунд Время ожидания перед повторной попыткой
Лимит попыток 10 Максимальное количество попыток выполнения задачи
Умножение времени задержки Отключено Задержка остается постоянной (не увеличивается)

Жизненный цикл задачи

Каждая задача в системе проходит через несколько этапов от момента создания до завершения:

Этапы жизненного цикла

1. Создание задачи

Задача создается либо пользователем (через интерфейс), либо автоматически (системными процессами, планировщиком). При создании задачи указываются:

  • Тип задачи
  • Приоритет (опционально, по умолчанию 100)
  • Данные для выполнения
  • Время добавления

2. Постановка в очередь

Задача сохраняется в таблицу базы данных и становится доступной для обработки. Сервис очереди периодически (каждую секунду) проверяет наличие новых задач.

3. Выбор для выполнения

Сервис очереди выбирает задачи по следующим критериям:

  • Время следующей попытки меньше текущего времени (или не установлено)
  • Задача не заблокирована другим потоком
  • Сортировка: сначала по приоритету (desc), затем по времени попытки (asc), затем по ID (asc)

4. Блокировка задачи

Выбранная задача блокируется в базе данных, чтобы предотвратить одновременную обработку несколькими потоками. Счетчик попыток увеличивается, устанавливается время следующей попытки.

5. Выполнение задачи

Вызывается соответствующий обработчик задачи. Во время выполнения создается или обновляется запись в истории заданий со статусом "Выполняется".

6. Обработка результата

После выполнения задача может перейти в одно из состояний:

  • SUCCESS — задача выполнена успешно, удаляется из очереди
  • FAILED — задача завершилась с ошибкой, удаляется из очереди
  • RETRY — требуется повторная попытка, задача остается в очереди

7. Завершение

При успешном выполнении или исчерпании лимита попыток задача удаляется из очереди. В истории заданий фиксируется финальный статус: "Выполнено", "Ошибка" или "Прервано".

ℹ️ Транзакционная безопасность

Все операции с задачами выполняются в транзакциях базы данных, что гарантирует целостность данных даже при сбоях системы.

Приоритеты задач

Система поддерживает гибкое управление приоритетами задач. Приоритет определяет порядок выполнения задач в очереди.

Уровни приоритетов

Приоритет Числовое значение Описание Использование
Высокий ≥ 10 Критичные задачи Задачи пользователя, требующие немедленного выполнения
Средний 5-9 Стандартные задачи Обычные операции пользователя
Низкий < 5 Фоновые задачи Системные задачи, которые могут подождать
По умолчанию 100 Стандартный приоритет Используется, если приоритет не указан явно
✅ Умная приоритизация

Система автоматически присваивает более высокий приоритет задачам, инициированным пользователями, по сравнению с автоматическими системными задачами. Это обеспечивает быстрый отклик на действия пользователя.

Как работает приоритизация

При выборе следующей задачи для выполнения система:

  1. Отбирает все задачи, готовые к выполнению (время попытки наступило)
  2. Сортирует их по приоритету (от большего к меньшему)
  3. При одинаковом приоритете сортирует по времени добавления (FIFO - первым пришел, первым вышел)
  4. Выбирает первую задачу из отсортированного списка

Механизм повторных попыток

Одна из ключевых возможностей системы — автоматическое повторение задач при временных сбоях.

Как работают повторные попытки

Параметры повторных попыток

  • Максимальное количество попыток: 10
  • Задержка между попытками: 30 секунд
  • Режим задержки: фиксированная (не увеличивается с каждой попыткой)

Процесс повторной попытки

  1. При ошибке выполнения обработчик задачи устанавливает состояние RETRY
  2. Счетчик попыток увеличивается на 1
  3. Устанавливается время следующей попытки (текущее время + 30 секунд)
  4. Задача остается в очереди
  5. Через 30 секунд задача снова становится доступной для выполнения
  6. Процесс повторяется до успешного выполнения или достижения лимита попыток
⚠️ Исчерпание попыток

Если задача не смогла успешно выполниться за 10 попыток, она удаляется из очереди и помечается в истории со статусом "Ошибка". Это предотвращает бесконечное зацикливание проблемных задач.

Типичные сценарии использования повторов

Сценарий Причина сбоя Результат повтора
Сетевой таймаут Временная недоступность узла Успех при следующей попытке
Блокировка ресурса Ресурс занят другим процессом Успех после освобождения ресурса
Временная перегрузка Система временно перегружена Успех после снижения нагрузки
Критическая ошибка Неправильные параметры задачи Ошибка после всех попыток

Состояния задач

В системе используется несколько состояний для управления жизненным циклом задачи.

Внутренние состояния очереди

Состояние Описание Действие
SUCCESS Задача выполнена успешно Задача удаляется из очереди, в истории статус "Выполнено"
FAILED Задача завершилась с ошибкой Задача удаляется из очереди, в истории статус "Ошибка"
RETRY Требуется повторная попытка Задача остается в очереди для повторного выполнения

Статусы в истории заданий

В истории заданий (доступной пользователям) используются более понятные статусы:

Статус Индикатор Описание
Выполняется InProgress Задача в процессе выполнения
Выполнено Done Задача успешно завершена
Ошибка Failed Задача завершилась с ошибкой
Прервано Canceled Задача была прервана пользователем

Активные задания

Раздел "Активные задания" позволяет просматривать текущее состояние очереди задач и отслеживать задачи, находящиеся в процессе выполнения или ожидающие своей очереди.

ℹ️ Навигация

Чтобы открыть раздел активных заданий, перейдите в меню администрирования и выберите соответствующий пункт в разделе автоматизации.

Информация об активных задачах

В таблице активных заданий отображаются следующие данные:

Колонка Описание
Тип Маркер, указывающий тип задачи: "Системная" или "Пользовательская"
ID Уникальный идентификатор задачи
Название задания Описательное название задачи (или "Без названия" если не указано)
Создана Дата и время добавления задачи в очередь
Попыток выполнения Количество попыток выполнения задачи (бейдж с числом)
Приоритет Приоритет задачи: Высокий, Средний или Низкий
Тип Внутреннее название типа задачи

Фильтрация и поиск

Таблица активных заданий поддерживает следующие возможности фильтрации:

  • Поиск по ID — поиск задачи по её идентификатору
  • Поиск по названию — текстовый поиск по названию задания
  • Фильтр по дате создания — выбор задач, созданных в определенный период
  • Фильтр по типу задачи — отбор задач определенного типа
  • Сортировка — по любой колонке в порядке возрастания или убывания
⚠️ Мониторинг очереди

Наличие большого количества задач в разделе "Активные задания" может указывать на проблемы в работе системы: перегрузку, сбои в выполнении задач или недостаточную производительность. Регулярно проверяйте этот раздел, чтобы убедиться, что очередь обрабатывается нормально.

Прерывание задач

Система поддерживает прерывание выполняющихся задач. Когда задача прерывается:

  1. Устанавливается флаг прерывания
  2. При следующей проверке обработчик обнаруживает флаг и останавливает выполнение
  3. Задача помечается как "Прервано" в истории заданий
  4. Задача удаляется из очереди
ℹ️ Особенности прерывания

Прерывание задачи не происходит мгновенно — система проверяет флаг прерывания в определенных точках выполнения. Некоторые задачи могут выполниться до завершения, прежде чем обнаружат флаг прерывания.

История заданий

Раздел "История заданий" содержит полный журнал всех задач, которые были выполнены или завершились с ошибкой. Это мощный инструмент для аудита, диагностики проблем и отслеживания операций в системе.

Типы заданий

В истории заданий можно фильтровать задачи по типу с помощью переключателя режимов:

  • Пользовательские — задачи, инициированные пользователями (установка агентов, сканирование сети, выполнение скриптов)
  • Системные — автоматические задачи системы (мониторинг, проверка агентов, сбор метрик)
  • Все — показывает задачи обоих типов

Информация в истории

Колонка Описание
Статус Текущий статус задачи: Выполняется, Выполнено, Ошибка, Прервано
Создан Дата и время создания задачи
Название Название задачи или автоматически сгенерированное название на основе типа
Инициатор Пользователь, создавший задачу, или "Планировщик" для системных задач

Фильтрация истории

Доступные фильтры:

  • Статус — Любой, Выполнено, Выполняется, Ошибка, Прервано
  • Дата создания — выбор периода создания задачи
  • Название — текстовый поиск по названию задачи
  • Инициатор — поиск по имени пользователя

Просмотр деталей задачи

При клике на задачу в истории открывается модальное окно с подробной информацией:

Информация в карточке задачи

  • Основная информация — название, статус, тип задачи
  • Временные метки — время создания, время выполнения
  • Инициатор — кто запустил задачу
  • Лог выполнения — пошаговая история выполнения с временными метками
  • Параметры задачи — данные, с которыми выполнялась задача
  • Сообщения об ошибках — если задача завершилась с ошибкой
💡 Совет

История заданий обновляется автоматически каждые 3 секунды, поэтому вы можете наблюдать за выполнением задач в реальном времени. Используйте фильтры по статусу "Выполняется", чтобы отслеживать текущие операции.

Использование истории для диагностики

История заданий — ценный инструмент для поиска причин проблем:

  1. Отфильтруйте задачи со статусом "Ошибка" — найдите все неудачные попытки
  2. Откройте карточку задачи — изучите лог выполнения и сообщения об ошибках
  3. Проверьте параметры — убедитесь, что задача была запущена с правильными данными
  4. Проанализируйте время — возможно, проблема связана с определенным периодом времени

Мониторинг очереди

Правильный мониторинг очереди задач критически важен для здоровья системы.

Признаки нормальной работы

  • В разделе "Активные задания" количество задач не превышает несколько десятков
  • Задачи выполняются в разумные сроки (минуты, не часы)
  • Счетчик попыток выполнения большинства задач равен 1 или 2
  • В истории заданий преобладают задачи со статусом "Выполнено"

Признаки проблем

🚨 Проблемы с очередью
  • Сотни задач в активной очереди — возможна перегрузка системы или зависание обработчика
  • Высокий счетчик попыток (близко к 10) — задачи постоянно завершаются с ошибкой
  • Старые задачи в очереди (несколько часов или дней) — задачи не обрабатываются
  • Много задач со статусом "Ошибка" — системные проблемы

Действия при проблемах

  1. Проверьте работу сервиса очереди — убедитесь, что процесс обработки задач запущен
  2. Изучите логи системы — найдите причины ошибок в задачах
  3. Проверьте ресурсы сервера — убедитесь, что достаточно CPU и памяти
  4. Проверьте подключение к базе данных — задачи могут не обрабатываться при проблемах с БД
  5. При необходимости перезапустите сервис — иногда это помогает устранить временные проблемы

Метрики для отслеживания

Метрика Норма Проблема
Количество активных задач < 50 > 200
Средний счетчик попыток 1-2 > 5
Процент успешных задач > 95% < 80%
Время выполнения задачи Секунды-минуты Часы

Рекомендации

Для администраторов

Мониторинг и обслуживание

  • Регулярно проверяйте раздел "Активные задания" — не реже раза в день
  • Настройте оповещения при превышении количества активных задач
  • Периодически просматривайте историю заданий со статусом "Ошибка"
  • Убедитесь, что сервис обработки задач настроен на автозапуск при перезагрузке сервера
  • Следите за размером таблицы истории заданий — она может расти быстро

Производительность

  • При высокой нагрузке рассмотрите увеличение количества потоков обработки (по умолчанию 40)
  • Убедитесь, что база данных оптимизирована (индексы, производительность запросов)
  • Мониторьте использование CPU и памяти на сервере
  • Не запускайте одновременно большое количество тяжелых задач (например, сканирование множества сетей)

Для пользователей

Работа с задачами

  • Не запускайте дублирующие задачи — проверьте "Активные задания" перед созданием новой
  • Используйте приоритеты для важных операций, требующих быстрого выполнения
  • Если задача долго выполняется, проверьте её статус в "Истории заданий"
  • При ошибках изучите детали в карточке задачи — часто там указана причина проблемы
  • Не прерывайте задачи без необходимости — дайте им завершиться естественным образом
✅ Лучшие практики

Асинхронная очередь задач — это мощный инструмент, который делает INFRAX масштабируемым и отказоустойчивым. Правильное использование и мониторинг очереди обеспечивают стабильную работу всей системы.