Руководство пользователя Менеджера Сценариев

5.Эксплуатация.

5.1.Работа с расписаниями.

5.1.9.Работа с подзаданиями в системе запуска расписаний.

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

  • параллельной обработки больших объемов данных;
  • синхронизации данных между множеством систем;
  • реализации сложных процессов с зависимостями между шагами;
  • изоляции ошибок: сбой в одном подзадании не останавливает выполнение остальных;
  • повышения производительности и отказоустойчивости сложных процессов.

Основные характеристики подзаданий.

  • автоматическое создание: система сама создает подзадания, пользователь не может создать подзадание вручную — это делает интеграционный сценарий;
  • иерархическая структура: каждое подзадание имеет parentId — ID непосредственного родительского задания и rootId — ID корневого (основного) задания;
  • параллельное и последовательное выполнение: в рамках одного сценария подзадания выполняются последовательно от источника к приёмнику, но подзадания источников, если их несколько, выполняются параллельно. Аналогично и для приёмников: их подзадания выполняются параллельно. Такой подход обеспечивает оптимальный баланс между упорядоченностью процесса и производительностью: этапы выполняются строго последовательно (источник - приёмник), но обработка данных внутри этапа — максимально параллельно.
  • архитектура системы поддерживает и более глубокое распараллеливание, например, за счёт использования нескольких потребителей (consumers) из одного топика Kafka, что позволяет обрабатывать данные в реальном времени с высокой пропускной способностью;
  • независимое выполнение: подзадания выполняются изолированно друг от друга;
  • специализация: каждое подзадание обрабатывает одну систему-источник или систему-приёмник;
  • автономный жизненный цикл: подзадание имеет собственные статусы, параметры и время выполнения.

Важное! Пользователь не может создавать подзадания вручную: их создание инициируется интеграционным сценарием (ESB) в процессе выполнения основного задания. Если ESB-сценарий запрограммирован на создание подзаданий, он сделает это при любом способе запуска (ручном, по расписанию, активатором БД и так далее).

Пользователь может просматривать подзадания, мониторить и при необходимости вмешиваться в их выполнение.

Типы подзаданий.

Система различает два типа подзаданий по логике выполнения:

  1. Подзадания источника создаются при выполнении основного задания. Они предназначены для первичной обработки входных данных: чтение, фильтрация, трансформация и тому подобных.

    Выполняют операции извлечения данных из внешних систем. В интерфейсе отображаются в группе «Подзадания источника».

  2. Подзадания приёмника предназначены для обработки результатов, полученных от подзаданий источника (записи в целевые системы, агрегации, уведомлений и прочих подобных).

    Подзадание-приёмник создаётся асинхронно в момент, когда сообщение, отправленное подзаданием-источником в топик Kafka, прочитывается конкретным потребителем, отвечающим за данный приёмник.

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

    В интерфейсе они отображаются в группе «Подзадания приёмника».

Рисунок 28Просмотр подзаданий источника и подзаданий приемника.
Просмотр подзаданий источника и подзаданий приемника (исправить ссылки после перенумерации).

Где найти подзадания в пользовательском интерфейсе.

В разделе «Очередь заданий» (рисунок 29) необходимо осуществить выборку по фильтру для поля «Тип запуска (кем запущено)» и выбрать тип запуска «Подзадания» — в таблице отобразятся все подзадания системы.

Рисунок 29Результаты выборки по фильтру «Подзадания».
Результаты выборки по фильтру «Подзадания» (исправить ссылки после перенумерации).

Кликнуть по ID задания — система осуществит переход на конкретное задание:

  • основное задание отображается с иконкой «+» в колонке «ID задания»;
  • кликните на «+» чтобы раскрыть список подзаданий.
Рисунок 30Окно просмотра подзаданий выбранного задания (исправить ссылки после перенумерации).
Окно просмотра подзаданий выбранного задания (исправить ссылки после перенумерации).
Таблица 10Структура блока таблицы подзаданий.
Поле Тип данных Описание Пример
Уникальный идентификатор Текст (только чтение) Уникальный идентификатор подзадания в системе. 600023135
Данные запроса Кнопка/JSON Входные данные подзадания в формате JSON, открываются в диалоговом окне
{
"textContent": "получены данные из системы `registry` для обработки в системе `esbdb`"
}
Время запуска Дата/Время Дата и время начала выполнения подзадания. 27.10.2025 19:22
Длительность выполнения Число (только чтение) Время выполнения в секундах, рассчитывается автоматически. 45
Тип запуска Текст (только чтение) Тип выполнения задания, всегда «подзадание». подзадание
Приоритет Число Приоритет выполнения от 0 (низкий) до 9 (высокий), доступен для изменения. 5
Статус Текст Текущий статус выполнения подзадания, доступен для изменения. Выполнено, Исполняется, Новое, Ошибка,
Пауза, Повтор, Прервано, Пропущено
Повторы Число (только чтение) Количество повторных попыток выполнения подзадания. 2
Инстанс Текст (только чтение) Нода кластера, на которой выполнялось подзадание. dev.inpolus.ru
Лог задания Ссылка Ссылка на технический лог системы выполнения в Graylog. [Открыть]
Мониторинг исполнения Ссылка Ссылка на графики выполнения и метрики подзадания в Jaeger. [Открыть]
Лог исполнения Ссылка Ссылка на лог бизнес-операций подзадания Graylog. [Открыть]

Полный алгоритм работы подзаданий.

Шаг 1: создание и запуск основного задания.

Основное задание может быть создано пользователем вручную, по расписанию, активатором или событием. При создании заданию присваивается уникальный идентификатор и начальный статус «Новое». После создания система автоматически переводит задание в статус «Исполняется» и начинает выполнение бизнес-логики.

Шаг 2: вызов интеграционного сценария (ESB).

Основное задание делегирует обработку данных внешнему интеграционному сервису через REST API. Выполняется вызов заранее настроенного сценария в Enterprise Service Bus, который будет управлять дальнейшей обработкой данных и созданием подзаданий.

Шаг 3: создание подзаданий источника.

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

Шаг 4: выполнение подзаданий источника.

Подзадания источника выполняются независимо от основного задания и друг от друга. В ходе выполнения происходит следующее:

  • подзадание источника извлекает данные, обогащает их служебной информацией и отправляет их в топик Kafka;
  • после отправки сообщения в Kafka подзадание источника завершает свою работу, но его окончательный статус определяется позже на основе результатов обработки этого сообщения подзаданиями-приёмниками;

Определение итогового статуса происходит следующим образом:

  • подзадание источника получает статус «Выполнено» только после того, как все связанные с ним подзадания-приёмники достигнут финальных статусов («Выполнено», «Ошибка», «Пропущено» и так далее).
  • если хотя бы одно подзадание-приёмник завершится со статусом «Ошибка», то подзадание источника (а также основное задание) переводится в статус «Ошибка», даже если ранее уже имело статус «Выполнено».

При этом возможна ситуация, когда:

  • все подзадания-приёмники изначально завершились успешно, и основное задание получило статус «Выполнено»;
  • позже, например, при повторной обработке (из-за задержек или ретраев), один из приёмников повторно обрабатывает то же сообщение и завершается с ошибкой;
  • в этом случае система корректирует статус: подзадание источника и основное задание автоматически переводятся в статус «Ошибка».

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

Шаг 5: автоматическое создание подзаданий приёмника.

Подзадания приёмника создаются независимо и асинхронно:

  • подзадание-источник завершает свою работу и отправляет сообщение с данными в топик Kafka;
  • для каждого приёмника, настроенного в сервисе, существует отдельный потребитель (consumer), который постоянно опрашивает этот топик;
  • как только конкретный consumer для приёмника получает сообщение, он немедленно создаёт одно новое подзадание-приёмник и запускает его на выполнение. Это означает, что подзадания для разных приёмников могут создаваться и выполняться в разное время, полностью независимо друг от друга. Задержка между созданием составляет обычно около 1 секунды (время опроса топика) плюс время обработки предыдущего задания этим же потребителем.

Важно: Основное задание и подзадания-источники не ждут завершения подзаданий-приёмников. Вся координация происходит реактивно, через события об изменении статусов.

Шаг 6: получение ответа и завершение.

Подзадания приёмника выполняют свои операции и возвращают результаты в систему. Каждое подзадание может сохранять внешние данные и метаинформацию о выполнении операции. Система фиксирует успешное завершение операций и подготавливает данные для финальной агрегации статусов. Если какое-либо подзадание «зависло» в статусе «Исполняется»:

  • проверьте логи проблемного подзадания через все три ссылки;
  • убедитесь, что внешняя система доступна и отвечает;
  • при необходимости вручную измените статус подзадания через интерфейс.

Шаг 7: финальная обработка и агрегация статуса.

Фоновый процесс мониторинга постоянно отслеживает статусы всех подзаданий (как источника, так и приёмника). Как только все подзадания достигают финальных статусов выполнения, система автоматически определяет общий статус основного задания. Агрегация происходит по принципу приоритета статусов: наличие хотя бы одного подзадания со статусом «Ошибка» устанавливает основной статус «Ошибка», наличие «Прервано» - «Прервано», в остальных случаях основное задание получает статус «Выполнено».

Ключевой принцип: система всегда выбирает наихудший статус среди всех подзаданий для определения общего статуса основного задания. Это согласуется с бизнес-логикой, где:

  • пропуск — это ожидаемое поведение (фильтрация по условиям);
  • ошибка — это непредвиденная ситуация, требующая внимания;
  • прервано — это преднамеренная остановка процесса.
Таблица 11Таблица приоритетов статусов подзаданий.
Приоритет Статус Влияние на основной статус задания
1 (высший) Ошибка Основной = «Ошибка».
2 Прервано Основной = «Прервано».
3 Пропущено Основной = «Выполнено» (если нет ошибок/прерываний).
4 (низший) Выполнено Основной = «Выполнено» (если нет других статусов).

Для отслеживания прогресса выполнения группы подзаданий:

  • используйте массовый выбор и фильтрацию по полю «Тип запуска (кем запущено)»;
  • отфильтруйте подзадания по ID основного задания;
  • отслеживайте колонку «Статус» для понимания общего прогресса выполнения;
  • используйте колонку «Длительность» для выявления «зависших» подзаданий.
  • всегда проверяйте «Данные запроса» для понимания контекста выполнения.

Управление подзаданиями.

  1. Просмотр и диагностика.
    • Данные запроса — кликните по иконке для просмотра JSON-данных подзадания.
    • Логи выполнения — используйте три типа логов для полной диагностики:
      • «Лог задания» — технический лог системы;
      • «Мониторинг исполнения» — графики и метрики выполнения;
      • «Лог исполнения» — бизнес-операции подзадания.
  2. Операции управления.
    • Изменение статуса: кликните на текущий статус — выберите новый:
      • «Повтор» — возобновить выполнение;
      • «Прервано» — остановить выполнение.
    • Изменение приоритета: кликните на цифру приоритета — выберите значение от 0 (низкий) до 9 (высокий).
  3. Массовые операции.
    • Отметьте чекбоксы у нужных подзаданий.
    • Используйте кнопки:
      • «Удалить» — удаление выбранных подзаданий;
      • «Сменить статус» — массовое изменение статуса группы заданий/подзаданий.

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

Без подзаданий пришлось бы строить монолитные последовательные процессы, которые были бы более медленными, менее надежными и сложными в управлении.