Pregunta

Me gustaría saber acerca de los problemas específicos que - al lector SO - han resuelto utilizando motores de flujo de trabajo y lo que las bibliotecas / marcos que ha utilizado si no liar. También me gustaría saber cuando un motor de flujo de trabajo no era la mejor opción y si / cómo se eligió algo más simple, como una aplicación de tipo Lista de Tareas / WorkList / Tarea-Gestión utilizando máquinas de estado.

Preguntas:

  • ¿Qué problemas se han utilizado motores de flujo de trabajo para resolver?
  • ¿Qué bibliotecas / marcos usó?
  • Cuando se hizo una gestión de tareas / máquina de estado más simple como bastan sistema?
  • Bono: ¿Cómo hizo / Cómo se hace la distinción entre gestión de tareas y Workflow Engine ?

Busco experiencias de primera mano.

Algunos de los recursos que he comprobado hacia fuera:

¿Fue útil?

Solución

Soy parcial, así, como yo soy el autor principal del STONEPATH .

Me han desarrollado aplicaciones de flujo de trabajo para el Departamento de Estado de EE.UU., el Centro de Ginebra para el Desminado Humanitario, varios clientes de Fortune 500, y más recientemente, el sistema escolar público de Washington DC. Cada vez que he visto un 'motor de flujo de trabajo' que trató de ser la referencia de un maestro para los procesos de negocio, he visto una organización que lucha contra sí mismo al trabajo alrededor de la herramienta. Esto puede ser debido al hecho de que estas soluciones han sido siempre de proveedor / producto impulsado, y luego terminar con un equipo táctico de 'consultores' constantemente alimentando la aplicación ... pero debido a esto, tienden a reaccionar negativamente cuando escucho el beneficios de las herramientas basadas en procesos que prometen 'centralizar las definiciones de flujo de trabajo en un lugar y los hacen repetible'.

Dicho esto, me gusta mucho Ruote - He estado siguiendo ese proyecto durante algún tiempo y debe necesito ese tipo de solución, será la siguiente herramienta voy a estar dispuesto a intentarlo. STONEPATH tiene un propósito muy diferente a ruote - donde Ruote es útil a Ruby en general, STONEPATH está dirigida a los carriles, el marco web escrito en Ruby. Donde Ruote es acerca de los procesos de negocio de larga vida y sus definiciones asociadas, STONEPATH se trata de la gestión de flujo de trabajo basado Estado y tareas. Francamente, creo que la distinción entre el exterior mirando hacia adentro podría ser sutiles - muchas veces los mismos tipos de procesos de negocio pueden ser representados de cualquier manera -. El modelo basado en el estado y en tareas tiende a asignar a mi modelo mental, aunque

Vamos a describir los aspectos más destacados de un flujo de trabajo basado en el estado. En resumen, imaginar un flujo de trabajo en torno a la transformación de algo así como una hipoteca o una renovación de pasaporte. Como el documento se mueve alrededor de la oficina '', que se desplaza desde un estado a otro. Imagínese si usted es responsable del documento, y su jefe le pidió a cada pocas horas para una actualización de estado, y quería una breve respuesta ... que diría cosas como "Es en la entrada de datos" ... "Estamos comprobando la legitimación del solicitante ahora" ... 'estamos a la espera de revisión de calidad' ... 'nos hacen' ... y así sucesivamente. Estos son los estados en un flujo de trabajo basado en el estado. Pasamos de un estado a otro a través de las transiciones - como "aprobar", "aplicar", el contragolpe", 'negar', y así sucesivamente estos tienden a ser verbos de acción Cosas como esta son el modelo todo el tiempo en el software como una máquina de estados.. .

La siguiente parte de un flujo de trabajo del estado / basado en tareas es la creación de tareas. Una tarea es una unidad de trabajo, por lo general con una fecha de vencimiento e instrucciones de manejo, que conecta un elemento de trabajo (la solicitud de préstamo o de renovación de pasaporte, por ejemplo), a un usuario "en la caja". Las tareas pueden ocurrir en paralelo entre sí o sequentialy, y que pueden crear tareas de forma automática cuando entramos en estados, crear tareas manualmente como personas se dan cuenta las necesidades de trabajo que hacer, y requieren tareas sean completos antes de que podamos pasar a un nuevo estado. Todo este tipo de comportamiento es opcional, y parte de la definición de flujo de trabajo.

El agujero de conejo puede ir mucho más allá de esto, y me escribió un artículo sobre el tema de Edición # 4 de PragPub, el pragmático Revista del programador. Consulte el enlace reo anteriormente para un PDF actualizada de ese artículo.

En el trabajo con STONEPATH los últimos meses, he encontrado que el modelo basado en los mapas de estado muy bien a las arquitecturas web de descanso - en particular, las tareas y las transiciones de estado mapa bien como recursos anidados. Esperar a ver la escritura de mi futuro en esta materia.

Otros consejos

Soy parcial, soy uno de los autores del ruote .

máquina de estado variante 1) unido a un recurso (documento, pedido, factura, libro, pieza de mobiliario).

máquina de estado variante 2) unido a un recurso virtual denominado una tarea

variante 3) de flujo de trabajo del motor de flujo de trabajo interpretar las definiciones

Ahora la pregunta es etiquetada "BPM" que se puede expandir en "gestión de procesos de negocio". ¿De qué manera ese tipo de gestión se producen en cada una de la variante?

En la variante 1, el proceso de negocio (o flujo de trabajo) se dispersa en la aplicación. La máquina de estado adjunto al recurso hace cumplir algunos de los aspectos del flujo de trabajo, pero sólo aquellos relacionados con el recurso. Es posible que haya otros recursos con su propia máquina de estados siguiendo el mismo proceso de negocio.

En la variante 2, el flujo de trabajo puede ser concentrado alrededor del recurso tarea y representada por la máquina de estado alrededor de ese recurso.

En la variante 3, el flujo de trabajo es promulgada por la interpretación de un recurso llamado una definición de flujo de trabajo (o la definición de procesos de negocio).

¿Qué pasa cuando cambia el proceso de negocio? Vale la pena tener un motor de flujo de trabajo en los procesos de negocio son recursos manejables?

La mayoría de las bibliotecas de la máquina de estado, tienen 1 + set estados transiciones. Flujo de trabajo de los motores son, la mayoría de ellos, los intérpretes de definición de flujo de trabajo y permiten que múltiples flujos de trabajo diferentes a correr juntos.

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

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

También utilizar la variante 3 + 2 mucho, para las tareas humanas: el motor de flujo de trabajo, en algunos puntos cuando se ejecuta una instancia de proceso, con las manos una tarea (elemento de trabajo) a un participante humano (tarea de recursos se crea y se coloca en estado " listos ').

Se puede recorrer un largo camino con la variante 2 sola (la variante administrador de tareas).

También podría mencionar variante 0), donde no hay una máquina de estados, ningún motor de flujo de trabajo y el proceso de negocio (s) se dispersa y / o hardcoded en la aplicación.

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

En un proyecto anterior que estaba trabajando en añadí algunas reglas de tipo de flujo de trabajo a un conjunto de formas de gobierno en la industria Healhcare.

Los formularios necesarios para ser llenado por el usuario final, y en función de algunas otras formas respuestas fueron programados para ser llenado en una fecha posterior. También hubo eventos externos que cancelaría las formas regulares o programar otros nuevos.

Flujo de la muestra:

Admitido Paciente -> Programación Evaluación Inicial de la forma -> Programación Trimestral Formato de Revisión -> paciente falleció -> Cancelar revisión -> Programación de descarga Formulario de Evaluación

Muchas otras reglas se basan en cosas tales como la edad del paciente, donde estaban siendo admitidos etc.

Esta fue una aplicación ASP.NET, las reglas eran básicamente una tabla en la base de datos. He añadido secuencias de comandos, por lo que una secuencia de comandos se ejecutan en el formulario completado para determinar qué hacer a continuación. Esto era un diseño horrible, y habría sido perfecto para un motor de flujo de trabajo adecuado.

rails_workflow joya - Creo que esto es parecido a lo que busca.

Soy uno de los autores de cadencia Workflow Engine que desarrollamos en Uber. La diferencia entre la cadencia y la mayoría de los motores de flujo de trabajo existentes es que es desarrollador centrado y es extremadamente flexible y escalable (a decenas de miles de actualizaciones por segundo y hasta mil millones de flujos de trabajo abiertos). Los flujos de trabajo se escriben como programas orientados a objetos y garantiza el motor que el estado de los objetos de flujo de trabajo, incluyendo pilas de subprocesos y variables locales está completamente conservado en el caso de fallos de acogida.

  

¿Qué problemas se han utilizado motores de flujo de trabajo para resolver?   La cadencia se utiliza para casi todas las aplicaciones back-end que vidas más allá de una única solicitud de respuesta. Ejemplos de uso son:

  • Cron puestos de trabajo distribuidos
  • Gestión de tuberías ML / datos
  • En respuesta a eventos de negocios. Por ejemplo, los eventos de disparo en Uber. El flujo de trabajo puede acumularse estado basado en eventos recibidos y ejecutar actividades cuando sea necesario.
  • Servicios de implementación de mesos / Kubernetes
  • CI aplicación Pipeline
  • Asegurar que el servicio de varias llamadas completa cuando se recibe una petición. Incluyendo SAGA patrón de aplicación
  • Gestión de tareas de los trabajadores humanos (similares a Amazon MTurk )
  • procesamiento de medios
  • Atención al cliente de entradas de enrutamiento
  • El procesamiento de pedidos
  • Servicio de Pruebas similares a ChaosMonkey

y muchos otros

El otro conjunto de casos de uso se basa en portar los motores de flujo de trabajo existentes para ejecutarse en cadencia. Prácticamente cualquier lenguaje de especificación de flujo de trabajo del motor existente puede ser portado a ejecutar en la cadencia. Hay varios sistemas Uber internos que fueron portados. De esta forma un único servicio de back-end puede alimentar múltiples específica de dominio de flujo de trabajo sistemas.

  

¿Qué bibliotecas / marcos usó?

La cadencia es un servicio autónomo escrito en Ir con Ir y bibliotecas de cliente Java . La dependencia solamente externo es el almacenamiento. bases de datos SQL y Cassandra son compatibles.

Cadence también apoyan región transversal asíncrona (utilizando la terminología AWS) de replicación.

  

Cuando se hizo una gestión de tareas / máquina de estado más simple como bastan sistema?

Dentro de Uber el servicio cadencia es gestionado por nuestro equipo. Así que la sobrecarga de la construcción de cualquier administración de la máquina / tarea estado costumbre es siempre mayor que el uso de la cadencia. Fuera de la empresa y el servicio de almacenamiento para ello necesitan ser establecido. Si ya tiene una base de datos SQL de la implementación del servicio es trivial una imagen de ventana acoplable a través. La ventana acoplable también se utiliza para ejecutar un servicio cadencia local para el desarrollo en un ordenador personal o portátil.

Me di la vuelta a mi propio motor de flujo de trabajo para el apoyo en fases de procesamiento de documentos - catalogación, el envío de procesamiento de imágenes (trabajamos con sw redacción), si es necesario enviar a la validación, a continuación, suelte y de vuelta al cliente por último envío. En nuestro caso tenemos un camión cargado de documentos al proceso de lo que a veces tenemos que ejecutar cada servicio por separado a la entrega y control de recursos de uso. procesamiento necesaria simple en concepto pero de alto rendimiento y distribuido, y could't encontró ninguna fuera de la plataforma de productos que se ajustan al proyecto de ley para nosotros.

Tengo una experiencia con el uso de Activiti BPMN motor de 2,0 para el manejo de alto rendimiento y de alto rendimiento de datos transferir los procesos en una infraestructura de nodos de red. La tarea básica fue para permitir la configuración y controles de los procesos de transferencia y el control de cada nodo de red (es decir. Solicitud node1 para enviar un archivo de datos a través de node2 capa de transporte específico).

No podría haber miles de procesos que se ejecutan a la vez y decenas generales o bajas cientos de miles de procesos por día.

Había montón de diferentes definiciones de procesos, pero no se requiere necesariamente que un operador del sistema podría crear flujos de trabajo personalizados. Por lo que el caso de uso principal para el motor de BPM en sí era para ser robusto, escalable y permitir la supervisión de cada flujo de proceso.

Al final, básicamente funcionaba pero lo que hemos aprendido de este proyecto fue que una plataforma BPMN, o más bien el motor Activiti específicamente, no era la mejor apuesta para un alto rendimiento sistema de este tipo.

Los principales desafíos eran tarea de priorización de ejecución, cierre DB, reintentos de ejecución para nombrar unos pocos en relación con el propio BPM. Así que tuvimos que desarrollar la costumbre manejo de estos, por ejemplo:

  • Manejo de reintentos en el BPM para los casos cuando un nodo tenía ningún trabajador libre para determinada tarea, o cuando el nodo no estaba funcionando en absoluto.
  • ejecución de las tareas de transferencia paralelos en un único proceso y la sincronización de los resultados (éxito / fallo).

No sé si otros motores de BPMN serían más adecuadas para tal escenario desde BPMN está destinado principalmente para tareas de larga duración de negocios que implican la interacción del usuario, donde el rendimiento no es probablemente el mismo problema que estaba en nuestro caso.

Soy uno de los autores de Imixs-Workflow . Imixs-Workflow es un motor de flujo de trabajo de código abierto basado en BPMN 2.0 y plenamente integrado en la pila de la tecnología Java EE.
I desarrollar motores de flujo de trabajo por mi cuenta desde hace más de 10 años. Voy a tratar de responder a su pregunta en pocas palabras:

> ¿Qué problemas se han utilizado motores de flujo de trabajo para resolver?

Mi objetivo personal cuando empecé a pensar en el flujo de trabajo para evitar los motores era difícil Codding la lógica de negocio dentro de mi aplicación. Muchas cosas en una aplicación de negocios se pueden reutilizar lo que tiene sentido para mantenerlos configurable. Por ejemplo:

  • el envío de una notificación
  • ver las tareas abiertas
  • asignado una tarea a una persona
  • descripción de la tarea actual

A partir de esta lista de funciones se puede ver que estoy hablando de los flujos de trabajo humanos céntrica. En resumen: Un motor de flujo de trabajo humanocentrista responde a las preguntas: ¿Quién es responsable de una tarea y que necesita ser informada al lado? Y estas son las preguntas típicas de los requerimientos del negocio.

> ¿Qué bibliotecas / marcos usó?

Hace 5 años empezamos reimplementar motor Imixs-Flujo de trabajo se centra en BPMN 2.0 . BPMN es el estándar común para el modelado de procesos. Y lo más sorprendente para mí fue que estábamos de repente capaz de describir los procesos de negocio, incluso muy complejas que pueden ser visualizadas y ejecutados. Recomiendo a todos a utilizar BPMN para el modelado de procesos de negocio.

> ¿Cuándo un sistema más sencillo basta de administración de máquinas Estado / tareas como?

Una máquina de estados simple es suficiente si lo que desea es realizar un seguimiento del estado de un objeto de negocio. Este es el caso cuando se empieza a introducir el atributo 'estado' en su modelo de objetos. Pero en caso de que necesite los procesos de negocio con responsabilidades, el registro y control de flujo, a continuación, una máquina de estado ya no es suficiente.

> Bono: ¿Cómo hizo / Cómo se hace la distinción entre Gestión de tareas y Workflow Engine

Este es exactamente el punto en el que muchos motores de flujo de trabajo mencionados aquí son distintos. Para un ser humano centrado en el flujo de trabajo que normalmente necesita una gestión de tareas para distribuir tareas entre los actores humanos. Para una automatización de procesos, este punto no es tan relevante. Es suficiente si el motor realiza ciertas tareas. Los motores de gestión de tareas de flujo de trabajo y no se pueden comparar, porque la gestión de tareas es siempre una función de un motor de flujo de trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top