Sunday, September 29, 2024

Patrón SAGA Choreography

Sesión 5: 3h39m

Existen 2 formas de implementar SAGA. 

SAGA - Corografía

La coreografía es una secuencia de pasos o movimientos en la danza... y también es similar en el desarrollo de software si aplicas SAGA - Coreografía. Con este enfoque, cada servicio produce y escucha los eventos de otros servicios, en función del evento de otros servicios decidirá la siguiente acción. La saga utiliza un bus de mensaje para comunicarse.

Flujo de SAGA-Choreography

  1. El servicio de pedidos crea un registro en la base de datos con el estado "Verificando".
  2. El servicio de pedidos publica un evento "El pedido se ha creado correctamente" y el servicio de Stock escuchará este evento.
  3. El servicio de stock actualiza el número de productos de la base de datos stock.
  4. El servicio de stock publica un evento "El producto se ha actualizado correctamente" y el servicio de pedidos y el servicio de envío escuchará este evento.
  5. El servicio de pedido cambiará el estado del pedidio a "Envío"
  6. El servicio de stock publica un evento "El producto se ha actualizado correctamente" y el servicio de pedidos y el servicio de envío escucharán este evento.
  7. El servicio de envío crea un registro en la base de datos envíos.
  8. El servicio de envío publica un evento "El envío se ha registrado correctamente" y el servicio de pedidos escuchará este evento.
  9. El servicio de Pedido cambia el estado del pedido a "Finalizar".



Flujo de Rollback en SAGA-Choreography (Escenario 1)

Hay un error con Stock Service.
  1. El servicio de pedidos crea un registro en la base de datos con el estado "Verificando"
  2. El servicio de pedidos publica un evento "El pedido se ha creado correctamente" y el servicio de Stock escuchará este evento.
  3. El servicio de stock actualiza el número de productos de la base de datos de stock. Pero hay un error inesperado al guardar el registro del producto.
  4. Stock Service publica un evento de "reversión" "Error al actualizar el número de productos en stock". 
  5. El servicio de pedido cambiará el estado del pedido a "Error".



Flujo de Rollback en SAGA-Choreography (Escenario 2)

El servicio de pedidos y el servicio de stock se ejecutan correctamente. Hay un error con el servicio de envío.

  1. El servicio de envío crea un registro en la base de datos de envío. Pero hay un error inesperado al guardar.
  2. El servicio de envío publica un evento de "reversión" "Error al registrar el servicio de envío" y tanto el servicio de pedidos.
  3. El servicio de envío publica un evento de "reversión" "Error al registrar el servicio de envío" y tanto el servicio de stock.
  4. El servicio de pedido cambiará el estado del pedido a "Error".
  5. El servicio de stock actualiza el número del producto.

Flujo de SAGA-Choreography

  • Tenga en cuenta que es crucial definir un ID compartido común para cada transacción, de modo que cada vez que lance un evento, todos los oyentes puedan saber de inmediato a qué transacción se refiere.
  • Las compensaciones también pueden fallar. Pueden haber compensaciones reintentables.

Ventajas y desventajas de SAGA - Coreografía

  • La coreografía es la forma más sencilla de implementar el patrón SAGA. Es muy fácil de entender y no requiere demasiado esfuerzo para construir. Cada transacción local en cadena es independiente ya que no tienen conocimiento directo entre sí. Si su transacción distribuida solo incluye de 2 a 4 transacciones locales (servicios), entonces la coreografía es una opción muy adecuada.
  • Tener demasiadas transacciones locales hará que el seguimiento de qué servicios escuchan qué eventos, se vuelva complejo. Con la muestra anterior, solo tenemos 3 transacciones locales pero más de 10 pasos para manejar. Imaginemos que cuando tengamos 10 transacciones ¿qué sucederá?

Demo SAGA Choreography




No comments:

Post a Comment