Skip to main content

Diseño de Alto Nivel (HLD): Plataforma Recomóvil

Versión: 1.0 Autor: Javier Hernández Barraza

1. Introducción y Objetivos​

1.1. Propósito​

Este documento describe la arquitectura de alto nivel para la modernización de la aplicación Recomóvil. El objetivo es migrar de la actual plataforma monolítica basada en BPEL a una arquitectura distribuida, nativa de la nube y basada en microservicios, para mejorar la agilidad, escalabilidad, resiliencia y mantenibilidad del sistema.

1.2. Objetivos de la Arquitectura​

  • Desacoplamiento: Descomponer el monolito en servicios autónomos alineados con los dominios de negocio (DDD).
  • Escalabilidad: Permitir que cada servicio escale de forma independiente según su carga.
  • Resiliencia: Aislar los fallos para que un error en un componente no afecte a todo el sistema.
  • Agilidad de Desarrollo: Facilitar que equipos pequeños trabajen de forma independiente en cada servicio, acelerando el ciclo de vida de desarrollo.
  • Integración Moderna: Exponer funcionalidades a través de APIs RESTful seguras y estandarizadas, y manejar las integraciones con sistemas legacy de forma controlada.

2. Visión General de la Arquitectura​

La arquitectura propuesta es un sistema distribuido compuesto por microservicios de grano fino, un API Manager como punto de entrada único, un proveedor de identidad centralizado y un bus de eventos para la comunicación asíncrona. Las integraciones con sistemas externos (OTM, AS/400) se realizan a través de adaptadores específicos que protegen el núcleo del dominio.


3. Componentes del Sistema (Microservicios)​

Cada microservicio es una unidad de despliegue autónoma, con su propio dominio, lógica de aplicación y base de datos (patrón Database-per-Service).

info

La librería de seguridad estandarizada de alpura realiza la implementación de manera nativa en cada microservicio. Ver Librería seguridad.

  • Servicio de Identidad y Acceso (menu)

    • Responsabilidad: Gestionar la autenticación de usuarios y la emisión de tokens de acceso (JWT). Se integra con el proveedor OIDC corporativo (Keycloak) y se encuentra integrado dentro de la librería de seguridad estadandar.
    • Tecnología: Spring Boot, Spring Security.
  • Servicio de Datos Maestros (maestros-api)

    • Responsabilidad: Servir como fuente de la verdad para datos de referencia como Rutas, Zonas, Orígenes, etc.
    • Tecnología: Spring Boot, JPA/Hibernate, PostgreSQL, Cache (Redis/Caffeine).
  • Servicio de Gestión de Viajes (viajes-api)

    • Responsabilidad: Orquestar el ciclo de vida completo de los viajes de recolección. Es un dominio "Core". Implementa lógica de negocio compleja.
    • Tecnología: Spring Boot, JPA/Hibernate, PostgreSQL, Kafka (para eventos de dominio).
  • Servicio de Control de Acceso (tickets-api)

    • Responsabilidad: Gestionar el proceso de llegada, registro y evaluación de vehículos en planta. Dominio "Core" para el rol de Vigilancia.
    • Tecnología: Spring Boot, JPA/Hibernate, PostgreSQL.
  • Servicio de Auditoría (auditoria-api)

    • Responsabilidad: Orquestar procesos de negocio de larga duración que involucran sistemas legacy, como la sincronización con SIRLA. Implementa el patrón Saga.
    • Tecnología: Spring Boot, JPA/Hibernate, PostgreSQL, Kafka, Adaptadores de integración (ACL).

4. Decisiones Arquitectónicas y Patrones (Cross-Cutting Concerns)​

  • Seguridad:

    • La autenticación se delega a un proveedor OIDC (Keycloak).
    • Los servicios son "Resource Servers" que validan Tokens JWT (OAuth 2.0) en cada petición.
    • La autorización se basa en roles y scopes definidos en el token.
  • Comunicación:

    • Síncrona: Las interacciones cliente-servidor se realizan vía REST (HTTP) a través del API Manager. La comunicación directa entre servicios se debe evitar.
    • Asíncrona: La comunicación entre servicios para notificar cambios de estado se realiza de forma reactiva a través de un Bus de Eventos (Kafka). Esto desacopla los servicios y aumenta la resiliencia.
  • Gestión de Datos:

    • Se sigue el patrón Database-per-Service. Cada microservicio es dueño de su propio esquema de base de datos para garantizar la autonomía.
    • Se utiliza un enfoque CQRS a nivel de aplicación, donde las APIs de consulta leen de proyecciones optimizadas, mientras que los comandos operan sobre el modelo de dominio transaccional.
  • Observabilidad:

    • Logs: Todos los servicios generarán logs estructurados (JSON) que serán centralizados (ej. Stack EFK/ELK).
    • Métricas: Se expondrán métricas de negocio y de sistema a través de Micrometer para ser recolectadas por Prometheus.
    • Trazas: Se implementará trazado distribuido con OpenTelemetry para seguir una petición a través de múltiples servicios y el bus de eventos.
  • Despliegue:

    • Cada servicio se empaquetará como una imagen de contenedor (Docker).
    • Se recomienda un orquestador de contenedores (Kubernetes) para gestionar el despliegue, escalado y networking.
    • Se establecerá un pipeline de CI/CD por cada servicio.

5. Estrategia de Integración​

  • API Manaher: Actúa como punto de entrada único, simplificando la seguridad, el enrutamiento, el rate limiting y la recolección de métricas. Abstrae a los clientes de la topología interna de los microservicios.

  • Anti-Corruption Layer (ACL): Para las integraciones con sistemas legacy (OTM, AS/400), los servicios viajes-api y auditoria-api implementarán Adaptadores específicos. Estos adaptadores traducirán los modelos y protocolos legacy al lenguaje ubicuo del dominio del microservicio, protegiéndolo de la complejidad externa y facilitando futuras migraciones de dichos sistemas legacy.


6. Plan de Migración​

Se adoptará la estrategia Strangler Fig Pattern, desplegando los nuevos microservicios en paralelo al sistema BPEL existente y redirigiendo gradualmente el tráfico a través del API Manager hasta que el sistema antiguo pueda ser desmantelado de forma segura. Las fases se detallan en el PLAN_DE_TRABAJO.md.