https://dzone.com/articles/microservices-integration-patterns-saga-pattern?edition=554298&utm_source=Zone%20Newsletter&utm_medium=email&utm_campaign=microservices%202019-12-18

El Patrón SAGA aplicado a microservicios nos ayuda a garantizar la integridad en transaccione distribuidas repartidas entre microservicios.

El Patrón SAGA divide esta transacción distribuida en transacciones locales.

El Patrón SAGA puede aplicarse de 2 formas (subpatrones)

  • Patrón SAGA mediante coreografía
  • Patrón SAGA mediante orquestación

Patrón SAGA mediante coreografía

En este caso cada transacción local publica un evento cuando el trabajo se ha concluido. La siguiente transacción local recibe el evento y hace su tarea. El trabajo finaliza cuando todas las transacciones locales se concluyen:

Cada servicio debe conocer e implementar cómo responder a ciertos estados.

Las ventajas de este método es que es fácil de implementar y los endpoints están poco acoplados, por el contrario puede volverse complicado cuando crecen el número de transacciones y pueden crearse dependencias cíclicas entre servicios.

Patrón SAGA mediante orquestación

Para implementar este patrón es necesario un proceso o servicio encargado de la coordinación (el llamada Orquestador o Manager) de todo el proceso.

Si alguna transacción falla el orquestador es el responsable del rollback de las transacciones previas ejecutadas.

Este método tiene la ventaja de ser más sencillo de entender y mantener y además su complejidad no crece cuando crece el número de transacciones. Por otro lado la lógica de negocio está implementada en el orquestador y la disponibilidad y escalabilidad depende de este.

Por suerte existen bastantes frameworks y librerías que nos ayudan a implementar este patrón, como:

Axon que es un framework y server creado específicamente para manejar microservicios

O Motores BPM como Camunda que por su ligereza son perfectamente válidos para hacer esta orquestación, podéis verlo en este ejemplo: