⚙️ Servicio de Configuración — Alpura Config Server (alpura-back-java-msa-config)
📌 Preámbulo: La Importancia de la Centralización de Configuraciones
En un ecosistema de microservicios distribuido como el de Alpura, la gestión centralizada de configuraciones es un pilar fundamental para garantizar la escalabilidad, mantenibilidad, seguridad y gobernanza de las aplicaciones.
Tradicionalmente, almacenar parámetros de conexión a bases de datos, credenciales, URLs de integración o banderas de comportamiento directamente en archivos application.yml empaquetados dentro de los artefactos JAR/Docker genera serios inconvenientes:
- ❌ Riesgos de Seguridad: Exposición no deseada de secretos o contraseñas en repositorios de código.
- ❌ Falta de Agilidad: Requerir un ciclo completo de re-compilación y despliegue (CI/CD) solo para modificar una variable de entorno.
- ❌ Inconsistencia entre Entornos: Dificultad para auditar y controlar las configuraciones exactas aplicadas en Desarrollo, UAT y Producción.
Para resolver estos desafíos, la arquitectura de Alpura establece la centralización de configuraciones como un REQUERIMIENTO DE ARQUITECTURA MANDATORIO Y OBLIGATORIO (NO OPCIONAL). Todos los microservicios Java desarrollados para la organización deben delegar la carga de sus parámetros de ejecución al Alpura Config Server desde el momento en que inician su proceso de bootstrap.
- Conexión Obligatoria: NO es opcional. Todos los microservicios Java en Desarrollo (DEV), Staging/UAT y Producción (PROD) deben consumir obligatoriamente sus parámetros desde el Config Server centralizado.
- Consumo Interno Unificado: Los microservicios dentro de la red privada deben importar su configuración utilizando la URL del servicio interno:
http://config.svc.internal.arquitectura.com/config. - Administración vía API Gateway: La gestión administrativa del API REST (
/api/v1/config) se realiza exclusivamente a través de los endpoints del API Gateway por entorno (https://apw-*.alpura.com:8243/pcf/v1).
📐 Diagrama de Arquitectura de Spring Cloud Config
El siguiente diagrama ilustra el flujo de carga de configuraciones durante el arranque de los microservicios y la interacción con el API REST de administración:
🎯 Resumen de Capacidades
- 🌐 Servidor de Configuración Centralizado: Integrado con Spring Cloud Config Server.
- 🗄️ Almacenamiento en PostgreSQL (JDBC): Consultas SQL optimizadas sobre la tabla
properties. - 🔌 Desacoplamiento Total: Elimina la necesidad de empaquetar archivos
application.ymlcon secretos o variables cambiantes en cada microservicio. - 🛠️ API REST de Administración: Endpoints para crear, actualizar, listar de forma paginada/filtrada y eliminar propiedades individualmente o por aplicación.
- 📊 Monitoreo & Telemetría: Exposición de métricas Actuator/Prometheus e integración con la librería común de auditoría y excepciones de Alpura.
🌐 URLs Oficiales por Uso y Entorno
Existen dos vías de consumo diferenciadas según la naturaleza del cliente:
1. Consumo Interno de Microservicios (Spring Cloud Config)
Todos los microservicios dentro de la red interna utilizan una única URL de servicio interno para la directiva spring.config.import:
http://config.svc.internal.arquitectura.com/config
| Entorno / Perfil | Perfil Spring | URL de Configuración Interna |
|---|---|---|
| Desarrollo | development / dev | http://config.svc.internal.arquitectura.com/config |
| Staging / Pruebas | staging / uat | http://config.svc.internal.arquitectura.com/config |
| Producción | production / prod | http://config.svc.internal.arquitectura.com/config |
2. Consumo del API REST de Administración (vía API Gateway)
Para clientes externos o herramientas administrativas que gestionan las propiedades mediante la API REST (/api/v1/config), se utilizan las URLs públicas publicadas en el API Gateway:
| Entorno | Entorno de Red | URL Oficial API Gateway |
|---|---|---|
| Desarrollo | DEV | https://apw-dev.alpura.com:8243/pcf/v1 |
| Staging / Pruebas | STAGING / UAT | https://apw-uat.alpura.com:8243/pcf/v1 |
| Producción | PROD | https://apw.alpura.com:8243/pcf/v1 |
🏷️ Nomenclatura e Identificación de Aplicaciones
Cada microservicio debe contar con un nombre reconocible y único especificado en el parámetro spring.application.name.
- Formato Estándar:
alpura-<modulo>-<servicio>(ejemplo:alpura-msa-catalog,alpura-msa-notifications,alpura-sppd-main). - Función: Este nombre actúa como la clave de aislamiento (
application) dentro de la base de datos de configuraciones, asegurando que el Config Server entregue exclusivamente los parámetros asignados a dicho microservicio.
📦 Requisitos Técnicos
| Componente | Especificación / Versión Estándar |
|---|---|
| Java JDK | 21 (Temurin LTS by Adoptium 21.0.6) |
| Spring Boot | 3.4.4 |
| Spring Cloud | 2024.0.1 (Spring Cloud Config Server) |
| Alpura BOM | com.alpura:bom:1.0.4 |
| Base de Datos | PostgreSQL (esquema omnicanal / tabla properties) |
| Gestor de Construcción | Maven 3.8+ |
| Puerto del Servidor | 8886 |
| App ID | MSA_CONFIG_SERVER |
🧱 Estructura y Dependencias del Proyecto
El proyecto está estructurado siguiendo la arquitectura estándar en capas de Alpura:
com.alpura.java.arch
├── ConfigServerApplication.java # Clase principal con @EnableConfigServer
├── web # Controladores REST (ConfigurationController)
├── facade # Capa de Fachada (IConfigurationFacade)
├── service # Capa de Servicios de Negocio (IConfigurationService)
├── persistence # Capa de Persistencia JPA (IConfigurationRepository)
├── common # VOs y constantes (ConfigurationVO, RequestFiltersVO)
└── validations # Grupos de validación (BaseNoBlankGroup)