

Profesor Tecnológico de Costa Rica
(Encargado de los cursos de Arquitectura de Software, Infraestructura y Seguridad Informática)
Director de Innovación y Arquitecto Principal de Sysco C.R
Esta presentación está diseñada para guiar al equipo técnico de ICE, Sysco, DGTI y nuevos desarrolladores a través de la evolución arquitectónica de Cofra. Con una duración estimada de 125 minutos (aproximadamente 2 horas y 5 minutos), exploraremos desde los fundamentos históricos hasta las tecnologías emergentes que definirán nuestro futuro.
Comprenderemos el origen de Cofra y las razones estratégicas detrás de esta migración tecnológica
Duración estimada: 15 minutos
Análisis detallado de las tecnologías que han sostenido nuestros procesos durante años
Duración estimada: 20 minutos
Clarificación de conceptos erróneos y comprensión real de este paradigma arquitectónico
Duración estimada: 15 minutos
Evaluación objetiva entre monolitos y microservicios para tomar decisiones informadas
Duración estimada: 10 minutos
Exploración profunda de las tecnologías que construirán el futuro de Cofra
Duración estimada: 25 minutos
Implementación de Keycloak y modelos de seguridad basados en tokens
Duración estimada: 15 minutos
Automatización, contenedores y la visión hacia arquitecturas sin servidor
Duración estimada: 15 minutos
Síntesis de aprendizajes y perspectivas para el cambio cultural y técnico
Duración estimada: 10 minutos
La duración total estimada de esta presentación es de 125 minutos (aproximadamente 2 horas y 5 minutos), incluyendo tiempo para preguntas y pausas.
Durante años, Cofra ha sido el pilar fundamental de los procesos internos del ICE. Su arquitectura sólida y probada nos ha servido fielmente, diseñada para una época donde los servidores monolíticos eran la norma y la estabilidad el objetivo principal.
Hoy nos encontramos en un punto de inflexión. No buscamos destruir lo construido, sino trascenderlo. La evolución que proponemos mantiene la robustez institucional que caracteriza al ICE, pero incorpora agilidad, independencia de despliegue y escalabilidad horizontal.
El nuevo Cofra no es un reemplazo: es una evolución arquitectónica hacia la modularidad. Llevamos la solidez del pasado hacia las exigencias del futuro.

Fortalezas:
Limitaciones:
Antes de avanzar en nuestra transformación arquitectónica, es fundamental aclarar malentendidos comunes. Los microservicios no son simplemente una elección tecnológica superficial, sino un cambio profundo en cómo diseñamos, desarrollamos y desplegamos software.
Los microservicios son un estilo arquitectónico donde cada servicio es independiente, pequeño y tiene una responsabilidad única y bien definida.
Ejemplo práctico: En Cofra clásico, todo reside en un mismo archivo WAR. En el nuevo Cofra, cada módulo (Pagos, Clientes, Recaudo) podría ser un microservicio autónomo con su propio ciclo de vida, base de datos y equipo responsable.
Cuando el sistema es pequeño, las dependencias son inherentemente fuertes, el equipo es reducido y la complejidad operacional debe minimizarse.
Cuando hay múltiples equipos autónomos, se requiere escalabilidad horizontal diferenciada y las actualizaciones frecuentes son críticas para el negocio.
"No hay pomada canaria. No existe una arquitectura perfecta universal, solo una adecuada al contexto específico de cada organización y momento."
La transformación tecnológica de Cofra representa un cambio fundamental en cada capa de nuestra arquitectura. Este nuevo ecosistema está diseñado para ofrecer independencia, velocidad y capacidad de adaptación sin sacrificar la robustez institucional.
React como framework principal, permitiendo componentes reutilizables y Client-Side Rendering (CSR). La interfaz de usuario se vuelve más responsiva y dinámica.
Node.js + Express proporcionan un entorno liviano, asíncrono e ideal para arquitecturas de microservicios con alta concurrencia.
Docker empaqueta cada servicio con todas sus dependencias, garantizando consistencia entre ambientes. Kubernetes orquesta estos contenedores a escala.
Keycloak gestiona identidad y Single Sign-On (SSO) de forma centralizada, con tokens firmados (JWT) que eliminan la necesidad de mantener estado de sesión.
Los microfrontends extienden los principios de los microservicios a la capa de presentación, dividiendo una aplicación de frontend monolítica en fragmentos más pequeños, autónomos y gestionables. Cada uno de estos "microfrontends" puede ser desarrollado, desplegado y mantenido de forma independiente por equipos separados, facilitando una mayor agilidad y escalabilidad en el desarrollo de interfaces de usuario complejas.
Permite a los equipos trabajar en diferentes partes del frontend de forma autónoma, reduciendo dependencias y cuellos de botella.
Cada microfrontend puede elegir su propio framework, librería o versión, facilitando la adopción de nuevas tecnologías sin reescribir toda la aplicación.
Despliegues más pequeños y frecuentes, rollbacks sencillos y ciclos de feedback más cortos.
Facilita la escalabilidad de equipos y la gestión de funcionalidades complejas en grandes aplicaciones.
La base de código se vuelve más manejable, ya que cada equipo es responsable de una porción más pequeña y específica.
Gestionar la interacción y el intercambio de datos entre los distintos fragmentos de la UI puede ser complejo.
Un manejo inadecuado puede llevar a un aumento del tamaño del bundle y problemas de carga si no se optimiza la compartición de dependencias.
Mantener una experiencia de usuario coherente y un sistema de diseño unificado es crucial para evitar una apariencia fragmentada.
La coordinación de despliegues y la composición de múltiples microfrontends requieren herramientas y procesos robustos.
Existen diversas formas de construir y orquestar microfrontends, cada una con sus propias ventajas y consideraciones:
La adopción de microfrontends en Cofra puede potenciar aún más la modularidad y escalabilidad iniciada con los microservicios en el backend. Para una implementación exitosa, debemos considerar:
El renderizado es el proceso mediante el cual el código fuente de una aplicación web se convierte en una interfaz de usuario visual que el usuario puede ver e interactuar. Las dos estrategias principales son el Renderizado del Lado del Servidor (SSR) y el Renderizado del Lado del Cliente (CSR), cada una con sus propias implicaciones en rendimiento, experiencia de usuario y SEO.
En SSR, la aplicación se renderiza en el servidor, que envía un documento HTML completamente formado al navegador del cliente. Este HTML ya contiene el contenido de la página, lo que permite una visualización rápida y mejora el SEO.
Solicita la página
Genera HTML completo con datos
Recibe y muestra HTML, luego hidrata (ejecuta JS para interactividad)
Con CSR, el navegador recibe un documento HTML mínimo, a menudo solo un contenedor (`div`) y un enlace a un archivo JavaScript. Es este JavaScript el encargado de construir el contenido de la página y su interactividad directamente en el navegador del usuario.
Solicita la página
Envía HTML básico y JavaScript
Ejecuta JavaScript
Renderiza contenido dinámico y lo muestra


La autenticación moderna representa un cambio paradigmático en cómo gestionamos la identidad y el acceso. Keycloak nos permite implementar estándares de la industria mientras mantenemos control total sobre nuestros datos.
Protocolos estándares de la industria para autenticación y autorización seguras
Cada aplicación obtiene un token firmado con información de identidad y permisos
Transportado en el header Authorization de cada petición HTTP
Conexión transparente con sistemas internos y externos mediante estándares
LDAP + JSESSIONID
Keycloak + JWT
La autenticación basada en tokens no solo mejora la seguridad y escalabilidad, sino que también simplifica la integración de nuevos servicios y aplicaciones en nuestro ecosistema, reduciendo significativamente el tiempo de implementación.
El patrón Strangler Fig es una estrategia de refactorización incremental que permite reemplazar un sistema monolítico antiguo con una aplicación más moderna (a menudo basada en microservicios) de forma gradual, sin necesidad de un "big bang" o interrupciones prolongadas del servicio. Su nombre proviene de la metáfora de la higuera estranguladora, que crece alrededor de un árbol huésped hasta que este muere y el nuevo árbol ocupa su lugar.
Este enfoque permite migrar funcionalidades una por una, minimizando el riesgo y manteniendo la disponibilidad del sistema existente durante todo el proceso de transición.
Detectar módulos o funcionalidades específicas del sistema legado que pueden ser extraídas y reemplazadas.
Implementar el nuevo servicio o microservicio con la funcionalidad equivalente de forma independiente.
Utilizar un proxy o gateway para enrutar gradualmente las peticiones de la funcionalidad antigua al nuevo servicio.
Una vez que el nuevo servicio es estable y maneja todo el tráfico, la funcionalidad antigua se desactiva y elimina.
Identificación de funcionalidades clave, dependencias y definición de la secuencia de migración.
Construcción de los nuevos microservicios en paralelo, sin afectar el sistema monolítico existente.
Configuración de un punto de entrada centralizado para gestionar el enrutamiento del tráfico.
Redirección gradual de las peticiones de los clientes a los nuevos servicios, funcionalidad por funcionalidad.
Desactivación y eliminación de las partes del sistema antiguo que han sido completamente reemplazadas.
Un componente clave en la arquitectura Strangler Fig es el Proxy o API Gateway. Este actúa como el "árbol huésped", controlando y enrutando las peticiones entrantes. Inicialmente, todas las peticiones van al sistema legado. A medida que se desarrollan y despliegan los nuevos servicios, el proxy se configura para redirigir selectivamente las peticiones correspondientes a estas nuevas funcionalidades. Esto permite una transición fluida y un control granular sobre qué parte del tráfico va a qué sistema, facilitando una migración sin interrupciones.
Nuestra estrategia DevOps actual automatiza el ciclo completo de desarrollo, desde el código hasta producción, garantizando calidad y velocidad en cada iteración.
Pipelines automatizados para integración y despliegue continuo, con pruebas en cada etapa
Empaquetamiento consistente que garantiza "funciona en mi máquina" sea universal
Orquestación inteligente con autoscaling, self-healing y gestión declarativa de infraestructura
El próximo paso evolutivo nos lleva hacia arquitecturas donde el código se ejecuta bajo demanda, sin gestionar servidores ni infraestructura subyacente.
El código se ejecuta en respuesta a eventos, sin preocuparse por aprovisionamiento o mantenimiento de servidores
Costos proporcionales al consumo exacto, con escalado automático desde cero hasta miles de instancias
El proveedor gestiona parches, actualizaciones, seguridad y disponibilidad de la plataforma
Tecnologías emergentes: AWS Lambda, Azure Functions, Google Cloud Functions para cloud público; Knative para implementaciones on-premise que mantienen control institucional.

fuente imagen: https://www.techrepublic.com/article/devops-principles/
"Del contenedor al evento: del deploy manual a la reacción automática. La evolución serverless representa el siguiente salto en abstracción, donde los desarrolladores se enfocan exclusivamente en la lógica de negocio."
En el cambiante panorama de las arquitecturas modernas, especialmente con la adopción de microservicios y el paradigma serverless, la gestión del acceso y el tráfico se vuelve crítica. Aquí es donde entran en juego los API Gateways y los Ingress Controllers, actuando como puntos de entrada cruciales que dirigen, protegen y optimizan las interacciones con nuestros servicios.
Un API Gateway es un punto de entrada único para todas las solicitudes de los clientes. Actúa como un proxy inverso y enruta las solicitudes a los microservicios adecuados, abstraiendo la complejidad de la arquitectura interna.
Simplifica la comunicación del cliente, centraliza políticas de seguridad y tráfico, y permite a los microservicios enfocarse en la lógica de negocio sin preocuparse por la exposición externa.
En Kubernetes, un Ingress Controller es un proxy inverso especializado que gestiona el acceso externo a los servicios de un clúster. Utiliza las reglas definidas en los recursos Ingress para enrutar el tráfico HTTP/S.
Mientras que Ingress se enfoca en la capa de enrutamiento y balanceo de carga L7 dentro de Kubernetes, un API Gateway ofrece funcionalidades más avanzadas como autenticación, rate limiting y transformación de solicitudes a nivel de aplicación, independientemente del orquestador.
Ideal para exponer múltiples servicios HTTP/S bajo un mismo dominio, ofrecer balanceo de carga básico, terminación SSL/TLS y virtual hosting. Un Ingress puede ser el componente de red que un API Gateway utiliza.

El diagrama ilustra un flujo común en arquitecturas de microservicios: las solicitudes de los usuarios externos (Usuarios/Clientes) llegan primero a un API Gateway. Este componente es responsable de aplicar políticas de seguridad (autenticación, autorización), limitar las tasas de solicitud (rate limiting) y enrutar las peticiones al destino interno correcto. Si la arquitectura está desplegada en Kubernetes, el API Gateway puede delegar el enrutamiento interno a un Ingress Controller, el cual dirige el tráfico a los Microservicios específicos que residen dentro del clúster.
Distribuye la carga entre instancias de microservicios para optimizar el rendimiento y la disponibilidad. Incluye estrategias de enrutamiento basadas en rutas, cabeceras o pesos.
Protege los endpoints al validar la identidad y los permisos de los usuarios antes de que la solicitud llegue a los microservicios, reduciendo la carga de seguridad en cada servicio individual.
Controla el número de solicitudes que un cliente puede realizar en un período de tiempo, previniendo abusos, ataques DDoS y asegurando la estabilidad del sistema.
Registra todas las solicitudes entrantes y salientes, proporcionando visibilidad crucial para la depuración, auditoría y análisis del rendimiento.
Permite modificar los cuerpos y cabeceras de las solicitudes y respuestas al vuelo, adaptando APIs legadas o unificando formatos.
Aísla fallos en microservicios, evitando que una falla en un servicio provoque la cascada en otros, mejorando la resiliencia general del sistema.
Para Cofra, la adopción de API Gateways e Ingress Controllers es fundamental para la transición hacia una arquitectura de microservicios robusta y escalable.
Un API Gateway de código abierto, flexible y extensible, ideal para microservicios y despliegues híbridos.
Aunque es un Service Mesh, Istio complementa a los API Gateways proporcionando gestión de tráfico, seguridad y observabilidad a nivel de servicio en Kubernetes.
Un potente proxy inverso y balanceador de carga, ampliamente utilizado como Ingress Controller en Kubernetes por su rendimiento y fiabilidad.
Un proxy de servicio de alto rendimiento, utilizado como base para muchos API Gateways y Service Meshes modernos debido a su arquitectura y flexibilidad.
Hemos recorrido un camino extenso desde los fundamentos del Cofra tradicional hasta las arquitecturas emergentes del futuro. Pero es crucial reconocer que ninguna tecnología, por avanzada que sea, puede sustituir el criterio arquitectónico, el análisis contextual y la disciplina profesional.
La transformación técnica solo tiene éxito cuando va acompañada de un cambio en mentalidad, procesos y colaboración entre equipos. Las herramientas son secundarias a las personas.
El nuevo Cofra será más ágil y potente, pero exige mayor disciplina arquitectónica, diseño consciente de APIs y colaboración estrecha entre equipos multidisciplinarios.
No abandonamos nuestro legado: lo honramos llevando su solidez institucional, su robustez probada y los aprendizajes de años hacia las exigencias del presente y futuro.
No existe una arquitectura perfecta universal. La mejor decisión técnica siempre depende del contexto específico: equipo, recursos, restricciones, objetivos de negocio y cultura organizacional.
Esta frase resume nuestra filosofía de transformación: respeto por lo construido, valentía para evolucionar y sabiduría para reconocer que cada tecnología es una herramienta al servicio de objetivos más amplios. El verdadero éxito no está en la tecnología elegida, sino en cómo la usamos para servir mejor a nuestra institución y usuarios.
Prof. MSc. Juan Andres Segreda Johanning
Email: asegreda@sysco.cr / jsegreda@itcr.ac.cr
Arquitecto de Software | Especialista en Transformación Digital y IA
¡Agradecemos su valiosa atención!
De Cofra a Cofra