Управление сервисными службами

 

Служба Workflow

 

Схема обработки маршрута задач

В обработке маршрутов задач принимают участие клиентские станции, служба Workflow и процессы SBWorkflowProc:

·         клиентские станции инициируют обработку маршрутов и ее прекращение. При старте задачи и при выполнении задания, а также при прекращении или удалении задачи они передают службе Workflow ИД задачи для обработки;

·         служба Workflow управляет обработкой маршрутов. Запускает процессы SBWorkflowProc и распределяет по ним переданные ей клиентскими станциями задачи для обработки, а также удаляет из очереди на обработку прекращенные и удаленные задачи. При остановке службы Workflow все запущенные процессы SBWorkflowProc завершают работу;

·         процессы SBWorkflowProc осуществляют обработку маршрутов задач, назначенных им службой Workflow.

Информация о принятых к обработке и об обрабатываемых в текущий момент задачах хранится в таблице SQL-сервера SBWorkflowProcessing. Описание ее полей сведено в таблицу:

 

Имя поля

Тип

Описание

TaskID

int (4)

ИД обрабатываемой задачи

NextDateProcessing

datetime(8)

Дата и время следующей обработки маршрута

ProcessNumber

int(4)

Номер процесса, который будет обрабатывать задачу

QueueTime

datetime(8)

Дата и время регистрации задачи в таблице

AttemptCount

int(4)

Количество попыток обработки маршрута с превышением выделенного времени

В общем механизм обработки маршрутов задач работает по следующей схеме (подробное описание отмеченных номерами элементов приведено ниже):

№ 1. Служба Workflow cразу после запуска создает процессы SBWorkflowProc и контролирует их наличие. Количество процессов задается в настройках службы, в параметре ProcessCount (настройки службы описаны ниже). Каждый процесс имеет свой порядковый номер: 1, 2 и т.д. Если процесс с определенным номером по некоторым причинам (см. описание элемента № 5) завершился, служба тут же запускает новый процесс с тем же номером.

№ 2. При старте/прекращении или удалении задачи и при выполнении задания клиентские станции передают службе Workflow ИД задачи, маршрут которой соответственно надо начать/прекратить или продолжить обрабатывать. Данные от клиентской станции службе Workflow передаются по протоколу TCP/IP. Информация о компьютере, на котором установлена служба Workflow, считывается из параметра WorkflowSvc компоненты Установки системы (см. описание компоненты «Установки системы» в книге «Компоненты системы DIRECTUM»).

№ 3. Служба Workflow при обращении к ней клиентской станции по факту старта задачи или по факту выполнения задания добавляет новую строку в таблицу SQL-сервера SBWorkflowProcessing и заполняет ее поля следующим образом:

·         TaskID – переданное клиентской станцией ИД задачи;

·         ProcessNumber – следующий по номеру за указанным в предыдущей строке процесс;

·         QueueTime –  текущие дата и время;

·         AttemptCount – 0.

При обращении клиентской станции по факту прекращения или удаления задачи служба Workflow проверяет, есть ли эта задача в таблице и, если есть, удаляет ее оттуда.

№ 4. Каждый из процессов SBWorkflowProc с некоторой периодичностью (задается в настройках службы, в параметре CheckInterval) считывает из таблицы SBWorkflowProcessing все назначенные ему задачи с пустым значением поля NextDateProcessing или со значением, большим текущего серверного времени, и последовательно обрабатывает их маршруты:

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

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

 

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

·         если выполнение всех активных блоков прошло без ошибок, то процесс запрашивает обновленный состав активных блоков и снова для каждого из них реализует очередной этап выполнения по той же схеме, что и в первый раз;

·         так продолжается до тех пор, пока изменяется состав активных блоков и пока не превышено задаваемое в настройках службы максимальное время работы над одной задачей. Если оказывается превышено максимальное время работы над одной задачей, то процесс увеличивает в таблице SBWorkflowProcessing счетчик попыток обработки задачи (поле AttemptAccount); если число попыток при этом оказывается равным 5, то процесс прекращает задачу, удаляет запись о ней из таблицы SBWorkflowProcessing, отсылает инициатору уведомление о прекращении и переходит к обработке следующей задаче. Если перестал изменяться состав активных блоков, то процесс разблокирует задачу и удаляет из таблицы SBWorkflowProcessing запись о ней. Если при этом среди активных есть блоки типа «Ожидание» и/или «Мониторинг», то процесс тут же добавляет в таблицу запись со следующими значениями полей:

·         TaskID, ProcessNumber – те же значения, что и были;

·         NextDateProcessing – дата следующей обработки маршрута задачи согласно вычисленным свойствам блоков «Ожидание» и «Мониторинг»;

·         QueueTime – текущее время;

·         AttemptCount – 0.

№ 5. 1 раз в 10 секунд процессы SBWorkflowProc проверяют объем занимаемой ими памяти, время выполнения и наличие запущенной службы Workflow.

Если какой-то процесс обнаруживает, что объем занимаемой им памяти превышает указанное в настройках службы в параметре MaxMemoryAmount значение или отсутствует запущенная служба Workflow, то процесс дорабатывает по текущей задаче, после процесс завершается. При этом строка, соответствующая последней обрабатываемой задаче, из таблицы SBWorkflowProcessing удаляется. А строки, соответствующие другим, назначенным этому же процессу задачам, но не обработанным им, остаются в таблице SBWorkflowProc. Счетчик попыток их обработки (поле AttemptCount) не изменяется, т.к. процесс не делал попытки их обработать.

Если оказывается, что превышено указанное в настройках службы в параметре TimeOut время выполнения, то процесс завершается сразу, ничего не дорабатывая. Строка, соответствующая обрабатываемой этим процессом в момент завершения задаче, остается в таблице. При следующей попытке ее обработки после перезапуска процесса, счетчик попыток (поле AttemptCount) окажется равным 2. Если ситуация повторится 5 раз подряд, то задача будет прекращена.

 

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

Исключение составляют маршруты с последовательной логикой выполнения, т.е. маршруты, удовлетворяющие следующим условиям:

- каждый блок имеет только один вход и один выход;

- блок типа «Конец» соединен с последним блоком схемы по условию объединения «И»;

- нет блоков типа «Задание» с признаком параллельных заданий.

Такие маршруты обрабатываются службой Workflow того сервера, на котором сейчас работают с задачей.

 

 

 

 

См. также:

·         Общие сведения о службе Workflow;

·         Лог-файл и журнал событий;

·         Выполнение блоков маршрута.