Управление процессами

Модуль "Управление процессами" добавляет в Docsvision реализацию системы управления бизнес-процессами: настройка и среда выполнения БП.

Архитектура модуля представлена на следующей схеме.

Архитектура модуля "Управление процессами"
Рисунок 1. Архитектура модуля "Управление процессами"
Работу модуля обеспечивают следующие компоненты:
  1. Служба Docsvision 5.5 Workflow Server. Осуществляет управление состоянием БП (запуск, старт, стоп) и рабочими процессами (запуск, остановка).

  2. Рабочие процессы:

    • ExecLogic.exe — предназначен для выполнения БП режиме Any CPU и x64.

    • ExecLogic32.exe — предназначен для выполнения БП в режиме x86.

    Функции рабочих процессов:
    • Выделение процессу шлюза из пула шлюзов.

    • Выделение процессу сессии из пула сессий.

    • Контроль состояния бизнес-процесса.

    • Контроль потребляемой памяти рабочим процессом.

    • Контроль основных рабочих потоков и времени выполнения функций в потоках. Обнаружение зависаний в пользовательском коде.

    • Управление очередью исполнения процессов.

    • Контроль времени жизни рабочего процесса.

  3. Сервер Docsvision для хранения и обработки всех данных приложения (шаблоны и экземпляры процессов, а также объекты и файлы, обрабатываемые в БП).

  4. Карточка Бизнес-процесс — карточка Docsvision, в которой хранится описание БП: используемые функции и их связи, шлюзы, переменные БП, журнал работы БП.

  5. Шлюзы — обеспечивают интеграцию (обмен данными, мониторинг событий, собственная реализация обработки информации) с внешними по отношению к модулю системами:

    • Шлюз для интеграции с системой Docsvision.

    • Шлюз для интеграции с файловой системой.

    • Шлюз к простым типам.

    • Шлюз для интеграции с сервером Microsoft Exchange (позволяет осуществлять мониторинг почтового ящика, отправлять и получать почтовые сообщения).

      Компоненты шлюза:
      • Клиентский компонент — предоставляет пользовательский интерфейс для отображения и выбора объектов шлюза.

      • Серверный компонент — предоставляет программный интерфейс для работы с объектами шлюза.

  6. Функции — реализуют определённую операцию обработки данных. Существует два типа функций:

    • Общие функции — предоставляют операции, не зависящие от внешних систем (например, запуск и завершение БП, разветвление и объединение ветвей, таймер);

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

      Функции имеют два компонента:
      • Клиентский компонент — предоставляет пользовательский интерфейс для настройки функции.

      • Серверный компонент — предоставляет реализацию алгоритма, заложенного в функцию.

  7. Карточка Монитор бизнес-процессов — используется для просмотра и изменения состояния выполняющихся БП.

  8. Справочники шлюзов и функций — содержат списки шлюзов и функций, зарегистрированных в Docsvision.

Описание работы службы Workflow

Служба Workflow (Docsvision 5.5 Workflow Server) ведет групповую обработку БП: при наличии в системе нескольких активных БП часть из них будет обрабатываться параллельно (активные БП выявляются при помощи "детектора активных процессов"). Обрабатывающиеся параллельно процессы образуют группу обрабатываемых процессов. Пока служба обрабатывает эти БП, активные процессы, не вошедшие в службу, ожидают обработки в очереди процессов.

Описание работы службы Workflow
Рисунок 2. Описание работы службы Workflow

Число параллельно обрабатываемых процессов, то есть число процессов в группе обрабатываемых процессов, определяется в настройках сервиса Workflow. Процессы в группе обрабатываемых процессов объединяет только то, что в какой-то момент времени они одновременно обрабатываются сервисом Workflow.

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

Процессы из группы обрабатываются за разное время; при завершении обработки одного из процессов его место в группе занимает процесс из очереди ожидающих обработку.

Каждому процессу выделяется на обработку определённое время — квант времени. Длительность кванта времени в общем случае зависит от приоритета процесса. Выделение на обработку процесса кванта времени не означает, что процесс обязан исполниться именно за этот период: на исполнение может потребоваться как меньше, так и больше времени. Если процесс не успел исполниться за отведенный квант времени, он возвращается в очередь процессов, ожидающих обработки.

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

Теоретически возможна ситуация, в которой все или почти все процессы из группы обрабатываемых процессов будут содержать слишком долго работающие функции и тем самым препятствовать началу исполнения других активных процессов. Чтобы избежать этого, в настройках службы можно задать максимально допустимое число процессов, одновременно превысивших таймаут. Если это число превышено, рабочий процесс принимает решение о перезагрузке.

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

  1. Поиск всех процессов в системе, активных в текущий момент времени.

  2. Составление списка активных процессов.

  3. Формирование из объектов полученного списка процессов очереди процессов, ожидающих обработки.

  4. Выборка процессов из очереди.

  5. Отправка на обработку — освободившееся место в группе обрабатываемых занимает процесс, первый в очереди процессов.

Работа в кластере

Нагрузка по обработке бизнес-процессов может быть распределена между несколькими экземплярами службы Workflow, запущенными на отдельных компьютерах — кластером Workflow.

Каждому экземпляру Workflow, входящему в кластер, администратором назначается определённая доля обрабатываемых БП. Нагрузка может быть распределена поровну или, например, три к четырём (для двух сервисов: доля первого к доле второго соответственно): приблизительно 43% процессов будет обрабатывать первый сервис, 57% — второй.

Алгоритм обработки БП в кластере Workflow:
  1. В зависимости от доли сервиса Workflow, ему назначается определённый участок чисел из ряда 0 — 1000.

    Например, для долей 3/4 — первому выделяется участок от 0 до 428, второму — 429 до 999. Данные значения хранятся в таблице dvtable_{b4a2559b-45fd-4aba-919f-0f170ccddb5d}: в поле ProcessedLBound — начальное значение, в поле ProcessedUBound — конечное.

  2. При запуске БП ему присваивается число от 0 до 1000 — количество миллисекунд во времени его запуска БП. Значение хранится в поле dvtable_{0ef6bcca-7a09-4027-a3a2-d2eeeca1bf4d}.DateBeginMsecs.

  3. Сервис Workflow выбирает для выполнения БП, у которого DateBeginMsecs попадает в промежуток ProcessedLBound — ProcessedUBound.

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

  4. Если один из сервисов Workflow становится недоступен, доли перераспределяются между другими активными сервисами.

Распределение БП в кластере Workflow
Рисунок 3. Распределение БП в кластере Workflow