Skip to content

equipognoss/Gnoss.BackgroundTask.Replication.OpenCORE

Repository files navigation

Gnoss.BackgroundTask.Replication.OpenCORE

Reliability Rating Duplicated Lines (%) Vulnerabilities Bugs Security Rating Maintainability Rating Code Smells Technical Debt

Aplicación de segundo plano que permite la alta disponibilidad de lectura. Se encarga de replicar las instrucciones que se han insertado en un servidor de Virtuoso en tantos servidores de Virtuoso réplica como haya configurados.

Este servicio escucha tantas colas de replicación como se hayan configurado en sus variables de configuración. Por ejemplo, si partimos de este fragmento de configuración:

...
ColaReplicacionMaster_ColaReplicaVirtuosoTest1: "HOST=192.168.2.20:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
ColaReplicacionMaster_ColaReplicaVirtuosoTest2: "HOST=192.168.2.21:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
ColaReplicacionMasterHome__ColaReplicaHome1: "HOST=192.168.2.30:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
...

Significa que este servicio va a escuchar tres colas:

  • ColaReplicaVirtuosoTest1
  • ColaReplicaVirtuosoTest2
  • ColaReplicaHome1

Los mensajes que lleguen a cada una de esas colas, se insertarán en el servidor de virtuoso especificado para cada una de ellas. Es decir, los mensajes que lleguen a la cola ColaReplicaVirtuosoTest1 se replicarán en el servidor 192.168.2.20, los de la cola ColaReplicaVirtuosoTest2 en el servidor 192.168.2.21 y los de la cola ColaReplicaHome1 en el servidor 192.168.2.30.

¿Qué mensajes van a llegar a cada una de esas colas? Los mensajes que se inserten en los exchange asociados. ColaReplicacionMaster es el exchange a el que se van a vincular las colas ColaReplicaVirtuosoTest1 y ColaReplicaVirtuosoTest2, y ColaReplicacionMasterHome es el exchange que se va a vincular a la cola ColaReplicaHome1. Cualquier mensaje que se inserte en el exchange, se enviará a cada una de las colas asociadas.

La Web o el API enviarán un mensaje tras ejecutar cualquier instrucción SPARQL de inserción, modificación o eliminación de triples sobre un grafo de comunidad (recursos, personas, grupos, paginasCMS...) en el servidor de virtuoso maestro (192.168.2.5, definido en la variable virtuosoConnectionString), al exchange ColaReplicacionMaster, y si es sobre un grafo de usuario (mensajes o comentarios a recursos), la instrucción se ejecutará en el servidor de virtuoso maestro (192.168.2.6, definido en la variable virtuosoConnectionString_home) y después se enviará un mensaje al exchange ColaReplicacionMasterHome.

¿Qué arquitectura refleja esta configuración? Esta configuración refleja una arquitectura con 5 servidores de virtuosos, un servidor de virtuoso maestro para los grafos de comunidad (192.168.2.5, definido en la variable virtuosoConnectionString), 2 servidores réplica para los grafos de comunidad (192.168.2.20 y 192.168.2.21), un servidor maestro para los grafos de usuarios (192.168.2.6, definido en la variable virtuosoConnectionString_home) y un servidor réplica para los grafos de usuarios (192.168.2.30).

¿Qué es necesario configurar en el resto de aplicaciones? Una vez configurado el servicio de replicación, ya está preparado para replicar todas las instrucciones que le llegen a los servidores maestros al resto de servidores. Sólo falta configurar las aplicaciones que escriben en virtuoso para que sepan en qué servidor deben escribir y de qué servidor debe leer. Las aplicaciones que escriben en virtuoso son las siguientes:

Cuando se tiene esta arquitectura de 5 virtuosos, lo ideal es que se configure, en los servicios anteriormente citados, un virtuoso maestro en el cual se va a hacer la primera inserción, para ello se utiliza la siguiente configuración:

...
Virtuoso__Escritura__Virtuoso1: "HOST=192.168.2.20:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
Virtuoso__Escritura__home__VirtuosoHome: "HOST=192.168.2.20:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
virtuosoConnectionString: "HOST=192.168.2.5:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
virtuosoConnectionString_home: "HOST=192.168.2.6:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
...

Si este campo no esta configurado, coge por defecto 'virtuosoConnectionString' para hacer las insercciones en virtuoso.

para que se desactive esta hay que añadir en el yml de configuracion la siguiente sentencia:

...
replicacionActivada: "false"
...

Configuración estandar de esta aplicación en el archivo docker-compose.yml:

replicacion:
    image: gnoss/gnoss.backgroundtask.replication.opencore
    env_file: .env
    environment:
     virtuosoConnectionString: ${virtuosoConnectionString}
     virtuosoConnectionString_home: ${virtuosoConnectionString_home}
     acid: ${acid}
     base: ${base}
     RabbitMQ__colaServiciosWin: ${RabbitMQ}
     RabbitMQ__colaReplicacion: ${RabbitMQ}
     ColaReplicacionMaster_ColaReplicaVirtuosoTest1: "HOST=192.168.2.20:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
     ColaReplicacionMaster_ColaReplicaVirtuosoTest2: "HOST=192.168.2.21:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
     ColaReplicacionMasterHome__ColaReplicaHome1: "HOST=192.168.2.30:1111;UID=dba;PWD=dba;Pooling=true;Max Pool Size=10;Connection Lifetime=15000"
     redis__redis__ip__master: ${redis__redis__ip__master}
     redis__redis__bd: ${redis__redis__bd}
     redis__redis__timeout: ${redis__redis__timeout}
     redis__recursos__ip__master: ${redis__recursos__ip__master}
     redis__recursos__bd: ${redis__recursos_bd}
     redis__recursos__timeout: ${redis__recursos_timeout}
     redis__liveUsuarios__ip__master: ${redis__liveUsuarios__ip__master}
     redis__liveUsuarios__bd: ${redis__liveUsuarios_bd}
     redis__liveUsuarios__timeout: ${redis__liveUsuarios_timeout}
     idiomas: "es|Español,en|English"
     Servicios__urlBase: "https://servicios.test.com"
     connectionType: "0"
     intervalo: "100"
    volumes:
     - ./logs/replication:/app/logs

Se pueden consultar los posibles valores de configuración de cada parámetro aquí: https://github.com/equipognoss/Gnoss.SemanticAIPlatform.OpenCORE

Código de conducta

Este proyecto a adoptado el código de conducta definido por "Contributor Covenant" para definir el comportamiento esperado en las contribuciones a este proyecto. Para más información ver https://www.contributor-covenant.org/

Licencia

Este producto es parte de la plataforma Gnoss Semantic AI Platform Open Core, es un producto open source y está licenciado bajo GPLv3.