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_configurationdel 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:
--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:
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:
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:
--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
-
Configuración avanzada de servicios y componentes: detalle de YAML por cada repositorio de configuración, balanceo de carga y otros parámetros técnicos.
-
Vaults: configuración detallada de HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager y Azure Key Vault.