Arquitectura monolítica vs Arquitectura de microservicios
Seguro que has oído hablar de la arquitectura monolítica, esta era una de las más comunes y populares hace un tiempo, sin embargo, en esta arquitectura, hay varios problemas que son complejos o muy costosos de resolver y aquí es donde entra la arquitectura orientada a microservicios.
Arquitectura monolítica
Consiste en agrupar todas las funcionalidades y módulos tanto de tu frontend como de tu backend dentro de un mismo proyecto. Esto significa que cuando termines tu desarrollo bajo esta arquitectura tendrás como resultado un ejecutable que podrás desplegar fácilmente en un servidor tradicional.
Ventajas
En la arquitectura monolítica se pueden encontrar ciertas ventajas como:
Facilidad de desarrollo: Al estar todos los componentes altamente acoplados, te resultará fácil desarrollar desde el inicio de tu proyecto.
Despliegue y ejecución: Como mencioné anteriormente, al final tu aplicación estará en un solo ejecutable (esto puede variar dependiendo del lenguaje de programación) el cual puedes desplegar fácilmente en un servidor tradicional (virtual o físico) a través de un contenedor de aplicaciones.
Desventajas
Al tener todos sus componentes dentro del mismo proyecto puede tener ciertos problemas como:
Escalabilidad (Crecimiento vertical): Si tu aplicación va a crecer cada año en volumen, usuarios u operaciones, es probable que tengas que aumentar los recursos de tu infraestructura dando lugar a un crecimiento vertical. Es decir, será necesario aumentar los recursos (CPU, almacenamiento, ram, etc) de tu servidor y por tanto este crecimiento vertical será muy costoso en el tiempo.
Dificultad para añadir nuevas funcionalidades: Resulta que dentro de una arquitectura monolítica existe un alto acoplamiento entre cada componente, esto genera un problema a largo plazo ya que el desarrollador deberá conocer la aplicación en su totalidad para poder agregar nuevas funcionalidades sin dañar las existentes.
Arquitectura orientada a microservicios
Esta arquitectura está orientada a construir aplicaciones distribuidas, es decir, los componentes son descentralizados, independientes y autónomos. Estos componentes se denominan microservicios y, por lo general, deben proporcionar una funcionalidad empresarial completa.
Cada microservicio puede desarrollarse en un lenguaje diferente si se desea, principalmente porque se comunican entre sí a través de APIs. También disponen de su propio almacenamiento y recursos, lo que evita sobrecargas y caídas del servicio.
Ventajas
Modularidad: Cada uno de tus microservicios se ejecuta por separado y es autónomo, al estar aislado significa que si uno de ellos falla no afecta a los demás. De esta forma se consigue un nivel adecuado de disponibilidad del servicio.
Escalabilidad (Crecimiento Horizontal): Al ser una aplicación distribuida, permite crecer horizontalmente según las necesidades. Por ejemplo, en un momento dado si tu aplicación tiene un alto volumen de peticiones puedes desplegar más instancias de tu microservicio permitiendo una respuesta óptima a estas peticiones.
Desventajas
Alto consumo de recursos: Como cada microservicio está aislado y se ejecuta de forma independiente, consumen muchos más recursos (memoria y CPU).
Tiempo inicial: Esta arquitectura requiere más tiempo ya que es necesario realizar un análisis para fragmentar las diferentes funcionalidades en microservicios y luego implementar la comunicación entre ellos.
Estas son sólo algunas ventajas y desventajas de ambas arquitecturas, sin embargo, hay más características que son realmente interesantes. Al final, todo dependerá de la necesidad del negocio, y a partir de ahí deberás definir qué arquitectura se adapta mejor a las necesidades de tu solución.
Si te ha gustado este post puedes dar clic en el botón me gusta y suscribirte a mi blog, tambien puedes encontrarme en mastodon en el siguiente enlace.