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.
Patrones saga
Una saga consiste en una secuencia de transacciones locales. Cada transacción local de una saga actualiza la base de datos y desencadena la siguiente transacción local. Si se produce un error en una transacción, la saga ejecuta transacciones de compensación para revertir los cambios en la base de datos realizados por las transacciones anteriores.
Esta secuencia de transacciones locales ayuda a lograr un flujo de trabajo empresarial al utilizar los principios de continuidad y compensación. El principio de continuación decide la recuperación anticipada del flujo de trabajo, mientras que el principio de compensación decide la recuperación hacia atrás. Si se produce un error en la actualización en algún paso de la transacción, la saga publica un evento para continuar (para volver a intentar la transacción) o como compensación (para volver al estado anterior de los datos). Esto garantiza que la integridad de los datos se mantenga y sea coherente en todos los almacenes de datos.
Por ejemplo, cuando un usuario compra un libro en una tienda online, el proceso consiste en una secuencia de transacciones, como la creación de un pedido, la actualización del inventario, el pago y el envío, que representa un flujo de trabajo empresarial. Para completar este flujo de trabajo, la arquitectura distribuida emite una secuencia de transacciones locales para crear un pedido en la base de datos de pedidos, actualizar la base de datos de inventario y actualizar la base de datos de pagos. Cuando el proceso se realiza correctamente, estas transacciones se invocan secuencialmente para completar el flujo de trabajo empresarial, como se muestra en el siguiente diagrama. Sin embargo, si se produce un error en alguna de estas transacciones locales, el sistema debería poder decidir cuál es el siguiente paso adecuado, es decir, una recuperación hacia adelante o hacia atrás.
![Flujos de trabajo empresariales](images/saga-1.png)
Los dos escenarios siguientes ayudan a determinar si el siguiente paso es la recuperación hacia delante o hacia atrás:
-
Error a nivel de plataforma, en el que algo falla en la infraestructura subyacente y provoca un error en la transacción. En este caso, el patrón saga puede provocar una recuperación hacia delante al volver a intentar la transacción local y continuar con el proceso empresarial.
-
Error a nivel de aplicación, en el que el servicio de pago falla debido a un pago no válido. En este caso, el patrón saga puede realizar una recuperación hacia atrás mediante la emisión de una transacción de compensación para actualizar el inventario y las bases de datos de pedidos y restablecer su estado anterior.
El patrón saga gestiona el flujo de trabajo empresarial y garantiza que se alcance un estado final deseable mediante la recuperación hacia delante. En caso de errores, revierte las transacciones locales mediante la recuperación hacia atrás para evitar problemas de coherencia de datos.
El patrón saga tiene dos variantes: coreografía y orquestación.
Coreografía de la saga
El patrón de coreografía de la saga depende de los eventos publicados por los microservicios. Los participantes de la saga (microservicios) se suscriben a los eventos y actúan en función de los factores desencadenantes de los eventos. Por ejemplo, el servicio de pedidos del siguiente diagrama emite un evento OrderPlaced
. El servicio de inventario se suscribe a ese evento y actualiza el inventario cuando se emite el evento OrderPlaced
. Del mismo modo, los servicios participantes actúan en función del contexto del evento emitido.
El patrón de coreografía de la saga es adecuado cuando solo hay unos pocos participantes en la saga y se necesita una implementación sencilla sin ningún punto de error. Cuando se agregan más participantes, se hace más difícil realizar un seguimiento de las dependencias entre los participantes mediante este patrón.
![Patrón de coreografía de la saga](images/saga-2.png)
Para una revisión detallada, consulte la sección Coreografía de la saga de esta guía.
Orquestación de la saga
El patrón de orquestación de la saga tiene un coordinador central llamado orquestador. El orquestador de la saga administra y coordina todo el ciclo de vida de la transacción. Conoce la serie de pasos que se deben realizar para completar la transacción. Para ejecutar un paso, envía un mensaje al microservicio participante para que realice la operación. El microservicio participante completa la operación y envía un mensaje al orquestador. En función del mensaje que recibe, el orquestador decide qué microservicio ejecutar a continuación en la transacción.
El patrón de orquestación de la saga es adecuado cuando hay muchos participantes, y es necesario un acoplamiento flexible entre los participantes de la saga. El orquestador resume la complejidad de la lógica al realizar el acoplamiento flexible de los participantes. Sin embargo, el orquestador puede convertirse en un único punto de error porque controla todo el flujo de trabajo.
![Patrón de orquestación de la saga](images/saga-3.png)
Para una revisión detallada, consulte la sección Orquestación de la saga de esta guía.