Casos de uso del Motor de flujo de trabajo


Me gustaría saber acerca de los problemas específicos que usted, el lector SO, ha resuelto utilizando Motores de flujo de trabajo y qué bibliotecas/frameworks utilizó si no rodó el suyo propio. También me gustaría saber cuándo un motor de flujo de trabajo no fue la mejor opción y si/cómo eligió algo más simple, como una aplicación de tipo TaskList/WorkList/Task-Management utilizando máquinas de estado.

Preguntas:

  • ¿Qué problemas ha utilizado los motores de flujo de trabajo para resolver?
  • Qué hicieron las bibliotecas / frameworks ¿usas?
  • ¿Cuándo bastó una Máquina de Estado/Gestión de Tareas más simple como system?
  • Bonus: ¿Cómo se hace la distinción entre Gestión de tareas y Motor de flujo de trabajo?

Estoy buscando experiencias de primera mano.

Algunos de los recursos que he comprobado:

Author: Lance Pollard, 2010-03-01

6 answers

También estoy sesgado, ya que soy el autor principal de StonePath.

He desarrollado aplicaciones de flujo de trabajo para el Departamento de Estado de los Estados Unidos, el Centro de Desminado Humanitario de Ginebra, varios clientes de fortune 500 y, más recientemente, el Sistema de Escuelas Públicas de Washington DC. Cada vez que he visto un 'motor de flujo de trabajo' que intentaba ser la única referencia maestra para los procesos de negocio, he visto a una organización luchando por sí misma para trabajar alrededor de la herramienta. Esto puede deberse al hecho de que estas soluciones siempre han sido impulsadas por el proveedor / producto, y luego terminan con un equipo táctico de "consultores" que alimentan constantemente la aplicación... pero debido a esto, tiendo a reaccionar negativamente cuando escucho los beneficios de las herramientas basadas en procesos que prometen "centralizar las definiciones de flujo de trabajo en un solo lugar y hacerlas repetibles".

Dicho esto, me gusta mucho Ruote - he estado siguiendo ese proyecto durante algún tiempo y si necesito ese tipo de solución, será la próxima herramienta que seré dispuesto a intentarlo. StonePath tiene un propósito muy diferente que ruote - donde Ruote es útil para Ruby en general, StonePath está dirigido a Rails, el framework web escrito en Ruby. Donde Ruote trata de procesos de negocio de larga duración y sus definiciones asociadas, StonePath trata de administrar el flujo de trabajo y las tareas basadas en el Estado. Francamente, creo que la distinción desde el exterior mirando hacia adentro podría ser sutil-muchas veces los mismos tipos de procesos de negocio se pueden representar de cualquier manera-el sin embargo, el modelo basado en el estado y la tarea tiende a mapearse con mi modelo mental.

Permítanme describir los aspectos más destacados de un flujo de trabajo basado en estados. En resumen, imagine un flujo de trabajo que gira en torno al procesamiento de algo como un préstamo hipotecario o una renovación de pasaporte. A medida que el documento se mueve 'alrededor de la oficina', viaja de estado a estado. Imagínese si usted es responsable del documento, y su jefe le pidió cada pocas horas para una actualización de estado, y quería una breve respuesta... dirías cosas como " Eso está en la entrada de datos"... "Estamos comprobando las credenciales del solicitante ahora"... "we are awaiting quality review" (en inglés)... "Hemos terminado"... y así sucesivamente. Estos son los estados en un flujo de trabajo basado en estados. Nos movemos de estado en estado a través de transiciones , como "aprobar"," aplicar"," sobornar", "negar", etc. estos tienden a ser verbos de acción. Cosas como esta son modeladas todo el tiempo en el software como una máquina de estado.

La siguiente parte de un flujo de trabajo basado en estado/tarea es la creación de tareas. Una tarea es una unidad de trabajo, normalmente con una fecha de vencimiento e instrucciones de manejo, que conecta un elemento de trabajo (la solicitud de préstamo o la renovación del pasaporte, por ejemplo), a un usuario "en caja". Las tareas pueden suceder en paralelo entre sí o secuencialmente, y podemos crear tareas automáticamente cuando ingresamos estados, crear tareas manualmente a medida que las personas se dan cuenta de que el trabajo debe realizarse, y requerir que las tareas se completen antes de que podamos pasar a un nuevo estado. Todo este tipo de comportamiento es opcional y forma parte del flujo de trabajo definición.

El agujero del conejo puede ir mucho más profundo que esto, y escribí un artículo sobre ello para el número 4 de PragPub, la revista del Programador Pragmático. Echa un vistazo al enlace reo de arriba para un PDF actualizado de ese artículo.

Al trabajar con StonePath los últimos meses, he encontrado que el modelo basado en estados se mapea muy bien con arquitecturas web restful, en particular, las tareas y las transiciones de estado se mapean muy bien como recursos anidados. Esperar ver futuro escribir de mí en este tema.

 56
Author: bokmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-17 15:25:29

Soy parcial, soy uno de los autores de ruote.

Variante 1) máquina de estado adjunta a un recurso (documento, pedido, factura, libro, mueble).

Variante 2) máquina de estados adjunta a un recurso virtual llamado tarea

Variante 3) motor de flujo de trabajo interpretación de definiciones de flujo de trabajo

Ahora su pregunta está etiquetada como "BPM", podemos expandirla a "Gestión de procesos de negocio". ¿Cómo ocurre ese tipo de gestión en cada una de las variantes ?

En la variante 1, el proceso de negocio (o flujo de trabajo) está disperso en la aplicación. La máquina de estados adjunta al recurso refuerza algunos de los aspectos del flujo de trabajo, pero solo los relacionados con el recurso. Puede haber otros recursos con su propia máquina de estado siguiendo el mismo proceso de negocio.

En la variante 2, el flujo de trabajo se puede concentrar alrededor del recurso de tarea y representar por la máquina de estados alrededor de ese recurso.

En la variante 3, el flujo de trabajo se implementa interpretando un recurso llamado definición de flujo de trabajo (o definición de proceso de negocio).

¿Qué sucede cuando el proceso de negocio cambia ? ¿Vale la pena tener un motor de flujo de trabajo donde los procesos de negocio sean recursos manejables ?

La mayoría de las bibliotecas de máquinas de estados tienen 1 estados establecidos + transiciones. Los motores de flujo de trabajo son, la mayoría de ellos, intérpretes de definición de flujo de trabajo y permiten que múltiples flujos de trabajo diferentes se ejecuten juntos.

¿Cuál será el costo de cambiar el flujo de trabajo ?

Las variantes no son mutuamente excluyentes. He visto muchos ejemplos donde un motor de flujo de trabajo cambia el estado de múltiples recursos algunos de ellos custodiados por máquinas de estado.

También uso la variante 3 + 2 mucho, para tareas humanas : el motor de flujo de trabajo, en algunos puntos cuando se ejecuta una instancia de proceso, entrega una tarea (workitem) a un participante humano (la tarea de recursos se crea y se coloca en estado 'listo').

Puede recorrer un largo camino con la variante 2 sola (el variante del administrador de tareas).

También podríamos mencionar la variante 0), donde no hay máquina de estado, no hay motor de flujo de trabajo y los procesos de negocio están dispersos y/o codificados en la aplicación.

Puede hacer muchas preguntas, pero si no se toma el tiempo para leer las respuestas y no se toma el tiempo para probar y experimentar, no irá muy lejos y nunca adquirirá ningún estilo para cuándo usar esta o aquella herramienta.

 29
Author: jmettraux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 21:34:18

En un proyecto anterior en el que estaba trabajando, agregué algunas reglas de tipo de flujo de trabajo a un conjunto de Formularios Gubernamentales en la industria de la atención sanitaria.

Los formularios debían ser llenados por el usuario final , y dependiendo de algunas respuestas, otros Formularios estaban programados para ser llenados en una fecha posterior. También hubo eventos externos que cancelarían formularios programados o programarían otros nuevos.

Flujo de muestreo:

Paciente Ingresado - > Programar Formulario de Evaluación Inicial - > Programar Formulario de Revisión Trimestral -> Paciente Muerto -> Cancelar Revisión - > Programar el Alta Formulario de Evaluación

Muchas otras reglas se basaban en cosas como la edad del paciente, dónde estaban siendo ingresados, etc.

Esto fue un ASP.NET app, las reglas eran básicamente una tabla en la base de datos. Agregué scripting, por lo que un script se ejecutaría al completar el formulario para determinar qué hacer a continuación. Este fue un diseño horrible, y habría sido perfecto para un motor de flujo de trabajo adecuado.

 4
Author: Ben Dempsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 00:34:22

Comprobar rails_workflow gema - Creo que esto es cerca de lo que busca.

 2
Author: Max,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-03 09:05:00

Rodé mi propio motor de flujo de trabajo para soportar el procesamiento por fases de documentos: catalogación, envío para procesamiento de imágenes (trabajamos con redaction sw), si es necesario envío a validación, luego lanzamiento y finalmente envío al cliente. En nuestro caso, tenemos un camión cargado de documentos que procesar, por lo que a veces necesitamos ejecutar cada servicio por separado para controlar la entrega y el uso de recursos. Simple en concepto pero alto rendimiento y procesamiento distribuido necesario, y no pudimos encontrar ninguno fuera de la producto de estante que se ajusta a la factura para nosotros.

 1
Author: Otávio Décio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-01 02:28:56

Tengo experiencia con el uso del motor Activiti BPMN 2.0 para el manejo de procesos de transferencia de datos de alto rendimiento y alto rendimiento en una infraestructura de nodos de red. La tarea básica era permitir la configuración y supervisión de tales procesos de transferencia y controlar cada nodo de red (es decir. solicitar node1 para enviar un archivo de datos al node2 a través de una capa de transporte específica).

Podría haber miles de procesos que se ejecutan a la vez y en general decenas o cientos de miles procesos por día.

Había muchas definiciones de procesos diferentes, pero no era necesario que un operador del sistema pudiera crear flujos de trabajo personalizados. Por lo tanto, el principal caso de uso para el motor BPM en sí era ser robusto, escalable y permitir el monitoreo de cada flujo de proceso.

Al final básicamente funcionó, pero lo que aprendimos de ese proyecto fue que una plataforma BPMN, o más bien el motor Activiti específicamente, no era la mejor apuesta para un rendimiento tan alto sistema.

Los principales desafíos fueron la priorización de la ejecución de tareas, el bloqueo de BD, los reintentos de ejecución, por nombrar algunos relacionados con el BPM en sí. Así que tuvimos que desarrollar un manejo personalizado de estos, por ejemplo:

  • Manejo de reintentos en el BPM para los casos en que un nodo no tenía un trabajador libre para una tarea determinada, o cuando el nodo no se estaba ejecutando en absoluto.
  • Ejecución de tareas de transferencia paralelas en un solo proceso y sincronización de los resultados (éxito/fracaso).

I no sé si otros motores BPMN serían más adecuados para este escenario, ya que BPMN está destinado principalmente a tareas comerciales de larga duración que involucran la interacción del usuario, donde el rendimiento probablemente no es el mismo problema que en nuestro caso.

 0
Author: Adam Hošek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-02 17:02:22