Дерево страниц
Skip to end of metadata
Go to start of metadata

Менеджер агентов (МА) - отдельное Web-приложение, которое предоставляет GUI для определения настроек агентов, отображает статус исполнения агентов и протоколов сбоев. Все эти данные сохраняются в собственной РБД. МА отслеживает расписания запусков агентов при помощи фреймворка Quartz и, при необходимости их запуска, отправляет приложению с агентами JMS-сообщение с параметрами для запуска.

МА решает следующие задачи:

  • Централизованное управление агентами, реализованными в разных Java-приложениях (не только CMJ) и не имеющих доступа к единой БД
  • Координирование полученных входных данных для агентов через JMS-очереди.
  • Специальные средства для обработки основного типа JMS-сообщения - "Протокола изменений документа" (ChLog)
  • Возможность запуска агент одновременно на множествах серверах и распределение между ними нагрузку для улучшения масштабируемости системы
Статус

ГОТОВО

Комментарий
Сценарий активации агентов
  1. При старте приложения, КМА подписывается на очередь для коммуникаций с МА (TS)
  2. Срабатывает Quartz Trigger
  3. МА находит соответствующую настройку запуска, дескритпор агента, приложения, кластера
  4. МА, отправляет в очередь TS сообщение, содержащее идентификатор агента, параметры и т.п.
  5. Сообщение поступает в МОМ
  6. КМА получает сообщение на запуск агента. Если режим запуска агента MANY, то все КМА в кластере получат копию сообщения.
  7. КМА по данным из сообщения на запуск агента создает JMS-подписку на очередь с данными. Другие КМА кластера используют туже самую подписку.
  8. КМА получает java-объект агента и запускает его в пуле потоков. Параметром передается объект для извлечения сообщений по сформированной подписке.
  9. Когда освободится поток в пуле, агент начнет работу. Агент в цикле запрашивает из МОМ очередное сообщение с данными и обрабатывает его. За счет общей для всех КМА подписки, МОМ передает сообщение только одному произвольному КМА в кластере.


Схема

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

Компоненты

Название компонентаОписание компонента

Агент

Агент - это некоторый программный код, исполняющейся в фоновом режиме. Агент активируется менеджером агентов в соответствии с внешними настройками для его запуска. Для активации через менеджер агентов, агент должен иметь класс, реализующий интерфейс Agent.

Менеджер агентов (МА)

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

Клиент менеджера агентов (КМА)

Библиотека (jar), встраиваемая в конечные приложения для взаимодействия МА с приложением

Приложение с агентами

Приложение с агентами должно включать в себя jar-библиотеку для удаленного взаимодействия с менеджером агентов. В зависимости от типа приложения, могут подключаться дополнительные библиотеки. В частности, библиотека для получения протоколов изменений документов CompanyMedia (ChLog) через JMS-очереди CM и библиотека для активации агентов, реализованных в виде spring-бинов.

Пул серверов

Для распределения вычислительной нагрузки экземпляры приложений с агентами могут разворачиваться на множестве серверов, составляющих кластер балансировки. Менеджер агентов должен стремиться обеспечить запуск очередного агента на наименее загруженном сервере в кластере. Каждая НЗ должна быть ассоциорована с некоторым пулом серверов, определяющем кластер балансировки для данной НЗ. На каждом сервере пула должно быть установлено приложение с агентом, указанным в НЗ. В простой конфигурации пул может быть единым для всех НЗ.

Message Oriented Middleware (MOM)

Инфраструктура для публикации и доставки JMS-сообщений с данными для агентов, а также для служебных сообщений. Реализуется сторонними продуктами. Предполагается использование Artemis ActiveMQ, т.к. его клиент встроен в WildFly.

Очередь данных

JMS-Queue или JMS-Topic, через которую агент получает сообщения для обработки. В системе может быть несколько разных очередей данных, но отдельный агент за один запуск может получать сообщения только из одной очереди, управляемой МА.

Системная очередь

JMS-Topic или JMS-Queue, через которые МА и КМА обмениваются служебными сообщениями. Системные очереди не durable.



Сущности

Название сущности

Описание сущности

Очередь данных

Содержит имя JMS-очереди, в которую публикуются сообщения, которые должны обрабатывать агенты и тип очереди (Topic или Queue).

Также содержит имя очереди для отложенной доставки и длительность задержки. Для агентов в режиме Delayed, в эту очередь будут копироваться сообщения предыдущей очереди, но с заголовком для отложенной доставки и идентификатором НЗ для фильтрации при приеме сообщений

Дескриптор агента

Настройка содержит

  • идентификатор агента - произвольная уникальная человекочитаемая строка.

Также включает в себя следующие режимы агента, основную часть из которых будет интерпретировать КМА.

Тип входных данных

  • самостоятельный агент - менеджер только активирует агент, фиксирует статус его исполнения и результат работы
  • JMS-сообщения (в частности сообщения типа ChLog от CompanyMedia)

Если тип входных данных агента "JMS-сообщения", то дескритпор содержит:

  • ссылку на "очередь данных".

Режим конкуренции

  • ANY - агент активируется только на одном сервере кластера
  • MANY - одновременно на нескольких серверах

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

  • наложить - разрешает запуск одновременно с предыдущим запуском. Дизайн агента должен предусматривать конкурентное исполнение в едином адресном пространстве.
  • игнорировать - не запускать новый экземпляр агента
  • прервать - прерывать исполнение предыдущего экземпляра агента и запустить новый экземпляр

"Самостоятельный агент" может активироваться только по расписанию.

Каждый "Дескриптор агента" связан с одним "Дескриптором Приложения".

Для увеличения возможности масштабирования системы, агенты по JMS-сообщениям, в основной массе, должны разрабатываться для режима MANY и ASAP, либо Delayed.

Настройка запуска (НЗ)

Каждый агент может активироваться по нескольким разным НЗ с разными параметрами. НЗ имеет разновидности:

  • НЗ для ASAP/Delayed агенов
  • Группа агентов по расписанию
  • Агент по расписанию (SCHED)

Любая разновидность НЗ содержит:

  • собственный идентификатор - человекочитаемый, т.к будет использован, как имя JMS-подписки (<app-name>-<agent>-<seq-num> ???),
  • параметры для агента,
  • статус последней активации ("выполнен успешно", "завершен с ошибкой", "прерван"),

  • текущий статус ("работает", "ожидание", "выключен").

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

В конечном итоге параметры будут передаваться КМА в JSON-формате вместе с сигналом на запуск агента.

НЗ для "агента по расписанию" должна быть включена в одну или более "Групп агентов по расписанию"

Настройка запуска ASAP/Delayed агентов

Может быть содана только для агентов с типом входных данных "JMS-сообщения".

  • фильтр сообщений (может быть не заполнен)
  • количество подряд идущих сбоев, после которого автоматически отключать выполнение агента или "группу агентов" (только для агенов по "JMS-сообщениям", т.к. КМА автоматически перезапускает только данный тип агенов при сбое)

Группа агентов по расписанию

Содержит

  • расписание запуска
  • список "настроек агента по расписанию" и их порядок

В группу могут входить только агенты

  • одного приложения,
  • с единым режимом конкуренции (ANY либо MANY).

В режиме ANY вся группа выполняется на одном сервере.

ASAP/Delayed агенты не могут входить в "группу агентов по расписанию"

Дескриптор приложения

Содержит имя приложения (по-умолчанию имя ear-файла) и задает отдельное пространство имен для идентификаторов агентов. "Дескриптор приложения" связан с одним "Дескриптором кластера". Ссылка на дескриптор кластера не обязательная (см. п. "публикация агентов")

Пул серверов

Содержит список имен хостов, взодящих в пул. Один и тотже хост может входить в несколько пулов.