EL RETO

Un importante cliente con presencia en varios países europeos e internacionales necesitaba exportar información en tiempo real a distintas aplicaciones o clientes (Business Intelligence,Risk Management, Partners……) desde su plataforma de software principal.

LA SOLUCION

Para hacerlo posible tuvimos que crear distintos puntos sobre el código base (de la aplicación principal) para exportar la información a una table de base de datos, que utilizaríamos a modo de message queue para que otra aplicación (Processor) fuera leyéndolo y enviando estas notificaciones a un sistema de intermediación de mensajes con procesamiento en tiempo real, alto rendimiento y disponibilidad (Kafka).

Processor es una aplicación backend cuya tarea principal es leer la tabla de cola y producir mensajes para el sistema de intermediación mencionado anteriormente (Kafka).

Entre las características más destacables se encuentra:

  • Gestión de Orden de Procesamiento y Errores: El orden de los mensajes producidos era un requisito fundamental en el proyecto, así como establecer un mecanismo de reintentos para conseguir su ejecución de manera ordenada. Así mismo, para establecer un sistema tolerante a fallos se desplegó en modo Activo/Activo en un cluster de instancias.
  • Alto Rendimiento y Métricas: El alto rendimiento de la aplicación también era un requisito indispensable, por lo que para el control de su correcto funcionamiento se incluyó un módulo para poder generar metricas a conocidos sistemas de monitorización.
  • Calidad de Código y Cobertura de Test: Dada la criticidad de la aplicación, se desarrolló una cobertura de test de más del 98%. Los Tests de Aceptación se desarrollaron utilizando metodología que emplea lenguaje no técnico por lo que se pudo probar la aplicación con la participación directa del usuario final.

SOLUCION TECNOLOGICA

Características de la solución:

  • El framework “Procesador” es una aplicación backend basada en Spring Boot y Quartz, cuya tarea principal es leer la tabla de cola, y producir mensajes a Kafka en formato JSON.
  • Uso de Kafka Producer síncrono, que esperará hasta tener el conocimiento de que el mensaje se ha enviado correctamente.
  • Cobertura de Tests de más del 98% (basado en Sonar statistics), y sus estadísticas), incluyendo Pruebas Unitarias, Pruebas de Integración y Pruebas de Aceptación de Usuario. Uso de TDD en la mayor parte del proyecto, por lo que los tests actúan como “documentación viva”.
  • El framework Cucumber ffue usado para la realización de los Tests de Aceptación, de modo que la aplicación se pudo probar con el Usuario Final, al seguir la sintaxis Gherkin.
  • Código adaptado tanto para Oracle DB como PostgreSQL
  • Pruebas de Integración y Aceptación con contenedores Dockers para Kafka, Zookeeper and Postgresql.
  • Micrometer Integración de Micrometer para volcado de métricas en Graphite y Grafana.