Documentation for a newer release is available. View Latest

Múltiples aplicaciones, una base de datos

Es probable que tengas que desplegar múltiples aplicaciones IPF que todas usen la misma base de datos MongoDB. Esto implica que todas las aplicaciones tendrán el mismo serviceName a pesar de que no deberían estar en el mismo clúster. Esto resultará en la formación de un mega-clúster, probablemente no sea lo que quieres.

Para distinguir entre tipos de aplicaciones IPF que deben unirse a un mismo clúster, usa la propiedad de configuración service-name.

El problema

IPF usa la misma plataforma base para todas las aplicaciones en tiempo de ejecución, que se inicializan de la misma forma:

  • Mismo ActorSystem llamado ipf-flow

  • Mismo Spring ApplicationContext

  • La misma jerarquía de overrides de configuración

Cuando se ejecutan múltiples aplicaciones en el mismo entorno, todas usando Akka Cluster Bootstrap con MongoDB como mecanismo de service discovery, todas terminarán formando un único mega-clúster porque no tienen service name, y por lo tanto usarán el nombre por defecto del servicio, que es el nombre del ActorSystem, que en este caso será ipf-flow universalmente:

1
Figura 1. El mega-clúster no deseado

En la imagen anterior, todos los nodos de todas las apps se han unido al mismo mega-clúster, lo que no es el comportamiento deseado. Lo que queremos es que cada app cree su propio clúster sin este cruce.

Un service name es la forma en que Akka Cluster Bootstrap resuelve este problema, donde hay múltiples nodos que pertenecen a clústeres diferentes y, sin embargo, comparten el mismo backend de descubrimiento.

Para especificar un service name, establece esta configuración con el mismo valor en todos los nodos de un tipo específico. La clave de configuración es akka.management.cluster.bootstrap.contact-point-discovery.service-name.

Así, en todos los nodos de la App 1 podríamos especificar:

akka.management.cluster.bootstrap.contact-point-discovery.service-name = app-1

Y en la App 2 especificaríamos:

akka.management.cluster.bootstrap.contact-point-discovery.service-name = app-2

Lo que resultará en esta topología:

2
Figura 2. Un clúster por app

Verifícalo yendo a la URL /cluster/members de Akka Management Cluster HTTP Management para observar la configuración correcta de los clústeres.