Configuración

Horus

Horus es el servicio de administración de Anjana Data Platform. Es una aplicación Spring Boot que integra tres componentes de Spring Cloud en un único servicio:

  • Spring Cloud Config Server: sirve la configuración centralizada de todos los microservicios de Anjana.

  • Eureka Server: actúa como registro de servicios (service discovery) para que los microservicios se localicen entre sí.

  • Spring Boot Admin: proporciona monitorización y administración de los microservicios registrados.

Horus es, por tanto, la pieza central de la que dependen el resto de servicios de Anjana para arrancar correctamente: sin Horus disponible, un microservicio no puede obtener su configuración ni registrarse para ser descubierto por el resto.

Para el detalle de cómo configurar cada repositorio de configuración (Filesystem, Git, HashiCorp Vault, base de datos o AWS Secret Manager) consulta Configuración avanzada de servicios y componentes. Para la configuración de Vaults y Secret Managers en detalle, consulta Vaults.

Arquitectura interna

Spring Cloud Config Server

Es el componente que centraliza la configuración de todos los microservicios de Anjana. Cada microservicio (Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta, Zeus) obtiene su configuración en el arranque haciendo una petición a Horus, en lugar de leerla de un fichero local.

Horus admite varios tipos de repositorio como origen de esa configuración, pudiendo combinar varios a la vez mediante la propiedad spring.cloud.config.server.<repositorio>.order (a menor valor, mayor prioridad):

  • Filesystem: perfil nativo de Horus, lee de una carpeta local del servidor donde se despliega Horus.

  • Git: repositorio Git remoto, configurable por rama.

  • HashiCorp Vault: repositorio de secretos externo, ver Vaults.

  • Base de datos: tabla app_configuration del esquema Portuno.

  • AWS Secret Manager: Horus carga su propia configuración desde Secrets Manager, ver Configuración avanzada de servicios y componentes.

⚠️ Importante: Horus es el único servicio que no puede usar otro Horus para obtener su propia configuración (no puede configurarse a sí mismo mediante spring.config.import=configserver:...). Para configurar Horus hay que elegir directamente uno de los repositorios anteriores (Filesystem, Git, Vault, base de datos o AWS Secret Manager).

Cada microservicio que consume configuración de Horus necesita el siguiente argumento en su descriptor de servicio:

Bash
--spring.config.import=optional:configserver:http://<host de Horus>:9999/config

Eureka Server

Horus también actúa como servidor de descubrimiento de servicios (Eureka). Los microservicios de Anjana que se registran en Horus son: Kerno, Minerva, Hermes, Viator, Portuno, Tot, Drittesta y Zeus.

Cada uno de ellos debe apuntar a la URL de Eureka de Horus mediante la propiedad:

YAML
eureka:
  client:
    serviceUrl:
      defaultZone: http://<host de Horus>:9999/eureka

El registro en Eureka es lo que permite el balanceo de carga entre instancias de un mismo microservicio y que los servicios se localicen entre sí sin necesidad de hardcodear IPs o hostnames.

Spring Boot Admin

Spring Boot Admin ofrece un panel de monitorización y administración de los microservicios que se registran en Horus: estado de salud (health), métricas de JVM, niveles de log en caliente, y otra información expuesta por Spring Boot Actuator de cada microservicio.

El panel está disponible en el mismo puerto 9999 de Horus, bajo el path /admin.

Alta disponibilidad de Horus

Es posible desplegar varias instancias de Horus para dar alta disponibilidad al servicio de configuración y descubrimiento. Esto se controla mediante la variable de entorno HORUS_REPLICAS, con el listado de hosts separado por comas, que se traduce en:

YAML
eureka:
  client:
    serviceUrl:
      defaultZone: http://<host1 de Horus>:9999/eureka,http://<host2 de Horus>:9999/eureka

De forma equivalente, cada microservicio puede apuntar a varios Horus para la configuración añadiendo varias URLs separadas por coma en el arranque:

Bash
--spring.config.import=optional:configserver:http://<host1 de Horus>:9999/config,optional:configserver:http://<host2 de Horus>:9999/config

📝Nota: en la versión actual no existe autopurgado de servidores de configuración caídos: si uno de los Horus configurados deja de estar disponible, no se retira automáticamente de la lista.

Puertos y endpoints

Componente

Puerto

Path

Spring Cloud Config Server

9999

/config

Eureka Server

9999

/eureka

Spring Boot Admin

9999

/admin

Referencias relacionadas