Framework, llaves inglesas y martillos

Como arquitectos, una de nuestras responsabilidades en el proceso de modernización de aplicaciones y de cambio de arquitectura para llegar a un escenario de aplicaciones compuestas, es la de definir el stack tecnológico (componentes de infraestructura y framework de desarrollo).

Hemos puesto en marcha componentes de infraestructura como sistema de contenedores, service mesh, API gateway, broker de mensajería, sistema de identidad y acceso, base de datos documental, etc.

Se ha apostado por un lenguaje de programación (Java), librerías, un framework (Spring) y una batería concreta y limitada de piezas de ese framework.

Nuestra sorpresa ha sido mayúscula cuando hemos visto que, dentro del framework, para utilizar una base de datos de tipo grafo, Neo4J, es mucho más eficiente una componente genérica, Spring Data JDBC, que una de específica Spring Data Neo4J.

En la tabla podéis observar el análisis comparativo realizado al ver que los servicios que estábamos desarrollando contra Neo4J, mediante Spring Data Neo4J, nos estaban obligando a irnos a un bar a tomarnos un bocata de chorizo, cargadito de colesterol, mientras esperábamos a que el servicio resolviese las peticiones:

Spring Data Neo4JJDBC
Request% of cumulative timeHitsMean time (ms)Max time (ms)Standard deviation% of cumulative cpu timeMean cpu time (ms)Mean allocated Kb% of system error% of cumulative timeHitsMean time (ms)Max time (ms)Standard deviation% of cumulative cpu timeMean cpu time (ms)Mean allocated Kb% of system error
ApplicationComponentController.getSystemInfo3227,60510,9824,77516164207,99203742971,01748025534,1710
ApplicationComponentListAndCreator.getById3227,59810,9764,77716164207,38403742961,01447824534,1380
ApplicationComponentController.getSystemDependencies831,3102,0281,13022145122,8770645666913360
ApplicationComponentListAndCreator.getSystemDependencies831,3102,0281,13022145122,8750645565913340
ApplicationComponentListAndCreator.getSolutionsOfSystem639292,7701,59485763,7100224347402290
ApplicationComponentController.getSolutionsOfSystem639292,7701,59485763,7170224347403310
ApplicationComponentListAndCreator.getSystemDependents234331,24570321548,97402259671103420
ApplicationComponentController.getSystemDependents234331,24570321548,97702260691203440

El análisis está hecho añadiendo al proyecto la librería JavaMelody.

En conclusión, a veces es mejor usar una llave inglesa para clavar un clavo que hacerlo con la herramienta específicamente diseñada para ello, el martillo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.