Управление сервисными службами
Служба 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;
© 2009, Компания DIRECTUM
|
Отправить комментарий к этому разделу на
support@directum.ru
|