Ir al contenido principal

Disponibilidad: Patrón Compensating Transaction

Patrones Cloud
  • Disponiblidad
  • Administración de datos
  • Diseño e implementación
  • Mensajería
  • Administración y supervisión
  • Rendimiento y escalabilidad
  • Resistencia
  • Seguridad

Patrón Compensating Transaction (Transacción de compensación)

Problema


Un usuario consumi nuestra Api, La Api realiza una serie de pasos


Crea un usuario (Puede hacerla ella misma o delegarla a otra Api o dejar un mensaje en una cola)
Ej: BD Sql Server
Alta en sistema externo (Dentro de la misma Api o delega a otro sistema)
Api Externa
Notifica al usuario (Notificación por socket)
Signal R
Notificación por mail (Mensajes a los usuarios y al admin)
SendGrid

Que ocurre si un paso falla?

Solución

Se debe tener un store centralizado, lo que va a guardar un estado y toda la información posible de todos los pasos. Se crea el usuario (Toda la información), Envia Email (A quien, hora, etc). Todos con el mismo ID.

El paso que falla notifica el evento y todos pasos realizan rollback o proceso de compensación (Eliminar Usuario, Dar de Baja al usuario, Una nueva notificación informando la tx errónea)

Todos los pasos deben ser autonomos e independientes (En lo posible en paralelo)

Consideraciones:

- Acciones de compensacion especificas por cada paso y para un problema en particular
- State Up Store debe esta siempre disponible (Dado su importancia). 
- Acciones de compensación deben ser Idempotentes* , deben ser repetibles por que pueden fallar
- Guardar la máxima información de cada uno de los pasos
- No descartar que algún paso se deba compensar de manera manual.
- En ocasiones el rollback es demasiado complicado aun mas que la misma acción

Cuando usarlo?
- Sistema con pasos (No todos necesitan o soportan este patrón)
- Manejo consistencia eventual. Intentar evitar este patrón.




la idempotencia es la propiedad para realizar una acción determinada varias veces y aun así conseguir el mismo resultado que se obtendría si se realizase una sola vez.



Patrones relacionados:

  • Información básica de coherencia de datos. El patrón Compensating Transaction se usa a menudo para deshacer operaciones que implementan el modelo de coherencia definitiva. En este manual se proporciona información sobre las ventajas e inconvenientes de la coherencia definitiva.

  • Patrón Scheduler-Agent-supervisor. Describe cómo implementar sistemas resistentes que realicen operaciones empresariales en las que se usen recursos y servicios distribuidos. En ocasiones, podría ser necesario deshacer el trabajo realizado por una operación mediante el uso de una transacción de compensación.

  • Patrón de reintento. Las transacciones de compensación pueden resultar costosas de realizar, y una forma de reducir su uso podría ser implementar una directiva efectiva de reintento de las operaciones con error siguiendo el patrón Retry.



Referencias:

Comentarios

Entradas más populares de este blog

Antipatrones Microservicios

1. Migración de Manejo de Datos Antipatron. El antipatrón de migración basado en datos se produce principalmente cuando se migra de una aplicación monolítica a una arquitectura de microservicios. La razón por la que esto es un antipatrón es que al principio parece una buena idea migrar la funcionalidad del servicio y los datos correspondientes al crear microservicios, pero como aprenderá en este capítulo, esto lo llevará por un mal camino que puede resultar en alto riesgo, exceso de costo y esfuerzo de migración adicional. Comprender los riesgos relacionados con la migración de datos y la importancia de "datos sobre funcionalidad" es el primer paso para evitar este antipatrón. La técnica para evitar este antipraton consiste en realizar primero una migración de la funcionalidad, es decir, primero refactorizar el código fuente, pasando por primero modularizar el contexto o dominio y continuar con la definición y construcción de servicios, a medida que se conoce el código que se...

Microservice Architecture | Arquitectura de microservicios

Qué es  Arquitectura de microservicios ?   El estilo arquitectónico de microservicios es un enfoque para desarrollar una sola aplicación como un conjunto de pequeños servicios, cada uno de los cuales se ejecuta en su propio proceso y se comunica con mecanismos ligeros, a menudo una API de recursos HTTP. El hecho de que los  servicios son implementables y escalables de manera independiente, cada servicio también permite que se escriban diferentes servicios en diferentes lenguajes de programación. También pueden ser gestionados por diferentes equipos. Las aplicaciones creadas a partir de microservicios pretenden ser lo más desacopladas y cohesivas posible: poseen su propia lógica de dominio y actúan más como ltros en el sentido clásico de que reciben una solicitud, aplican la lógica según corresponda y producen una respuesta. Un servicio es una funcionalidad que se expone para su uso por otros procesos .  Que otros protocolos puedo us...

Referencia | Material de Apoyo

Arquitectura .NET Architecture Guides Architectural Patterns: Uncover essential patterns in the most indispensable Domain Driven Design Quickly Microservicios Practical Microservices: By Umesh Ram Sharma Building Microservices: Designing Fine-Grained Systems By Sam Newman SOA Design Patterns By Thomas Erl