Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.
ADR  - Patrones de sincronización basados en eventos

ADR-BACKEND-EDA-SINCRO


-

Estado

Estado
colourYellowGreen
title✎ BORRADOR✔ VIGENTE

Partes interesadas

TAGS


Tomada el

Pre
PRE-
release
RELEASE
Vigente
RELEASE
Retiro
RETIRO
 
29-05-2024
 
-

Version history
dateFormatdd-MM-yyyyy
page$self
first1

Responsable

Solución Afectada

TODAS

NUEVOS DESARROLLOS, PAES

Recursos Asociados

Spike

Jira
serverJira
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverIdaea3f5ce-c977-3088-89fe-07be16229731
keyOTARQ-2139



  



Asunto a Decidir

Se necesita tomar una decisión sobre cuál será el mecanismo de sincronización con BUSCA entre sistemas de la información de configuración alojada en CONFIGURA y CONFIGURA-X. El objetivo de esta sincronización es que se puedan buscar los elementos de configuración de una aplicación a través del buscador global, ofrecido por el proyecto de BUSCA.

A continuación se describen los criterios a tener en cuenta para la decisión:

que requieren mantener una coherencia en  el dato sincronizado, asumiendo los mecanismos de 

Tooltip
linkTextStrongtrue
appendIconInfo
linkTextconsistencia eventual

¿Qué es la Consistencia Eventual?

La consistencia eventual es un modelo de consistencia para sistemas distribuidos en el cual se garantiza que, dado el tiempo suficiente y en ausencia de nuevas actualizaciones, todas las réplicas de los datos llegarán a ser consistentes. Esto significa que, eventualmente, todos los nodos en el sistema verán la misma versión de los datos, aunque en un momento dado puedan estar desincronizados.

Los requisitos no funcionales que esta solución debe asegurar son los siguientes: 

  • Resiliente: Se debe garantizar la entrega de la información actualizada (no puede haber pérdida de datos en la sincronización)
  • Resiliente: Se debe garantizar la entrega de la información actualizada (no puede haber pérdida de datos en la sincronización)
  • Transaccional: En caso de error como vuelvo al estado inicial.
  • Idempotente: Un cambio en la configuración los datos debe tener siempre la misma consecuencia
  • No invasivo:  No debe requerir ningún cambio de código ni de bbdd en el Configura-X
  • Obsolescencia de la sincronía: Es Obsolescencia de la sincronía: Es importante mantener la última versión del dato.
  • Desacoplamiento
  • entre sistemas
  • : implica que los componentes de un sistema están diseñados para interactuar entre sí con la menor cantidad de dependencias directas posible.
  • Compatible con la Consistencia Eventual
  • Compatible con las tecnologías actuales definidas en la arquitectura de referencia
    • Baremetal
      • Web Logic 12.2
      • Jdk 8
      • Oracle 19c
    • Contenedores
      • Open Liberty 20.0.0.12
      • Microprofile 3.3
      • Jdk 11
      • Oracle 19c


Identificación de la decisión

Info
titleDescribe brevemente la decisión arquitectónica tomada.
Describe brevemente la decisión arquitectónica tomada.

La decisión final dependerá de factores adicionales del proyecto, donde se aplicarán los mecanismos descritos en este Architecture Decision Record.

Entre los aspectos clave a considerar, se incluye:

  • No refactorizar el código legacy.

Contexto

Este caso de uso se

Contexto

Este caso de uso se divide en dos fases:

  • Fase 1: Generación del cambio
    • Persistir el cambio en el sistema origen
  • Fase 2: Sincronización
    • Sistema origen genera un evento de sincronización en base al cambio producido
    • Propagación del evento de sincronización
    • Persistir la sincronización en el/los sistema/s destino

Hay diferentes escenarios que se ven impactados por esta sincronización:

  • Aplicaciones de escritorio
  • Aplicaciones Web Baremetal (WebLogic)
  • Aplicaciones Web Contenedores (OKD)

Dentro de la gestión de los proyectos está el aspecto económico:

  • Con canal de para modificación
  • Sin canal para modificación



Contras
UI Expand
titleAlternativas Consideradas


la BBDD. Otro servicio del mismo negocio debe leer esa tabla de eventos (técnica polling cada n ms) e ir generando eventos de sincronización a un bus y este se consume y se persiste el cambio en el sistema destino.


Image Added


Evaluación de pros/contras

UI Expand
titleOutBox PatternTransactional Oubox Pattern

Este patrón implica escribir los eventos en una tabla de "outbox" dentro de la misma transacción que la operación de negocio. El negocio (aplicación, servicio, microservicio) El negocio (aplicación, servicio, microservicio), "SYSTEM A"  que hace la persistencia ( nueva inserción u , actualización o borrado) y después de confirmar la persistencia se notifica un evento de sincronización a un bus externo, dicho evento se consume por un sistema tercero "System B" y se en la misma transacción persiste el cambio en el sistema destino. Dándo como resultado final que ambos sistemas quedan sincronizados en base a la gestión del evento.

Image RemovedDiseño para un sistema legacy

Image RemovedDiseño para un sistema nuevo

Sección
bordertrue
Columna
width25%
Pros
No tiene impacto en la BBDD del sistema Origen
  • La emisión de eventos y su persistencia indicada en el paso 2, conlleva la implementación de mecanismos de resiliencia adicionales de cara a garantizar la entrega. 

(General)   El sistema A, Requiere cambios en el código para poder emitir los eventos de negocio a remitir al bus de eventos externo:

  • Si la tecnología es muy obsoleta (delphi, jdk antiguos, .net antiguos) puede que no exista cliente de conexíon con el event buffer.

En los legacy puede no haber canal para implementar los cambios

(Configura ) Al tener que convivir con la api del legacy (y hacer los cambios desde dos orígenes de datos ) se pueden generar conflictos en la persistencia debido a la concurrencia

(Configura ) Al tener que convivir con al api del legacy, Si la tecnología es muy obsoleta (delphi, jdk antiguos, .net antiguos) puede que no exista cliente de conexíon con el event buffer
para cualquier tipo de proyecto 👍
Asegura la creación del evento de sincronización. Esto es debido a la transacción local que se realiza al persistir el cambio en la tabla y su posterior persistencia en la tabla de eventos a publicar.

No hay una comunicación directa desde el sistema origen con el event buffer. Esto aporta varias ventajas:

  • Se puede contar con un microservicio reutilizable e independiente del sistema origen.
Columna
width25%
Pros para proyectos ya existentes 👍

En relación a la comunicación del sistema origen con el event buffer, se aportan varias ventajas adicionales a los proyectos existentes:

  • No es necesario modificar el código del  proyecto existente para tener esta funcionalidad,
Columna
width23%
Contras para cualquier tipo de proyecto 👎

Implica cambios en la base de datos, se debe crear una tabla para persistencia de los eventos a generar.

Hay riesgo de impacto en la performance de la bbdd del sistema, al realizar consultas cada intervalo de tiempo x.

Columna
width23%
Contras para proyectos ya existentes 👎

Implica cambios en el código para persistir en la tabla de eventos

Evaluación de requisitos

RequisitoOK/NOK
/NA
Detalle
Resiliente

Estado
colour

Blue

Green
title

Nuevo ADR

OK


  • ⚠️ Hay que implementar
Estado
colourRed
titleNOK
Aplicación
  • de mecanismos de fault-tolerance en cada uno
de los puntos de comunicación (4)Dificultad para mantener la resiliencia en el paso 2 ya que al no persistirse en ningún sitio la necesidad de sincronización cualquier caída del servidor (apagado, bloqueo, degradación, perdida del POD) podría implicar que la sincronización no se lleve a cabo y cuando se reestablezca el sistema perdida de la trazabilidad de los cambios a sincronizar
  • cada paso
  • ✔️ Al hacer uso de una tabla auxiliar y un event buffer puedes tener la garantía de entrega ante caídas.
  • ✔️ Si el Sistema Origen se cae, al estar persistida la necesidad de sincronización, se puede volver a retomar desde la última sincronización correcta.
  • ✔️ El event buffer  al tener persistencia de mensajes y posibilidad de ack de entrega puedes garantizar simplemente la recepción o la lectura del mismo por algún consumidor según se defina la necesidad de confirmación de entrega.
Transaccional

Estado
colour

Red

Green
title

NOK

En ningún caso se garantiza la transaccionalidad de la sincronización completa.

OK

✔️ Se establecen los siguientes tramos transaccionales:

NO -
  • SI - Entrega en el Event Buffer(Producer paso 3). Dependiente del tipo de ACK que se establezca en el Producer 
  • SI - Consumo y persistencia del cambio (Paso 5 y 6)
  • No invasivo - Código Estadocolour
    • Persistencia del cambio
    y persistencia del evento de sincronización (Pasos 1 y 2). Si falla la entrega en el buffer  habría que realizar una nueva operación de modificación en la bbdd (paso 1) ya que este paso ya ha sido comiteado, por lo que podría aplicarse y tener efectos en la aplicación .
    • : La persistencia tanto en la tabla origen como en la tabla de evento, se puede realizar como transacción local.
    • Generación de Eventos:  El event buffer tiene diferente estrategias en la garantía de entrega.
    Idemponente

    Estado
    colourGreen
    titleOK

    • ✔️ Hay que asegurarse de que los eventos en la outbox se marquen como procesados.
    • ⚠️ Necesita lógica adicional para asegurar idempotencia
    No invasivo - Código

    Estado
    colourRed
    titleNOK

    Hay que hacer desarrollos para la implementación de la emisión de los eventos.
    No invasivo - BBDD

    Estado
    colour

    Red
    titleNOK

    • Hay
    que hacer desarrollos para la implementación de la emisión de los eventosNo invasivo - BBDD

    Estado
    colourGreen
    titleOK

    La bbdd del Sistema A no tendría que sufrir ninguna alteración
    • que crear una nueva tabla que persista los eventos que después un servicio leerá para publicar.
    • ⚠️ Definir estrategia de lectura, en batch o individual.
    • ⚠️ Definir el tiempo de polling (ms).
    Compatible con las tecnologías actuales
    (general)

    Estado
    colour

    Red

    Green
    title

    NOK

    Nada que reseñar en cuanto a la BBDD, compatible con la tecnología que estén usando actualmente en el proyecto

    OK

    ✔️ Al no añadir ninguna tecnología extra al (la conexión con el event buffer es a través de un nuevo microservicio) no se aprecian incompatibilidades.

    Al requerir cambios en el código y que el Sistema A conecte directamente con el event buffer en proyectos legacy con tecnologías muy antiguas puede que no exista cliente de conexíon con el event buffer

    El negocio (aplicación, servicio, microservicio) que hace la persistencia ( nueva inserción u actualización) y después en la misma transacción persiste el cambio en la BBDD. Otro servicio del mismo negocio debe leer esa tabla de eventos (técnica polling cada n ms) e ir generando eventos de sincronización a un bus y este se consume y se persiste el cambio en el sistema destino.

    Algunos Ejemplos

    Image Removed

    Evaluación de pros/contras

    Pros Contras

    Evaluación de requisitos

    Image Removed

    Evaluación de pros/contras

    Pros Contras

    Evaluación de requisitos

    UI Expand
    titleTransactional Oubox Pattern
    Garantiza la creación del evento de sincronización gracias a su transacción con la bbdd desde el sistema origen
    Al no comunicarse el código del caso de uso directamente con él event buffer, en caso de aplicaciones legacy, siempre se puede tener un microservicio (el cual podría generalizarse para ser reutilizable) actualizado con una tecnología que disponga de un cliente soportado para conectarse con el event buffer.

    Requiere de un Servicio (Microservicio) para realizar la sincronización. Se puede mitigar con generalidades que hagan que esta contra se pueda reducir o desaparecer.

    Implica cambios de código como en la BBDD

    Implica cambios en la BBDD

    En los legacy puede no haber canal para realizar los cambios.

    Puede tener un impacto en la performance de la bbdd del sistema. No debería ser mucho el impacto, pero es más que no tener nada nuevo en la BBDD.

    El uso de triggers para la generación directa de eventos, dependiendo del escenario, puede implicara que la cantidad de triggers aumenten linealmente con la cantidad de tablas bajo consideración.

    Si el tamaño ha aumentado puede suponer un aumento en la complejidad si se necesita hacer un cambio en el modelo de datos base, en el de eventos de sincronización o ante una posible refactorización.

    El tamaño puede tener un impacto en el rendimiento cada vez que se produce la modificación (insert, update, delete) en cada registro.

    (Configura ) Al tener que convivir con la api del legacy (y hacer los cambios desde dos orígenes de datos ) se pueden generar conflictos en la persistencia en la tabla de configuración debido a la concurrencia

    (Configura ) Al tener que convivir con la api del legacy (y hacer los cambios desde dos orígenes de datos ) se pueden generar conflictos en la persistencia en la tabla de eventos de sincronización debido a la concurrencia

    RequisitoOK/NOKDetalle
    Resiliente

    Estado
    colourGreen
    titleOK

    Estado
    colourBlue
    titleNuevo ADR

    Aplicación de mecanismos de fault-tolerance en los 6 puntos.

    Al hacer uso de una tabla auxiliar y un event buffer puedes tener la garantía de entrega ante caídas. Si el Sistema A se cae, al estar persistida la necesidad de sincronización, se puede volver a retomar desde la última sincronización correcta. El event buffer (Kafka) al tener persistencia de mensajes y posibilidad de ack de entrega puedes garantizar simplemente la recepción o la lectura del mismo por algún consumidor según se defina la necesidad de confirmación de entrega.

    Transaccional

    Estado
    colourGreen
    titleOK

    Se establecen los siguientes tramos transaccionales:

    • Persistencia del cambio y persistencia del evento de sincronización (Pasos 1 y 2)
    No invasivo - Código

    Estado
    colourRed
    titleNOK

    Hay que hacer desarrollos para la implementación de la emisión de los eventos.
    No invasivo - BBDD

    Estado
    colourBlue
    titleNuevo ADR
    Estado
    colourRed
    titleNOK

    Hay que crear una nueva tabla que persista los eventos que después un servicio leerá para publicar.

    Definir estrategia de lectura, en batch o individual.

    Definir el tiempo de polling (ms).

    Compatible con las tecnologías actuales

    Estado
    colourGreen
    titleOK

    Nada que reseñar en cuanto a la BBDD, compatible con la tecnología que estén usando actualmente en el proyecto.

    UI Expand
    titleTrigger en BBDD
    Garantiza la creación del evento de sincronización gracias a al trigger que realiza la bbdd que garantiza su ejecución.
    Al no comunicarse el código del caso de uso directamente con él event buffer, en caso de aplicaciones legacy, siempre se puede tener un microservicio (el cual podría generalizarse para ser reutilizable) actualizado con una tecnología que disponga de un cliente soportado para conectarse con el event buffer.
    No se tiene que realizara ningún cambio en el código del legacy.

    Requiere de un Servicio (Microservicio) para realizar la sincronización. Se puede mitigar con generalidades que hagan que esta contra se pueda reducir o desaparecer.

    Implica cambios de código como en la BBDD.

    Puede tener un impacto en la performance de la bbdd del sistema. No debería ser mucho el impacto, pero es más que no tener nada nuevo en la BBDD.

    La generación de los eventos de sincronización a partir de relaciones complejas, puede ser costoso a nivel de performance y de construcción.

    (Configura ) Al tener que convivir con la api del legacy (y hacer los cambios desde dos orígenes de datos ) se pueden generar conflictos en la persistencia en la tabla de configuración debido a la concurrencia.

    Requisito OK/NOKDetalle
    Resiliente

    Estado
    colourGreen
    titleOK

    Estado
    colourBlue
    titleNuevo ADR

    Aplicación de mecanismos de fault-tolerance en los 6 puntos

    Al hacer uso de una tabla auxiliar y un event buffer puedes tener la garantía de entrega ante caídas. Si el Sistema A se cae, al estar persistida la necesidad de sincronización, se puede volver a retomar desde la última sincronización correcta. El event buffer (Kafka) al tener persistencia de mensajes y posibilidad de ack de entrega puedes garantizar simplemente la recepción o la lectura del mismo por algún consumidor según se defina la necesidad de confirmación de entrega

    Transaccional

    Estado
    colourGreen
    titleOK

    Se establecen los siguientes tramos transaccionales:

    • Paso 1 y Paso 2 no necesitan transacción ya que es la propia BBDD la que garantiza con el trigger la creación del evento de sincronización en la tabla de eventos
    No invasivo - Código

    Estado
    colourGreen
    titleOK

    No requiere cambio de código
    No invasivo - BBDD

    Estado
    colourRed
    titleNOK

    Requiere la creación de una tabla para persistir los eventos de sincronización

    Requiere la creación de un trigger

    Compatible con las tecnologías actuales

    Estado
    colourGreen
    titleOK

     Nada que reseñar en cuanto a la BBDD, compatible con la tecnología que estén usando actualmente en el proyecto.

    Trigger en BBDD

    Los triggers son bloques de código que se ejecutan automáticamente en respuesta a ciertos eventos en la base de datos, como inserciones, actualizaciones o eliminaciones de registros. En términos de resiliencia y recuperación, Oracle ofrece varios mecanismos para manejar errores y garantizar la integridad de las transacciones en las que participan los triggers. A continuación, se detallan algunos aspectos clave:

    1. Atomicidad y Consistencia

    • Atomicidad: Los triggers en Oracle se ejecutan como parte de la transacción que los activa. Esto significa que si un trigger falla, la transacción completa se revierte, garantizando que los cambios no se apliquen parcialmente.
    • Consistencia: Los triggers deben mantener la consistencia de los datos. Si una operación del trigger genera un error, la transacción completa se revierte para mantener la integridad de la base de datos.

    2. Mecanismos de Manejo de Errores

    • Excepciones en PL/SQL: Dentro de un trigger, se pueden manejar errores utilizando bloques EXCEPTION. Esto permite capturar errores específicos y tomar acciones adecuadas, como registrar el error en una tabla de auditoría, enviar notificaciones, o realizar limpiezas necesarias.
    • RAISE_APPLICATION_ERROR: Permite generar errores personalizados dentro de un trigger, lo que puede ser útil para manejar situaciones específicas y proporcionar mensajes de error más claros.

    3. Logs y Auditorías

    • Registros y Auditorías: Los triggers pueden incluir lógica para registrar eventos y errores en tablas de auditoría. Esto proporciona un historial de eventos y errores que puede ser analizado posteriormente.

    4. Garantías de Ejecución

    • Control de Estados: Oracle garantiza que un trigger se ejecuta en el estado adecuado de la transacción. Por ejemplo, los triggers BEFORE se ejecutan antes de que se realice la operación DML, y los triggers AFTER se ejecutan después de la operación DML pero antes de que se confirme la transacción.

    5. Control de Fallos

    • Reversión Automática: Si ocurre un error no manejado dentro de un trigger, la transacción entera que activó el trigger se revierte automáticamente. Esto incluye todas las operaciones DML que hayan ocurrido dentro de la transacción.

    6. Eventos de Recuperación

    • Eventos de Reintento: En algunos escenarios, es posible implementar lógica para reintentar operaciones fallidas. Aunque no es un mecanismo nativo de los triggers, se puede implementar mediante programación adicional, como paquetes PL/SQL que manejen la lógica de reintento.

    Image Added

    Evaluación de pros/contras


    Sección
    bordertrue
    Columna
    width33%
    Pros para cualquier tipo de proyecto 👍
    Asegura la creación del evento gracias a su atomicidad y consistencia

    No hay una comunicación directa desde el sistema origen con el event buffer. Esto aporta varias ventajas:

    • Se puede contar con un microservicio reutilizable e independiente del sistema origen.
    Columna
    width33%
    Pros para proyectos ya existentes 👍
     No requiere cambio en el código del proyecto para la generación de los eventos.

    En relación a la comunicación del sistema origen con el event buffer, se aportan varias ventajas adicionales a los proyectos existentes:

    • No es necesario modificar el código del  proyecto existente para tener esta funcionalidad.
    Columna
    width31%
    Contras para cualquier tipo de proyecto 👎

    Implica cambios en la base de datos, se debe crear una tabla para persistencia de los eventos a generar.

    Hay riesgo de impacto en la performance de la bbdd del sistema, al realizar consultas cada intervalo de tiempo x.

    Evaluación de requisitos

    Requisito OK/NOKDetalle
    Resiliente

    Estado
    colourGreen
    titleOK

    • ⚠️ Hay que implementar de mecanismos de fault-tolerance en cada uno cada paso
    • ✔️ Al hacer uso de una tabla auxiliar y un event buffer puedes tener la garantía de entrega ante caídas.
    • ✔️ Si el Sistema Origen se cae, al estar persistida la necesidad de sincronización, se puede volver a retomar desde la última sincronización correcta.
    • ✔️ El event buffer al tener persistencia de mensajes y posibilidad de ack de entrega puedes garantizar simplemente la recepción o la lectura del mismo por algún consumidor según se defina la necesidad de confirmación de entrega.
    Transaccional

    Estado
    colourGreen
    titleOK

    ✔️Se establecen los siguientes tramos transaccionales:

    • Persistencia del cambio: La persistencia tanto en la tabla de origen como en la tabla de evento, se puede realizar como transacción local.
    • Generación de Eventos:  El event buffer tiene diferente estrategias en la garantía de entrega.
    Idemponente

    Estado
    colourGreen
    titleOK

    • ✔️ Hay que asegurarse de que los eventos en la outbox se marquen como procesados.
    • ⚠️ Necesita lógica adicional para asegurar idempotencia
    No invasivo - Código

    Estado
    colourGreen
    titleOK

    ✔️ No requiere cambio de código
    No invasivo - BBDD

    Estado
    colourRed
    titleNOK

    • ⚠️ Requiere la creación de una tabla para persistir los eventos de sincronización
    • ⚠️ Requiere la creación de un trigger
    Compatible con las tecnologías actuales

    Estado
    colourGreen
    titleOK

    ✔️ Al no añadir ninguna tecnología extra al (la conexión con el event buffer es a través de un nuevo microservicio) no se aprecian incompatibilidades.

    Contras La solución al no
    UI Expand
    titleCDC (Debizum)

    La captura de datos de cambios (CDC) es un patrón de datos que permite producir eventos a partir de los cambios en un almacén de datos.

    CDC proporciona un camino para obtener las ventajas de las arquitecturas basadas en eventos reduciendo el esfuerzo de extraer bases de datos de aplicaciones.

    La implementación de CDC dependerá de su base de datos, sus casos de uso y el conector que seleccione.:

    •  JDBC: sondean continuamente la base de datos en busca de cambios en las tablas de origen especificadas.
      • Sondear una tabla mutable: puede no ser óptimo, ya que inevitablemente perderá actualizaciones que se completen entre los intervalos de sondeo.
      • Sondear una tabla inmutable
        • La primera es simplemente hacer que la tabla sea inmutable y cambiar el código de la aplicación para manejar esta vista de los datos.
        • La segunda opción es adjuntar un disparador a la tabla mutable primaria. Este activador añade una segunda entrada a una tabla de auditoría inmutable. Luego, el conector puede sondear esta tabla de auditoría para detectar cambios sin que falten registros. En este caso, para ORACLE la opción es el GOLDEN-GATE que no está dentro de la licencia disponible para el SAS

    Image Added

    Evaluación de pros/contras

    Sección
    bordertrue
    Columna
    width33%
    Pros para cualquier tipo de proyecto 👍

    Garantiza la creación del evento de sincronización a través de los mecanismos de Change Data Capture

    No hay una comunicación directa desde el sistema origen con el event buffer, si no que se realiza a través del CDC

    No tienes que desarrollar ningún microservicio para la publicación de eventos. La propia herramienta de CDC lo hace.

    Minimizas el impacto en BBDD

    Permite extracciones de información mas complejas, abarcando varias tablas por ejemplo.

    Se externaliza la gestión de algunos aspectos de funcionamiento, a destacar:

    Columna
    width33%
    Pros para proyectos ya existentes 👍
     No requiere cambio en el código del proyecto para la generación de los eventos.
    Columna
    width31%
    Contras para cualquier tipo de proyecto 👎

    En caso de que la base de datos de sincronización sea Oracle implica:

    UI Expand
    titleCDC (Debizum)

    La captura de datos de cambios (CDC) es un patrón de datos que permite producir eventos a partir de los cambios en un almacén de datos.

    CDC proporciona un camino para obtener las ventajas de las arquitecturas basadas en eventos reduciendo el esfuerzo de extraer bases de datos de aplicaciones.

    La implementación de CDC dependerá de su base de datos, sus casos de uso y el conector que seleccione.:

    •  JDBC: sondean continuamente la base de datos en busca de cambios en las tablas de origen especificadas.
      • Sondear una tabla mutable: puede no ser óptimo, ya que inevitablemente perderá actualizaciones que se completen entre los intervalos de sondeo.
      • Sondear una tabla inmutable
        • La primera es simplemente hacer que la tabla sea inmutable y cambiar el código de la aplicación para manejar esta vista de los datos.
        • La segunda opción es adjuntar un disparador a la tabla mutable primaria. Este activador añade una segunda entrada a una tabla de auditoría inmutable. Luego, el conector puede sondear esta tabla de auditoría para detectar cambios sin que falten registros. En este caso, para ORACLE la opción es el GOLDEN-GATE que no está dentro de la licencia disponible para el SAS

    Image Removed

    Evaluación de pros/contras

    Pros
    Garantiza la creación del evento de sincronización a través de los mecanismos de Change Data Capture
    Permite extracciones de información mas complejas, abarcando varias tablas por ejemplo.
    Se externaliza la gestión de la sincronización por lo que no hace falta implementar un nuevo microservicio

    Se externaliza la gestión de algunos aspectos de funcionamiento, a destacar:

    Requiere realizar configuraciones en la BBDD para activar la captura de los dato.

    La activación del CDC de forma nativa en la BBDD (ORACLE GOLDEN GATE y CDC ORACLE CONFIG) está fuera de soporte por lo que se tiene que hacer uso de otro sistema externo (Debizum)

    • ser nativa, y sobre una tecnología que no es opensource (ORACLE), aumenta el riesgo de incompatibilidades

    Posible impacto en la performance de la bbdd

    Requisito OK

        

    Nuevo ADR
    RequisitoOK/NOKDetalle
    Resiliente

    Estado
    colourGreen
    titleOK
    Estado
    colourBlue
    titleNuevo ADR

    Aplicación
    • ⚠️ Hay que implementar de mecanismos de fault-tolerance en
    los 6 puntos
    • cada uno cada paso
    • ⚠️ Depende de la robustez de la herramienta de CDC
    • ✔️ Altamente resiliente, ya que captura los cambios directamente del log de transacciones
    • ✔️ Si el Sistema Origen se cae, al estar persistida la necesidad de sincronización,
    Al hacer uso de una tabla auxiliar y un event buffer puedes tener la garantía de entrega ante caídas. Si el Sistema A se cae, al estar persistida la necesidad de sincronización,
    • se puede volver a retomar desde la última sincronización correcta.
    • ✔️ El event buffer
    (Kafka)
    • al tener persistencia de mensajes y posibilidad de ack de entrega puedes garantizar simplemente la recepción o la lectura del mismo por algún consumidor según se defina la necesidad de confirmación de entrega.
    Transaccional

    Estado
    colourGreen
    titleOK

    ✔️ Se establecen los siguientes tramos transaccionales:

    • Paso 1 y Paso 2 no necesitan transacción ya que es la propia BBDD la que garantiza con el trigger la creación del evento de sincronización en la tabla de eventos 
    • Persistencia del cambio:
      • ✔️ Captura cambios de manera transaccional porque lee directamente del log de transacciones.
      • ⚠️ Puede tener un ligero retraso en la captura de eventos
    • Generación de Eventos:  El event buffer tiene diferente estrategias en la garantía de entrega.
    IdemponenteIdempotente
    Estado
    colourBlue
    title

    Estado
    colourYellowGreen
    titleNo APLICAOK

    Dependiente Partiendo de la implementación. Se deberán transmitir claves del evento y estas ser registradas en algún elemento de la transmisión para descartar aquellos mensajes duplicados.

    Dependiente de la implementación
    Desacoplamiento entre sistemas

    Estado
    colourGreen
    titleOK

    Para mantener el desacoplamiento es necesario que los eventos de sincronización sean agnósticos al sistema destino (Sistema B).

    Como la comunicación con los sistemas es a través de un event buffer, el sistema origen no conoce a los sistemas destino por lo que queda desacoplado.

    No invasivo - Código

    Estado
    colourGreen
    titleOK

    No requiere cambios en el código
    No invasivo - BBDD

    Estado
    colourRed
    titleNOK

    Hay que aplicar los cambios en la BBDD que se indican en el manual de instalación.

    base del uso de DeBizum, este garantiza la idempotencia a través de los siguientes mecanismos:

    • ✔️ Uso de identificadores únicos de mensajes (UUID).
    • ✔️ Registro de mensajes procesados para evitar duplicados.
    • ✔️ Confirmaciones de recepción (ACKs) para asegurar la entrega y procesamiento.
    • ✔️ Persistencia de mensajes para asegurar la recuperación en caso de fallos.
    No invasivo - Código

    Estado
    colourGreen
    titleOK

    • ✔️ No requiere cambios en el código de la aplicación
    • ⚠️  Necesita configurar y mantener la herramienta de CDC.
    No invasivo - BBDD

    Estado
    colourYellow
    titleA medias

    • ✔️ No requiere cambios en la estructura de la base de datos.
    • ⚠️ Requiere la creación de un trigger
    Compatible con las tecnologías actuales

    Estado
    colourYellow
    titleA medias

    ⚠️ Al ser Oracle el motor de BBDD mayoritaria en el SAS se encuentran los siguientes problemas:

    • ✔️ Se necesita el uso de debizum
      • ✔️ Es compatible con single instance y rac
      • Limitaciones de compatibilidad con OracleDecisión tomada, a falta de confirmación y aclaraciones al equipo, así como a falta de la redacción de las HU's adicionales en base a las necesidades indicadas en la sección de Consecuencias. 
        • Logminer: Deprecated
        • XStreams: unsoported
        • ⚠️
    Compatible con las tecnologías actuales

    Estado
    colourGreen
    titleOK

  • https://debezium.io/documentation/reference/stable/connectors/oracle.html
  • Debizum Oracle Installation comatibility → compatible con single instance y rac
  • Oracle 19 Deprecated o Desupporter → 
  • Logminer: Deprecated
  • XStreams: unsoported
        • OpenLogReplicator: Según Debezium : "The OpenLogReplicator ingestion adapter is currently in incubating state, i.e. exact semantics, configuration options etc. may change in future revisions, based on the feedback we receive."
          • Ficha técnica Debezium-OpenLogReplicator:
            • Database: 12c, 19c, 21c
            • Driver: 12.2.x, 19.x, 21.x
            • OpenLogReplicator: 1.3.0
            • Supported versions: 11.2, 12.1, 12.2, 18c, 19c, 21c.
            • Supported editions: XE, SE, SE2, PE, EE
            • Database must be in single instance mode (non RAC)
            • The database must be working in ARCHIVELOG mode and having enabled MINIMAL SUPPLEMENTAL LOGGING.
            • Supported platforms: Linux64, Solaris x64, Solaris Sparc
            • Supported storage: file system (ext4, btrfs, zfs, xfs, sshfs)
            • Supported database character set, es probable que que esté soportada (estándar UTF está incluido)

    El impacto sobre los siguientes requisitos es el mismo para todas las alternativas

        

    Resumen Comparativo de aporte de valor

    CriterioTransactional OutboxOutbox by TriggerOutbox by CDC
    ResilienteAltoAltoAlto
    TransaccionalAltoAltoAlto
    IdempotenteMedioMedioAlto
    Minimizar cambio en el códigoMedioAltoAlto
    Minimizar cambio en la estructuraMedioMedioAlto
    Obsolescencia de la sincroníaAltoAltoAlto
    Desacoplamiento entre sistemasAltoAltoAlto 
    Consistencia EventualAltoAltoAlto
    Compatible con tecnologías actualesAltoMedioAlto



    Conclusión

    • Transactional Outbox Pattern es robusto y flexible, pero puede requerir cambios moderados en el código y la estructura de la base de datos.
    • Transactional Outbox Pattern by Database Trigger minimiza cambios en el código pero puede complicar la administración y depuración debido a la lógica de los triggers.
    • Transactional Outbox Pattern by CDC ofrece alta resiliencia y minimiza cambios tanto en el código como en la base de datos, pero requiere la gestión de una herramienta de CDC.

    El impacto sobre los siguientes requisitos es el mismo para todas las alternativas

    RequisitoOK/NOKDetalle
    RequisitoOK/NOKDetalle
    Resiliente

    Estado
    colourBlue
    titleNuevo ADR

    Definir un ADR con los mecanismo de resiliencia para los puntos críticos:

    • Persistencia del cambio
    • Generación del evento de sincronización
    • Propagación del evento de sincronización
    • Persistencia del evento de sincronización
    Transaccional

    En ninguna de las alternativas se puede garantizar la transaccionalidad de la sincronización completa.

    Se establecen los siguientes tramos transaccionales para cualquiera de las alternativas, dentro de la fase de sincronización

    Idempotente

    Estado
    colourBlue
    titleNuevo ADR
    Estado
    colourYellow
    titleNo APLICA

    Se necesita un ADR para determinar la estrategia de idempotencia (duplicación de mensajes)

    En todas las alternativas analizadas la estrategia de idempotencia es dependiente de la implementación de la fase de sincronización 

     Se deberán transmitir claves del evento y estas ser registradas en algún elemento de la transmisión para descartar aquellos mensajes duplicados.

    Desacoplamiento entre sistemas

    Estado
    colourGreen
    titleOK

    En todas las alternativas se contempla que la fase de sincronización sea a través de un event buffer por lo que el desacoplamiento con el sistema destino está garantizado siempre y cuando la definición de los eventos de sincronización sean agnósticos al sistema destino (Sistema B)Destino.

    Obsolescencia del Dato

    Estado
    colourYellow
    titleNo APLICA
    Estado
    colourBlue
    titleNuevo ADR

    No hay ninguna solución que garantice la correcta gestión de la obsolescencia del dato. Posibles mitigaciones:

    • Uso y transmisión del timestamp
      •  En caso de ser inferior a la última sincronización confirmada se descartaría el evento.
    • Garantía del orden
      • Esto puede añadir una complejidad no necesaria
    Compatible con las tecnologías actuales

    Estado
    colourGreen
    titleOK

    Necesita de un ADR. En todas las alternativas se contempla que la fase de sincronización sea a través de un event buffer por lo que la estrategia que se determine es compatible con cualquiera de las alternativas.

    Posible estrategia, generar un timestamp de la operación por el Sistema A y transmitir dicho timestamp hasta la pieza encargada de valorar la fecha del dato a sincronizar. En caso de ser inferior a la última sincronización confirmada se descartaría el evento.

    Compatible con la consistencia eventual

    Estado
    colourBlue
    titleNuevo ADR
    Estado
    colourYellow
    titleNo APLICA

    Necesita de un ADR que haga el análisis de impacto y en caso de determinar que hay impacto determinar la estrategia a seguir por el Sistema A (el origen que en este caso es Configura) para que su reacción sea previsible

    Esto es algo que no depende de la estrategia de sincronización si no que es inherente al hecho de necesitar sincronización. Eso provocará que el Sistema A (Origen) y el Sistema b (Destino) durante un periodo de tiempo x no tengan la misma información. Esto implica que dependerá del análisis que haga el Sistema A ( en este caso CONFIGURA) de como le impacta dicha consistencia eventual y que contramedidas implementará para que esto no ocurra.

    Compatible con las tecnologías actuales

    En todas las alternativas so contempla que la fase de sincronización sea a través de un event buffer por lo que la compatibilidad de esta pieza aplica a todas por igual:

    compatibilidad de esta pieza aplica a todas por igual:


    background:#f4eff8;

    UI Expand
    titleDecisión Tomada
    La decisión por defecto atendidendo al cumplimiento de RNF y costos de implementación es
    Tooltip
    appendIconInfo-Circle
    linkTextCDC

    Change Data Capture (CDC) es una técnica utilizada en bases de datos y sistemas de gestión de datos para identificar y capturar cambios en los datos en tiempo real. CDC permite que los sistemas detecten cuando se ha insertado, actualizado o eliminado un registro en una base de datos, y luego capturen estos cambios para que puedan ser procesados y utilizados en otras aplicaciones o sistemas.

    .
    UI Expand
    titleDecisión Tomada
    Divbox
    style
    UI Expand
    titleConsecuencias
    Divbox
    stylebackground:#f4eff8;

    Las consecuencias previstas para CDC :

    • Análisis de viabilidad en base a los motores de persistencia a sincronizar.
    • Valoración de capacidad de aprovisionamiento en sistemas de la solución CDC identificada. 
    • Análisis pormenorizado de las necesidades de información a sincronizar. 
    UI Expand
    titleEstado Actual
    Divbox
    stylebackground:#f4eff8;
    Info
    titleDescribe brevemente la decisión arquitectónica tomada.
    Actualiza el estado actual de la decisión y si ha habido algún cambio o evolución.Activa