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:
[…] Veáse https://unpocodejava.com/2020/01/02/que-es-el-patron-saga/ […]