Amazon Simple Workflow Service (SWF): Aplicaciones distribuidas

Amazon Simple Workflow Service (SWF): Aplicaciones distribuidas

¿En qué consiste el servicio Amazon Simple Workflow Service (SWF)?

SWF hace sencillo crear aplicaciones que coordinan trabajo a traves de componentes distribuidos. En SWF una tarea representa una unidad lógica de trabajo y es realizada por un componente en su aplicación. El coordinar tareas a traves de su aplicación implica el manejo de dependencias internas entre tareas, calendarizar, y acceso concurrente en concordancia con el flujo lógico de la aplicación. SWF brinda control total sobre la implementación y coordinación de tareas sin tener que preocuparse por la complejidad de monitorear el progreso y mantenimiento de su estado.

Cuando se usa SWS, se implementan workers que realizan las tareas. Estos workers pueden ejecutarlas en la infraestructura de la nube, como EC2, o en sus instalaciones. Se pueden crear tareas de larga ejecución que pueden fallar, exceder el tiempo máximo de ejecución, requerir reiniciarse, o tareas que se puedan completar variando el rendimiento y la latencia. SWF almacena las tareas, las asigna a workers cuando estos están listos, monitorea su progreso, y mantiene su estado, incluyendo detalles de su terminación. Para coordinar tareas, se escribe un programa que obtenga el último estado de cada tarea desde SWF y lo utilice para iniciar tareas subsecuentes. SWF mantiene la aplicación en estado de ejecución con durabilidad, de tal forma que la aplicación es resistente a los fallos en los componentes individuales. Con SWF se pueden implementar despliegues, escalamiento y modificar estos componentes de aplicaciones independientemente.

Flujos de Trabajo (Workflows)

Al usar SWF, se pueden implementar aplicaciones como flujos de trabajo distribuidos y asíncronos. Los flujos de trabajo coordinan y manejan la ejecución de actividades que pueden ejecutarse de forma síncrona a traves de múltiples dispositivos de computo y que pueden incluir tanto procesamiento secuencial como paralelo.

Cuando se diseña un workflow, analice la aplicación para identificar las tareas de sus componentes, que están representadas como actividades de SWF. La lógica de coordinación del flujo de trabajo determina el orden en el cual las actividades son ejecutadas.

Dominio del flujo de trabajo (Workflow domains)

Los dominios proveen una forma de definir el ámbito de los recursos de SWF dentro de una cuenta de AWS. Se debe especificar un dominio para todos los componentes del flujo de trabajo, como el tipo de flujo de trabajo y los tipos de actividades. Es posible tener uno o mas flujos de trabajo en un dominio, sin embargo los flujos de trabajo en diferentes dominios no pueden interactuar el uno con el otro.

Historia del flujo de trabajo (Workflow history)

El workflow history es un registro detallado, completo y consistente de cada evento que ocurre desde que la ejecución del flujo de trabajo es inicializado. Un evento representa un cambio discreto en el estado de la ejecución del flujo de trabajo, como una actividad completa, un timeout o una señal.

Actores en SWF

Los actores en SWF con un número de diferentes tipos de de características programáticas.

¿Qué tipos de actores existen en SWF?

work starters
Es cualquier aplicación que inicie la ejecución de un workflow. Por ejemplo un cliente que envía una orden en un sitio de ecommerce.
deciders
Es la lógica que coordina las taras en un flujo de trabajo. Las actividades dentro de un workflow pueden correr secuenciálmente, en paralelo, síncronas o asíncronas. Los deciders también procesan eventos que llevan mientras el workflow esta en progresos y cierran el workflow cuando el objetivo se ha cumplido.
activity worker
Es un proceso de computadora sencillo o thread, que realiza una actividad en su workflow. Diferentes tipos de trabajares procesan tareas de diferentes tipos de actividades, y múltiples tipos de workers pueden procesar el mismo tipo de tarea. Después de recibir la tarea, el activity worker procesar la tarea hasta su terminación y regresa el estatus y resultado a SWF. Entonces retrae otra nueva actividad.

Tareas (Tasks)

¿Que tipos de tareas existen?

Activity Tasks
Le indica al activity worker que realice su función.
Lambda Tasks
Realiza una lambda function en lugar de una SWF Activity.
Decision Tasks
Le indica al decider que el estado de ejecución del workflow a cambiado de tal forma que el decider pueda determinar la siguiente actividad que tiene que ser realizada, esta decision task contiene el actual workflow history. SWF agenda un decision task cuando el workflow inicia y cuando el estado cambia, como cuando una actividad se completa. Cada decision task contiene un view paginado del historial de ejecución. Los decididores analizan el workflow y la historia de ejecución y responden a SWF con un grupo de decisiones que especifican que debe ocurren en la proxima ejecución del workflow.

Listas de Tareas (Task Lists)

Proveen una forma de organizar varias tareas asociadas con un workflow. Se puede pensar en una lista de tareas como una cola dinámica. Cuando una tarea es agendada en SWF, se puede especificar una cola (lista de tareas). De forma similar cuando se retrae de SWF una tarea, se determina de que cola (lista de tareas) obtener la tarea.

Las listas de tareas proveen un mecanismo flexible de enrutar tareas a los workers como el caso lo necesite. Las lista de tareas son dinámicas de modo que no se requiere registrar una task list o crear a traves de una acción, simplemente agendando una tarea se crea una lista de tareas si esta no existe.

Long Polling

Los decididores y activity workers se comunican con SWF utilizando long polling. Cualquiera de estos inicia comunicación periódica con SWF notificando a SWF de su disponibilidad para aceptar una tarea, y después especificando una lista de tareas de donde obtener tareas. Long polling funciona bien para altos volúmenes de procesamiento de taras. Los deciders y activity workers pueden manejar su propia capacidad.

Object identifiers (identificadores de objetos)

Los objetos de SWF son identificados por workflow type, activity type, decision y activity tasks, y ejecución del workflow.

  • Un workflow type es identificado por su dominio, nombre y versión.
  • Una activity type es identificada por su dominio, nombre y versión.
  • Cada task decision y activity task es identificado por un task token único.
  • Cada ejecución de un workflow es identificado por el dominio, workflow, id y run ID.

Cierre de ejecución del flujo de trabajo (Workflow execution closure)

Después de iniciar la ejecución de un workflow, este se encuentra abierto. On workflow abierto puede puede estar cerrado o completado, cancelado, fallido, o superado el timeout.

Ciclo de vida del la ejecución de un workflow

Desde el inicio de la ejecución de un workflow hasta su terminación, SWF interactúa con los actores asignándoles tareas apropiadas ya sean activity tasks o decision tasks.