Несколько служб workflow для одной системы DIRECTUM. Теперь это реально.

16 20

Проблема.

До недавнего времени масштабируемость службы WorkFlow достигалась лишь за счет увеличения числа процессов. Но данный способ решения является временным и рано или поздно приводит к некоторым проблемам.

Среди этих проблем можно отметить резкое возрастание количества тупиков (DeadLock - ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами). Тупики, помимо проблем при работе, вызывают множество проблем при отладке, т.к. для их возникновения нужны специфические условия одновременного выполнения нескольких процессов.

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

Решение.

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

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

Для реализации данной возможности в настройке системы «WorkflowServiceName» можно задать имена нескольких компьютеров через символ «;». При этом в таблицу SBWorflowProcessing добавляется поле с номером службы (ServiceNumber).

Установка:

На одну физическую машину можно поставить только одну службу Workflow, ограничение связано с именованием служб в ОС.

У службы WorkFlow теперь появился отдельный установщик. Процесс установки не имеет существенных отличий, за исключением одного дополнительного этапа. Установщик проверяет, заполнено ли поле WorkflowServiceName в настройке системы (в таблице XIni), и в случае, если поле пустое, прописывает себя в это поле. В противном случае установщик предлагает 3 возможных варианта:

  • Установить только эту службу и удалить информацию о других службах;
  • Добавить службу и сделать ее главной службой Workflow;
  • Добавить службу к списку дополнительных служб Workflow.

Дальнейшие действия ничем не отличаются от процесса обычной установки сервисных служб.

Денис Баранов

Если главная служба остановится, поведение системы, насколько я понял, будет такое же как в предыдущих версиях. А если остановится дополнительная служба?

Алексей Язынин

Какие-то рекомендации уже можете дать по практическому использованию механизма?

Как определить, что нам нужно несколько служб, а не одна?

Сколько одновременно работающих служб тестировалось?

Можно ли устанавливать доп. службы во время работы пользователей с системой?

Артем Шастин
Если главная служба остановится, поведение системы, насколько я понял, будет такое же как в предыдущих версиях. А если остановится дополнительная служба?
В случае остановки дополнительнйо службы задачи будут стартоваться как будто все нормально, но часть задач (которые выпадут на нерабочую службу) обрабатываться не будет. При этом,
если не просто остановить службу, а еще и убрать ее из таблицы XIni, то её задачи равномерно перераспределятся между остальными службами.

 

Алексей Баранов

Ограничения использования по версиям DIRECTUM есть?

Артем Шастин
Какие-то рекомендации уже можете дать по практическому использованию механизма? Как определить, что нам нужно несколько служб, а не одна?
Заводить несколько служб имеет смысл если одна не справляется (в очереди постоянно есть задачи), а увеличивать на ней количество процессов уже нельзя (не справляется компьютер).
 
Сколько одновременно работающих служб тестировалось?
Тестировалось 2-3 одновременно работающих службы.
 
Можно ли устанавливать доп. службы во время работы пользователей с системой?
Да, можно.
Артем Шастин
Ограничения использования по версиям DIRECTUM есть?
Данная возможность реализована в 4.8. Соотвественно поддерживаться будет начиная с 4.8.
Александр Павлов

А можно задать чтобы только один конкретный типовой маршрут выполнялся только на дополнительной службе?

Артем Шастин

Нет, такой возможности нет. Все задачи распределяются равномерно между службами, а затем между их процессами.

Константин Широбоков

Изменилась ли в 4.8 структура таблицы SBWorkflowProcessing ввиду того, что задача может обрабатываться различными службами разных машин? Каким образом администратор может понять какой процесс и какой службы обрабатывает конкретную задачу?

Константин Широбоков

PS: отличие в процессе установки есть и в части назначения портов для службы Workflow. Указать порты, используемые службой, можно лишь при установке главной службы.

PS1: структура конфигурационных файлов служб(ы) worflow не изменилась.

Артем Шастин
Изменилась ли в 4.8 структура таблицы SBWorkflowProcessing ввиду того, что задача может обрабатываться различными службами разных машин? Каким образом администратор может понять какой процесс и какой службы обрабатывает конкретную задачу?
В 4.8 в таблицу SBWorflowProcessing добавляется поле с номером службы (ServiceNumber). По нему и определяется служба, которая обрабатывает данную задачу. А номер процесса определяется из существовавшего ранее поля ProcessNumber.
Михаил Сергеев

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

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

Запуск процессов на разных машинах напрямую не влияет на количество дедлоков. 
 

 
Михаил Сергеев

Артем, и все- таки, почему? Поясните тогда подробнее природу дедлоков. Казалось бы, на дедлоки будет влиять количество процессов вцелом, а не то, где исполняются процессы, если дедлоки появляются на sql сервере?

Или дедлок в данном случае - это нехватка ресурсов сервера, на котором выполняется служба, а не sql сервера?

Артем Шастин

Михаил, я может быть не совсем корректно выразился в ответе на Ваш вопрос, поэтому поясняю: непосредственно запуск процессов на разных машинах никак не повлияет на количество дедлоков. Повлиять на количество дедлоков может только стечение обстоятельств, потому что, как сказано в статье, "для их возникновения нужны специфические условия одновременного выполнения нескольких процессов".

Алексей Белоусов

А как будут лицензироваиться дополнительные службы Workflow? Будут ли они выделены в отдельные позиции прайс-листа?

Артем Шастин
А как будут лицензироваиться дополнительные службы Workflow? Будут ли они выделены в отдельные позиции прайс-листа?
В вопросе лицензирования workflow ничего не изменится. Установка дополнительных служб workflow не требует приобретения какой-либо отдельной лицензии. Как говорится "все включено".
Алексей Белоусов

Вот это просто замечательно...

Ильдус Нуретдинов
В 4.8 в таблицу SBWorflowProcessing добавляется поле с номером службы (ServiceNumber). По нему и определяется служба, которая обрабатывает данную задачу.
Доброго времени суток.
Странное что-то происходит с полем ServiceNumber, из выше описанного "следует" (да и из help-a)  что по сути, если у меня 2 службы, то там должно быть 1 или 2 записано, но "как не странно" в нашем случае там 1413 отличных друг от друга  значений (а всего 1443 в очереди). Вот и не пойму как по этим цифрам определить какая к какой службе относится. Может у  кого то будут идеи?
Иван Чурбаков

Четные к одной, нечетные к другой.

Авторизуйтесь, чтобы написать комментарий