Monolitos modulares, ¿El fin de los microservicios?

Monolitos modulares, la nueva moda... o no. En este artículo te quiero introducir sobre esta nueva tendencia.


Introducción


Para empezar, debemos repasar de manera rápida que es un monolito, y que es un microservicio.


Monolito: es una aplicación que se desarrolla a partir de una arquitectura de capas o MVC, y todo el código esta en un mismo repositorio con una sola BBDD, todo está en uno.


Microservicios: es la misma aplicación separada por diferentes partes pequeñas que son independientes entre sí, cada uno con su respectiva BBDD, y se pueden desarrollar de manera independiente y luego se comunican entre sí.



¿Por qué aparecieron los microservicios?


Hace algunos años, los microservicios surgieron como una alternativa a los monolitos y una manera de resolver los problemas que estos presentaban, mucha gente se pasó a los microservicios pensando que así solucionarían sus problemas, pero quizá solo lo estaban empeorando, un microservicio no tiene porque ser mejor que un monolito y viceversa, cada solución para el problema adecuado.


Esta forma de seguir una tecnología por moda y resolver todo con la misma herramienta, es un antipatrón llamado Golden Hammer o martillo de oro.


¿Hasta aquí todo bien? Sigamos.


Monolitos modulares


Antes de hacer microservicios, deberíamos pensar si realmente los necesitamos, y es mas, si sabemos realmente hacer aplicaciones monolíticas, si no es así, no sabremos crear microservicios.


Una alternativa para seguir en el modelo monolítico pero disfrutando de las ventajas de los microservicios, son los monolitos modulares.


Y de esta forma si en algún momento escalan o queremos pasarnos a microservicios será bastante sencillo.


Explicación


En los monolitos generalmente separamos por capas:


[CAPA A]

[CAPA B]

[CAPA C]


Pero, en los monolitos modulares separamos esto por módulos:

[MODULO 1] [MODULO 2] [MODULO 3]

[ ..........C A P A A.......... ]

[ ..........C A P A B.......... ]

[ ..........C A P A C.......... ]


De esta forma partimos verticalmente nuestra aplicación y luego comunicamos entre sí los diferentes módulos.


Un tema importante es encapsular correctamente estos módulos, porque cuando hacemos aplicaciones monolíticas tendemos a crear código spagueti, es decir, tener todo desordenado, acoplado, sin saber por dónde va el código, etc.


Por ello cada uno de los módulos van a tener una parte pública para que los demás puedan acceder, pero su implementación va a ser totalmente privada, y si necesitamos algo de otro módulo, lo pedimos desde su API público, nunca desde su implementación.


Conclusiones y opinión personal


Como vemos es algo muy interesante, y un concepto diferente que nos puede servir para resolver nuestros problemas sin tener que usar tanques de guerra. En mi opinión es bueno que existan otras formas o puntos de vista de hacer las cosas, pero el problema de fondo es que las desarrolladoras o desarrolladores utilizamos las tecnologías indiscriminadamente, sin tener en cuenta que queremos solucionar y cual es nuestro verdadero problema, quizá dedicar más tiempo al análisis nos evite dolores de cabeza, de cualquier manera, esta es una solución muy muy interesante, ¿y cuál es tu opinión? Déjamela en comentarios o por Twitter, espero que te haya gustado, nos vemos en la próxima :)



Créditos: Manuel Zapata - https://www.youtube.com/watch?v=_Maknc_e1-g&list=WL&index=5







486 vistas0 comentarios

©2020 por Juanma Perez.