
Patrón de Microservicios (SAGA) a lo Godfather
¡Hola Chiquis!👋🏻 Hoy vamos a explorar el fascinante mundo de las transacciones distribuidas utilizando el patrón SAGA. Imagina que tu sistema de microservicios es como la familia Corleone, donde cada microservicio es un miembro de la familia que tiene una tarea específica. Vamos a ver cómo coordinar sus acciones para lograr transacciones exitosas. 🎩💼
Imagina que estás organizando una boda italiana a lo grande. Tienes que reservar la iglesia, el banquete, la música, y coordinar a un montón de proveedores. Cada uno de estos proveedores es como un microservicio en una aplicación moderna: independiente, pero parte de un proceso más grande. ¿Qué pasa si algo sale mal? Si el catering falla, ¿cómo asegurarte de que la iglesia no te cobre? Aquí es donde entra en juego el patrón Saga. 🕵️♂️🏢
¿Qué es el Patrón SAGA? El patrón SAGA es una forma de gestionar transacciones distribuidas en sistemas de microservicios. En lugar de utilizar transacciones ACID tradicionales, que pueden ser complejas y lentas en sistemas distribuidos, SAGA divide una transacción en una serie de pasos más pequeños que se ejecutan secuencialmente. Si algo falla, se ejecutan pasos de compensación para revertir las acciones anteriores, asegurando la consistencia. En otras palabras, Saga descompone la transacción en una secuencia de pasos más pequeños. Cada paso es una transacción local dentro de un servicio, y si algo falla, se ejecuta una serie de acciones de compensación para revertir los cambios realizados en pasos anteriores.
Imagina que Don Vito Corleone (el coordinador de la SAGA) tiene una misión importante que involucra a varios miembros de la familia. Cada miembro (microservicio) tiene una tarea específica y debe coordinarse con los demás para lograr el éxito. Si algo sale mal, deben deshacer sus acciones de manera organizada para mantener la estabilidad y el honor de la familia.
Pasos de la SAGA en el Mundo de El Padrino
- Paso 1: Planeación de la Misión: Don Vito planifica la misión y asigna tareas a cada miembro de la familia Corleone. De manera similar, el coordinador de la SAGA planifica la transacción y divide las tareas entre los microservicios. Ejemplo:
public class SagaCoordinator {
public void executeSaga() {
try {
// Paso 1: Tarea de Michael Corleone
michaelTask();
// Paso 2: Tarea de Sonny Corleone
sonnyTask();
// Paso 3: Tarea de Tom Hagen
tomTask();
} catch (Exception e) {
// Si algo falla, ejecutar pasos de compensación
rollback();
}
}
private void michaelTask() throws Exception {
// Lógica de la tarea de Michael
}
private void sonnyTask() throws Exception {
// Lógica de la tarea de Sonny
}
private void tomTask() throws Exception {
// Lógica de la tarea de Tom
}
private void rollback() {
// Pasos de compensación para deshacer las acciones
}
}

- Paso 2: Ejecución de las Tareas: Cada miembro de la familia realiza su tarea asignada. Si todas las tareas se completan con éxito, la misión es un éxito. Si alguna tarea falla, se deben ejecutar pasos de compensación para revertir las acciones anteriores. Ejemplo:
public void michaelTask() throws Exception {
// Tarea de Michael: Negociar con los aliados
boolean success = negotiateWithAllies();
if (!success) {
throw new Exception("Michael's task failed");
}
}
public void sonnyTask() throws Exception {
// Tarea de Sonny: Asegurar la seguridad
boolean success = secureSafety();
if (!success) {
throw new Exception("Sonny's task failed");
}
}
public void tomTask() throws Exception {
// Tarea de Tom: Gestión legal
boolean success = manageLegal();
if (!success) {
throw new Exception("Tom's task failed");
}
}
- Paso 3: Ejecución de Pasos de Compensación: Si algo sale mal, Don Vito ordena a cada miembro que deshaga sus acciones para mantener la estabilidad y el honor de la familia. Los microservicios ejecutan acciones de compensación para revertir las transacciones fallidas. Ejemplo:
public void rollback() {
// Deshacer las acciones de Tom
revertTomTask();
// Deshacer las acciones de Sonny
revertSonnyTask();
// Deshacer las acciones de Michael
revertMichaelTask();
}
private void revertTomTask() {
// Lógica para deshacer la gestión legal
}
private void revertSonnyTask() {
// Lógica para deshacer la seguridad
}
private void revertMichaelTask() {
// Lógica para deshacer la negociación con los aliados
}
Pensándolo como el Padrino
- Don Corleone (La Transacción): El Padrino quiere que su hijo se case. Esta es la transacción principal.
- Los Capos (Los Microservicios): Cada capo (iglesia, banquete, música) es responsable de su parte de la transacción.
- La Oferta (El Mensaje): El Padrino envía una oferta a cada capo.
- La Venganza (La Compensación): Si algo sale mal (el catering se quema), el Padrino ordena a sus hombres que “arreglen” la situación (cancelen el pago, encuentren otro catering).
¿Por qué usar el patrón Saga?
- Flexibilidad: Cada microservicio puede operar de forma independiente.
- Escalabilidad: Puedes escalar cada servicio de forma individual.
- Resiliencia: Si un servicio falla, la transacción puede continuar o ser compensada.
Tipos de Saga
- Orquestada: Hay un coordinador central que controla el flujo de la saga.
- Coreografiada: Los servicios se comunican entre sí mediante eventos.
Consideraciones al implementar Saga
- Consistencia eventual: A diferencia de las transacciones ACID, las sagas ofrecen consistencia eventual. Esto significa que el sistema eventualmente alcanzará un estado consistente, pero puede haber un período de tiempo durante el cual los datos estén inconsistentes.
- Manejo de errores: Es crucial tener mecanismos robustos para manejar errores y compensaciones.
- Registro de eventos: Un registro de eventos es esencial para rastrear el progreso de la saga y ejecutar las compensaciones en caso de fallo.
En resumen El patrón Saga es una herramienta poderosa para gestionar transacciones distribuidas en sistemas de microservicios. Al descomponer las transacciones en pasos más pequeños y manejables, podemos construir sistemas más resilientes y escalables.
Conclusión El patrón SAGA es una forma efectiva de gestionar transacciones distribuidas en sistemas de microservicios, asegurando la consistencia sin la complejidad de las transacciones ACID. Al igual que la familia Corleone, cada microservicio tiene su propia tarea, y si algo falla, deben coordinarse para revertir las acciones y mantener la estabilidad del sistema.
¡Gracias por leer! 👇🏻 🚀 ¿Te ha gustado? Comparte tu opinión. Artículo completo, visita: https://community.aws/@orlidun https://lnkd.in/ewtCN2Mn https://lnkd.in/eAjM_Smy 👩💻 https://lnkd.in/eKvu-BHe https://dev.to/orlidev https://lnkd.in/ecHHabTD https://pin.it/2BuZ9N4n8 https://linktr.ee/orlidevs ¡No te lo pierdas!
Referencias: Imágenes creadas con: Copilot ( microsoft.com )
#PorUnMillóndeAmigos #MakeYourselfVisible
