Как это работает.
Модуль "Управление процессами" функционально состоит из двух частей: сервиса DocsVision Workflow Service, и процесса ExecLogic.exe. Сервис осуществляет подготовку процесса к запуску и другие системные операции. ExecLogic.exe непосредственно выполняет функции. Если посмотреть загрузку процессора через Performance Monitor, то можно увидеть, что нагрузка идет пиками.
Происходит это потому, что ExecLogic обрабатывает пакеты функций не постоянно, а периодами - тиками. Последовательность действий такова.
- Построение списка активных процессов
- Сортировка процессов по приоритетам
- Исполнение процессов по приоритетам
- Проверка нормативного времени тика
- Наивысший (процесс гарантированно обрабатывается каждый тик)
- Высокий (процесс гарантированно обрабатывается каждый третий тик)
- Обычный (процесс гарантированно обрабатывается каждый пятый тик)
- Низкий (процесс гарантированно обрабатывается каждый седьмой тик)
- Самый низкий (процесс гарантированно обрабатывается каждый девятый тик)
С введением приоритизации связано введение возможности ограничения времени тика . Этот параметр можно указать в консоли настройки, задается в секундах. Этот параметр задает промежуток времени, при превышении которого обработка процессов прекращается и начинается ожидание следующего тика. На практике реальное время тика может быть несколько выше введенного желаемого. Это связано с тем, что некоторые могут выполняться довольно продолжительное (а самое главное совершенно непредсказуемое по длительности) время, причем прерывать их выполнение Workflow не имеет права. Также, тик может выполняться дольше чем хотелось бы в случае, если в системе присутствует большое количество процессов с наивысшим приоритетом (или приравненных к ним): тик не прерывается до тех пор пока не будут обработаны все процессы с наивысшим приоритетом. К процессам приравненным к процессам с наивысшим приоритетом относятся процессы для которых подошло время их гарантированной обработки (каждый третий тик для обычного приоритета и так далее…).
Параметрами обработки можно управлять. Назначение и подробное описание приведено в статье http://dvprofessionals.blogspot.com/2009/08/workflow.html
Немного о функциях.
Условно функции можно разделить на 3 группы:
- Функции, которые работают с данными в базе: мониторинг, универсальный обмен, и т.п. Таких большинство.
- Функции, которые работают со внешними системами: мониторинг 1С, CRM и т.д
- Функции, который работают только на стороне Workflow: объединение, разветвление, сценарий (в некоторых случаях)
Как правильно стоить схему процесса.
Операции получения данных и преобразования переменных следует объединить в одну функцию универсального обмена данными
Неправильно:
Правильно:
К свойству нужно обращаться по имени, а не по индексу.
Не правильно:
Правильно:
Не оптимально:
Оптимально:
Старайтесь не использовать историю мониторинга, а заменять её дополнительными условиями поиска. Например, есть задача обработки карточек. Создан родительский процесс, который осуществляет мониторинг, и передает найденную карточку в дочерний асинхронный подпроцесс. Нужно, чтобы переданная карточка второй раз не искалась мониторингом. В этом случае эффективнее добавить в карточку свойство типа "Да/Нет", в котором устанавливать "Да", если карточка ушла в обработку. И на данное свойство добавить условие .
У циклических процессов, которые работают постоянно, отключайте ведение журнала. А так же удаляйте все завершенные подпроцессы. Настроить автоматическое удаление можно в свойствах процесса, на вкладке "Дополнительно", по кнопке "Завершение процесса".
Не допускайте образования бесконечных петель. Например, если сделать из функции выход по ошибке на какую-то другую, и возврат обратно, то в случае ошибки может образоваться бесконечный цикл.
Снижайте количество поисков. Если функция мониторинга должна вернуть набор карточек, то лучше возвращать значение в переменную - коллекцию. А затем в цикле получать каждый элемент коллекции.
Отдельно хочу добавить про мониторинг. Данная функция выполняет поисковый запрос. И следовательно, чем сложнее запрос, и чем больший объем данных он обрабатывает, тем медленнее работает функция.
Конец. Внимание опрос. Есть желание написать подробно, как читать сообщения в журнале Workflow. Но поскольку в версии 4.3 структура журнала поменялась, то нужно делать два описания, либо под какую-то наиболее актуальную версию. Вопрос в том, какая версия для вас актуальна: 4.3. или все, что раньше?
Читать дальше
8 коммент.:
Пишите про 4.3, все там рано или поздно будем :)
DV 4.3 актуальна почти всегда, т.к. даже "старые" проекты стараемся развивать и переводить на актуальные версии DV.
Тем не менее, на 4.1 еще можем быть и месяц, и два и три.
Спасибо за советы, может быть полезно.
Спасибо за статью.
Про журнал workflow: для версии 4.1 тоже было бы полезно увидеть описание, т.к. действительно переводиться в ближайшее время будут не все проекты. А кто-то ещё и на 4.0 пока остаётся.
И ещё: у вас в пункте "К свойству нужно обращаться по имени, а не по индексу" два одинаковых скриншота для правильного и неправильного вариантов.
Спасибо, сейчас исправлю.
Да, производительность Workflow - это очень больной вопрос... такие статьи однозначно нужны. Михаил, а можете объяснить, почему всё-таки сценарии в БП обрабатываются быстрее сервером Workflow и создают меньшую нагрузку, чем кубики? Кубики же по сути генерируются также в код на сервере Workflow. Имеет, например, смысл заменять одним сценарием один кубик унифункции или один кубик унив. обмена? Или эффект есть только когда одним сценарием заменяется много кубиков? Всё это происходит за счёт того, что каждый кубик отдельно обрабатывается на сервере. А один сценарий всегда выполняется за один тик, каким бы длинным он ни был? А кубик мониторинга имеет смысл заменять кубиком сценария. И там и там поисковый запрос... Ответьте, пожалуйста, вопрос очень актуален.
Скорость работы зависит от способа реализации. Ф-ция сценарий перед работой сначала компилируется, а затем вызывается на выполнение. Это отличие от обычной ф-ции, которая уже скомпилирована, и её метод вызывается из dll. Возможный ускоряющий эффект достигается если в одном сценарии реализовано несколько действий.
Поэтому
1. Сценарий выполняется быстрее обычной ф-ции не во всех случаях. В основном, когда в сценарии сделано "мультидействие", например в цикле перебирается коллекция. В обычном случае цикл получения элементов коллекции и их обработка занимает несколько кубиков
2. Функции - кубики могут обрабатываться в несколько потоков одновременно.
3. Кубик мониторинга заменять на сценарий нет смысла.
а можете привести пример как правильно искать запись универсального справочника из определенной ветки по названию записи?
Отправить комментарий