$30 off During Our Annual Pro Sale. View Details »

Transacciones en microservicios... ¿Mito o real...

Transacciones en microservicios... ¿Mito o realidad?

Una de las problemáticas más comunes que nos encontramos al trabajar con una arquitectura basada en microservicios es el tratamiento de la transaccionalidad.

Un problema generalmente resuelto en el mundo monolítico se convierte en un desafío en las *arquitecturas distribuidas*. ¿Cómo podemos atacar esta necesidad transaccional de forma eficiente?

En esta charla estudiaremos técnicas y patrones habituales (**CQRS**, **event sourcing**, **lectura de logs transaccionales**...) que nos ayudarán a gestionarla.

La charla será teórico práctica con ejemplos sobre las técnicas analizadas.

Avatar for Alberto Grande

Alberto Grande

November 23, 2018
Tweet

More Decks by Alberto Grande

Other Decks in Technology

Transcript

  1. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 BIO

    Arquitecto Software @ ParadigmaDigital [email protected] @alberto_grande Coorganizo en: Madrid Spring User Group Microservicios
  2. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    “A transaction symbolizes an unit of work performed within a database management system (or similar system) against a database, and treated in a coherent and reliable way independent of other transactions… A database transaction, by definition, must be atomic, consistent, isolated and durable”
  3. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    DB Peticiones Transacciones y rollback Transacción Transacción Transacción
  4. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida “A distributed transaction is about having one event trying to commit changes to two or more sources of data”
  5. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida DB Peticiones microservicio microservicio microservicio DB DB microservicio microservicio microservicio Transacciones y rollback
  6. Editar el estilo de texto del patrón ¿Cómo ejecutar una

    transacción distribuida? Evitándola
  7. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Revisar el diseño de nuestra arquitectura
  8. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Revisar de verdad el diseño de nuestra arquitectura
  9. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida • Definir la granularidad: Entender el alcance de la responsabilidad de los distintos microservicios. • Definir los dominios: Como cada uno de los modelos de datos manejado por un microservicios. • Definir agregados: si fueran necesarios para evitar / reducir transacciones distribuidos e incrementar la semántica de los microservicios. • Descubrir puntos críticos: Puntos que requieran especial atención por volumen de trabajo / criticidad requieren de mecanismos especiales. • Establecer los mecanismos de comunicación: óptimos para cada situación.
  10. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación Sistema 1 Sistema 2 Sistema 3
  11. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga Sistema 1 Sistema 2 Sistema 3
  12. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga Sistema 1 Sistema 2 Sistema 3 Receptor
  13. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor Legacy
  14. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor / procesador API
  15. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor / procesador Problemas: • ¿Transaccionalidad? ¿Necesaria? API
  16. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor / procesador Problemas: • ¿Transaccionalidad? ¿Necesaria? • ¿Rendimiento? API
  17. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor / procesador Problemas: • ¿Transaccionalidad? ¿Necesaria? • ¿Rendimiento? • ¿Saturación de los sistemas destino? API
  18. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Receptor / procesador Problemas: • ¿Transaccionalidad? ¿Necesaria? • ¿Rendimiento? • ¿Saturación de los sistemas destino? • ¿Responsabilidad única? API
  19. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Sistema 1 Sistema 2 Sistema 3 Problemas: • ¿Transaccionalidad? ¿Necesaria? • ¿Rendimiento? • ¿Saturación de los sistemas destino? • ¿Responsabilidad única? Procesador Receptor API
  20. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Lectura de eventos desde un conjunto de dispositivos ‘IoT’ (o similar), procesado de los mismos y reenvío a un conjunto de sistemas definido con diversos mecanismos de comunicación • Volumetría de eventos variable, con altos picos de carga • El procesado de los eventos requiere del enriquecimiento de los mismos con datos de un sistema Legacy no ‘apificado’ Problemas: • ¿Transaccionalidad? ¿Necesaria? • ¿Rendimiento? • ¿Saturación de los sistemas destino? • ¿Responsabilidad única? Sistema 1 Sistema 2 Sistema 3 Topic Sender Sender Sender Procesador Receptor API
  21. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida • Definir la granularidad: Entender el alcance de la responsabilidad de los distintos microservicios. • Definir los dominios: Como cada uno de los modelos de datos manejado por un microservicios. • Definir agregados: si fueran necesarios para evitar / reducir transacciones distribuidos e incrementar la semántica de los microservicios. • Descubrir puntos críticos: Puntos que requieran especial atención por volumen de trabajo / criticidad requieren de mecanismos especiales. • Establecer los mecanismos de comunicación: óptimos para cada situación.
  22. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Domain

    Driven Design y Agregados Dominio 1 Dominio 2 Dominio 3 Dominio 4 Dominio 5 Dominio 8 Dominio 6 Dominio 7
  23. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Servicio

    1 Domain Driven Design y Agregados Dominio 1 Dominio 2 Dominio 3 Dominio 4 Dominio 5 Dominio 8 Dominio 6 Dominio 7
  24. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Servicio

    2 Servicio 3 Servicio 1 Domain Driven Design y Agregados Dominio 1 Dominio 2 Dominio 3 Dominio 4 Dominio 5 Dominio 8 Dominio 6 Dominio 7
  25. Editar el estilo de texto del patrón ¿Cómo ejecutar una

    transacción distribuida? Simulándola
  26. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Conceptos

    y Técnicas Conceptos Técnicas I. Logs transaccionales II. CQRS III. Event sourcing
  27. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 “Commander”

    Es el encargado de la transacción distribuida, conoce las instrucciones a ejecutar y las coordina. Reintentos El “commander” debe tomar la responsabilidad de garantizar la ejecución de las instrucciones. En caso de error en algunos casos la solución es simplemente reintentarlo. Idempotencia Como consecuencia ‘lateral’ de los reintentos. Es la propiedad de ser capaz de hacer algo dos veces y obtener un resultado final como si sólo hubiese sido hecho una. Consistencia ‘eventual’ Tras la ejecución de una operación el sistema logrará un estado de consistencia en una cantidad de tiempo que no es cero. Conceptos
  28. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Logs

    transaccionales Change Data Capture Técnicas - Logs transaccionales / CDC
  29. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC • No sobrecargar el sistema a replicar • No aumentar costes • Solución reactiva • “Tiempo real” • Transparente a las aplicaciones actuales • Consistencia de los datos
  30. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB App Legacy
  31. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB Operación de modificación App Legacy
  32. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB Operación de modificación App Legacy Apertura de transacción Cierre de transacción
  33. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB App Legacy Operación de modificación Apertura de transacción Cierre de transacción Escritura log transaccional
  34. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB App Legacy Operación de modificación Apertura de transacción Cierre de transacción Escritura log transaccional Ingesta Lectura de logs ‘en crudo’
  35. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB App Legacy Operación de modificación Apertura de transacción Cierre de transacción Escritura log transaccional Ingesta Procesamiento asíncrono
  36. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Logs transaccionales / CDC microservicio microservicio microservicio microservicio microservicio microservicio microservicio microservicio DB DB DB Operación de modificación Apertura de transacción Cierre de transacción App Legacy Ingesta ETL Escritura log transaccional Transformación objetos de negocio
  37. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 CQRS

    Command Query Responsibility Segregation Técnicas - CQRS
  38. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - CQRS - Modelo tradicional Fuente: https://martinfowler.com
  39. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - CQRS - Modelo con separación de responsabilidad Fuente: https://martinfowler.com
  40. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo tradicional Origen Destino Parada 1 Parada 2 Modelo de datos Servicio
  41. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo tradicional Origen Destino Parada 1 Parada 2 Suben 10 Ocupación 10 Modelo de datos Servicio
  42. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo tradicional Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Ocupación 10 Ocupación 8 Modelo de datos Servicio
  43. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo tradicional Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Ocupación 10 Ocupación 8 Ocupación 6 Modelo de datos Servicio
  44. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo tradicional Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Bajan 6 Ocupación 10 Ocupación 8 Ocupación 6 Ocupación 0 Modelo de datos Servicio
  45. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo event sourcing Origen Destino Parada 1 Parada 2 Evento Evento Evento Evento Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Bajan 6 Modelo de datos Servicio
  46. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo event sourcing Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Bajan 6 Ocupación ? Modelo de datos Servicio Evento Evento Evento Evento
  47. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo event sourcing Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Bajan 6 Evento Evento Evento Evento Modelo de datos Servicio Ocupación 0
  48. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo event sourcing Origen Destino Parada 1 Parada 2 Suben 10 Suben 2 Bajan 4 Suben 5 Bajan 7 Bajan 6 Ocupación 6 Snapshot Evento Evento Evento Evento Modelo de datos Servicio Ocupación 0
  49. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Técnicas

    - Event sourcing - Modelo event sourcing Contras • Curva de aprendizaje • Por lo general el message broker garantiza que los mensajes llegan al menos una vez (detección de duplicados) • Necesidad de artificios (Snapshots) para mejorar el rendimiento • Queries en el listado es complejo (Joins?) PROs • Publicación de eventos ante cambios de estado (arquitectura orientada a eventos) • Posibilidad de identificar al generador de los cambios de estado (auditoría) • Los eventos pueden utilizarse para otros propósitos (ej: enviar notificaciones) • Almacenamiento de histórico • Almacenamiento de elementos ‘sencillos’
  50. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Consistencia eventual Técnicas de ‘Simulación’ de Transaccionalidad Distribuida
  51. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 •

    Garantía que la base es actualizada y el evento es publicado • Publicación de eventos de negocio de alto nivel • Eventualmente consistente • Un servicio no puede leer de forma inmediata su propia escritura Transaccionalidad Distribuida - Consistencia eventual: Message broker Opción 1 µservicio 1 DB Consumidor µservicio 2 Lectura Publicación Eventos Eventos Escritura API Message broker
  52. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Consistencia eventual: Message broker Opción 1 Compras DB Pago Facturación Lectura Publicación Eventos Eventos Escritura API Message broker t0 Una petición llega al Compras
  53. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Consistencia eventual: Message broker Opción 1 Compras DB Pago Facturación Lectura Publicación Eventos Eventos Escritura API Message broker t0 Una petición llega al Compras t1 Compras publica un evento de compra en el Message Broker. Da un respuesta a la petición
  54. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Consistencia eventual: Message broker Opción 1 Compras DB Pago Facturación Lectura Publicación Eventos Eventos Escritura API Message broker t0 Una petición llega al Compras t1 Compras publica un evento de compra en el Message Broker. Da un respuesta a la petición tn Pago recoge el evento, lo procesa y lo inserta en la DB
  55. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Facturación

    recoge el evento y lo procesa... Transaccionalidad Distribuida - Consistencia eventual: Message broker Opción 1 Compras DB Pago Facturación Lectura Publicación Eventos Eventos Escritura API Message broker t0 Una petición llega al Compras t1 Compras publica un evento de compra en el Message Broker. Da un respuesta a la petición tn Pago recoge el evento, lo procesa y lo inserta en la DB tm
  56. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 DB

    • No requiere cambios en la aplicación actual • Eventualmente consistente • Ingesta de datos de bajo nivel deben ser convertidos a elementos de negocio de alto nivel Transaccionalidad Distribuida - Consistencia eventual: Lectura de logs transaccionales Opción 2 µservicio 1 µservicio 2 Lectura / escritura Publicación Ingesta Eventos Logs transaccionales API Message broker
  57. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 DB

    Transaccionalidad Distribuida - Consistencia eventual: Lectura de logs transaccionales Opción 2 Compras Analítica Lectura / escritura Publicación Ingesta Eventos Logs transaccionales API Message broker t0 Una petición llega al Compras
  58. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 DB

    Transaccionalidad Distribuida - Consistencia eventual: Lectura de logs transaccionales Opción 2 Compras Analítica Lectura / escritura Publicación Ingesta Eventos Logs transaccionales API Message broker t0 Una petición llega al Compras t1 Compras procesa la petición y la inserta en la DB. Da un respuesta a la petición
  59. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 DB

    Transaccionalidad Distribuida - Consistencia eventual: Lectura de logs transaccionales Opción 2 Compras Analítica Lectura / escritura Publicación Ingesta Eventos Logs transaccionales API Message broker t0 Una petición llega al Compras t1 Compras procesa la petición y la inserta en la DB. Da un respuesta a la petición tn Ingesta recoge el evento del log transaccional y lo publica en el Message Broker
  60. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 DB

    Transaccionalidad Distribuida - Consistencia eventual: Lectura de logs transaccionales Opción 2 Compras Analítica Lectura / escritura Publicación Ingesta Eventos Logs transaccionales API Message broker Analítica recoge el evento y lo procesa... t0 Una petición llega al Compras t1 Compras procesa la petición y la inserta en la DB. Da un respuesta a la petición tn Ingesta recoge el evento del log transaccional y lo publica en el Message Broker tm
  61. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 •

    Escritura de datos y eventos en transacción ACID • Ingesta de eventos de alto nivel, no es necesario la conversión a elementos de negocio de alto nivel • El código debe prepararse para persistir los dos tipos de datos (dato y evento) Transaccionalidad Distribuida - Consistencia eventual: Tabla de base de datos como cola de mensajes Opción 3 µservicio 1 µservicio 2 Lectura / escritura (ACID) Publicación Ingesta Eventos Logs transaccionales tabla de eventos DB Eventos Datos API Message broker
  62. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida Sagas Técnicas de ‘Simulación’ de Transaccionalidad Distribuida
  63. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas µServicio Commander µServicio 1 µServicio 2 µServicio 3 µServicio 4 • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona API
  64. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas Compras Pago Factura Stock Envío • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona API
  65. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona Compras Pago Factura Stock Envío API OK Ejecutar pago
  66. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona Compras Pago Factura Stock Envío API OK Ejecutar pago Crear factura OK
  67. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona Compras Pago Factura Stock Envío API OK Ejecutar pago Crear factura OK Reducir stock OK
  68. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - Sagas • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona Compras Pago Factura Stock Envío API OK Ejecutar pago Crear factura OK Reducir stock OK Orden envío OK
  69. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Compras

    Transaccionalidad Distribuida - Sagas • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona • En caso de error se ejecuta el mecanismo de compensación para deshacer ‘el estado’ Pago Factura Stock Envío API OK Ejecutar pago Crear factura OK Reducir stock NOK OK
  70. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Compras

    Transaccionalidad Distribuida - Sagas Compensación Compensación Pago Factura Stock Envío API OK Ejecutar pago Crear factura OK Reducir stock Anular factura Devolución NOK OK Compensación Incrementar stock • La operación se divide en múltiples pasos o estados • El microservicio iniciador trata la operación como una máquina de estados • El ‘estado’ transita cuando cada una de las operaciones individuales termina de forma satisfactoria • Puede ser una operación síncrona o asíncrona • En caso de error se ejecuta el mecanismo de compensación para deshacer ‘el estado’
  71. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida CQRS + Event sourcing Técnicas de ‘Simulación’ de Transaccionalidad Distribuida
  72. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 •

    Beneficios de event sourcing • Consulta de datos (queries y joins) • Modelo de datos adecuado para lectura y escritura (CQRS) • Lag entre escritura y lectura • La transaccionalidad se gestiona desde el Servicio agregador mediante la recepción (o no) de eventos (Event sourcing) • En situaciones de error es necesario establecer mecanismos de conciliación / compensación Transaccionalidad Distribuida - CQRS + Event sourcing µservicio 1 µservicio 2 µservicio agregador escritura escritura lectura DB lectura escritura eventos 1 eventos 2 eventos 1 y 2 µServicio Commander API µServicio Consulta API
  73. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago Evento Factura OK µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación
  74. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago Evento Factura OK µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento
  75. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago Evento Factura OK µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento t2 Facturación procesa la invocación, procesa y genera un evento
  76. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago Evento Factura OK µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento t2 Facturación procesa la invocación, procesa y genera un evento tn, tm Agregador recibe el evento (pago / factura) y los procesa
  77. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago Evento Factura OK µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento t2 Facturación procesa la invocación, procesa y genera un evento tn, tm Agregador recibe el evento (pago / factura) y los procesa tz Consulta pregunta al agregador por el resultado de la operación
  78. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento t2 Facturación procesa la invocación, procesa y genera un evento tn, tm Agregador recibe el evento (pago / factura, incluyendo el error) y los procesa tz Consulta pregunta al agregador por el resultado de la operación NOK Evento error
  79. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 Transaccionalidad

    Distribuida - CQRS + Event sourcing Servicio Pago Servicio Facturación Servicio Agregador escritura escritura lectura DB lectura escritura eventos pago eventos factura eventos pago y factura Evento Pago µServicio Compras API µServicio Consulta API t0 Una petición llega a Compras e invoca a los servicios asociados a la operación t1 Pago procesa la invocación, procesa y genera un evento tn, tm Agregador recibe el evento (pago) y los procesa tz Consulta pregunta al agregador por el resultado de la operación NOK
  80. Transacciones en microservicios... ¿Mito o realidad? - Commit 2018 ¿Quieres

    colaborar? Madrid Spring User Group https://www.meetup.com/madrid-spring-user-group/ Microservicios https://www.meetup.com/Microservicios/