Conceptos básicos de AWS Flow Framework: ejecución distribuida - AWS Flow Framework para Java

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conceptos básicos de AWS Flow Framework: ejecución distribuida

Una instancia de flujo de trabajo es básicamente un subproceso virtual de ejecución que puede abarcar las actividades y la lógica de orquestación que se ejecuta en varios equipos remotos. Amazon SWF y el AWS Flow Framework funcionan como un sistema operativo que gestiona las instancias de flujo de trabajo en una CPU virtual; para ello:

  • Mantienen el estado de ejecución de cada instancia.

  • Cambian de una instancia a otra.

  • Reanudan la ejecución de una instancia en el punto en el que se desactivó.

Reproducción de flujos de trabajo

Dado que las actividades pueden ser de larga duración, no es deseable que el flujo de trabajo simplemente se bloquee hasta completarse. En su lugar, el AWS Flow Framework administra la ejecución del flujo de trabajo mediante un mecanismo de reproducción, que se basa en el historial de flujo de trabajo que mantiene Amazon SWF para ejecutar el flujo de trabajo en episodios.

Cada episodio reproduce la lógica del flujo de trabajo de manera que ejecuta cada actividad solo una vez, y se asegura de que las actividades y los métodos asíncronos no se ejecutan hasta que sus objetos Promise estén listos.

El iniciador de flujo de trabajo inicia el primer episodio de reproducción cuando comienza la ejecución del flujo de trabajo. El marco de trabajo llama al método de punto de entrada del flujo de trabajo y:

  1. Ejecuta todas las tareas de flujo de trabajo que no dependen de la finalización de la actividad, lo que incluye llamar a todos los métodos del cliente de la actividad.

  2. Proporciona a Amazon SWF una lista de las tareas de actividad que deben programarse para la ejecución. Para el primer episodio, esta lista consta tan solo de aquellas actividades que no dependen de una Promise y que pueden ejecutarse inmediatamente.

  3. Notifica a Amazon SWF que el episodio se ha completado.

Amazon SWF almacena las tareas de la actividad en el historial de flujo de trabajo y las programa para su ejecución colocándolas en la lista de tareas de actividad. Los procesos de trabajo de actividad sondean la lista de tareas y ejecutan las tareas.

Cuando un proceso de trabajo de actividad completa una tarea, devuelve el resultado a Amazon SWF, que lo registra en el historial de ejecución del flujo de trabajo y programa una nueva tarea de flujo de trabajo para el proceso de trabajo de flujo de trabajo colocándola en la lista de tareas de flujo de trabajo. El proceso de trabajo del flujo de trabajo sondea la lista de tareas y cuando recibe la tarea, ejecuta el siguiente episodio de reproducción de la siguiente manera:

  1. El marco de trabajo ejecuta de nuevo el método de punto de entrada del flujo de trabajo y:

    • Ejecuta todas las tareas de flujo de trabajo que no dependen de la finalización de la actividad, lo que incluye llamar a todos los métodos del cliente de la actividad. No obstante, el marco de trabajo comprueba el historial de ejecución y no programa tareas de actividad duplicadas.

    • Comprueba el historial para ver qué tareas de actividad se han completado y ejecuta cualquier método de flujo de trabajo asíncrono que dependa de esas actividades.

  2. Cuando todas las tareas de flujo de trabajo que pueden ejecutarse se ha completado, el marco de trabajo se lo notifica a Amazon SWF:

    • Proporciona a Amazon SWF una lista de las actividades cuyos objetos Promise<T> de entrada están listos desde el último episodio y pueden programarse para la ejecución.

    • Si el episodio no generó ninguna tarea de actividad adicional pero sigue habiendo actividades sin completar, el marco de trabajo notifica a Amazon SWF que el episodio está completo. A continuación espera a que se complete otra actividad, iniciando el siguiente episodio de reproducción.

    • Si el episodio no generó ninguna tarea de actividad adicional y se han completado todas las actividades, el marco de trabajo notifica a Amazon SWF que la ejecución del flujo de trabajo está completa.

Para ver ejemplos de comportamiento de reproducción, consulte Comportamiento de reproducción de AWS Flow Framework para Java.

Métodos de flujo de trabajo asíncronos y de reproducción

Los métodos de flujo de trabajo asíncrono se utilizan con frecuencia de manera parecida a actividades, porque el método difiere la ejecución hasta que todos los objetos Promise<T> de entrada están listos. No obstante, el mecanismo de reproducción gestiona los métodos asíncrono de manera diferente a las actividades.

  • La reproducción no garantiza que un método asíncrono solo se ejecutará una vez. Difiere la ejecución en un método asíncrono hasta que sus objetos Promise de entrada están listo, pero a continuación ejecuta ese método para todos los episodios subsiguientes.

  • Cuando un método asíncrono se completa, no comienza un episodio nuevo.

Se proporciona un ejemplo de reproducción de un flujo de trabajo asíncrono en Comportamiento de reproducción de AWS Flow Framework para Java.

Reproducción e implementación de flujos de trabajo

La mayoría de las veces, no tiene que preocuparse de los detalles del mecanismo de reproducción. Se trata básicamente de algo que ocurre en segundo plano. No obstante, la reproducción tiene dos implicaciones importantes para la implementación de su flujo de trabajo.

  • No utilice métodos de flujo de trabajo para realizar tareas de ejecución prolongada porque la reproducción repetirá esas tareas numerosas veces. Incluso los métodos de flujo de trabajo asíncronos se ejecutan habitualmente más de una vez. Utilice, en cambio, actividades para tareas de ejecución prolongada; la reproducción ejecuta actividades solo una vez.

  • Su lógica de flujo de trabajo tiene que ser completamente determinista; cada episodio debe tomar la misma ruta de flujo de control. Por ejemplo, la ruta de flujo de control no debería depender de la hora actual. Para obtener una descripción detallada de los requisitos de reproducción y determinación, consulte No determinismo.