Варианты использования механизма рабочего процесса


Я хотел бы знать о конкретных проблемах, которые вы - читатель SO - решили с помощью движков рабочих процессов и какие библиотеки/фреймворки вы использовали, если вы не свернули свой собственный. Я также хотел бы знать, когда механизм рабочего процесса не был лучшим выбором, и если/как вы выбрали что-то более простое, например, приложение типа TaskList/WorkList/Task-Management с использованием государственных машин.

вопросы:

  • какие проблемы вы использовали для решения рабочих процессов?
  • что библиотеки/фреймворки вы используете?
  • когда было достаточно простого управления состоянием машины / задачи, как система?
  • Бонус: Как вы сделали / делаете различие между Управление Задачами и Workflow Engine?

Я ищу опыт из первых рук.

некоторые из ресурсов, которые я проверил:

6 80

6 ответов:

Я тоже предвзят, так как я главный автор StonePath.

Я разработал приложения рабочего процесса для Государственного департамента США, женевского Центра по гуманитарному разминированию, нескольких клиентов fortune 500 и совсем недавно системы государственных школ Вашингтона, округ Колумбия. Каждый раз, когда я видел "механизм рабочего процесса", который пытался быть одной главной ссылкой для бизнес-процессов, я видел, как организация борется с собой, чтобы обойти этот инструмент. Это может быть связано к тому, что эти решения всегда были ориентированы на поставщика/продукт, а затем в конечном итоге с тактической командой "консультантов" постоянно кормить приложение... но из-за этого я склонен негативно реагировать, когда слышу о преимуществах инструментов на основе процессов, которые обещают "централизовать определения рабочих процессов в одном месте и сделать их повторяемыми".

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

позвольте мне описать основные моменты рабочего процесса на основе состояния. Короче говоря, представьте себе рабочий процесс, вращающийся вокруг обработки чего-то вроде ипотечного кредита или обновления паспорта. Когда документ перемещается "по офису", он перемещается из штата в штат. Представьте, что вы отвечаете за документ, и ваш босс попросил вас каждые несколько часов обновлять статус и хотел получить краткий ответ... вы бы сказали такие вещи, как "это в вводе данных"... "Сейчас мы проверяем верительные грамоты заявителя"... "мы ждем качественного обзора"... "Мы закончили"... и так далее. Это состояния в рабочем процессе на основе состояний. Мы переходим из состояния в состояние через переходы - например, "одобрить", "применить"," откат"," запретить " и т. д. это, как правило, глаголы действия. Такие вещи все время моделируются в программном обеспечении как государственная машина.

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

работая с StonePath последние несколько месяцев, я обнаружил, что модель, основанная на состоянии, очень хорошо сопоставляется с веб - архитектурами restful-в частности, задачи и переходы состояний хорошо отображаются как вложенные ресурсы. Ожидал увидеть будущее письмо от меня на эту тему.

я пристрастен, я один из авторов ruote.

Вариант 1) государственная машина, прикрепленная к ресурсу (документ, заказ, счет-фактура, книга, предмет мебели).

вариант 2) государственная машина, подключенная к виртуальному ресурсу с именем task

вариант 3) механизм документооборота интерпретация определений документооборота

теперь ваш вопрос помечен " BPM "мы можем быть расширены в"управление бизнес-процессами". Как это вид управленческой деятельности, возникающие в каждом из вариантов ?

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

в Варианте 2 рабочий процесс может быть сконцентрирован вокруг ресурса задачи и представлен конечным автоматом вокруг него ресурс.

в варианте 3 рабочий процесс выполняется путем интерпретации ресурса, называемого определением рабочего процесса (или определением бизнес-процесса).

Что происходит при изменении бизнес-процесса ? Стоит ли иметь механизм документооборота, где бизнес-процессы являются управляемыми ресурсами ?

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

какова будет стоимость изменения рабочего процесса ?

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

Я также часто использую вариант 3 + 2 для неавтоматизированных задач : механизм рабочего процесса в некоторые моменты при запуске экземпляра процесса передает задачу (workitem) неавтоматизированному участнику (создается задача ресурсов и помещен в состояние "готов").

вы можете пройти долгий путь с вариантом 2 в одиночку (вариант диспетчера задач).

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

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

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

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

Пробы :

Пациент Поступил - > График Первоначальная Форма Оценки -> График Ежеквартальная Форма Обзора - > Пациент Умер - > Отменить Обзор - > График Выписки Форма Оценки

многие другие правила были основаны на таких вещах, как возраст пациента, где они были допущены и т. д.

Это был Ан ASP.NET приложение, правила были в основном таблицы в базе данных. Я добавил сценарии, поэтому сценарий будет выполняться при завершении формы, чтобы определить, что делать дальше. Это был ужасный дизайн, и он был бы идеальным для правильного механизма рабочего процесса.

Регистрация rails_workflow гем - я думаю, что это близко к тому, что вы ищете.

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

У меня есть опыт использования Activiti BPMN 2.0 engine для обработки высокопроизводительных и высокопроизводительных процессов передачи данных в инфраструктуре сетевых узлов. Основная задача состояла в том, чтобы разрешить настройку и мониторинг таких процессов передачи и управлять каждым узлом сети (т. е. запрос node1 для отправки файла данных в node2 через определенный транспортный уровень).

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

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

в конце концов, это в основном работало, но то, что мы узнали из этого проекта, было то, что платформа BPMN, а точнее двигатель Activiti, не был лучшим выбором для такая высокопроизводительная система.

основными проблемами были приоритизация выполнения задач, блокировка БД, повторные попытки выполнения, чтобы назвать несколько, касающиеся самого BPM. Поэтому нам пришлось разработать пользовательскую обработку этих, например:

  • обработка повторных попыток в BPM для случаев, когда узел не имел свободного работника для данной задачи, или когда узел не был запущен вообще.
  • выполнение задач параллельной передачи в одном процессе и синхронизация результаты (успех/неудача).

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