Patrón SAGA Orchestration

Sesión 5: 4h23m

Nota: Cuando se hagan aplicaciones distribuidas no necesariamente se necestian APIs HTTP, también puede haber Listeners de los microservicios. En tu microservicio puedes tener una parte de exposición y  una parte de listeners. En la nube los listeners se trabajan con workers (Azure Function, Lambda Function). En caso onpremise sería en una consola o servicio windows.

SAGA - Orquestación

Para abordar la complejidad del patrón SAGA, es bastante normal agregar un administador de procesos como administrador. El administrador de procesos es responsable de escuhar eventos y activar puntos finales. Volviendo a la muestra anterior, en lugar de que el servicio de pedido, el servicio de stock y el servicio de envío tengan que escucharse entre sí, implementamos una "gestión de procesos" y estos 3 servicios escucharán esto.

Flujo de SAGA-Orchestration

  1. El servicio de pedidos crea un registro de pedido de la base de datos con el estado "Verificando".
  2. El servicio de pedidio Solicita al Orquestador iniciar la "Transacción de pedido".
  3. El Orquestador envía un "Comando de actualización de stock" al servicio de stock.
  4. El servicio de stock actualiza el número del producto solicitado en la base de datos.
  5. El servicio de sotck respondeal Orquestador con el mensaje "Stock actualizado correctamente".
  6. El Orquestador envía un "Comando de actualización de pedidos" al servicio de pedidos con información de que el stock ya se actualizó correctamente. 
  7. Actualización del servicio de pedidos. Registro de pedidos en la base de datos con el estado "Envío".
  8. El Orquestador envía un "Comando de envío de registro" al servicio de envío.
  9. El servicio de envío inserta un nuevo registro en la base de datos de envíos.
  10. El servicio de envío responde al Orquestador con el mensaje "El envío se ha registrado correctamente".
  11. El Orquestador envía un "Comando de actualización de pedido" al servicio de pedidos ycon información de que el envío ya se actualizó correctamente.
  12. El servicio de pedidos actualiza el registro de pedidos en la base de datos con el estado "Finalizar".




Flujo de Rollback en SAGA-Orchestration (Escenario 1)

Hay un error con el servicio Stock

  1. El servicio de pedidos crea un registro de pedido en la base de datos con el estado "Verificando".
  2. El servicio de pedido Solicita al Orquestador iniciar la "Transacción de pedido".
  3. El Orquestador cenvía un "Comando de actualización de stock.
  4. El servicio de stock actualiza el número del producto solicitando en la base de datos. Pero hay un error.
  5. El servicio de stock responde con el mensaje "Agotado" al Orquestador.
  6. El Orquestador envía un "Comando de orden de reversión" al servicio de pedidos con información de que Stock falló en la actualización.
  7. El servicio de pedidos actualiza el regisgtro de pedidos en la base de datos con el estado "Error".


Hay un error con el servicio de envío.
  1. El servicio de envío responde con el mensaje "Error al registrar envío" al Orquestador.
  2. El Orquestador envía un "Comando de pedido de reversión" al servicio de pedidos con información de que el servicio de envío fallo en el registro.
  3. El servicio de pedidos actualiza el registro de pedidos en la base de datos con el estado "Error".
  4. El Orquestador envía un "Comando de reversión de stock" al servicio de stock con información de que el servicio de envío falló en el registro.
  5. El servicio de stock actualiza el número del peroducto.


Flujo de SAGA-Orchestration

Un formar estándar de modelar una SAGA-Orchestrator es una máquina de estado donde cada transformación corresponde a un comando o mensaje. Las máquinas de estado son un excelente patrón para estructurar un comportamiento bien definido ya que son fáciles de implementar.

Puede utilizar servicios en la nube que pueden ayudarle, por ejemplo:
https://theburningmonk.com/2017/07/applying-the-saga-pattern-with-aws-lambda-and-step-functions/
https://www.freecodecamp.org/news/an-introduction-to-azure-durable-functions-patterns-and-best-practices-b1939ae6c717/


Ventajas y desventajas de SAGA Orchestration

Fácil de mantener todo el flujo de trabajo en un solo lugar. Orquestador. Evita las dependencias cíclicas entre servicios. Todos los servicios solo se comunican con el Orsquestador. La complejidad de la transcción sigue siendo lineal cuando se agregan nuevos pasos.

Sin embargo, para lograr las ventajas anteriores, debe diseñar un orquestador inteligente. Además, tener demasiada lógica en el orquestador podría llevar a difucultades en el mantenimiento.




Comments

Popular posts from this blog

Week #1: Definición de objetivos, desglose de trabajo

Week #2: Azure App Service

Registro de Excepciones