Sustituir un monolito sin poner en riesgo la operación
En una empresa energética, la comunicación de mercado – altas, bajas, lecturas de contadores – pasa por un monolito PHP que se considera imposible de mantener. Hay que sustituirlo sin que la operación se detenga.
Sacar del monolito el envío y el procesamiento de los datos de mercado – paso a paso y con el sistema en marcha.
Nuevas aplicaciones y librerías en Kotlin y Java con Spring Boot sobre AWS, construidas con arquitectura hexagonal.
Todo el envío de datos de mercado pasa ya por las nuevas aplicaciones. En la prueba de carga, la agregación procesó 70.000 datos en menos de un minuto, y el monolito funciona de forma más estable.
- 70.000
- datos de mercado agregados en menos de un minuto en la prueba de carga
- ≈ 10 %
- del monolito sustituido
- 6
- librerías y aplicaciones construidas
Un sistema que nadie quiere tocar
El monolito envía mensajes de mercado a otros participantes del mercado y agrega datos de mercado. Se considera imposible de mantener, y agregar grandes volúmenes de datos era para él una tarea casi imposible.
Sustituirlo de una sola vez habría sido demasiado arriesgado. Por eso se sustituye pieza a pieza: cada nueva aplicación asume una parte claramente delimitada.
Hexagonal – y una plantilla para el departamento
Construí las nuevas aplicaciones con arquitectura hexagonal: la lógica de negocio no sabe nada de bases de datos ni de mensajería. Los adaptadores para AWS, PostgreSQL e interfaces son intercambiables y se pueden probar por separado.
Hoy el departamento usa esta estructura como plantilla para otras aplicaciones.
- 6 librerías y aplicaciones en Kotlin y Java
- Mensajería con SQS y SNS, datos en S3 y Aurora PostgreSQL
- Tests con Testcontainers, WireMock y LocalStack
Más rápido y más estable
Todo el envío de datos de mercado pasa hoy por las nuevas aplicaciones, que también se encargan de su agregación y resumen. Alrededor del 10 % del monolito está sustituido, y la parte restante funciona desde entonces de forma más estable.
En la primera prueba de carga, la nueva agregación procesó 70.000 datos de mercado en menos de un minuto. Para el sistema antiguo, eso era prácticamente inalcanzable.
Para que lo nuevo no se convierta en el próximo sistema heredado
Actualicé las nuevas aplicaciones de Java 21 a Java 25 y de Spring Boot 3 a Spring Boot 4, e introduje Renovate. Desde entonces, las dependencias se mantienen al día de forma automática.
- Kotlin
- Java 25
- Spring Boot 4
- AWS S3
- SQS
- SNS
- EKS
- Aurora PostgreSQL
- Terraform
- Kubernetes
- Flyway
- Testcontainers
- WireMock
- LocalStack
